#author("2022-12-20T14:44:58+08:00","default:Admin","Admin") #author("2022-12-20T14:45:14+08:00","default:Admin","Admin") [[Microservice]] #contents 三大阶段,单体到SOA,再到微服务 * 微服务的定义 [#xb837bce] - 微服务架构模式 - Microservice - Dr. Peter Rodgers2005 Cloud Computing Expo技术大会上提出概念 - 2007, Netflix开始向微服务架构师进发, - 并最终开源了自己研发的Java微服务框架 - 开源社区命名为Spring Cloud - 微服务是一种新型的 软件架构风格 - 把单个巨型服务应用,分解为多个独立的、微小的服务程序 - 单独部署 - 单独伸缩 - 去中心化:数据中心、管理中心 - 敏捷性、灵活性、需求变化,更加高效的软件架构模式 * 微小的服务 [#a47dd47e] - 微服务架构:将单个应用拆分成多个独立的、微小的服务。 - 每个小服务程序运行在独立的进程中。 - 服务与服务之间通过轻量协议通信。 - 通信机制互相协作、互相配合,从而为终端用户提供业务价值。 - 每个小服务,可以采用不同的语言、框架、工具 独立开发、测试、部署、运维。 - 微服务:独立的小服务。 *架构特点 [#z4def98e] ** 通过服务实现组件化 [#t895d973] 开发者不再需要协调其它服务部署对本服务的影响。 ** 按业务能力来划分服务和开发团队 [#qa197e73] 开发者可以自由选择开发技术,提供 API 服务 ** 去中心化 [#f75aacd2] - 每个微服务有自己私有的数据库持久化业务数据 - 每个微服务只能访问自己的数据库,而不能访问其它服务的数据库 - 某些业务场景下,需要在一个事务中更新多个数据库。这种情况也不能直接访问其它微服务的数据库,而是通过对于微服务进行操作。 - 数据的去中心化,进一步降低了微服务之间的耦合度,不同服务可以采用不同的数据库技术(SQL、NoSQL等)。在复杂的业务场景下,如果包含多个微服务,通常在客户端或者中间层(网关)处理。 ** 基础设施自动化(devops、自动化部署) [#t5ef2c4e] Java EE部署架构,通过展现层打包WARs,业务层划分到JARs最后部署为EAR一个大包,而微服务则打开了这个黑盒子,把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能实现集中化管理(因为服务太多啦,不集中管理就无法DevOps啦)。 #hr(); Comment: #comment_kcaptcha