Thinking about microservice

谈谈我对microservice的理解

1. 在比较中理解

功能上

传统的service

  • 功能全面,大而全;
  • 系统内部耦合严重,数据服务部分互相依赖,逻辑错综复杂;
  • 表现层和服务层耦合,解除耦合难以实现;
  • 整个应用程序独立存在,完全不可以复用。

新型的microservice

  • 多模块,每个模块功能单一;
  • 采用统一的数据传输格式;
  • 数据服务单独部署,可以互相依赖;
  • 采用RESTful服务标准,表现层和服务层解耦;
  • 分布式部署,服务可以冗余,容灾
  • 采用分布式事务:BASE原则,1. Basiclly Available 2. Soft state 3.Eventually Consistent

开发中

传统的service

  • 代码组织结构和逻辑复杂,难以阅读;
  • 功能性测试简单;
  • 系统对外暴露较少,沟通成本较低。

新型的microservice

  • 代码结构简单,易于阅读;
  • 需要大量的mock service,以完成功能性测试;
  • web技术上可能存在跨域问题;
  • 系统对外依赖较重,交互频繁;
  • 人员沟通成本巨大。

Service Dependency Management

既然服务之间的依赖很困扰,那么为何不学习maven或者gradle,将服务依赖统一管理起来?
Taobao中configServer是一个独立的中央管理服务器,其作用无非让应用知晓其他应用,然后去调用;这就是依赖!
而且假设不同服务是有版本号的,事实上很多人已经这么做了,这个实在太类似jar的依赖管理了。