1、什么是微服务? 在讲微服务之前,先理解以下什么是服务化。服务化就是将传统的单体应用中通过jar包依赖产生的本地方法调用,改成通过RPC接口产生的远程方法调用。就比如一个系统有内容、订单、用户三个模块。其中订单模块依赖内容模块,订单模块和内容模块又都依赖用户模块。当这三个模块的代码耦合在一起,应用启动时,需要同时去加载每个模块的代码并连接对应的资源。一旦任何模块的代码出现bug,或者依赖的资源出现问题,整个单体应用都会受到影响。为此,首先可以把用户模块从单体应用中拆分出来,独立成一个服务部署,以RPC接口的形式对外提供服务。内容和订单模块调用用户接口,就从进程内的调用变成远程RPC调用。这样,用户模块就可以独立开发、测试、上线和运维,可以交由专门的团队来做,与主模块不耦合。进一步的可以再把消息模块也拆分出来作为独立的模块,交由专门的团队来开发和维护。 可见通过服务化,可以解决单体应用膨胀、团队开发耦合度高、协作效率低下的问题。 微服务可以总结为以下四点: 1)服务拆分粒度更细 微服务可以说是更细维度的服务化,小到一个子模块,只要该模块依赖的资源与 其他模块都没有关系,那么就可以拆分为一个微服务。 2)服务独立部署 每个微服务都严格遵循独立打包部署的准则,互不影响。比如一台物理机上可以 部署多个Docker实例,每个Docker实例可以部署一个微服务的代码。 3)服务独立维护 每个微服务都可以交由一个小团队甚至个人来开发、测试、发布和运维,并对整 个生命周期负责。 4)服务治理能力要求高 因为拆分为微服务之后,服务的数量变多,因此需要有统一的服务治理平台,来 对各个服务进行管理。 其实相比单体应用,本质的改变就是从进程内调用转换成了远程RPC调用。单体应用的部署效率低下,团队协作成本高,系统高可用性差,微服务可以很好的弥补这些。