最近对微服务的学习和应用,在此整理出来一些自己的理解,望与君共勉。
微服务的定义
微服务是一种架构风格,其理念是把一个系统定义成多个微服务组成,每个服务都只关心自己的业务,而且很好的完成一件事情,微服务与微服务之间相互独立,互相不影响。这种思想延续了java高类聚的原则,每个类只负责完成自己的业务。
微服务的演变
单体架构
传统的项目是以一个整体的方式呈现,整个系统打成一个jar包部署,这样的结构会毋庸置疑会存在一些问题。一是开发,所有的开发人员在一个项目上开发,一是增加了复杂度,二是加大了代码的管理成本。其次是部署,不管是多小的改动都需要整个项目上传更新,这无疑加大了更新的工作量,然后是稳定性,如果功能出现问题,很有可能影响到整个系统阻塞。
SOA服务治理
SOA(Service Oriented Architecture)面向服务的架构,这是一种架构的设计理念,其核心思想就是把整个系统的业务模块和功能中心拆分成独立的服务,比如常见的业务订单服务,功能消息推送功能。每个服务相互独立,服务与服务之间通过网络互相调用。其设计沿用的是低耦合,高类聚的思想。
RPC(Remote Procedure call)远程服务调用,既然设计到服务与服务之间的调用,他还有一个作用就是解决了让远程调用时像本地调用一样方便,让作者感知不到远程调用的逻辑。其核心理念是通过反向代理然后注入一个对象给调用着,这样调用着就这样直接使用服务提供方的方法了。
微服务
微服务是将复杂的系统拆分成很多个小的业务系统,这里我们称这些小的业务系统为组件,也就是微服务。组件,相比于传统系统,以代码库的形式调用,微服务把组件以服务的形式提供远程调用。微服务,强调的是更细粒度的拆分,更精细的拆分更加方便解耦和复用,是系统更清晰,更容易维护。微服务,强调的是更独立,独立的数据库,独立部署,独立运行,这使得微服务的应用更加灵活和快速。
REST是一种软件架构风格,可以提高系统的伸缩性,降低开发的复杂度。如果一个系统能满足REST的这几个条件,那么就是Restful 风格。它以资源为中心,名称是资源地址,动词则表示对资源的操作,所有Rest使用的是http协议。相比于RPC 关注于方法的调用,但是RPC支持多种协议,从效率上来说高于http。
解决什么问题
开发维护:把业务分成很小的服务,每个服务都相互独立,这样一是耦合低,结构清晰。不管是编码人员还是维护人员都只需要关注自己负责的服务。
负载均衡:服务最小化有个好处毋庸置疑就是负载,在现在的互联网项目,为了承受大的流量,会用负载的方式来增加服务器的配置和数量。有人说如果传统项目用集群的方式也能实现负载,但是如果以微服务的方式可以更有针对性,更精确的扩容,节约资源。比如订单模块的压力比较大,我就只需要为订单服务增加服务器,而不需要真个系统都增加。
版本迭代:微服务的设计让偶和最低化,实现分而治之。在版本迭代的时候,只需要更新有变动的服务,而不需要整个模块更新。这使得迭代工作更加快速,便捷。
稳定性:既然版本迭代可以分开来实现,这样在宏观上来说多整个系统的稳定性是有好处的。就算是测试不到位,发现bug,这样也只会影响更新的模块,而不会导致整个系统的阻塞,雪崩。比如购物车模块出问题不会影响用户下单功能。
作者:把代码写成诗
版权所有,转载请注明出处
欢迎关注,沟通交流 https://github.com/githubweili
网友评论