当前位置: 首页 > news >正文

论高并发下的高可用

摘要

        本人所在的公司是国内主要的汽车维修诊断专业设备和诊断软件生产商,有着 30 年的

行业积累。2024 年 3 月公司经过市场调研,要打造一个大型车辆网数据平台。通过采集车

辆诊断数据、GPS 位置数据、故障数据等信息,并通过分析、运算形成数据产品,为广大车

主,维修厂商、保险公司提供车辆信息数据服务。我作为本项目的系统架构师负责该项目的

架构设计工作。本文将以此项目为实例,围绕系统高可用技术的主题,讨论系统设计中,根

据应用场景实际情况,结合 CDN 内容分发技术、负载均衡等应用层、网络层以及数据库层

多方面的多种常用高可用方法, 合理选择适应的技术来解决项目中遇到的困难并最终实现

高可用系统质量目标的过程。本项目经过一年来的设计开发,系统顺利上线,经受了百万级

设备接入的考验。最后针对系统维护量大,自动化运维的不足进行了总结。

正文

        随着国家经济的飞跃发展,人民生活水平的提高,对家庭用车的需求得到巨大的释放,

特别是近五年以来,国内乘用车市场火爆,私人小汽车数量以每年 2000 万的速度快速增长,

而我国也已赶超美国,成为世界上小汽车保有量最大的国家。于此同时,车主对车辆使用及

维护等涉车活动的频度也越来越高,加上移动互联网的蓬勃发展,基于车辆网的应用也被广

大车主所关注与接受,对于车辆位置管理,车辆安全保护,车辆故障诊断等方面的服务也一

跃成为刚性需求,其业务模式也被普罗大众所接受。我所在的公司成立至今已有 30 年历史,

作为国内主要汽车维修诊断专业设备开发商制造商及软件平台集成商,根据市场调研的结果,

决定打造一个基于车辆诊断数据、车辆位置数据、运行状态数据,面向广大车主(to C),

维修厂商、车辆保险公司(to B)等用户的,提供在线车辆故障分析、故障报警、车辆运行

状态分析及位置追踪等车生活服务的综合性车辆网大数据平台。2024 年 3 月,本人作为系

统架构师负责整个项目的架构设计工作,并重点解决了系统高可用方面所遇得到的问题。本

平台项目由 30 人组成,历时 1 年,按时完成项目开发并成功上线,很好的支撑了公司的战

略业务的开展。

        项目组成立以后,我们立刻对本项目进行了需求分析,系统设计,由于本系统涉及接入

终端设备多,初期将达到百万级别,而且接收数据量,计算量巨大,同时还需支撑各类用户

手机 App 客户端,因此系统在高并发下的高可用提出了很高的要求。

        本系统根据主要应用场景以及服务对象,最终识别出核心业务为“车辆数据采集业务”、

“数据分析挖掘业务”、“数据展示业务”。数据采集业务作为整个平台中基础中的基础业务,

需要 7X24 小时连续运行,既要满足车辆终端设备上传数据,同时要能经受住早晚高峰时车

辆接入量潮汐式的冲击。总结下来,系统必须能够满足如下条件下的高可用:安装终端设备

的车辆运行分布在全国各地,实际场景要求系统适应分布式应用环境部署,并提供稳定的接

入条件,在早晚高峰,能支撑 200 万个并发设备的接入以及数据处理,平峰时支撑 80 万个

并发量,并且数据接收保存时间在 5 秒钟内完成,服务允许降级,但不可中断。

        根据本业务的特点,为了达到系统高可用的目标,首先在应用层再用了 CDN 内容分发

技术和负载均衡技术。设备数据采集业务中,设备的配置信息是需要定时下发给设备的,由

于设备众多,如果通过数据采集通道进行信息传输,则占用了宝贵的实时信息通道,使得对

应设备涉及实时业务受到严重影响,致使对应服务处于不可用状态,因此,我们将配置信息

下发业务独立设计,由 socket 长连接数据传输改为 json 文件传输,并应用了 CDN 内容分发

技术。CDN 系统能实时的根据网络流量和各节点的连接,负载状况以及到设备的距离和相应

时间等综合信息将设备的请求重新导向离设备最近的服务节点上。CDN 解决因分布、带宽、

服务性能带来的访问延迟问题,适应于静态文件站点加速等场景。系统将终端设备的配置信

息生成为 json 配置文件并上送至 CDN 内容分发系统,文件被迅速的分发到 CDN 在互联网上

的各个节点上,运行在各个地方的设备能够从互联网上最近的,最优的、最稳定的节点上快

速获取配置文件,高成功率的完成配置更新业务,从而保证本业务的稳定可用。

        接下来采集业务中,“设备接入应用程序”的设计尤为重要,设备是通过 socket 通讯方式,

与服务端建立 tcp 长连接,一个服务端进程连接上千个设备,“接入程序”的稳定决定了数

据传输的质量以及系统可用性。我们采用了负载均衡技术,来实现高可用的目标。众所周知

负载均衡技术具体分为多种,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 万笔记录时,接入端应用程序则将并发数据写入缓存,能瞬时减

轻数据库负载,使其正常运行,缓存接收并发数据的同时,也以轻负载的方式将数据同步到

数据库中。缓存就像水库一样,洪水来时,可以进行削洪峰,从而保证不会发生灾害。通过

以上多种方法应用,在数据库层面也较为成功的实现了高可用的目标。

        在本项目建设中,我们运用了多种高可用的技术和方法,较为成功的实现了系统高可用

的目标, 经过近一年的设计开发,系统成功上线,顺利通过了验收,尽管我们取得了成绩,

但也发现了不足:如自动化运维方面的不足,既得到了经验,也获得了教训,为后续类似的

工作提供了很多好的参考,这是我最大的收获。

相关文章:

  • 数字化工厂中央控制室驾驶舱系统 - Windows 部署笔记
  • C++笔记之委托
  • VScode中关于Copilot的骚操作
  • linux crash工具详解
  • 第R8周:RNN实现阿尔兹海默病诊断(pytorch)
  • jupyter notebook运行简单程序
  • 基于EFISH-SCB-RK3576工控机/SAIL-RK3576核心板的KTV点歌主机技术方案‌(国产化替代J1900的全场景技术解析)
  • uniapp开发06-视频组件video的使用注意事项
  • 交互式入门:点击绽放的樱花树(花瓣飘落动画)
  • 【论文笔记】SOTR: Segmenting Objects with Transformers
  • 「OC」源码学习——objc_class的bits成员探究
  • Dify 快速构建和部署基于LLM的应用程序
  • ModBus协议详解:从基础概念到C#实现RTU与TCP通讯
  • Spring Boot配置文件详解:从入门到精通
  • 养生小锦囊:开启健康生活新模式
  • 16. Qt系统相关:事件、定时器
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(七)
  • 学习Linux的第二天
  • 《架构安全原则》解锁架构安全新密码
  • labuladong刷题day3-数组使用双指针技巧
  • “五一”假期客流增加,多地提升铁路运力并强化服务
  • 人民日报今日谈:以青春之我,赴时代之约
  • 9米长林肯车开进安徽“皖南川藏线”致拥堵数小时,车主回应争议称配合调查
  • 五大白酒去年净利超1500亿元:贵州茅台862亿领跑,洋河营收净利齐降
  • 向左繁华都市,向右和美乡村,嘉兴如何打造城乡融合发展样本
  • 5月起,这些新规将施行