漫画闲谈微服务——概念、特点、与SOA区别、不足之处
先用漫画引入微服务概念~
缺点一:项目过于臃肿当大大小小的功能模块都集中在同一项目的时候,整个项目必然会变得臃肿,让开发者难以维护。
缺点二:资源无法隔离就像刚刚小灰的经历一样,整个单体系统的各个功能模块都依赖于同样的数据库、内存等资源,一旦某个功能模块对资源使用不当,整个系统都会被拖垮。
缺点三:无法灵活扩展当系统的访问量越来越大的时候,单体系统固然可以进行水平扩展,部署在多台机器上组成集群:
但是这种扩展并非灵活的扩展。比如我们现在的性能瓶颈是支付模块,希望只针对支付模块做水平扩展,这一点在单体系统是做不到的。
什么是微服务?微服务(Microservice Architecture)是近几年流行的一种架构思想,简而言之,微服务架构是一种将单应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中运行,并与轻量级机制(通常是HTTP资源的API)进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机制进行独立部署。这些服务的集中化管理已经是最少的,它们可以用不同的编程语言编写,并使用不同的数据存储技术。
微服务的特点
1.独立部署,灵活扩展传统的单体架构是以整个系统为单位进行部署,而微服务则是以每一个独立组件(例如用户服务,商品服务)为单位进行部署。
用一张经典的图来表现,就是下面这个样子:
左边是单体架构的集群,右边是微服务集群
比如根据每个服务的吞吐量不同,支付服务需要部署20台机器,用户服务需要部署30台机器,而商品服务只需要部署10台机器。这种灵活部署只有微服务架构才能实现。
而近几年流行的Docker,为微服务架构提供了有效的容器。
2.资源的有效隔离微服务设计的原则之一,就是每一个微服务拥有独立的数据源,假如微服务A想要读写微服务B的数据库,只能调用微服务B对外暴露的接口来完成。这样有效避免了服务之间争用数据库和缓存资源所带来的问题。
同时,由于每一个微服务实例在Docker容器上运行,实现了服务器资源(内存、CPU资源等)的有效隔离。
3.团队组织架构的调整微服务设计的思想也改变了原有的企业研发团队组织架构。传统的研发组织架构是水平架构,前端有前端的团队,后端有后端的团队,DBA有DBA的团队,测试有测试的团队。
而微服务的设计思想对团队的划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负责,支付业务是一个团队来负责。
这种垂直划分只是一个理想的架构,实际在企业中并不会把团队组织架构拆分得这么绝对。
微服务与SOA的区别
什么是SOA?soa可以是下面这样的Web Service:
总之,SOA架构强调的是异构系统之间的通信和解耦合,而微服务架构强调的是系统按业务边界做细粒度的拆分和部署。
微服务架构不足
总结:
微服务架构风格主要体现的是一个重要的思想—一个为企业应用认真思考的思想,也有在某种程度上开创了这种架构风格的例子,包括亚马逊、Netflix、卫报、英国政府数字服务、realestate.com.au、Forwardh和comparethemarket.com等等。
实际软件开发不太建议直接从微服务架构开始,而应从单一(庞大)的项目开始,一旦这一项目遇到问题,就拆分模块,划分不同的微服务。
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
相关推荐
程序员喜欢把自己装在自己的小天地里。一点点很小的事情就能让他们高兴起来。如果他们根据设计书完成了任务,他们会非常高兴。有时候一个小小的卡壳都有影响他们的心情。这个漫画就是描写程序员身上有趣的事情的 …