论分布式系统的设计与实现

本人任职某运营商解决方案架构师职位,因工作需要考取了软考的系统架构师认证,并顺利的通过了考试  一点点心得分享如下:

选择题(就是刷,刷到你出肌肉记忆,闭眼就知道选项)

案例题(就是背,很多简答题的回答都是公式化的  比如看到活动图和状态图就知道它俩有啥区别,刚开始可能会有点恼火,准备的过程可能就像背面试题一样,很多东西是通的)

论文题(最讲究技巧和套路的一门考试,相信很多高项的同学都是挂在论文上了,而架构师的考试论文相对比较容易,我本人参考三次  均高分通过,其实很多人觉得自己技术薄弱 或者不善文辞,但实际上摸清楚论文的套路后,整个论文的组成就是1000+1500两个部分组成   1000字的项目背景、项目建设内容、项目结尾的总结+1500字对考题的响应)按照这样的大思路去备考  会事半功倍。

题目要求:

分布式是指将一个系统或任务分解成多个子部分,并在多个计算机或服务器之间进行协同工作的方式。每个子部分都可以在不同的计算机节点上运行,彼此之间通过网络进行通信和协调。分布式技术在当今互联网应用中起着重要作用,例如大规模搜索引擎、社交网络和电子商务平台等。常见的分布式系统包括分布式数据库、分布式存储系统、分布式计算系统等。这些系统通过将数据、计算和功能分散到多个节点上,可以提供更高的性能、可伸缩性和容错性。分布式系统的设计和实现需要解决一系列挑战,例如节点之间的通信和同步、数据一致性的维护、负载均衡、故障恢复等。为了解决这些挑战,通常会使用一些分布式算法和协议,如一致性哈希、Paxos、Raft等。请围绕“论分布式设计与实现”论题,依次从以下三个方面进行论述。1.概要叙述你参与管理和开发的软件项目以及你在其中承担的主要工作。
2.请阐述你参与的项目使用了哪些分布式技术,它们的特点是什么?
3.请结合项目实际,具体阐述你在项目中分布式技术的实践,以及在实施过程中遇到的问题及解决方案。

论文部分:

摘要:2022年9月,我参加某省文旅部门牵头建设乡村振兴电商平台项目,政府部门拟通过电商手段积极促进区域经济发展,该平台通过汇聚区域优势农副产品、文旅商品,对资源进行汇聚集中,结合各类专项优惠政策刺激消费,提升区域经济发展水平。我在项目中担任系统架构设计师,负责系统架构的设计、并对开发过程进行指导。本文详细介绍了分布式数据库、分布式缓存、分布式计算的技术以及应用场景,并在项目过程中,详细介绍了通过分布式架构的设计,满足系统的高可用、高并发、高性能等质量属性需求。项目与2023年3月正式上线,并通过业主方和专家团队的评审验收,获得了用户单位各方的一致好评。

      随着数字化技术的不断发展,电子商务平台在以“淘宝”、“京东”为代表的超大型系统的持续运行,已然改变了传统贸易中“人、货、场”的组织形式;电子商务作为数字经济的重要组成部分之一,得到了某省领导的高度重视;结合该地区农副产品和文旅特色,由党建引领,数字赋能的某省电子商务交易平台应运而生。2022年9月,我司经过公开招标,以综合评分第一的优势顺利成为该项目的承建单位。合同一期金额742万元,建设期为6个月。在该项目中我担任系统架构设计师,负责系统架构的整体设计,并作为技术经理指导开发团队完成各模块应用的开发,对系统的开发质量进行负责。

      项目启动后,各方领导高度重视,经过系统的评估,我们充分认识到了项目的建设意义和技术挑战,立即成立的项目专班,对系统进行需求收集、分析和架构设计。电商平台包含web端,移动端APP、以及小程序端;功能主要包含用户注册与登录、商品浏览与搜索、购物车与交易支付、订单与物流管理、评价与客户服务等内容,平台涉及用户数量大、范围广、业务复杂,存在高并发、高性能的质量属性场景;经开发团队商议后一致决定采用分布式的框架来实现系统的开发。

      分布式技术是指将一个系统或任务分解成多个子部分,并在多个计算机或服务器之间进行协同工作的方式。每个子部分都可以在不同的计算机节点上运行,彼此之间通过网络进行通信和协调。分布式对于用户而言是感知不到的,就像是一台计算机在提供服务一样。常见的分布式技术有:1、分布式数据库(postgresql、MongoDB等),分布式数据库在逻辑上是一个整体,实际上是将数据分别存储在不同的数据库或物理节点上,可以提升数据整体的可靠性以及数据库响应速度;2、分布式计算(Hadoop、spark等),分布式计算的核心原理是将计算任务经过拆分后分摊至多个不同的节点,共同来完成计算任务,以Hadoop框架下的MapReduce举例,它就是将一个复杂庞大的计算任务拆分为多个小的计算任务,由多个节点共同计算后经过合并形成最终的结果,提升计算的效率和准确度;3、分布式缓存(Redis、Memcached等),能够高性能的读取数据、并动态的横向扩展缓存节点;尤其适用于电商平台这类存在大量用户并发请求或查询读写操作的系统。

项目成立之初,我们就充分意识到,系统的高性能是项目成功的必备因素之一,电商平台的业务特性对系统的性能、可用性提出了很高的要求,再具体的实现上我们提出了以下解决方案

该电商系统面向全省用户,分布广、数量大,在促销和文旅活动期间每天预计可达到百万左右的访问量,用户要求可容纳三万用户的并发访问;海量用户的并发访问对系统的核心节点造成了巨大的负载压力,起初我们采取横向扩展节点数量的方式,提升计算资源以响应用户的请求,但网络的瓶颈和大量用户请求堵塞一度让系统进入崩溃瘫痪的状态,于是我们立即调整优化了系统架构

一.用户接入层的优化,我们在系统的接入层应用了CDN内容分发网络组件;将电商平台静态资源、前端代码、CSS样式分散在各个区域网络核心节点上,分散在各地的用户的请求会分发到最近的网络节点上进行响应;一是大大减少了网络瓶颈的压力,二是避免了用户去请求全量直达核心节点造成堵塞的并发压力。

二.分布式缓存层的优化,经过定位发现,试运行期间造成系统崩溃的元凶之一是缓存雪崩和缓存击穿;Redis分布式缓存中对于时期时间的key的设置策略不当造成了该缓存在过期,大量用户请求直达后端核心节点,大并发的请求直接将后端DB压垮造成了系统的瘫痪;经过测试调优,最终选择了将部分高频访问数据设置为“永不过期”,其他缓存数据过期时间设置为一个随机数,避免大量缓存同时过期造成了缓存雪崩,经过优化,缓存的命中率接近百分之八十。

三.数据层的优化:经过评测、在前期已经实现了数据库主从分离架构集群的情况下,受网络的瓶颈瓶颈影响,性能依然不够理想;一方面我们对数据库进行了进一步的优化拆分,比如用户数据、订单数据、物流数据分数据库表进行存储,数据经过哈希取模后分为多张表进行存储,裁剪单张数据表的大小,进一步优化数据库的分库分表工作;

另一方面,在系统整体的设计与实现上,我们采用了异地多活的系统架构,从接入层开始就多区域多机房部署,各个区域之间没有主备的概念,承担各自区域内相应的流量。由于多活的架构中,都是“主库”,数据的同步和一致性是一个非常大的挑战和困难。在数据一致性的问题上,我们使用了公司自研的数据同步中间件,多活节点的时钟严格保持一致,区分每个数据操作的先后顺序,以时间为标尺,解决数据的冲突;另外在接入层之上增加路由层,路由规则按地理位置进行分片,A城市的业务请求由A城市节点的进行完成,让同一个用户的请求,在同一个机房内完成所有的业务闭环,减少数据的跨机房访问,也即单元化实施,而像库存数量、订单数据这类无法按照地理位置进行路由分片,则作为全局数据采用主从数据的方案进行实现,这样的设计实现思路,不仅提升了系统的性能并在一定程度上解决了数据一致性的问题。

经过六个月的开发与测试工作,系统于2023年3月通过试运行期间的各项业务指标和性能参数测试,顺利通过了验收。据了解,该电商平台每周交易金额可达上百万元,在去年的6.18、双11经受住每天上百万次请求的考验;有效的刺激了当地农业和文旅经济的发展并被多家媒体报道;得到了用户各单位的一致好评;项目的成功得益于分布式技术的灵活运用,在架构设计和实现阶段充分考虑到了电商平台高并发的海量用户特性,分布式计算、分布式数据库、分布式缓存的架构设计很好的助力了平台的运行和发展。在项目开发过程中,我们也勇敢做出了取舍,比如在CAP理论中,分布式系统无法兼顾一致性、可用性、和分区容错性,我们放弃了追求系统的强一致性,通过事务机制的设置实现系统最终一致性,容忍过程中数据部分不一致的问题。学习永无止境,没有最牛的技术、只有最适合的技术,在今后的架构设计师工作过程当中也要时刻铭记这点,保持空杯心态,不断学习,应对未来更大的挑战,创造更大的价值!

猜你喜欢

转载自blog.csdn.net/weixin_41631494/article/details/140119301