(1)什么是微服务
微服务顾名思义,就是很小的服务,所以它属于面向服务架构的一种。
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通 (通常是基于 HTTP 协议的 RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。
微服务在更小的基础上,其实进一步在突显其独立性。
(2)特点
小,且专注于做一件事情; 轻量级的通信机制,松耦合、独立部署。
(3)结构
(4)微服务的优势
微服务之所以能盛行,必然是有它独特优势的。
技术异构性:在微服务架构中,每个服务都是一个相对独立的个体,每个服务都可以选择适合于自身的技术来实现。
弹性:弹性主要讲的是系统中一部分出现故障会引起多大问题。在单块系统中,一个部分出现问题,可能导致整体系统的问题。而微服务架构中,每个服务可以内置可用性的解决方案与功能降级方案,所以比单块系统强。
扩展: 单块系统中,我们要做扩展,往往是整体进行扩展。而在微服务架构中,可以针对单个服务进行扩展。
简化部署: 在大型单块系统中,即使修改一行代码,也需要重新部署整个应用系统。这种部署的影响很大、风险很高,因此不敢轻易的重新部署。而微服务架构中,每个服务的部署都是独立的,这样就可以更快地对特定部分的代码进行部署。
与组织结构相匹配: 我们都知道,团队越大越难管理,同时团队越大也代表系统规模越大代码库越大,这样容易引起一系列的问题。且当团队是分布式的时候,问题更严重。微服务架构就能很好的解决这个问题,微服务架构可以将架构与组织结构相匹配,避免出现过大的代码库,从而获得理想的团队大小及生产力。服务的所有权也可以在团队之间迁移,从而避免异地团队的出现。
可组合性:在微服务架构中,系统会开放很多接口供外部使用。当情况发生改变时,可以使用不同的方式构建应用,而整体化应用程序只能提供一个非常粗粒度的接口供外部使用.
对可替代性的优化:在单块系统中如果删除系统中的上百行代码,也许不知道会发生什么,引起什么样的问题,因为单块系统中关联性很强。但在微服务架构中,我们可以在需要时轻易的重写服务,或者删除不再使用的服务。
(5)微服务与SOA的对比
微服务 | SOA |
能拆分就拆分 | 是整体的,服务能放在一起就放在一起 |
纵向业务划分 | 水平业务划分 |
由单一组织负责 | 按层级划分不同部门的组织负责 |
细粒度 | 粗粒度 |
两句话可以解释明白 | 几百字只是SOA的目录 |
独立的子公司 | 相当于大公司划分了一些单元业务 |
组件小 | 存在较复杂的组件 |
业务逻辑存在每一个服务中 | 业务逻辑横跨多个业务领域 |
使用轻量级的通信协议,如Http | 企业服务总线(ESB)充当了服务之间通信的角色 |
微服务架构实现 | SOA实现 |
团队级,自底而上开展实施 | 企业级,自顶而下开展实施 |
一个系统被拆分成多个服务,粒度细 | 服务有多个子系统组成,粒度大 |
无集中式总线,松散的服务架构 | 企业服务总线,集中式的服务架构 |
集成方式简单(Http、Rest、JSON ) | 集成方式复杂(ESB、WS、SOAP) |
服务能独立部署 | 单块架构系统,相互依赖、部署复杂 |