在设计一个微服务的时候,一般会遵守4个原则
- AKF微服务拆分
- 前后端分离
- 无状态服务
- RestFul服务通信
一、AKF扩展立方体
微服务的拆分原则主要参考立方体中的Y
轴,根据不同的业务划分
微服务拆分的要点:
- 高内聚,低耦合,每个服务完成具体的功能
- 根据团队划分,一个团队负责1-2个服务模块,进行快速的更新迭代
Y轴
Y
轴扩展将一个庞大的业务拆分成多个具体的服务,前端通过客户端或者PC
端通过服务网关的治理请求到不同的服务
X轴
X
轴扩展主要解决系统的容量和可用性问题,通过水平扩展服务,增加机器,采用集群+负载均衡的模式,可以满足在大型互联网架构中的三高问题
Z轴
Z
轴扩展通常是指基于请求者或用户独特的需求,进行系统划分,并使得划分出来的子系统是相互隔离但又是完整的。
同样拿这个模型举例,当我们的系统为一个大型电商业务架构时,订单管理服务中有一个秒杀场景的服务,由于秒杀的瞬时流量巨大,从而会导致订单管理服务的流量激增,需要承载大量的请求压力,所以我们可以将秒杀服务从里面抽离出来,然后可以按需再次水平扩展,或着再将秒杀服务具体拆分
二、前后端分离
早期未分离(JSP+Servlet)
早期前后端未分离时一般是采用JSP+Servlet
形式,会发现在前端界面中会冗余非常多的后端Java
代码,而且如果这套系统是用在PC端中供用户请求,当系统需要部署到APP
或着小程序时,则由需要开发多套代码
半分离
半分离时期,前端通过Ajax/Json
与后端进行数据交互,但是当业务非常复杂时,一次渲染可能需要多次请求,而且传递的Json
字符串可能十分大,导致用户可能请求十分缓慢
完全分离
浏览器不再通过Ajax
去请求后端进行渲染,而是:
- 浏览器请求服务器端的
NodeJS
NodeJS
再发起HTTP
去请求后端- 后端依然原样输出
JSON
给NodeJS
NodeJS
收到JSON
后再渲染出HTML
页面NodeJS
直接将HTML
页面Flush
到浏览器
三、无状态服务
一个很常见的例子,分布式Session
共享问题,用户发起登录请求,负载转发到不同的服务节点上,这些服务节点都是直接去缓存(Redis)拿到对应的用户Session
,所以对所有的服务A的节点来说都是无状态的,可以对任意的服务节点进行删除或着扩展