微服务是一种理念,没有确切的定义和边界,好比设计原则,是属于抽象的概念。
关于微服务的划分:这里的矛盾在于粒度。如果粒度太大了,分和不分似乎都差不多;如果粒度太小了,聚合、发布、调用链、调试等都是坑。

一、拆分姿势

1.1 纵向拆分

从业务维度进行拆分。标准是按照业务的关联程度来决定,关联比较密切的业务适合拆分为一个微服务,而功能相对比较独立的业务适合单独拆分为一个微服务。

1.2 横向拆分

从公共且独立功能维度拆分。标准是按照是否有公共的被多个其他服务调用,且依赖的资源独立不与其他业务耦合。

纵向以业务为基准,关系铁的在一起;横向功能独立的在一起。



微服务架构

1 什么是微服务

微服务是一种架构风格。一个大型的复杂软件应用,由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好的完成该任务。

2 架构风格

项目的一种设计模式。
  • 客户端与服务端的
  • 基于组件模型的架构(EJB )
  • 分层架构(MVC)
  • 面向服务架构(SOA)

3 微服务特点:

  • 系统是由多个服务构成
  • 每个服务可以单独独立部署
  • 每个服务之间是松耦合的 ,服务内部是高内聚的, 外部是低耦合的。高内聚就是每个服务只关注完成一个功能。

4 MVC 、RPC 、SOA 、微服务架构之间的区别

  • MVC  架构其实 MVC 架构就是一个单体架构。代表技术:Struts2、SpringMVC、Spring、Mybatis 等等。
  • RPC  架构RPC(Remote Procedure Call):远程过程调用。他一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。代表技术:Thrift、Hessian 等等
  • SOA  架构SOA(Service oriented Architecture):面向服务架构
  • ESB(Enterparise Servce Bus):企业服务总线,服务中介。主要是提供了一个服务于服务之间的交互。包含的功能如:负载均衡,流量控制,加密处理,服务的监控,异常处理,监控告急等等。代表技术:Mule、WSO2
  • 微服务架构微服务就是一个轻量级的服务治理方案。代表技术:SpringCloud、dubbo 等等

5 如何设计微服务以及设计原则

AKF  拆分原则  可扩展立方(Scalability Cube)
  • Y轴(功能)---关注应用中的功能划分,基于不同的业务拆分。对于服务增多,造成调用关系复杂采用服务网关的模式。
  • X轴(水平扩展)---关注水平扩展,也就是“加机器解决问题”。对每个业务进行绝对的复制做集群加负载均衡模式。
  • Z轴(数据分区)---关注服务和数据的优先级划分,如按地域划分。 Y 轴扩展的 SOA 架构,客户端对服务端节点的选择一般是随机的,但是,如果在此加上 Z 轴扩展,那服务节点的选择将不再是随机的了,而是每个单元自成一体


前后端分离原则


无状态服务原则如果一个数据需要被多个服务共享,才能完成一笔交易,那么这个数据被称为状态。进而依赖这个“状态”数据的服务被称为有状态服务,反之称为无状态服务

RestFul 的通讯风格


  1. 无状态协议HTTP,具备先天优势,扩展能力强,例如需要安全加密,有现成的成熟方案HTTPS即可
  2. JSON报文序列化,轻量简单,人与机器均可读,学习成本低,搜索引擎友好。
  3. 语言无关。各大热门语言都提供成熟的Restful API框架,相对于其他的一些RPC框架生态更完善。