一、基础篇
1、对于功能集中、代码中心化、一个发布包、部署后运行在同一进程的应用程序称之为单块架构应用。
2、单块架构的优势:1)易于开发;2)易于测试;3)易于部署;4)易于水平伸缩
3、单块架构面临的挑战:1)维护成本增加;2)持续交付周期长;3)新人培养周期长;4)技术选型成本高;5)可扩展性差(垂直扩展、水平扩展);6)构建全功能团队难
4、微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于RESTful的API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。
注:应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。
5、将复杂的应用分解成小而专一、耦合度低并且高度自治的一组服务。
6、微所表达的是一种设计思想和指导方针,是需要团队或者组织共同努力找到的一个平衡点。有两个基本前提:业务独立性和团队自主性。
7、轻量级通信机制:通常指语言无关、平台无关的交互方式。
注:1)REST是实现服务之间互相协作的轻量级通信机制之一
2)RPC对语言或者平台有较强的耦合性,同时灵活性和扩展性较差
8、Docker是一个开源的应用容器引擎,允许开发者将他们的应用以及依赖打包到一个可移植的容器中,然后发布到任何装有Docker的Linux机器上。
9、Docker的优势:
1)使用一个标准的镜像来构建镜像,开发完成之后,直接使用这个镜像来部署
2)Docker容器可以在任意平台上运行,包括物理机、虚拟机、公有云、私有云等
3)所有镜像的修改都能以增量的方式被分发和更新
10、SOA与微服务的区别:
1)前者企业级,自顶向下开展实施;后者团队级,自底向上开展实施
2)前者服务由多个子系统组成,粒度大;后者一个系统被拆分成多个服务,粒度细
3)前者企业服务总线,集中式的服务架构;后者无集中式总线,松散的服务架构
4)前者集成方式复杂;后者集成方式简单
5)前者单块架构系统,相互依赖,部署复杂;后者服务能独立部署
11、微服务的本质:1)服务作为组件;2)围绕业务组织团队;3)关注产品而非项目;4)技术多样性;5)业务数据独立;6)基础设施自动化;7)演进式架构
注:演进式架构中业务驱动架构,架构服务于业务
12、微服务实施过程中需要考虑的因素:
1)分布式系统的复杂度(性能、可靠性、异步、数据一致性、工具);
2)运维成本(配置、部署、监控与告警、日志收集);
3)部署自动化;
4)DevOps与组织架构;
5)服务间以来测试;
6)服务间依赖管理
二、实践篇
1、工作内容划分成小的任务,益处:
1)同一时间聚焦一个任务
2)能对每次完成的部分做持续集成
3)整体的进度容易追踪
2、JRuby:应用在java平台的ruby语言
3、Grape:适用于Ruby的轻量级的API框架(WEB框架)
4、Dockerfile是一个文本文件,包含了构建Docker映像所需要的指令。通过该文件,Docker能够自动读取并解析其中的指令,并构建Docker映像包,分四个部分:1)基础映像信息、2)维护者信息、3)映像操作命令、4)容器启动命令
5、持续交付流水线:
1)提交阶段:主要检测代码库的变化,并按照配置触发相应的处理(代码编译、静态检查、运行单元测试)
2)验证阶段:主要进行功能、性能等的验证(运行集成测试、运行用户行为测试、运行组件测试、运行性能测试)
3)构建阶段:构建部署包
4)发布阶段:将部署包发布到具体的环境中(测试环境、类生产环境即预上线、生产环境)
6、语义化版本:是指对一个给定个版本号,将其定义成MAJOR.MINOR.PATCH(主、次、补丁)
1)主版本:在API发生不可向下兼容的改变时增大
2)次版本:在有向下兼容的新更能加入时增大
3)补丁版本:在有向下兼容的缺陷被修复时增大
7、Splunk是一款功能强大的日志管理工具,它可以用多种方式来添加日志,生成图形化报表。功能包括:日志聚合;日志搜索;语义提取;对结果进行分组、联合、拆分和格式化;强大的可视化功能;电子邮件提醒功能。
其核心部分:1)数据(采集器)转发器;2)数据索引器;3)搜索、分析和可视化
8、LogStash是一款开源的日志管理工具,使用JRuby语言实现,支持强大的日志输入、过滤器以及输出功能,包括:收集日志、过滤日志、结果输出
注:LogStash通常会和ElasticSearch以及Kibana配合使用,组成ELK
9、Nagios是一个运行在Linux/UNIX平台上的开源监控系统,它可以检测主机和应用程序的健康状况,并当异常发生和异常修复时能及时提醒用户。
10、Nagios监控服务器与Nagios代理的通信两种方式:
1)主动检测:Nagios监控服务器向Nagios代理发起请求,由代理完成实际检测后,返回应答给Nagios监控服务器
2)被动检测:Nagios代理检测本地的应用运行情况,将检测状态发送给Nagios监控服务器
11、Nagios配置主要包括:主机、服务、联系人、监控时间、监控命令
12、关系型数据库适合存储持久化的结构化信息,NoSQL适合存储非结构化信息,文件系统适合存储文本信息,而静态资源存储适合用来存放图片、CSS、js等静态文件
13、模型存储模式:一切都以业务需求为核心,即需要什么才提供什么
14、表现形式包括两部分内容:数据展现和交互方式
1)数据展现:描述业务模型中的数据如何在应用层表现出来,DTO等
2)交互方式:定义消费者如何和生产者交互,交互的协议和格式遵循什么样的规范
15、服务描述文件主要包括:服务介绍、维护者信息、服务的SLA、服务运行环境、开发测试构建和部署、监控和告警
三、进阶篇
1、持续交付的核心:小、频、快。即:小批量价值流动、频繁可发布、快速反馈
2、在微服务架构中,构建一套持续交付的流水线,各环节应该:
1)开发:
a、独立代码库
b、服务说明文件
c、代码所有权归团队
d、有效的代码版本管理工具
e、代码静态检查工具
f、易于本地运行
注:物理隔离是指代码库本身互不干扰,不同的服务有不同的代码库访问地址
2)测试:
a、集成测试的二义性
b、Mock与Stub
c、接口测试
d、测试的有效性
3)持续集成
4)构建
5)部署
a、部署环境:基于云平台(基于IAAS层、基于PAAS层)、基于数据中心、基于容器技术
b、部署方式:手动部署、脚本部署、基础设施部署自动化、应用部署自动化、映像部署、容器部署
6)运维
a、监控:分为系统监控与应用监控
b、告警
c、日志聚合
3、云平台主要包括IAAS、PAAS和SAAS三层。
1)IAAS层:通常包括运行服务的基础资源,譬如计算节点、网络、负载均衡器、防火墙等
2)PAAS层:关注服务或者应用本身
3)公有云指运行在Internet上的云服务,私有云则通常指运行在企业内部Intranet的云服务
4、容器技术,是一种利用容器实现虚拟化的方式,无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,它是一个操作系统级的虚拟化方法。
5、微服务架构本质上是分布式系统。
6、RPC远程过程调用,是一种典型的分布式节点间同步通信的实现方式。
1)客户端通过客户代理存根,传递函数参数,向服务器端发起函数调用。服务器端通过服务器代理存根,接收到客户端的请求后,对请求进行处理,并在结束后向客户端返回响应,从而完成一次通信。
2)代理存根分别存在于客户端与服务器端环境中,为客户端与服务端应用程序提供透明的调用和响应机制。
3)远程方法调用是远程过程调用的一种面向对象的实现
4)远程过程调用的弊端:耦合度高和灵活性差
7、REST:一种以资源为核心、以HTTP为操作方式的,与语言无关、平台无关的服务间的通信机制。
1)四个关键部分:
a、资源:指对某类信息实体的抽象
b、表述:对资源在某个特定时刻的状态的描述
注:表述应该在HTTP请求的头信息中用Accept和Content-Type字段指定
c、状态转移:指在客户端同服务端交互的过程中,客户端能够通过资源的表述,实现操作资源的目的
d、统一接口
2)REST的不足
a、如何标准化资源结构
b、如何处理资源的相关链接
注:JSON最大的遗憾在于没有对超链接处理做内置的支持
8、HAL:是一种轻量级超文本应用描述协议。实现基于REST,并有效地解决了REST中资源结构标准化和如何有效定义资源链接的问题。
1)在HAL中,任何服务端的响应都被定义成一种资源
2)每个资源中,包含三个标准部分
a、状态:指资源本身固有的属性
b、链接:定义了与当前资源相关的一组资源的链接的集合
c、子资源:在当前资源的内部,其嵌套资源的定义
3)HAL浏览器能够将资源的每一部分,通过可视化的方式显示出来
9、消息队列
1)核心特征:持久性、排队标准、安全策略、清理策略、处理通知
2)消息队列的访问方式:
a、拉模式:要求消费者定期检查队列上的消息
b、推模式:每当发布者将消息添加到队列种时,会通过某种机制通知消费者
3)消息队列的优点:服务间解耦、异步通信、消息的持久化以及恢复支持
4)消息队列的缺点:实现复杂度增加、平台或者协议依赖、维护成本高
10、微服务的结构
1)业务模型:对业务领域实体的抽象
2)业务逻辑:对业务行为的抽象
3)模型存储:存储或者获取业务数据
4)资源定义:指当前请求端与服务端交互时,服务端响应对业务模型的表现形式。(表述内容和表述格式)
5)网关集成
11、微服务架构中的测试类型:、单元测试、接口测试、集成测试、组件测试、端到端测试
1)集成测试关注点:
a、当将多个单元组合起来后,能否达到预期的功能要求
b、当一个单元的功能发生变化,是否会影响相关联部分的功能
c、当一个单元的功能出现错误,是否会放大到整个系统
2)集成测试弊端:运行效率低、运行结果不稳定、反馈周期慢
12、契约测试:能提供一个机制去验证组件能否始终满足契约,输入输出包含了必需的属性,响应的等待时间以及吞吐量,帮助验证消费者和提供者在协作过程中接口是否发生变化。
注:Pact是一个基于消费者驱动的契约测试框架,主要包括两步:1)消费者端生成契约;2)提供者端完成校验。
13、组件测试:指对组件提供的功能进行正确性检验的测试工作,分为两类:
1)进程内测试:指将服务的依赖部分,譬如外部数据库、外部服务等进行模拟,使用进程内的一些服务替换
2)进程外测试:将被测服务的外部依赖环境设置好,使被测服务与其依赖能够交互并完成真正的功能
14、端到端测试:是从用户使用系统的角度出发,对系统的行为进行正确性验证的测试
15、使用微服务架构改造遗留系统的策略:最小修改、功能玻璃、数据解耦、数据同步、迭代替换