Bootstrap

微服务框架理解

参考链接:https://baijiahao.baidu.com/s?id=1609470628776404706&wfr=spider&for=pc
https://blog.csdn.net/varyall/article/details/78905332
https://www.cnblogs.com/wintersun/p/6219259.html
什么是微服务?
微服务,又叫微服务架构,是一种软件架构方式。它将应用构建成一系列按业务领域划分模块的、小的自治服务。
在微服务架构中,每个服务都是自我包含的,并且实现了单一的业务功能。

微服务架构
● 来自不同设备的不同客户,会尝试使用不用的服务,比如搜索、构建、配置和其他的管理功能。
● 基于服务的领域和功能,这些服务被分离了,并且被分配给了单独的微服务。
● 这些微服务有它们自己的负载均衡器、专有的执行环境,同时还能在它们自己的数据库中获取数据。
● 微服务间彼此的通信是通过一个无状态的服务器进行的,这个服务器要么是REST的,要么就是一个消息总线。
● 借助“服务发现”,微服务可以知道它们通信的路径,并发挥工作能力,比如自动化、监控等。
● 这些由微服务执行的功能通过API网关传达给了客户。
● 所有内部节点都被连接到了API网关,因此,所有连接到API网关的用户都会自动连接到这个完整的系统。

微服务的特点
● 解耦:同一系统内的服务大部分可以被解耦。因此应用,作为一个整体,可以轻易地被构建、修改和扩展。
● 组件化:微服务可以被看成相互独立的组件,这些组件可以被轻易地替换和升级。
● 业务能力:微服务很小,它们可以专注于某种单一的能力
● 自治:开发者和团队可以独立地工作,提高开发速度。
● 持续交付:允许持续发布软件新版本,通过系统化的自动手段来创建、测试和批准新版本。
● 职责明确:微服务不把应用看成一个又一个的项目。相反,它们把应用当成了自己需要负责的项目。
● 去中心化管理:关注于使用正确的工具来完成正确的工作。这也就是说,没有标准化的方式或者技术模式。开发者们有权选择最好的工具来解决问题。
● 敏捷性:微服务支持敏捷开发。任何新功能都可以被快速开发或丢弃。

微服务架构的优势
● 独立开发:基于各个微服务所独有的功能,它们可以被轻易开发出来。
● 独立部署:基于它们所提供的服务,它们可以被独立地部署到应用中。
● 错误隔离:即便其中某个服务发生了故障,整个系统还可以继续工作。
● 混合技术栈:可以使用不同的语言和技术来为同一个应用构建不同的服务。
● 按粒度扩展:可以根据需求扩展某一个组件,不需要将所有组件全部扩展。

微服务的缺点
● 单个微服务代码量小,易修改和维护。但是,系统复杂度的总量是不变的,每个服务代码少了,但服务的个数肯定就多了。就跟拼图游戏一样,切的越碎,越难拼出整幅图。一个系统被拆分成零碎的微服务,最后要集成为一个完整的系统,其复杂度肯定比大块的功能集成要高很多。
● 单个微服务数据独立,可独立部署和运行。虽然微服务本身是可以独立部署和运行的,但仍然避免不了业务上的你来我往,这就涉及到要对外通信,当微服务的数量达到一定量级的时候,如何提供一个高效的集群通信机制成为一个问题。
● 单个微服务拥有自己的进程,进程本身就可以动态的启停,为无缝升级的打好了基础,但谁来启动和停止进程,什么时机,选择在哪台设备上做这件事情才是无缝升级的关键。这个能力并不是微服务本身提供的,而是需要背后强大的版本管理和部署能力。
● 多个相同的微服务可以做负载均衡,提高性能和可靠性。正是因为相同微服务可以有多个不同实例,让服务按需动态伸缩成为可能,在高峰期可以启动更多的相同的微服务实例为更多用户服务,以此提高响应速度。同时这种机制也提供了高可靠性,在某个微服务故障后,其他相同的微服务可以接替其工作,对外表现为某个设备故障后业务不中断。同样的道理,微服务本身是不会去关心系统负载的,那么什么时候应该启动更多的微服务,多个微服务的流量应该如何调度和分发,这背后也有一套复杂的负载监控和均衡的系统在起作用。
微服务可以独立部署和对外提供服务,微服务的业务上线和下线是动态的,当一个新的微服务上线时,用户是如何访问到这种新的服务?这就需要有一个统一的入口,新的服务可以动态的注册到这个入口上,用户每次访问时可以从这个入口拿到系统所有服务的访问地址。这个统一的系统入口并不是微服务本身的一部分,所以这种能力需要系统单独提供。
●还有一些企业级关注的系统问题,比如,安全策略如何集中管理?系统故障如何快速审计和跟踪到具体服务?整个系统状态如何监控?服务之间的依赖关系如何管理?等等这些问题都不是单个微服务考虑的范畴,而需要有一个系统性的考虑和设计,让每个微服务都能够按照系统性的要求和约束提供对应的安全性,可靠性,可维护性的能力。

也看了好多关于微服务的介绍,我的理解的就是将整体功能化整为零。每个模块单一的功能比较单一,多个模块进行组合。如果说单体架构是一个功能齐全的瑞士军刀,那么微服务就是一堆功能单一的小工具。灵活度以及生存能力提高了,但需要有一个工具对这群工具进行集中管理(工具箱)。

SOA架构和微服务架构区别
https://blog.csdn.net/zpoison/article/details/80729052

;