微服务的特点
- 每一个服务都是独立的
- 每一个服务都有自己的数据库
比较微服务和soa
Soa | 微服务 | |
---|---|---|
服务间通信 | 智能管道(Smart pipes),如企业服务总线,使用重量级协议,如soap和其他的ws标准 | 哑管道(Dumb pipes),如消息代理,使用轻量级协议(如rest或gPRC)的直接服务对服务通信 |
数据 | 全局数据模型和共享数据库 | 每个服务都有自己的数据模型和数据库 |
代表性的服务 | 大型的复杂的单片应用。通常是由多个大型服务组成 | 小型服务。通常是由几十个或几百个较小的服务组成 |
微服务的优点
- 支持大型复杂项目的连续交付和部署
- 服务规模小,易于维护
- 服务可以单独部署
- 服务独立且可以扩展
- 微服务架构使团队能够自治,独自开发自己的服务
- 它允许简单的试验和采用新技术
- 具有较好的故障隔离能力
因此微服务架构具有可测试性,可交付性,以及自治性的能力。以及服务的独立可扩展,更好的故障隔离和易于试验和采用新技术
测试性:因为微服务体系结构中的每个服务都相对较小,所以自动化测试更容易编写,执行也更快。因此,应用程序的bug会更少。
可交付性:如果负责某个服务的开发人员需要部署该服务的本地更改,那么他们不需要与其他开发人员协调。他们可以部署自己的更改。因此,将更改频繁地部署到生产中要容易得多。
自治性:每个团队或个人单独负责一个或多个相关服务的开发和部署。每个团队或个人都可以独立于所有其他团队或个人开发、部署和扩展其服务。因此,开发速度要快得多。
服务的独立可扩展:根据伸缩立方模型的x轴的服务复制和z轴的数据分区(关于伸缩立方模型看这里)每个服务都可以相应的拓展,而且每个服务都可以部署在最适合他的资源环境的硬件上。
更好的故障隔离:因为每个服务都是完全隔离的,所以一个服务造成内存泄漏只影响该服务,不会影响其他服务。其他服务正常处理请求。
易于试验和采用新技术:在开发新服务时,开发人员可以自由选择最适合此服务的技术(语言或框架等等)
3个业务上的好处
- 它缩短了上市时间,使企业能够对客户的反馈做出快速反应。
- 它使企业能够提供当今客户所期望的可靠服务。
- 员工满意度更高,因为更多的时间花在交付有价值的功能上,而不是修改问题上面。
同时由于每个服务都相对较小。代码对于开发人员来说更容易理解。小的代码库不会减慢IDE的速度,因此使得开发人员的工作效率更高。而且每个服务的启动速度通常都比大型整体式服务快得多,加快了部署速度。
微服务的缺点
合理的划分服务
没有一个具体的算法具体的把系统分为n个服务,所以如果没有合理的划分服务,那么这个系统就会具有单片结构的缺点,也有为服务结构的缺点。
分布式系统是复杂的
使用微服务架构后,开发人员必须要处理创建分布式系统时额外的复杂性。而却服务必须使用进程间的通信机制,这可要比简单的调用更为复杂。每个服务也必须设计当远程服务发生故障或出现高延迟情况下处理方案
每个服务都有自己的数据库,实施跨服务的事务和查询以及数据的一致性困难重重
微服务下的,分布式系统多服务自动化测试也是一个挑战
协调部署多个服务
在多个服务部署时要考虑服务之间的依赖关系
决定何时使用微服务架构是困难的
由于微服务这些缺点导致如果一个小项目盲目使用时只是徒劳的增加工作量,所以评估何时使用它很困难