2024 年系统架构设计师的备考论文
一、题目要求
分布式是指将一个系统或任务分解成多个子部分,并在多个计算机或服务器之间进行协同工作的方式。每个子部分都可以在不同的计算机节点上运行,彼此之间通过网络进行通信和协调。分布式技术在当今互联网应用中起着重要作用,例如大规模搜索引擎、社交网络和电子商务平台等。常见的分布式系统包括分布式数据库、分布式存储系统、分布式计算系统等。这些系统通过将数据、计算和功能分散到多个节点上,可以提供更高的性能、可伸缩性和容错性。分布式系统的设计和实现需要解决一系列挑战,例如节点之间的通信和同步、数据一致性的维护、负载均衡、故障恢复等。为了解决这些挑战,通常会使用一些分布式算法和协议,如一致性哈希、Paxos、Raft 等。请围绕“论分布式设计与实现”论题,依次从以下三个方面进行论述。
- 概要叙述你参与管理和开发的软件项目以及你在其中承担的主要工作。
- 请阐述你参与的项目使用了哪些分布式技术,它们的特点是什么?
- 请结合项目实际,具体阐述你在项目中分布式技术的实践,以及在实施过程中遇到的问题及解决方案。
二、论文部分
1000 字的项目背景、项目建设内容、项目结尾的总结 +1500 字对考题的响应
2.1 摘要
2021 年 4 月我司开拓海外B2C电商业务,在某国同时开展业务,该平台拥有本地对本地、跨境和自营等多种销售模式,通过平台便利性、物流可靠性和支付安全性,让买家信任平台,让商家更容易做生意。我在该项目中担任系统架构师,负责系统架构的设计,并对开发过程进行指导,本文详细介绍了分布式数据库、分布式缓存、分布式计算等技术及应用场景,并在项目过程中,详细的介绍了通过分布式架构设计,解决了高可靠、高并发高性能等质量属性需求。项目一期与 2022 年 2 月份通过测试团队的评审验收并上线,获得了买卖双方的一致好评。
2.2 正文
随着互联网技术的不断发展,电子商务平台以“淘宝”、“京东”为首的电子商务平台已经改变了我们的购物习惯,同时中国也是电子商务发展最繁荣并接受了历年“11.11”的挑战。同时海外电商为蓝海市场,为满足商业需求,我司在 2021 年初通过相关法律法规、竞争对手和市场需求等分析, 确定了在某国开展业务。在业务层面开展平台自营、联合运营、全托管等多种业务模式;在数据层面,由于各国隐私法案的不同,最终确定以各国数据当地存储为主,新加坡为辅,并通过大数据+机器学习构建搜索引擎和推荐系统,为平台赋能。总项目分为三期,投资金额516万美元,建设期 10 个月。我在该项目中担任系统架构师,负责系统架构整体设计,并作为技术经理指导开发团队完成各系统功能的开发,对系统的开发质量进行负责。
项目启动后,各方领导高度重视,经过系统的评估,我们充分的认识到项目建设的意义和技术的挑战,立即成立“作战工作室”,对系统进行需求收集、分析和架构设计。电商平台主要有三大核心系统组成:主站、运营平台、商家平台。主站负责买家的注册与登录、商品的浏览和搜素、购物车和交易支付、订单与物流管理,评价和客户服务等;运营平台主要负责营销活动的招商/选品/搭建/投放、商品商家/订单/结算/物流管理等;商家平台主要服务于商家,提供商品的管理、物流的发货和跟踪、非跨店铺的营销活动创建、商家成长、资产管理等;其他系统有物流平台、结算平台等由于功能单一且只供内部使用,这里不再赘述。该电商平台涉及用户数量大、范围广、业务复杂,存在高并发、高性能的质量属性场景;经开发团队商议后一致决定采用基于 Spring Cloud作为分布式系统的微服务框架套件来实现系统的开发,该框架包含配置管理、服务治理、负载均衡、链路追踪等功能,并采用容器技术部署到Kubernetes集群中。
在分布式系统的设计和实现过程中,常见的技术有分布式事务、分布式缓存、分布式存储、分布式限流等。分布式事务用于确保事务在多个节点上执行的原子性、一致性、隔离性和持久性。分布式缓存技术能够提高数据缓存的容量,减少数据访问的延迟,提高系统的性能。分布式限流可以保证系统在特定场景高并发请求,采用限流熔断等技术保证系统满负载而不超限。
负载均衡可以将访问均匀的分配到多个负载中。
一、采用分布式事务用于解决数据一致性
分布式事务保证事务的原子性、一致性、隔离性和持久性。
- 原子性是指要不全部成功要不全部失败;
- 一致性是为了保证数据在多个节点上一致;
- 隔离性是指事务之间相互隔离;
- 持久性是指事务一但提交就永久存储;
我们选用开源分布式事务框架 Seata ,其性能高并对业务零侵入解决了微服务的分布式事务问题。该组件的工作原理是通过关系型数据库本地事务的协调驱动来完成全局事务,他将一个全局事务拆分为多个本地事务,在每个本地事务执行相同的操作,并将操作结果上报给事务协调器,事务协调器根据上报的结果决定是提交还是回滚。
二、采用分布式缓存用于提高缓存容量并解决数据快速读取和减轻数据库压力问题
分布式缓存具有以下特点:
- 可扩展性:通过横向扩展可以轻松增加缓存容量,以应对不断增长的业务需求;
- 高可用:通过多个节点提供服务,避免单点故障的影响;
- 性能优化:应用优先查询缓存,减轻频繁数据库的压力
我们采用Redis Cluster 模式作为缓存库,为了防止缓存雪崩和缓存击穿最对特定高频 Key 设置为“永不过期”,其他数据设置为一个随机数。
三、采用分布式限流用于保护系统满负载而不超限
该系统在秒杀、下单和查询商品详情等业务场景,最大的特点是高并发,而系统往往不能承受无限制增长的流量,继而产生:CDN、消息队列、多级缓存等,但无论如何优化,物理资源的特性决定了资源的上限,如果强制接受所有请求,往往造成系统的雪崩。我们选用开源分布式限流框架 Sentinel,该组件优点性能高、项目成熟、可以配置丰富的流控规则和交互体验好,该组件原理是统计滑动时间窗口内的成功和失败的请求,如果达到配置的阀值则进行流控。该组件为系统的流量守卫,在流控的同时也为快速扩容预留了足够的时间。
该项目除了使用以上分布式技术,在用户接入层,按需将 JavaScript 脚本、css 样式表、图片等静态资源文件应用了CDN(内容分发网络)组件,分散在各地的用户会请求最近网络节点上的资源,更快的访问速度,增加用户体验并减少了对该系统的请求并发。
PS: 缺少挑战和优化
经过项目10 个月的开发和测试工作,系统与 2022 年 2 月通过试运行期间的各项业务指标和性能参数,顺利通过了验收。日活跃在千万级别,成交金额百万级别,并在“11.11”、黑色星期五等秒杀活动经过百万级 QPS请求,得到领导的一致好评。项目的成功得益于分布式技术的灵活应用,同时也考虑了电商平台海量用户的特征,分布式计算、分布式数据库、分布式缓存的架构设计很好的助力了平台的运行和发展。在今后的架构设计师工作过程当中也要时刻铭记这点,保持空杯心态,不断学习,应对未来更大的挑战,创造更大的价值!
分布式技术通常采用角色单一职责(Master 和Worker/Slave 等角色),Master/Worker 类型中,Master负责协调Worker、路由分配和结果聚合;Master/Slave 类型中,将读写等操作进行分离。Master节点为了防止单点故障,采用冗余的设计架构:一主多从,多主多从和去中心化等,采用一致性同步算法、选主算法、心跳机制来保证一致性和可用性。Worker/Slave 节点为了保证可用性和高性能,采用拆分的设计架构,即数据按照一定规则 Hash 到指定节点,并采用日志预写保证数据不丢失,采用缓存机制、磁盘的顺序读写、布隆过滤器和数据本地化等保证高性能。通过数据冗余等机制保证数据容错性。但无论采用何种设计,都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),需要根据软件类型进行取舍。分布式技术可以突破单机极限,横向扩展容易,但运维成本相对偏高。项目中使用的分布式技术有:
三、参考范文
- 论分布式系统设计与实现
- 论分布式系统设计与实现
- 分布式限流算法及方案介绍
- 25张图详解 | 大型分布式电商系统架构(一)
- 25张图详解 | 大型分布式电商系统架构(二)
- 常见分布式应用系统设计图解(十):电商秒杀系统
四、自我点评
- 项目的代入感比较弱,使用现有框架来解决问题。个人觉得题重在考察分布式技术在项目中的应用。例如可以增加消息推送系统,采用任务中心+发送组件分批分片进行推送,可以阐述解决发送组件和任务中心的交互的过程。
- 思路:着重书写协调多个分布式组件构建大型分布式网站,以及遇到的问题&演化。
- 字数太多了,需要精简。
评论区