Published on

论分布式系统设计与实现

Authors

2024年系统架构设计师的备考论文

摘要

本文以我在2021年参与的某机场航班节点运行保障系统为例,主要论述了分布式系统的设计与实现,该项目的目标是进一步优化机场现有航班保障作业流程,提高航班地面运行保障效率。我在该项目中担任系统架构师,主要负责系统整体架构设计和架构实现等工作。该项目采用分布式技术设计与实现,通过20个服务节点协同工作,提供了高可用性、可扩展性和容错性等优势,同时也面临着复杂的设计和实现挑战,系统遵循可靠性、可维护性和经济性原则,满足易扩充、高可靠、易维护和可管理要求,在性能和安全性方面均满足系统技术规范的要求。该项目历时15个月,最终系统顺利投产上线,至今运行稳定,获得用户认可。

正文

2021年,某机场集团委托我公司承建该机场航班节点运行保障系统,该项目的是进一步优化机场现有航班保障作业流程,提高航班地面运行保障效率。我在项目中担任系统架构师,主要负责系统整体架构设计和架构实现等工作。航班节点运行保障对机场的运行保障及协同调度至关重要,现有航班节点运行主要依靠人工记录实现,航空器到达与离开、客舱门打开与关闭、乘务人员和旅客人员到达与离开,客梯车到达与离开、食品车到达与离开、保洁员到达与离开等节点均需要记录保障。由于该机场航班节点运作主要依赖人工记录,人力成本高,易出现漏填误填,高峰状态下保障效率难以满足需求,且数据实时性差,数据不及时,不利于及时发现问题和分配资源。机场航班节点运行保障系统由三个子系统组成,分别是航班数据中心、航班节点运行保障子系统和对账子系统。航班数据中心主要负责汇聚航班计划、航班动态和客货邮行等数据并向其它系统提供数据服务;航班节点运行保障子系统处理核心业务,包括生成、记录保障节点和电子签单等功能;对账子系统主要包括机场与各航空公司进行费用结算和对账等功能。该系统基于Spring Cloud作为构建分布式系统的微服务框架套件,实现了服务治理、配置管理、负载均衡、链路追踪等功能。

在分布式系统设计与实现过程中,常用的技术包括分布式事务、分布式缓存、负载均衡等。分布式事务用于确保在多个节点上执行的事务的原子性、一致性、隔离性和持久性。分布式缓存技术能够减少数据访问的延迟,提高系统的性能。负载均衡技术将请求均匀分配到多个节点,提高系统的并发处理能力。这些技术在分布式系统中发挥着重要的作用,可以帮助构建高可靠、高可用、高性能的分布式系统。根据机场航班节点运行具体业务需求,结合使用场景,分别对上述分布式技术进行选型、设计、评审和实现。

一、采用分布式事务解决数据不一致问题

分布式事务用于确保在多个节点上执行的事务的原子性、一致性、隔离性和持久性。原子性是指事务要么全部成功,要么全部失败;一致性是为了保证数据在多个节点上的一致;隔离性是指事务之间相互隔离;持久性是指事务的结果一旦提交就永久保存。我们选用开源分布式事务框架Seata,其性能好,且不长时间占用连接资源,它以高效并且对业务零侵入的方式解决微服务场景下面临的分布式事务问题。Seata的工作原理是通过对本地关系数据库的分支事务的协调来驱动完成全局事务。它将分布式事务拆分成多个本地事务,在每个本地事务中完成相应的操作,并将操作结果上报给事务协调器。事务协调器根据上报的结果来决定全局事务的提交或回滚。

二、采用分布式缓存解决数据快速读取和减轻数据库压力问题

分布式缓存具有以下特点:可扩展性:能够轻松扩展缓存容量,以应对不断增长的业务需求;高可用性:通过多个节点提供服务,降低单点故障的影响;分布式存储:数据分布在多个节点上,提高了系统的可靠性和容错性;性能优化:减少数据访问的延迟,提高系统的响应速度;数据一致性:确保在多个节点之间数据的一致性。基于Redis哨兵模式来实现分布式缓存,能够减少航班节点保障数据访问的延迟,提高系统的性能。首先启动一组哨兵节点来监控 Redis 实例的状态;配置哨兵节点,指定要监控的主节点和从节点。建立监控连接,哨兵节点与 Redis 实例建立连接,发送命令并检查响应来监控其健康状况。实现故障转移,当主节点发生故障时,哨兵节点会自动选举一个从节点升级为主节点,并通知其他从节点进行同步。更新客户端连接,在故障转移后,Redis 客户端需要感知节点变化并及时更新连接信息。

三、采用负载均衡解决分布式系统系统性能和资源利用率问题

负载均衡技术将请求均匀分配到多个节点,提高系统的并发处理能力,能够充分利用多个节点的处理能力,避免部分节点过载而其他节点闲置的情况。当个别节点出现故障时,能够自动将请求分配到其他正常节点,确保系统的稳定性和连续性。方便地添加或删除节点,以适应业务量的变化,实现系统的横向扩展。项目使用Spring Cloud Loadbalancer实现自定义负载策略,实现了从服务版本、服务分组、服务集群、灰度计划和权重的负载均衡。通过 LoadBalancerClient 进行负载均衡逻辑,从服务列表中选择一个服务地址进行调用。在 LoadBalancerClient 中,通过工厂类 LoadBalancerClientFactory 获取具体的负载均衡器实例,调用 choose 方法实现根据负载均衡算法选择下一个服务器完成负载均衡。

经过近15个月的项目开发,该机场航班节点运行保障系统顺利投入使用,我们协助客户对航班节点保障、地空协同运行进行全面的功能和性能的测试和试运行,运行至今客户反馈良好。所选用的分布式技术架构经过实践证实,有效的将各子系统组织成完整的航班节点运行保障系统,满足对可靠性、可维护性和安全性方面的相关要求。经过项目团队成员的共同努力,最终保证了该系统的顺利交付。在本项目中,还存在一些不足之处,比如我们对于用户的移动终端操作易用性方面考虑不周,实际节点保障工作场景下,对用户交互和易用性要求较高,后期经过和用户共同打磨,对移动终端界面进行了优化和部分重构,有效解决了该问题;另一个不足是对系统的监控和运维自动化方面,在自动预警和告警方面,系统覆盖的指标不全面导致部分功能仍依赖人工监控,通过使用自动化运维工具,针对具体指标增加了监控功能实现,提高系统监控和运维效率,减少了运维人员成本。后续我们将持续改进,小步重构,不断优化系统,并持续提升团队和个人技术水平,更好的完成软件系统开发工作,为行业提供优质的软件系统。