系统架构设计师论文范文-论高并发下的高可用

摘要

本人所在的公司是国内主要的汽车维修诊断专业设备和诊断软件生产商,有着30年的行业积累。2018年3月公司经过市场调研,要大枣一个大型车辆网数据平台。通过采集车辆诊断数据、GPS位置数据、故障数据等信息,并通过分析、运算形成数据产品,为广大车主,维修厂商、保险公司提供车辆信息数据服务。我作为本项目的系统架构师负责该项目的架构设计工作。本文将以此项目为实例,围绕系统高可用技术的主题,讨论系统设计中,根据应用场景实际情况,结合CDN内容分发技术、负载均衡等应用层、网络层以及数据库层多方面的多种常用高可用方法,合理选择适应的技术来解决项目中遇到的困难并最终实现高可用系统质量目标的过程。本项目经过一年来的设计开发,系统顺利上线,经受了百万级设备接入的考验。最后针对系统维护量大,自动化运维的不足进行了总结。

正文

随着国家经济的飞跃发展,人民生活水平的提高,对家庭用车的需求得到巨大的释放,特别是近五年以来,国内乘用车市场火爆,私人小汽车数量以每年2000万的速度快速增长,而我国也赶超美国,成为世界上小汽车保有量最大的国家。于此同时,车主对车辆的使用及维护等涉车活动的频度也越来越高,加上移动互联网的蓬勃发展,基于车辆网的应用也被广大车主所关注与接受,对于车辆位置管理,车辆安全保护,车辆故障诊断等方面的服务也一跃成为刚性需求,其业务模式也被普罗大众所接受。我所在的公司成立至今已有30年历史,作为国内主要汽车维修诊断专业设备开发商制造商及软件平台集成商,根据市场调研的结果,决定打造一个基于车辆诊断数据、车辆位置数据、运行状态数据,面向广大车主(to C),维修厂商、车辆保险公司(to B)等用户的,提供在线车辆故障分析、故障报警、车辆运行状态分析及位置追踪等车主生活服务的综合性车辆网大数据平台。2018年3月,本人作为系统架构师负责整个项目的架构设计工作,并重点解决了系统高可用方面所遇到的问题。本平台项目由30人组成,历时1年,按时完成项目开发并成功上线,很好的支撑了公司的战略业务的开展。

项目组成立以后,我们立刻对本项目进行了需求分析,系统设计,由于本系统涉及接入终端设备多,初期将达到百万级别,而且接收数据量,计算量大,同时还需支撑各类用户手机App客户端,因此系统在高并发下的高可用提出了很高的要求。

本系统根据主要应用场景及服务对象,最终识别出核心业务为“车辆数据采集业务”、“数据分析挖掘业务”、“数据展示业务”。数据采集业务作为整个平台中基础中的基础业务,需要7X24小时连续运行,既要满足车辆终端设备上传数据,同时要能经受住早晚高峰时车辆接入量潮汐式的冲击。总结下来,系统必须能够满足如下条件下的高可用:安装终端设备的车辆运行分布在全国各地,实际场景要求系统适应分布式应用环境部署,并提供稳定的接入条件,在早晚高峰,能支撑200万个并发设备的接入以及数据处理,平峰时支撑80万个并发量,并且数据接收保存在5秒钟内完成,服务允许降级,但不可中断。

根据本业务的特点,为了达到系统高可用的目标,首先在应用层再用了CDN内容分发技术和负载均衡技术。设备数据采集业务中,设备的配置信息是需要定时下发给设备的,由于设备众多,如果通过数据采集通道进行信息传输,则占用了宝贵的实时信息通道,使得对应设备涉及实时业务受到严重影响,致使对应服务处于不可用状态,因此,我们将配置信息下发业务独立设计,由socket长连接数据传输改为json文件传输,并应用了CDN内容分发技术。CDN系统能实时的根据网络流量和各个节点的连接,负载状况以及到设备的距离和相应时间等综合信息将设备的请求重新导向离设备最近的服务节点上。CDN解决因分布、宽带、服务性能带来的访问延迟问题,适应于静态文件站点加速等场景。系统将终端设备的配置信息生成为jon配置文件并上传至CDN内容分发系统,文件被迅速的分发到CDN在互联网上的各个节点上,运行在各个地方的设备能够从互联网上最近的、最优的、最稳定的节点上快速获取配置文件,高成功率的完成配置更新业务,从而保证本业务的稳定可用。

接下来采集业务中,“设备接入应用程序”的设计尤为重要,设备是通过socket通讯方式,与服务端建立长连接,一个服务端进程连接上千设备,“接入程序”的稳定决定了数据传输的质量以及系统可用性。我们采用了负载均衡技术,来实现高可用的目标。众所周知,负载均衡技术具体分为多种,1)基于http负载均衡,2)基于DNS负载均衡,3)基于NAT的,4)基于反向代理的。其中核心实质是冗余技术、集群技术,由多个服务集群同时对外提供一致的服务,使负载压力相对均匀的由不同服务主机承担,同时也从性能的角度增加了计算资源,资源越多,可用性越强。在实践中,我们首先在小范围内,即同一台服务主机内运行多实例的“设备接入应用程序”,使接入的设备通过负载均衡分别由不同的进程提供连续服务,任意一个程序的崩溃,意外终止,只会影响本身所连接维护的设备,而不会影响进程所服务的设备。同时在服务器中也部署了进程监控与守护程序,其一旦发现监控目标程序终止或假死,其无法自动重启的情况,则主动接入帮助目标程序进行重启,重新投入服务。在一个机房、一个区域通过部署多服务器集群,在网关处增加基于TCP的负载均衡器负责机房及区域内的服务资源连接的动态配置。在跨区域,多机房层面,将系统服务按照不同地理位置区域进行独立组织和管理,每个区域服务集群首要服务于运行在本区域内的终端设备,通过使用DNS负载均衡技术,将运行在本区域范围内的设备对应的服务器域名解析为本区域服务集群网关,因此设备将自动连接本区域所归属的系统服务集群。当设备有A区域移动到B区域,B区域的网络DNS将服务域名解析到B区域服务集群地址,设备在重连时将连接到B区域,自此设备完成了AB区域的服务切换。不同的区域服务集群之间也是互为备份的。当出现网络故障,区域服务出现中断情况,则可通过DNS负载均衡进行调度,由区域外的服务集群接管服务,从而保证故障区域内的设备仍然能正常使用系统服务。综上,通过负载均衡的方法,我们从应用层、程序级的角度实现系统的高可用。

除了应用层之外,系统数据存储是依靠数据库系统的,为了实现数据接入读取的高性能、高可用,采用适当的技术手段是必要的。数据库可用技术通常包括如下几种:1)主从复制,2)分区,3)分表,4)分库,5)缓存。在本项目应用场景中,需要解决的问题是系统在高并发情况下,数据读写必须保持高可用。在应对数据库高可用时,我们采用了分库分表以及缓存的方式来解决。分库分表是通过将一张大表分成若干库中的若干小表,读写业务压力被多个库多个表进行分担,实则通过I/O性能提升,扩大读写能力,从而提升可用性。在一个区域内,将上传数据的“GPS位置表”,“DTC车辆故障码表”分别进行水平分割成十个库,从0号库到9号库,每个库里包含10张同样的表,从0号表到9号表,根据设备的ID对100求模的值,写入对应数据库表中,如设备ID除以100余45,则“GPS位置”,“车辆故障码”信息写入第04库中编号为GPS05和DTC05表中,由于10个库分别运行在10台物理服务器上,单台4CPU,64G内存,因此集群读写性能有了长足的冗余。考虑到系统负载是有潮汐的特点,设备性能也不能无限制提升,因此引入了缓存,当本地数据库集群入库数据大于设定阔发值每秒10万笔记录时,接入端要应用程序则将并发数据写入缓存,能瞬时缓解数据库负载,使其正常运行,缓存接收并发数据同时,也以轻负载的方式将数据同步到数据库中。缓存就像水库一样,洪水来时,可以进行消洪峰,从而保证不会发生灾害。通过以上多种方法应用,在数据库层面也较为成功的实现了高可用的目标。

在本项目建设中,我们运用了多种高可用的技术和方法,较为成功的实现了系统高可用的目标,经过近一年的设计开发,系统成功上线,顺利通过了验收,尽管我们取得了成绩,但也发现了不足:如自动化运维方面的不足,即得到了经验,也获得了教训,为后续类似的工作提供了很多参考,这是我最大是收获。