什么是微服务:
它的主旨就是将一个原本独立的系统差分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务间通过各种通讯协议来进行相互通信协作。
每个拆分的小型服务都围绕系统中的某一项或一些耦合度搞的业务功能进行构建,并且每个服务都维护自身的数据存储,业务开发,测试以及独立部署。
与单体系统区别:
单体项目随着企业的发展,系统变得越来越庞大业务模块增多。他们都在一个进程内,往往如果我们改一个小功能,为了部署上线会影响其他功能的运行。并且单应用中,不同业务模块消耗的资源不同,对于资源的利用相互影响,这样就会使得我们队各业务模块的系统容量难以评估,越到后,维护成本越来越大难以控制。
微服务将不同的功能模块拆分成多个不同的服务,这些服务都能够独立部署和拓展。所有各个模块之间的资源不会相互影响。通过配合服务间协作流程更容易发现系统的
构建时候需要考虑的重要因素:网络延迟,分布式服务,异步消息等
服务组件化:
1)组件是什么
组件是一个可以独立更换和升级的单元。就像PC的CPU,内存一样独立升级不会 影响其他的单元
2)什么是服务:
服务是进程外的组件,他通过网络通信协议进行协作,而不是像传荣组件那样嵌入的方法协同工作。每个服务都独立开发,部署可以避免一个服务修改整个系统重新部署。
在微服务中常用的通信协议:
1)使用HTTP的RESTful API或轻量级的消息发送协议,实现消息传递和服务调用的触发
2)通过在轻量级消息总线上传递消息,类似的RabbitMQ等一些提供可靠一部交换的中间件
为什么不适用RPC协议:因为会导致微服务之间产生繁琐的通信,使得系统表现更为糟糕。
微服务更加要求各个服务之间是“无事务”调用,对于数据一致性,数据在最好处理状态是一致的即可。若过程中发现错误,通过补偿机制来进行处理使得错误数据达到一致性。
<dependency>
<groupId> org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
这个包可以对模块根据应用依赖和配置自动创建出来的监控和管理端点。实现获取各项监控指标
原生端点可以分为三类:
1.应用配置类:获取程序加载的应用配置,环境变量,自动化配置报名等与Spring Boot相关 的配置类信息
2.质量指标类:程序运行过程中监控质量指标。eg:内存信息,线程池
3.操作控制类:提供了对应用的关闭等操作类功能
参考书目:spring cloud微服务实战
PS:如果有什么不正确的欢迎指正