《微服务架构与实践》

一、基础篇

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、使用微服务架构改造遗留系统的策略:最小修改、功能玻璃、数据解耦、数据同步、迭代替换


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值