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的依赖管理了。