在设计一个微服务的时候,一般会遵守4个原则

  1. AKF微服务拆分
  2. 前后端分离
  3. 无状态服务
  4. RestFul服务通信

一、AKF扩展立方体

AKF

微服务的拆分原则主要参考立方体中的Y轴,根据不同的业务划分

微服务拆分的要点:

  1. 高内聚,低耦合,每个服务完成具体的功能
  2. 根据团队划分,一个团队负责1-2个服务模块,进行快速的更新迭代

Y轴

Y轴

Y轴扩展将一个庞大的业务拆分成多个具体的服务,前端通过客户端或者PC端通过服务网关的治理请求到不同的服务

X轴

X轴

X轴扩展主要解决系统的容量和可用性问题,通过水平扩展服务,增加机器,采用集群+负载均衡的模式,可以满足在大型互联网架构中的三高问题

Z轴

Z轴

Z轴扩展通常是指基于请求者或用户独特的需求,进行系统划分,并使得划分出来的子系统是相互隔离但又是完整的。

同样拿这个模型举例,当我们的系统为一个大型电商业务架构时,订单管理服务中有一个秒杀场景的服务,由于秒杀的瞬时流量巨大,从而会导致订单管理服务的流量激增,需要承载大量的请求压力,所以我们可以将秒杀服务从里面抽离出来,然后可以按需再次水平扩展,或着再将秒杀服务具体拆分

二、前后端分离

早期未分离(JSP+Servlet)

JSP

早期前后端未分离时一般是采用JSP+Servlet形式,会发现在前端界面中会冗余非常多的后端Java代码,而且如果这套系统是用在PC端中供用户请求,当系统需要部署到APP或着小程序时,则由需要开发多套代码

半分离

半分离

半分离时期,前端通过Ajax/Json与后端进行数据交互,但是当业务非常复杂时,一次渲染可能需要多次请求,而且传递的Json字符串可能十分大,导致用户可能请求十分缓慢

完全分离

完全分离

浏览器不再通过Ajax去请求后端进行渲染,而是:

  1. 浏览器请求服务器端的NodeJS
  2. NodeJS再发起HTTP去请求后端
  3. 后端依然原样输出JSONNodeJS
  4. NodeJS收到JSON后再渲染出HTML页面
  5. NodeJS直接将HTML页面Flush到浏览器

三、无状态服务

Session共享

一个很常见的例子,分布式Session共享问题,用户发起登录请求,负载转发到不同的服务节点上,这些服务节点都是直接去缓存(Redis)拿到对应的用户Session,所以对所有的服务A的节点来说都是无状态的,可以对任意的服务节点进行删除或着扩展

四、RestFul服务通信

RestFul

最后修改:2021 年 11 月 15 日 05 : 11 PM
如果觉得我的文章对你有用,请随意赞赏