目录
(二)服务网格的演进与挑战,无服务架构(Serverless)的结合
干货分享,感谢您的阅读!
随着系统规模和复杂性的不断增长,微服务架构成为应对这些挑战的重要解决方案。合理的服务拆分与扩展策略是实现微服务架构成功的关键。本文将从架构轮回理论出发,探讨服务拆分的维度和策略,包括AKF扩展立方体模型中的X、Y、Z轴扩展,以及绞杀者模式和修缮者模式的应用。通过这些分析,旨在为架构师和开发者提供实践指导,帮助构建高效、灵活的微服务系统。
一、架构的轮回理论
架构轮回给我们的启示是,将所有的东西放在一个系统中是不好的,软件系统的关注点应该清晰划分,并能通过功能拆分降低系统复杂性。系统架构的轮回不可避免,我们能做的就是尽量降低架构被腐化的程度和速度,而微服务架构的提出就是为了实现这一目标。注意,在服务拆分之前,必须对服务本身进行建模,服务建模能够明确服务的边界以及集成策略。
二、服务拆分的维度:业务与数据的AKF扩展立方体分析
《可扩展的艺术》一书提出了一个更加系统的可扩展模型—— AKF可扩展立方 (Scalability Cube)。这个立方体中沿着三个坐标轴设置分别为:X、Y、Z。
X轴扩展 —— 关注水平的数据和服务克隆,指的是水平复制,很好理解,就是讲单体系统多运行几个实例,做个集群加负载均衡的模; Y轴扩展 —— 关注应用中职责的划分,比如数据类型,交易执行类型的划分,就是我们所说的微服务的拆分模式,就是基于不同的业务拆分; Z轴扩展 —— 关注服务和数据的优先级划分,,是基于类似的数据分区,比如一个互联网打车应用突然出现用户量激增,集群模式撑不住了,那就按照用户请求的地区进行数据分区,北京、上海、四川等多建几个集群。
(一)X轴扩展讲解
X轴扩展通过绝对平等地复制服务与数据以解决容量和可用性的问题。
举例:假设一个车间能完整的生产一辆汽车,为了短时间内生产更多的汽车,我们可以建设更多的车间,任何新增车间除了工作的效率可能不同之外,都是一个新的复制品,也能提供与原来车间相同的工作,生产出完整的汽车。给复制品分配工作就是一个X轴扩展的一个完美示例,说明了X轴扩展的思路,即把工作无偏向的分配给复制品,每个复制品在不考虑生产效率的情况下,谁来做这项工作是无偏向的, 各个复制品之间不共享任何内容 。
而在工程技术上来讲,X轴扩展主要有以下两种技术方案:
1.负载均衡
将用户的访问请求通过负载均衡器均衡分配到由各个“复制品”组成的集群中去。当某个复制品出现故障,也能轻易地将相应“工作”转移给其它的复制品来“代为完成”。这中间涉及到的工程技术点包括了反向代理,DNS轮询,哈希负载均衡算法(一致性哈希),动态节点负载均衡(如按CPU,I/O)等。它的难点在于要求集群中的“复制品”是不共享任何内容,也就是我们常说的无状态 。
2.数据复制
指在数据存储层进行绝对平等地数据迁移,用于解决存储层I/O瓶颈以及可用性上的问题。由于存在多个复制品存储,为了使得每个复制品提供无差异的数据服务,我们需要在复制品之间同步或异步地复制数据。数据复制的方式包括了主从同步(常见的读/写分离),双主同步等。因为数据存储天生就是有状态的,数据复制的难点在于 一致性 的保证上,为了一致性的保证,从而也衍生了很多复杂的技术,比如Paxos选举算法等。
(二)Y轴扩展讲解
Y轴扩展表示的是根据数据的类型或者交易执行的类型(或者两者都有)来划分工作职责,一般称为面向服务或面向资源的扩展。
举例:如亨利.福特所做的一样,将汽车制造的工序按专业性分成不同车间和流水线,不再是一个车间负责完成100%的任务,制造一辆完整的汽车,而是让这每个车间都执行一些子任务,如安装发动机,喷漆,安装玻璃等等。这样的分工,益处是明显的,每个车间负责的任务更简单 ,从而能更专业更高效的完成生产。
与汽车工厂的分工类似,为了降低系统复杂度,Y轴扩展会将庞大的整体应用拆分为一组服务。每个服务实现一组相关的功能,如订单管理、客户管理等。在工程上常见的方案是服务化架构(SOA) 。比如对于一个电子商务平台,我们可以拆分成不同的服务,组成下面这样的架构:
但通过观察上图容易发现,当服务数量增多时,服务调用关系变得复杂。为系统添加一个新功能,要调用的服务数也变得不可控,由此引发了服务管理上的混乱。所以,一般情况下,需要采用服务注册的机制形成服务网关来进行服务治理。系统的架构将变成下图所示:
同时,为了提升单个服务的可用性和容量, 对每一个服务进行X轴扩展划分 。
(三)Z轴扩展讲解
Z轴扩展通常是指基于请求者或用户独特的需求,进行系统划分,并使得划分出来的子系统是相互隔离但又是完整的。
举例:福特公司为了发展在中国的业务,或者利用中国的廉价劳动力,在中国建立一个完整的子工厂,与美国工厂一样,负责完整的汽车生产。这就是一种Z轴扩展。
对于系统而言,Z轴扩展一般是为了满足差异性的需求或者是为了安全隔离而采取的扩展措施。
比如为了提供VIP用户服务,可以将系统完整地复制一份出来,与普通用户所使用的系统完全隔离开来;
再如,针对不同的地域用户,系统自动切换到对应地域的子系统,为用户提供服务,都可以认为是Z轴扩展。
同时,在系统的灰度部署上,我们也通常使用Z轴扩展来完成。
工程领域常见的Z轴扩展有以下两种方案:
1.单化架构
在分布式服务设计领域,一个单(Cell)就是满足某个分区所有业务操作的自包含闭环。如上面我们说到的Y轴扩展的SOA架构,客户端对服务端节点的选择一般是随机的,但是,如果在此加上Z轴扩展,那服务节点的选择将不再是随机的了,而是每个单自成一体。如下图:
2.数据分区
为了性能数据安全上的考虑,我们将一个完整的数据集按一定的维度划分出不同的子集。 一个分区(Shard),就是是整体数据集的一个子集。比如用尾号来划分用户,那同样尾号的那部分用户就可以认为是一个分区。数据分区为一般包括以下几种数据划分的方式,当然,数据分区也是有代价的,它将增加数据运维的难度,关联搜索的复杂度增加等。
数据类型(如:业务类型) 数据范围(如:时间段,用户ID) 数据热度(如:用户活跃度,商品热度) 按读写分(如:商品描述,商品库存)
总结:
- 一个在可扩展性上设计良好的系统,会充分考虑三个维度上的可扩展性。
- X轴上扩展处理的是平台或系统执行的交易量或工作量增长,虽然X轴扩展能够很好处理交易量的增长,但当系统复杂度的大幅度增加,或用户数量增加以及差异化服务需求出现,X轴扩展就难以应付了,如是我们可以通过Y轴扩展来处理系统复杂度增长的问题以及Z轴扩展来处理差异性化需求的问题。
- 当采用的扩展坐标轴不止一条时,那么X轴扩展总是其它扩展方法的次级划分 。同时,这三个维度扩展性,使得系统性能上改善有了更多的方向,对于系统性能优化,也是至关重要。
三、服务拆分的两大策略:绞杀者模式+修缮者模式
服务拆分的方法取决于系统自身的特点和运行状态,通常分为绞杀者和修缮者两种模式策略。
(一)绞杀者模式策略
在现有系统外围将新功能用心的方式构建为新的服务策略,通过将新功能做成微服务的方式,而不是直接修改原有系统,逐步实现对老系统的替换,推介采用绞杀者模式。
在绞杀者模式策略下需要把握的最重要原则就是对于任何需要开发的功能一定要完整地采用微服务架构。
- 对于完全独立的新功能,这一点比较容易把握。
- 对于涉及老业务变更的新功能,则需要通过重构达到这一目标。
(二)修缮者模式策略
就如修房或修路一样,将老旧待修缮的部分进行隔离,用新的方式对其进行单独修复。修复的同时,需保证与其他部分仍能协同功能。从这种思路出发,修缮者模式更多表现为一种重构技术。
重点思路如图所示:
四、思考架构演进的未来方向
我们需要关注以下几个思考方向:
(一)弹性架构与边缘计算的结合+异步和事件驱动架构的主流化
随着物联网(IoT)和边缘计算的快速发展,越来越多的应用场景需要在数据产生的源头进行实时处理。未来的微服务架构可能会与边缘计算深度结合,通过边缘节点处理数据并与云端同步。这种架构模式可以在延迟、带宽和隐私要求严格的场景下提供更好的解决方案。思考如何在微服务架构中实现边缘计算的有效接入和协调,是个重要的研究方向。
当前,微服务架构通常依赖同步的HTTP请求或RPC调用来实现服务间的通信。然而,这种方式在高并发、低延迟场景下可能成为瓶颈。未来,事件驱动架构(EDA)和异步通信可能会成为主流,服务之间通过消息队列、事件流等异步机制来解耦。如何设计和实现高效、可靠的事件驱动架构?如何保证事件的一致性和可靠性?这些问题将成为未来微服务架构的关键技术挑战。
(二)服务网格的演进与挑战,无服务架构(Serverless)的结合
服务网格(Service Mesh)技术近年来得到了广泛应用,它为微服务架构提供了透明的通信、监控、负载均衡、安全和流量控制能力。未来,服务网格可能会进入一个更加智能化的阶段,自动化处理服务间的各种动态变化,如服务发现、流量调度和故障恢复等。如何在微服务架构中设计一个能够自动适应业务变化的智能服务网格,也是下一步技术进化的重点。
同时无服务架构(Serverless)是近年来兴起的一个重要架构模式,它允许开发者专注于代码本身,而不需要关心服务器的管理和运维。虽然无服务架构和微服务架构看似是两个不同的架构理念,但在一些场景下,二者可以结合使用。如何将微服务架构中的一部分服务迁移到Serverless平台,以减轻运维压力,并提升整体架构的灵活性和可扩展性?
(三)微服务与传统架构的混合模式
尽管微服务架构在大型分布式系统中表现出色,但它并非适用于所有场景。对于一些中小型企业或项目,单体架构仍然是一个较为合适的选择。因此,如何在微服务和传统单体架构之间找到一个合理的平衡点,特别是在逐步迁移过程中,如何避免架构割裂,保证系统的稳定性和可扩展性,是一个值得思考的问题。是否有一种平滑过渡的架构方式,可以使得传统架构逐步过渡到微服务架构?
(四)DevOps与微服务架构的深度融合
微服务架构的成功实施离不开DevOps文化的支持。未来的微服务架构将更加依赖于持续集成(CI)、持续交付(CD)和自动化部署等DevOps实践,以实现快速迭代和高效交付。如何构建一个适应微服务架构的DevOps流水线,确保每一个微服务的开发、测试和部署过程高效且无缝,是未来架构设计的重要方向。
五、总结
本文深入探讨了现代架构设计中微服务架构的演进、服务拆分策略以及面临的挑战与未来方向。通过分析架构的轮回理论,我们认识到系统架构必须清晰划分关注点并通过合理的拆分来减少系统复杂性,微服务架构应运而生,旨在实现系统的可扩展性与灵活性。
在服务拆分的维度分析中,基于AKF扩展立方体模型,本文详细探讨了X轴、Y轴、Z轴扩展的不同策略。X轴扩展侧重于通过服务和数据的复制来解决系统的容量和可用性问题;Y轴扩展强调按业务功能划分服务以应对复杂性;而Z轴扩展则通过按地区、用户需求等维度划分系统来提供差异化服务。这些扩展策略的合理结合,为微服务架构的构建提供了丰富的设计选择。
同时,本文还介绍了服务拆分的两种主要策略:绞杀者模式和修缮者模式。绞杀者模式通过构建新服务逐步替换原有系统,修缮者模式则聚焦于对旧有系统的重构与修复,以保持系统的整体稳定性和可维护性。
对于架构演进的未来,文章提出了多个关键的研究方向,包括弹性架构与边缘计算的结合、异步事件驱动架构的兴起、服务网格的智能化演进,以及微服务与传统架构的混合模式等。这些趋势表明,随着技术的不断进步,微服务架构将变得更加智能、灵活,并能够适应更复杂和动态的业务需求。
总的来说,微服务架构并非一成不变的解决方案,而是需要根据具体业务场景与需求进行灵活调整的系统设计。通过合理的服务拆分、扩展策略和架构演进路径,企业可以在保障系统高效性的同时,提升业务的可扩展性与适应性。
参考书籍、文献和资料:
【1】https://www.cnblogs.com/549294286/p/5089569.html.
【2】郑天民. 微服务设计原理与架构. 北京:人民邮电出版社,2018.
【3】http://insights.thoughtworkers.org/service-split-and-architecture-evolution.
今天的文章 服务拆分与扩展策略:微服务架构的三维进化分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/86969.html