一、什么是微服务
随着各行各业公司的快速发展,业务规模的不断扩大,不可避免的造成原有架构不能够适应快速的增长和变化。这时,微服务就进入大家的视野,其实在微服务之前,很多的公司已经做过服务化的改造,并且取得了一定的成果,但是对于整体流程的标准化还有一定有差距。那么,什么是微服务呢?
准确的说,微服务是一种软件架构模式,将大型系统或者复杂的应用分割成多个服务的架构,服务之间互相协调、互相配合,为用户提供最终价值。每个服务都有独立的生命周期,可以单独的维护和部署,各个业务模块之间是松耦合的,比传统的应用程序更有效地利用计算资源,应用的扩展更加灵活,能够通过扩展组件来处理功能瓶颈问题。这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个完整的应用程序的全新迭代。
一个微服务的架构如图所示,单体应用被拆分成多个微小的服务:
也有人将微服务的开发比喻成搭积木,每个服务都是一个零件,使用这些不同的服务可以搭建出不同的形状。简单的说,微服务架构就是把一个大系统按业务功能分解成多个职责单一的小系统,并利用简单的方法使多个小系统相互协作,组合成一个大系统。
其实这里蕴含着自古以来的真理,就是分而治之,当一件事情大到不能处理的时候,就使用一定的切分方法,将其变成很多微小的类,然后分门别类的进行处理,以达到最好的效果,最终实现1+1>2的功效。
微服务的优点和缺点(或者说挑战)一样明显。
优点
开发简单,每个服务完成独立的功能
技术栈灵活,可以选择不同的语言完成不同的服务,发挥各种语言的最大优势
服务独立无依赖,每个服务都可以单独部署,一个服务出现问题不会导致整个系统瘫痪
独立按需扩展,以应对高并发以及大流量
可用性高,当其中一个点出现问题时,能够及时切换,不影响业务正常运行
复杂应用解耦为小而众的服务,拆分可以基于一定的原则,将耗时的应用解耦
各服务精而专,也就是我们常说的专人干专事,映射到微服务中就是专服务干专事
服务间通信通过API完成,选择轻量的API通信
缺点(挑战)
多服务运维难度,服务的增加意味着运维的困难,如何有效的管理是一个挑战
系统部署依赖,当业务复杂是,系统之间的耦合关系高度耦合,如何高效部署是一个挑战
服务间通信成本,包括网络延迟,接口不可用性等,保证服务的高可用性是一个挑战
数据一致性,再各个服务间如何有效的共享数据,确保相应服务的数据需求一致性是一个挑战
系统集成测试,拆分后,原本需要测试的内容成倍的增加,如何高效的降低测试成本是一个挑战
重复工作,服务拆分之后,由于信息的不对称导致的重复性工作,如何有效抽象是一个挑战
性能监控,原本只需要一个监控的部分,现在需要分开监控,如何快速定位问题是一个挑战
沟通成本的成倍增加,服务拆分后,各个服务由单独的人来维护,如何高效的沟通是一个挑战