2018年12月28日
最近项目上需要通过微服务的方式进行实现,同时,我也学习查阅大量关于微服务架构的介绍,总是感觉自己已经了解了微服务架构,但有是模糊不清的,所以我最近购买了一本《微服务设计原理与架构》进行系统性的学习,在此我需要记录一下学习笔记。
什么是微服务?
所谓微服务(Microservices),就是一些具有足够小的粒度、能够相互协作且自治的服务体系。每个微服务都比较单一,仅关注完成一个具体业务功能并能很好地完成该功能,而这里的功能代表都是一种业务能力。
你是不是觉得这是什么狗屁解释,怎么这么难以理解?O(∩_∩)O哈哈~,说真的我也是一脸懵逼,所以只能耐心继续学习了。
微服务,关键在于它的“微”特性,“微”是“小”的同义词,那么微服务就是小型的服务吗?
微服务的大小:微服务一个业务独立、部署独立、数据独立的最小工作单元。
什么是单块系统?
所谓单块系统,是一个系统所涉及的各个组件都打包成一个一体化结构并进行部署和运行。在JAVA EE 领域,这种一体化结构很多时候体现为一个WAR包,而部署和运行的环境是以Tomcat为代表的各种应用服务器。
什么是分布式系统?
分布式系统,是指硬件或者软件组成分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。如图所示,该分布式系统包含分布式服务、消息中间件和分布式缓存等常见的用于构建分布式系统的技术实现方式。他们位于一个封闭或者开放的网络环境中,相互之间通过服务的注册和发现、消息传递、数据的缓存共享等机制完成协作。
在分布式系统中,为了打破单块系统中集中式的系统架构,需要引入系统拆分的思想和实践。拆分的需求来自组织结构变化、交付速度、业务需求以及技术需求所引起的変化。一般认为系统拆分的基本思路有两种,即纵向( Vertical)拆分和横向( Horizontal)拆分。
所谓纵向拆分,就是将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接 将其设计部署为一个独立的应用系统即可。如图所示,我们可以将移动医疗系统中的预 约挂号业务拆分成订单、医院和用户等独立业务子系统。纵向拆分关注于业务,通过梳理产品 线,将内聚度较高的相关业务进行剥离从而形成不同的子系统。
相对于纵向拆分的面向业务特性,横向拆分更多地关注于技术。所谓横向拆分,就是通过 将可以复用的业务拆分出来,独立部署为分布式服务,调用这些分布式服务,构建复杂的新业 务。所以,横向拆分的关键在于识别可复用的业夤,设计服务接口并拠范眼务依赖关。横向拆分的基本实现方式是构建分布式服务体系,图1-6是对图1-5所示的预约挂号业务进行横 向拆分的结果。可以看到,当我们把订单、医生、号源和用户等业务抽象成独立的垂直化服 务,并在各个服务上层实现分布式环境下的调用和管理框架,系统的业务就可以转变为一种排 列组合的构建方式。如基于订单和支付服务,我们可以构建出业务1,而业务2可能只依赖于 医院和用户管理服务。分布式服务框製提供了一利校間枚建的机・限近各个分布式服务的 故术团队、交付独立发展的前提下,确保业务整合的灵活性和高效。