序号
|
书中主要内容
|
解决的问题和疑问点和收获
|
0
|
序言:看书想解决的问题点:前言
|
eagleEye:鹰眼
Docker: 物件, 码头工人
Amazon:亚马逊云环境
Framework:框架,结构
|
1
|
第一章:欢迎迈入云的世界,Spring
|
总结解决的问题或者知识点
|
2
|
第二章:使用spring Boot 构建微服务
|
解决的问题或者知识点
|
3
|
第三章:使用Spring cloud配置服务器控制服务
|
|
4
|
第四章:服务发现
|
服务发现可以通过zk实现
有什么区别和优缺点的对比
|
5
|
第五章:使用微服务和Netflix Hystrix的客户端弹性模式
|
解决的问题
|
6
|
第六章:使用 SpringCloud和 Zuul进行路由服务
|
解决什么问题
|
7
|
第七章:保护微服务
|
|
8
|
第八章:使用Spring Cloud Stream的事件驱动架构
|
|
9
|
第九章:使用SpringCloudSleuth和ZipKin进行分布式跟踪
|
|
10
|
第十章:部署微服务
|
-
微服务的说明
-
-
微服务的由来
-
-
微服务最早由Martin Fowler与James Lewis于2014年共同提出,微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。
-
-
微服务是什么
-
-
是小的,松耦合的分布式系统,区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。
-
分解和分离应用程序的功能,使他们彼此独立构建,部署和测试
-
微服务的特征
-
-
应用程序逻辑分解为具有明确定义职责范围的颗粒度组件,这些组件互相协调提供解决方案。
-
职责范围和细粒度组价,每个组件有小弟职责领域,并且完全独立部署,彼此独立构建,部署和测试
-
微服务通信基于基本原则,一般采用HTTP或者JSON轻量级通信协议
-
微服务利用其小,独立和分布式的性质,让组织拥有明确责任领域的小型开发团队。
-
-
spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。
-
-
微服务的优点
-
-
灵活性,解耦的服务重新组合和安排,可以实现快速交付
-
有弹性,单一服务故障不影响整个项目
-
可伸缩,解耦的服务可以轻松跨多个服务器水平分布。
-
总结就是:小型的、简单的、解耦的服务=可伸缩、有弹性和灵活
-
微服务的重点是构建有限职责的小型服务,并使用基于HTTP的接口通信。
-
-
微服务的缺点
-
-
灵活性付出代价,复杂性,运维要求较高
-
微服务本质是分布式,调试出现的问题让人抓狂,分布式的复杂性
-
分布式的特性意味着多个服务,物理机器和不同数据存储跟踪一个事务或者多个事务,然后拼凑出发生什么
-
-
单体架构的演变
-
-
单体结构的问题
-
-
复杂性上升
-
客户期待更快的交付
-
性能和可伸缩性
-
客户期望应用程序可用
-
阻碍技术创新
-
-
-
目前微服务的开发框架,最常用的有以下四个:
-
-
Spring Cloud:http://projects.spring.io/spring-cloud(现在非常流行的微服务架构)
-
Dubbo:http://dubbo.io
-
Dropwizard:http://www.dropwizard.io (关注单个微服务的开发)
-
Consul、etcd&etc.(微服务的模块)
-
-
基于云微服务的优点
-
-
为什么是云和微服务
-
-
将服务器部署到某个环境里
-
-
物理服务器:虽然可以构建和部署微服务到物理机器,但过于局限,不能快速的提高物理服务器的容量,并且在多个物理服务器之间水平伸缩微服务成本会很高。
-
虚拟机镜像:能够快速启动或者关闭微服务实例,响应可伸缩和服务故障,虚拟机是主要云供应商的心脏和灵魂。微服务可打包虚拟机镜像中,开发人员可以在Iaas私有或者公有云中快速部署和启动微服务实例。
-
虚拟容器:是在虚拟机镜像上部署微服务的自然延伸,将Docker容器(或者等效容器)部署到云端。虚拟容器在虚拟机内运行。使用虚拟容器,可以将单个虚拟机隔离成共享相同虚拟机镜像的一系列独立进程
-
-
-
基于云的微服务优势
-
-
以弹性的概念为中心,开发商允许几分钟内快速启动新的虚拟机和容器
-
使用Docker容器将所有的微服务和所有微服务和相应的服务基础设施部署到基于Iaas云供应商
-
-
简化基础设施管理:有效控制服务,开发人员通过简单的API启动和停止新服务
-
大规模的水平可伸缩性:快速简便的启动服务的一个或者多个实例
-
通过地理分布实现高亢余:拥有多个数据中心。
-
-
使用Docker打包微服务,将这些容器部署到亚马逊平台。第十章详细介绍
-
-
-
微服务适用于什么项目
-
-
微服务可以按照业务功能本身的独立性来划分,如果系统提供的业务是非常底层的,如:操作系统内核、存储系统、网络系统、数据库系统等等,这类系统都偏底层,功能和功能之间有着紧密的配合关系,如果强制拆分为较小的服务单元,会让集成工作量急剧上升,并且这种人为的切割无法带来业务上的真正的隔离,所以无法做到独立部署和运行,也就不适合做成微服务了。
-
小:微服务体积小,2 pizza 团队。
-
独:能够独立的部署和运行。
-
轻:使用轻量级的通信机制和架构。
-
松:为服务之间是松耦合的。
-
-
微服务不适用于什么项目
-
-
构建分布式系统的复杂性
-
-
微服务的分布式和颗粒度小从而引入复杂性,微服务架构需要成熟的运维,组织愿意投入高分布式应用程序获得成功所需的自动化和运维工作(监控,伸缩)
-
-
服务器散乱
-
-
一个服务器部署一个实例,最终可能需要50-100台服务器或容器(通常是虚拟容器),这些服务器必须单独搭建和维护,管理和维护监控这些服务器操作复杂度也是巨大的
-
-
应用程序类型
-
-
微服务面向可复用性,并且对构建高度弹性和可伸缩性大型应用程序非常有用,大用户群,搭建分布式系统。
-
-
数据事务和一致性
-
-
微服务间执行事务没有标准,如果需要事务管理,需要自己构建逻辑。第七章:微服务可使用消息进行通信
-
-
-
微服务中使用到的注解
-
-
-
微服务的构建
-
-
如何使用spring Boot 构建微服务,云中的微服务卡构建简单,但要成功需要架构师,开发人员,和DEVOPS的综合视角
-
-
架构师专注于业务问题的轮廓
-
软件工程师专注于构建分层服务,每一层有离散职责,避免代码中构建框架,尝试每个微服务完全独立
-
DevOps,尽早的建立服务的生命周期,不仅仅关注如何自动化服务的构建和部署,关注服务的健康状态,出问题快速反应
-
构建单个微服务的概念很容易理解,但运行和支持健壮性的云上微服务不只涉及编写代码,
-
-
大小适当:服务的单一职责
-
位置透明:多个服务的快速启动
-
有弹性:快速失败,绕过失败的服务
-
可重复:相同的配置和代码库
-
可伸缩:如果使用异步方式最小化服务的直接依赖关系
-
-
-
-
开发模式
-
-
Spring Cloud Config配置服务器控制
-
-
实施配置管理技术方案优先选择Spring Clould config、Eureka、Consul
-
-
Spring Clould config易于搭建和使用
-
Spring Clould config与SpringBoot紧密集成,可以使用简单易用的注解读取应用程序的配置文件
-
提供多个后端用于存储配置数据。已经使用Eureka、Consul等工具,可以直接将他们插入Spring Config的配置服务器中
-
可直接和GIT源控制平台集成
-
-
-
构建Spring Cloud配置服务器
-
-
将Spring Cloud config和Spring Boot结合,
-
-
建立许可证服务队Spring Cloud Config服务器的依赖
-
配置许可证服务以使用Spring Cloud Config
-
使用Spring Cloud配置服务器连接数据源
-
使用@value注解直接读取属性
-
使用Spring Cloud配置服务器和GIT
-
使用Spring Cloud配置服务器刷新属性
-
-
-
使用Spring Cloud Stream的事件驱动架构:第八章
-
-
SPring Cloud Stream简介
-
-
是一个注解驱动的框架,允许开发人员在Spring应用程序中轻松的构建消息发布者和消费者
-
还允许开发人员抽象出正在使用的消息传递平台的实现细节
-
可以使用多个消息平台(kafka或者RabbitMQ),平台的具体实现细节被排除在应用程序代码之外
-
Spring Cloud Stream架构
-
-
随着Spring Cloud消息的发布和消费,4个组件涉及发布消息和消费消息
-
-
发射器:发布消息,发射器是一个Spring注解的接口,它接收JAVA对象,序列化并将消息发布到通道
-
通道:是队列的抽象,消息生产发布消息,活消费者消费消息后保留该消息,
-
-
通道名称始终和目标队列名称相关联,开发人员可直接更改应用程序配置
-
-
绑定器:与特定消息对话的Spring代码,绑定器允许开发人员处理消息,不必依赖特定的平台和API发布和消费信息
-
接收器:通过接收器从队列接收消息,反序列POJO,从这里可以按照业务逻辑处理。
-
-
-
-
编写简单的消息生产者和消费者
-
-
在组织服务中编写消息生产者
-
-
Maven添加Spring Cloud Stream库,另一个包含Spring Cloud Steam Kafka库
-
用@EnableBindind注解标记组织服务的引导类
-
组织数据变化,发送到kafka队列
-
-
在许可证服务中编写消息消费者
-
-
监听执行相应的方法
-
用@EnableBindind注解监听组织服务的消息
-
用@StreamListener注解,从input通道接收消息,就会执行LoggerSink方法
-
在许可证服务的配置文件application能找到队列配置
-
-
-
-
-
微服务的路由模式
-
-
服务发现,第四章详细介绍
-
-
服务发现对基于云的应用程序至关重要
-
-
首先,它可以快速对环境中运行的服务实例数量进行水平伸缩,可以在服务池里添加或者移除服务实例
-
-
通过添加更多的服务器(水平伸缩)来扩大项目
-
服务发现有利于抽象这些服务部署,远离服务消费者
-
-
其次,它有助于提高应用程序的弹性
-
-
微服务实例变得不健康或者不可用时,服务的发现引擎将可用列表移除改服务,服务发现引擎在路由服务绕过不可用服务,使不可用服务造成最小伤害。
-
-
-
构建Spring Eureka注册服务
-
-
通过Spring Cloud和Netflix的Eureka实现服务发现引擎,使用ribbon库实现客户端的负载均衡实战项目
-
-
当服务实例启动时,许可证,组织服务(实现点对点传播)将使用Eureka注册他们IP
-
当许可证服务调用组织服务时,它将使用RIbbon查看组织服务IP是否存在本地缓存(实现负载均衡)
-
Ribbon将定期刷新它的IP地址缓存
-
-
-
-
服务路由,第六章:使用 SpringCloud和 Zuul进行路由服务
-
-
Spring cloud 和 Netflix的Zuul简介
-
-
Zuul是服务网关,非常容易通过Spring Cloud注解创建和使用,核心功能如下
-
-
将应用程序的所有服务路由映射到一个URL
-
构建可以对通过网关的请求践行检查和操作的过滤器
-
-
开始使用zuul,需完成
-
-
建立一个Zuul的Spring Boot项目,并配置适当的Maven依赖
-
-
只需要配置Dependency加Spring-cloud-starter-zuul依赖
-
-
使用Spring Cloud注解修改Spring Boot 项目,声明为Zuul服务
-
-
加注解@EnableZuulProxy,使服务成为Zuul服务器
-
-
配置Zuul以便Eureka进行通信(可选完成)
-
-
修改Zuul的application.yml 指向Eureka服务器
-
-
-
-
在Zuul中配置路由
-
-
Zuul的核心是一个反向代理服务器,反向代理是一个中间件服务器,负责捕获客户端请求,然后代表客户端调用远程资源。
-
Zuul从客户端接收微服务调用并转发给下游服务,Zuul必须知道如何将调用映射到下游。主要的实现机制
-
-
通过服务发现自动映射路由
-
-
没有配置自动映射
-
Zuul将使用organizationservice应用程序名称将请求映射到组织的服务实例。
-
-
服务名称organizationservice充当服务网关查找服务物理位置的键
-
路径的其余部分将要调用实际的URL端点
-
-
-
使用服务发现手动映射路由
-
-
更细粒度的的明确定义的路由映射,不仅单纯依赖服务的Eureka服务ID创建的自动路由
-
在Zuul的application.yml 手动定义路由映射
-
-
使用静态URL手动映射路由
-
-
Zuul可以用来管理那些不受Eureka管理的服务
-
-
-
-
Zuul真正的威力:三种类型过滤器
-
-
构建一个前置过滤器
-
构建一个后续过滤器
-
构建动态路由过滤器
-
-
-
-
微服务的弹性模式
-
-
微服务是高度分布式的,所以必须防止单个服务中问题级联暴露给消费者。
-
四种弹性模式,分别是
-
-
客户端负载均衡:服务客户端缓存在服务发现期间检索到微服务的
-
-
客户端负载均衡位于服务客户端和服务消费之间,负载均衡器可以检测服务实例是否抛出错误或表现不佳
-
这是Netflix的Ribbon库提供开箱即用的功能
-
-
断路器模式:断路器模式确保服务客户端不会重复调用失败的服务
-
-
电路断路器的保险丝,远程调用时间长,会中断调用
-
失败次数足够多,会采取快速失败,防止继续失败
-
断路器模式为远程调用提供关键能力
-
-
快速失败:远程服务处于降级时,应用程序会快速失败,大多数中断最好服务部分服务关闭,而不是完全关闭
-
优雅的失败:后备模式重其它地方检索数据
-
无缝的恢复:定期检查服务是否上线,重新允许资源访问。
-
-
-
后备模式:当调用失败时,后备模式询问是否可执行的替代方案
-
-
远程调用失败,服务消费将执行替代代码路径,尝试通过其他方式执行操作。
-
例如大数据分析推荐商品,如果个人个性推荐调用失败,给返回一个通用推荐
-
-
舱壁模式:隔离服务客户端上不同的服务调用,确保表现不佳的服务不会耗尽客户端的所有资源
-
-
舰船隔离和防水隔间,把远程资源调用分到线程池,线程池充当船舱臂,
-
如果一个服务响应过慢,那么这种服务调用的饱和并停止处理
-
-
-
-
微服务的安全模式
-
-
验证
-
授权
-
凭据管理和传播
-
-
微服务日志记录和跟踪模式
-
-
日志关联
-
日志聚合
-
微服务跟踪
-
-
微服务的构建和部署模式
-
-
微服务的每个实例都和其它相同
-
构建和部署管道
-
基础设施及代码
-
-