1.微服务定义

微服务的架构是指:
    将单体应用程序开发为一组小型服务的方法,服务都在自己的进程中运行并通过轻量级的机制(通常是HTTP)来进行通信。
    这些服务围绕业务功能来构建,并且可以独立部署,可以使用不同语言编写,可以使用不同的存储技术。
微服务是一种架构风格

2.微服务使用时机

1.在单体应用足够大,业务功能繁杂难以管理,上线难度大的时候,可以考虑微服务架构
2.考虑充分,要权衡利弊,能有效的规避掉微服务的弊端,
    例如分布式远程调用的风险,分布式系统保持数据一致性的难度,小型服务增加的运营难度及成本。
3.准备充分后,在具体拆分的时候,应该尽量保证每次拆分出去的服务的原子性,不能影响单体应用内的其他服务。

3.微服务的概述

对于微服务的架构风格来说,有一定的共同特征,但是并不是所有微服务都具有这些特征,应该视实际情况而定
1.通过服务进行组件化(Componentization via Services):将应用程序拆分为一组小型的服务组件
    *应用程序组件化
    *组件就是可以独立替换和升级的软件单元
    *微服务架构组件化的方式是将其分解为服务(可以理解为进程外的组件)
    *使用服务作为组件的好处是服务可以独立部署
2.按业务进行构建团队(Organized around Business Capabilities):而不是以往的按技术来构建(UI团队,前端,后端,DBA,运维等)
3.微服务是一个产品,而不是一个项目(Products not Projects):传统项目在交付后就不再由开发团队来运营了,而微服务不同,开发团队应该一直负责。
    这个特征是一个新的改变,意图大概是为了完善微服务在实际运行中出现的问题。
4.智能端点和哑管道(Smart endpoints and dumb pipes):智能终端和弱通信,意思就是微服务是一个能独立处理自己的业务的一个终端,通信使用弱通信方式
    微服务是完全独立的终端服务,能很智能的处理自己的业务逻辑
    微服务通信使用弱通信,不需要ESB来转发,即去中心化
5.去中心化治理(Decentralized Governance):分散管理,不受限制,力求用最佳的方式解决问题
6.去中心化的数据管理(Decentralized Data Management):微服务独自管理自己的数据库
    分布式事务难以实现
    微服务提倡无事务的通信,实际的一致性只是最终的一致性
7.基础设施自动化(Infrastructure Automation):即自动化部署
8.容错设计(Design for failure):微服务中的断路器,就是服务出现问题,直接拉闸返回一个固定的信息
9.进化设计(Evolutionary Design):灵活使用微服务
    论文中举例说:例如一个网站的促销页面,作为一个微服务出现,在使用完后即可丢弃而不影响整体,这是微服务的更高级别的使用

4.微服务的优缺点

优点:
    模块化
    独立部署
    技术多样性(即不同的微服务可以使用不同的语言,框架及数据存储技术)
缺点:
    系统间通信问题:远程调用速度慢,而且有失败的风险
    数据一致性:难以保持强一致性,只能保持最终一致性
    运营复杂:需要一个成熟的运营团队来管理大量服务

5.SOA与微服务

定义:
    SOA(面向服务的架构):SOA架构是一个组件模型,也是将服务拆分,然后通过ESB企业服务总线来进行通信
    微服务:微服务架构是将单体应用拆分为一组服务,每个服务独立运行,通信通过轻量级的机制来进行
区别:
    1.通信:微服务没有使用ESB,使用Http(REST API)进行轻量化通信
    2.架构拆分:微服务强调按业务拆分(垂直拆分),SOA强调水平拆分(前端,后端,数据库等)
    3.部署:微服务是独立部署互不影响,SOA实际还是部署在同一进程中
    4.范围:SOA是应用于整个企业,微服务是应用于整个应用

SOA架构与微服务架构示例图如下:

微服务平滑重启 微服务运行_组件化