微服务架构-什么是微服务?

Posted 栀子花开CO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务架构-什么是微服务?相关的知识,希望对你有一定的参考价值。

解析微服务架构系列文章将分几篇描述微服务的定义、特点、应用场景、企业集成架构的演进以及微服务转型思路和技术决策考虑等内容,并以IBM技术为例介绍如何实现微服务架构转型

1.为什么需要微服务架构?

 a.使用传统的整体式架构(Monolithic Architecture)应用开发系统,如CRM、ERP等大型应用,随着新需求的不断增加,企业更新和修复大型整体式应用变得越来越困难

 b.随着移动互联网的发展,企业被迫将其应用迁移至现代化UI界面架构以便能兼容移动设备,这要求企业能实现应用功能的快速上线

 c.许多企业在SOA投资中得到的回报有限,SOA可以通过标准化服务接口实现能力的重用,但对于快速变化的需求,受到整体式应用的限制,有时候显得力不从心

 d.随着应用云化的日益普及,生于云端的应用具有与传统IT不同的技术基因和开发运维模式

 e.此外,从技术方面看,云计算及互联网公

司大量开源轻量级技术不停涌现并日渐成熟,主要有以下几点

  ① 互联网/内联网/网络更加成熟;

  ② 轻量级运行时技术的出现(node.js, WAS Liberty等);

  ③ 新的方法与工具(Agile, DevOps, TDD, CI, XP, Puppet, Chef…);

  ④ 新的轻量级协议(RESTful API接口, 轻量级消息机制)

  ⑤ 简化的基础设施:操作系统虚拟化(hypervisors), 容器化(e.g. Docker), 基础设施即服务 (IaaS), 工作负载虚拟化(Kubernetes,Spark…);          

   ⑥ 服务平台化(PaaS): 云服务平台上具有自动缩放、工作负载管理、SLA 管理、消息机制、缓存、构建管理等各种按需使用的服

  ⑦ 新的可替代数据持久化模型:如NoSQL, MapReduce, BASE, CQRS等;

  ⑧ 标准化代码管理:如Github等。

以上这一切都催生了新的架构设计风格 – 微服务架构的出现。

2.什么是微服务?

 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能

 微服务的概念源于2014年3月Martin Fowler所写的一篇文章“Microservices”(http://martinfowler.com/articles/microservices.html)

 尽管“微服务”这种架构风格没有精确的定义,但其具有一些共同的特性,如围绕业务能力组织服务、自动化部署、智能端点、对语言及数据的“去集中化”控制等

 微服务架构的思考是从与整体应用对比而产生

其中,对应用组件封装的方式是整体架构与微服务架构的主要差异,微服务架构将相关联的业务逻辑及数据放在一起形成独立的边界,其目的是能在不影响其他应用组件(微服务)的情况下更快地交付并推出市

微服务架构-什么是微服务?

3.微服务架构的一些通用特性

 a.通过服务实现应用的组件化(Componentizationvia Services):微服务架构中将组件定义为可被独立替换和升级的软件单元,在应用架构设计中通过将整体应用切分成可独立部署及升级的微服务方式进行组件化设计

 b.围绕业务能力组织服务(Organizedaround Business Capabilities):微服务架构采取以业务能力为出发点组织服务的策略,因此微服务团队的组织结构必须是跨功能的(如:既管应用,也管数据库)、强搭配的DevOps开发运维一体化团队,通常这些团队不会太大(如:亚马逊的“Two pizzateam”- 不超过12人)。

 

微服务架构-什么是微服务?

  c.产品而非项目模式(Productsnot Projects):传统的应用模式是一个团队以项目模式开发完整的应用,开发完成后就交付给运维团队负责维护;微服务架构则倡导一个团队应该如开发产品般负责一个“微服务”完整的生命周期,倡导“谁开发,谁运营”的开发运维一体化方法

d.智能端点与管道扁平化(Smartendpoints and dumb pipes):微服务架构主张将组件间通讯的相关业务逻辑/智能放在组件端点侧而非放在通讯组件中,通讯机制或组件应该尽量简单及松耦合。RESTful HTTP协议和仅提供消息路由功能的轻量级异步机制是微服务架构中最常用的通讯机制

 e.“去中心化”治理(DecentralizedGovernance):整体式应用往往倾向于采用单一技术平台,微服务架构则鼓励使用合适的工具完成各自的任务,每个微服务可以考虑选用最佳工具完成(如不同的编程语言)。微服务的技术标准倾向于寻找其他开发者已成功验证解决类似问题的技术

 f.“去中心化”数据管理(DecentralizedData Management):微服务架构倡导采用多样性持久化(PolyglotPersistence)的方法,让每个微服务管理其自有数据库,并允许不同微服务采用不同的数据持久化技术

 g.基础设施自动化(InfrastructureAutomation):云化及自动化部署等技术极大地降低了微服务构建、部署和运维的难度,通过应用持续集成和持续交付等方法有助于达到加速推出市场的目的

 h.故障处理设计(Designfor failure):微服务架构所带来的一个后果是必须考虑每个服务的失败容错机制。因此,微服务非常重视建立架构及业务相关指标的实时监控和日志机制

4.微服务的一些常见误解

 


关于一些比较概念的澄清:

1.在同一范畴内比较才有意义:

微服务架构 VS SOA - 两者都是架构风格范畴,但其关注领域与涉及范围不同。SOA更关注企业规模范围,微服务架构则更关注应用规模范

微服务组件 VS 服务组件 – 两者都是描述业务功能的具体实现,其区别在于粒度不同,此外还有在可管理性、灵活性上的差异

2.概念混淆的不恰当比较:

微服务 VS SOA – 不恰当的微服务是组件范畴,而SOA是一种架构设计风格。因此应该比较的是微服务架构与SOA

微服务 VS API – 不恰当的比较。API是接口,是业务功能暴露的一种机制。微服务架构是用于实施业务功能的组件架构。因此直接比较它们是没有意义的

微服务 VS 服务– 不恰当的。“服务”在不同的场景下有不同的含义,需要进一步澄清其描述的语境,是指服务实施、服务暴露、服务定义还是其他?微服务亦是如此,需要有特定语境才可判断比较是否有意

微服务架构与SOA架构的比较


关于微服务架构的取舍

1.在合适的项目,合适的团队,采用微服务架构收益会大于成本

2.微服务架构有很多吸引人的地方,但在拥抱微服务之前,也需要认清它所带来的挑

3.需要避免为了“微服务”而“微服务”。

4.微服务架构引入策略 – 对传统企业而言,开始时可以考虑引入部分合适的微服务架构原则对已有系统进行改造或新建微服务应用,逐步探索及积累微服务架构经验,而非全盘实施微服务架


以上是关于微服务架构-什么是微服务?的主要内容,如果未能解决你的问题,请参考以下文章

什么是微服务架构啊?

什么是微服务架构?主流的微服务如何实现?

微服务架构-什么是微服务?

一篇故事告诉你什么是微服务架构!

面试官:谈谈什么是微服务架构?

微服务:什么是微服务架构?