微服务 - 技术专题 - 设计原则 AFK
在设计微服务的时候,我们一般会遵循以下4个原则:
1)AKF拆分原则
2)前后端分离原则
3)无状态服务
4)restful的通信风格
下面我们来详细了解以下AKF拆分原则。
1 AKF拆分原则 业界对可扩展系统架构设计有一个朴素的概念,就是:通过加机器可以解决容量和可用性问题(如果一台不行就两台)用个段子描述就是:(世界上没有什么事是一顿烧烤解决不了的,如果有,那就两顿)
这一理念在“云计算”概念疯狂流行的今天。得到了广泛的认可。对于一个规模迅速增长的系统而言。容量和性能问题当然是首当其冲的。但是随着时间的向前,系统规模的增长,除了面对性能与容量的问题外,还需要面对功能与模块数量上增长带来的系统复杂性问题。以及业务变化带来的提供差异化服务问题。而许多系统在架构设计时并未充分考虑到这些问题,导致系统的重构成为常态。从而影响业务交付能力,还浪费人力财力。对此《可扩展的艺术》一书提出了一个更加系统的可扩展模型----AKF可扩展立方。这个立方体中沿着三个坐标轴设置分别为X,Y,Z。
2 Y轴功能Y轴扩展会将庞大的整体应用拆分为多个服务。每个服务实现一组相关的功能。如订单管理,客户管理等。在工程上常见的方案是服务化架构(SOA),比如对于一个电子商务平台,我们可以拆分成不同的服务组成下面这样的架构。
但是通过上图容易发现,当服务数量增多时,服务调用关系变得复杂,为系统添加一个新功能。要调用的服务数也变得不可控。由此引发的服务管理上的混乱,一般情况下,需要采用服务注册的机制,形成服务网关来进行服务治理。系统架构将变成如下图所示。
3 X轴(水平扩展)X轴扩展与我们前面理念是一致的。通过绝对平等的复制服务与数据,以及容量和可用性问题。其实就是将微服务运行多个实例。做集群,负载均衡的模式。
为了提升当个服务的可用性和容量。对每一个服务进行x轴扩展划分。
1.4 Z轴(数据分区)
Z周扩展通常是指基于请求和用户独特的需求,进行系统划分,并使得划分出来的子系统相互隔离,但又是完整的。
1.4.1工程领域常见的这种扩展有以下两种方案。
1.4.1.1 单元化架构
在分布式服务设计领域,一个单元就是满足某个分区所有业务操作的自包含闭环。如上面我们所说的y轴扩展的SOA架构。客户端对服务端节点的选择一般是随机的。但是,如果在此加上这周扩展,那么服务的节点选择将不再是随机的。而是每个单元自成一体。如下图。
1.4.1.2数据分区
为了性能数据安全上的考虑。我们将一个完整的数据集按照一定的维度,划分出不同的子集。一个分区,就是整体数据集的一个子集。比如用尾号来划分用户,那同样尾号的那部分用户,就可以认为是一个分区。数据分析一般包括以下几种数据划分的方式。
数据类型(如:业务类型)
数据范围(如:时间段,用户id)
数据热度(如:用户活跃度,商品热度)
读写分离(如:商品描述,商品库存)
评论