1、微服务架构 起源、简介及设计独立架构师 唐伟佳目录目录微服务架构起源1微服务与关联理论2微服务架构介绍3微服务应用及平台设计4微服务相关技术5企业架构企业架构企业架构是指对企业信息管理系统中具有体系的、普遍性的问题而提供的通用解决方案,是基于业务导向和驱动的架构来理解、分析、设计、构建、集成、扩展、运行和管理信息系统。企业架构如同战略规划,可以辅助企业完成业务及IT战略规划。业务架构:是把企业的业务战略转化为日常运作的渠道,业务战略决定业务架构,它包括业务的运营模式、流程体系、组织结构、地域分布等内容IT架构:指导IT投资和设计决策的IT框架,是建立企业信息系统的综合蓝图,包括数据架构、应用架
2、构和技术架构三部分。TOGAF架构架构TOGAF 由国际标准权威组织TheOpenGroup制定。1993年开始应客户要求制定系统架构的标准,在1995年发表(TOGAF)架构框架。TOGAF的基础是美国国防部的信息管理技术架构,是基于一个迭代的过程模型,支持最佳实践和一套可重用的现有架构资产。它可设计、评估、并建立组织的正确架构。企业架构方法有很多,但TOGAF是最主流的。TOGAF产出物产出物TOGAF产出物产出物微服务架构起源微服务架构起源-企业转型企业转型传统企业的IT建设需要转型,需要面向外部客户,需要应对外部环境的快速变化、需要快速创新,IT架构也需要向互联网企业学习作出相应的改进
3、,来支撑企业的数字化转型。先是单块架构,后来为了具备一定的扩展和可靠性,就有了垂直架构,也就是加了个负载均衡,接下来是SOA,解决应用系统之间如何集成和互通,微服务架构则是进一步在探讨一个应用系统该如何设计才能够更好的开发、管理更加灵活高效。微服务架构起源微服务架构起源-问题问题微服务起源微服务起源-愿景愿景象更换零件一样更换软件微服务架构起源微服务架构起源-技术基础技术基础微服务是在应用技术栈范畴,跟其他的应用技术一样都是具有系统分析、建模的能力,并不是一个纯粹的框架或技术,而是一个综合性的架构模式。微服务是进化出来的。“解释一个概念需要用另外几个概念来解释,但是解释另外几个概念还需要其他概
4、念来解释”,所以要聚焦领域,每个领域都是深不见底,都有他的知识体系,都有他的技术栈。微服务架构起源微服务架构起源-技术基础技术基础技术具体讲就是分析、设计、建模,落地实施方法。包括几个重量级的技术体系:TOGAF企业信息架构框架DDD领域驱动设计SOA面向服务架构GRASP通用软件职责设计模式彩色建模四色原型模式GRASP主要是辅助职责设计,四色原型主要是捕捉实体的事件发生序列,不会让你丢失关键业务场景。微服务与微服务与DDD英文名字:DomainDrivenDesign。中文名字:领域驱动设计。概述:DDD是一种以领域为核心的设计和开发理念。DDD通过维护一个深度反应领域概念的模型,以及提供
5、了可行的经过实践检验的大量模式来应对领域的复杂性,偏向代码实现的(领域)对象微服务与微服务与DDD 领域模型既不是脱离代码实现的纯粹业务对象描述,更不是一一对应代码里的表或者对象。注意以下几点:1.领域模型是精简的业务知识,所有权是业务代表而不是技术代表2.领域模型的目的是构建业务需求和技术实现之间的桥梁,和传统的buttom-up软件开发模式相比,是一种up-buttom自上而下的开发模式,可以避免需求偏离,因为一开始就是从业务需求出发去构建模型,再参照模型去实现。3.领域模型是用来解构业务真实需求,可以理解成认识业务的一种方法论,领域模型的作用是构建一种共同语言,业务代表和技术代表在模型上
6、沟通。4.领域模型是不断迭代进化的,随需求迭代,业务变更而不断演进。5.好的领域模型可以直接反应软件是做什么用的。DDD是一种软件开发模式,目的是为了解构复杂的业务需求,降低不同工种间的沟通障碍,实现结构清晰、可复用、易维护的软件。微服务与微服务与GRASPGRASP是GeneralResponsibilityAssignmentSoftwarePatterns(通用职责分配软件模式)的简称,它的核心思想“职责分配”。GRASP的主要特征:对象职责分配的基本原则。主要应用在分析和建模上。GRASP的核心思想:自己干自己的事(职责的分配)自己干自己的能干的事(职责的分配)自己只干自己的事(职责的
7、内聚)如何把现实世界的业务功能抽象成对象,如何决定一个系统有多少对象,每个对象都包括什么职责,GRASP模式给出了最基本的指导原则。微服务与微服务与GRASP基本原则给对象分配职责的基本原则是什么?假设系统中存在一个类A,那么在这个系统中,谁应该负责创建类A的新实例?信息信息专家家怎样保持对象是有重点的、可理解的、可管理的,并且能够支持低耦合?创建者建者怎样降低依赖性,减少变化带来的影响,提高重用性?高内聚高内聚在UI层之上首先接收和协调(控制)系统操作的第一个对象是什么?低耦合低耦合如何处理基于类型的选择?如何创建可插拔的软件构件?控制者控制者当你并不想违背高内聚和低耦合或其他目标,但是基于
8、专家模式所提供的方案又不合适时,哪些对象应该承担这一职责?多多态为了避免两个或多个事务之间直接耦合,应该如何分配职责?如何使对象解耦合,以支持低耦合并提高复用性潜力?纯虚构虚构如何设计对象、子系统和系统,使其内部的变化或不稳定性不会对其他元素产生不良影响?间接性接性变化化预防防微服务与微服务与RUP微服务与彩色建模微服务与彩色建模Peter Coad认为,领域模型由以下组成:v粉红:代表“瞬间事件”(Moment-Inteval)v黄色:代表“角色”(Role)v绿色:代表“人-物-地点”(Party-Place-Thing)v蓝色:代表“描述”(Description)微服务与微服务与SOA
9、SOA产生的背景:IT建设以部门级为主,业务流程与数据局限于部门内部竖井应用:不同应用、不同厂商,会形成不同的数据结构、不同的实现从关注部门需求到关注企业需求,需要部门间数据共享/业务共享/客户共享组织与业务流程频繁变化SOA解决的问题:信息孤岛互联互通业务重用微服务与微服务与SOASOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、XML/WebService技术之后的自然延伸。SOA将能够帮助软件工程师们站在新的高度理解企业级架构中的各种组件的开发、部署形式SOA帮助企业系统架构者以更迅速、更可靠、更具重用性
10、架构整个业务系统。SOA能够更加从容地面对业务的急剧变化。微服务与微服务与SOASOA和微服务的区别:u微服务不再强调传统SOA架构里面比较重的ESB企业服务总线uSOA的思想进入到单个业务系统内部实现真正的组件化SOA和微服务的共同点:u服务化u敏捷快速VS微服务与微服务与SOA框架区别框架区别微服务架构定义微服务架构定义微服务架构内涵微服务架构内涵组件:可被独立替件:可被独立替换和升和升级的的软件件单元元 组件件间定定义清晰、清晰、组件内与件内与语言无关言无关 独立开独立开发、独立、独立测试、独立部署、独立、独立部署、独立扩展展 面向面向业务,以减少跨,以减少跨团队协作与沟通作与沟通跨功能
11、跨功能团队(既管(既管业务,又管数据),又管数据)开开发-运运维一体的一体的DevOps团队是由服是由服务组件件组成的系成的系统 按照按照业务而而不是技不是技术来来组织服服务 微服务架构内涵微服务架构内涵做全生命周期的做全生命周期的产品而不是品而不是项目目 不是完成开不是完成开发就交就交给运运维的的项目式目式组织形式形式 谁开开发、谁运运营(You build,you run it.)智能端点与通道扁平化智能端点与通道扁平化 强化化终端而弱化通道端而弱化通道 组件件间的通的通讯机制更加松耦合而高内聚机制更加松耦合而高内聚 RESTful HTTP协议和和仅提供消息路由功能的提供消息路由功能的轻
12、 量量级异步机制,异步机制,是微服是微服务架构常用通架构常用通讯机制机制微服务架构内涵微服务架构内涵去中心化治去中心化治理理 不必采用不必采用统一的一的语义与技与技术 每个微服每个微服务可以考可以考虑选用最佳工具去完成用最佳工具去完成去中心化数去中心化数据管理据管理 分散存分散存储与与业务数据自治数据自治 倡倡导多多样性持久化,采用不同的技性持久化,采用不同的技术存存储微服务架构内涵微服务架构内涵自自动化运化运维(DevOps)自自动化构建、化构建、自自动化部署、化部署、弹性性扩展展 故障恢复与故障恢复与容容错 熔断机制、自熔断机制、自动化化监控控/告告警、日志警、日志审计 演化式演化式设计
13、不断地不断地应对业务的的变更更 不断地适不断地适应技技术的更迭的更迭微服务架构好处微服务架构好处是每个微服务组件都是简单灵活的,能够独立部署。应用不需要一个庞大的应用服务器来支撑。可以由一个小团队负责更专注专业,相应的也就更高效可靠。微服务之间是松耦合的,微服务内部是高内聚的,每个微服务很容易按需扩展。微服务架构与语言工具无关,自由选择合适的语言和工具,高效的完成业务目标即可。微服务架构示例微服务架构示例微服务应用设计原则微服务应用设计原则微服务应用设计原则微服务应用设计原则微服务应用设计原则微服务应用设计原则微服务应用设计原则微服务应用设计原则微服务应用设计原则微服务应用设计原则微服务平台微
14、服务平台-企业企业IT基础基础DevOps:负责从需求到计划任务,团队协作,再到质量管理、持续集成和发布。个人基础环境:即微服务应用平台,他的目标主要就是要支撑微服务应用的设计开发测试,运行期的业务数据处理和应用的管理监控。IT基础设施:各种运行环境支撑如IaaS(VM虚拟化)和CaaS(容器虚拟化)等实现方式。微服务应用平台目标微服务应用平台目标微服务平台的主要目标主要就是要支撑微服务应用的全生命周期管理,从需求到设计开发测试,运行期的业务数据处理和应用的管理监控等。微服务应用平台总体架构微服务应用平台总体架构开发集成:微服务平台需要具备的一些工具和仓库运行时:微服务平台的基础能力和分布式的
15、支撑能力,微服务运行容器运行在这个平台之上。监控治理:对受管的微服务进行统一的监控、配置等能力。服务网关:负责与前端的WEB应用移动APP等渠道集成,对前端请求进行认真鉴权,然后路由转发。微服务应用平台运行架构微服务应用平台运行架构微服务带来的问题微服务带来的问题关键问题关键问题-服务注册和路由服务注册和路由服务在启动的时候,会将自己要发布的服务注册到服务注册中心,运行时,如果需要调用其他微服务的接口,本地缓存或到注册中心获取服务提供者的地址,获得地址后,通过微服务容器内部的负载均衡进行路由调用。关键问题关键问题-安全认证安全认证安全认证方面,可以基于SpringSecurity结合Auth2
16、再加上JWT(Jsonwebtoken)做安全令牌,实现统一的安全认证与鉴权,使得微服务之间能够按需隔离和安全互通。认证鉴权一定是个公共服务,而不是多个系统各自建设。关键问题关键问题-集中配置集中配置配置文件主要有静态配置和动态配置两种。静态配置通常是在编译部署包之前设置好。动态配置则是系统运行过程中需要调整的系统变量或者业务参数。通过制定规范控制配置与介质分离,配置不要放在Jar包里。配置的方式要统一,格式、读写方式、变更热更新的模式尽量统一,要采用统一的配置框架需要有个配置中心来统一管理业务系统中的配置信息。关键问题关键问题-分布式事分布式事务微服务架构的系统下,进程成倍增多,分布式事务一
17、致性的问题更加明显。微服务之间是独立的、调用协议也是无状态的,要解决的是一定时间后的数据达到最终一致状态,一般采用传统的业务补偿与冲正方式。可靠事件模式:即事件的发送和接收保障高可靠性,来实现事务的一致性。补偿模式:ConfirmCancel,如果确认失败,则全部逆序取消。TCC模式:TryConfirmCancel,补偿模式的一种特殊实现通常转账类交易会采用这种模式。关键问题关键问题-同步调用同步调用微服务架构下,相对于传统部署方式,存在更多的分布式调用,“如何在不确定的环境中交付确定的服务”,可以理解为,我所依赖的服务的可靠性是无法保证的情况下,我如何保证自己能够正常的提供服务,不被我依赖
18、的其他服务拖垮?关键问题关键问题-同步调用同步调用SEDA:stagedevent-drivenarchitecture本质上就是采用分布式事件驱动的模式,用异步模拟来同步,无阻塞等待,再加上资源分配隔离结起来的一个解决方案。微服务相关技术微服务相关技术-dubboDubbo(开源分布式服务框架),阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,主要核心部件:Remoting:网络通信框架,实现了sync-over-async和Logorequest-response消息机制.RPC:一个远程过程调用的抽象,支持负载均衡、容灾和集群功能 Reg
19、istry:服务目录框架用于服务的注册和服务事件发布和订阅微服务相关技术微服务相关技术-Spring Cloud SpringCloud是一系列框架的有序集合:利用SpringBoot的开发便利性,简化了分布式系统基础设施的开发。SpringCloudEureka是SpringCloudNetflix的一部分,它基于NetflixEureka做了二次封装,完成微服务架构中的服务治理功能SpringCloudNetflix是对Netflix分布式服务开发框架的封装,包括服务发现和注册、负载均衡、断路器、REST客户端、请求路由等SpringCloudZookeeper对Zookeeper的封装,
20、使之能配合其它SpringCloud项目使用,一般当作注册中心SpringCloudBus分布式消息队列,是对KafkaMQ的封装,实现可靠消息SpringCloudConfig将配置信息中央化保存SpringCloudSecurity对SpringSecurity的封装,实现服务安全等微服务相关技术微服务相关技术-dockerDocker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker通常用于如下场景:使应用的打包与部署自动化创建轻量、私密的PAAS环境实现自动化测试和持续的集成/部署部署与扩展webapp、数据库和后台服务微服务相关技术微服务相关技术-jenkinsJenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins功能包括:1、持续的软件版本发布/测试项目。2、监控外部调用执行的工作。