目录
第一章 欢迎迈入云世界,Spring
书本知识
微服务重要概念:分解和分离应用程序的功能,使他们完全彼此独立
-
每个组件独立部署,对单个业务领域负责
-
微服务通信采用HTTP和JSON这样的轻量级通信协议,在服务消费者和服务提供者之间数据交换
-
Spring本质上就是让用户像玩乐高积木一样将自己的代码组装在一起
-
Spring Boot提供了一个基于Java的、面向REST的微服务框架
-
Spring Cloud框架使实施和部署微服务到私有云或公有云更简单
编译代码:进入到文件夹下,运行mvn clean package docker:build
启动容器:docker-comose -f docker/common/docker-compose.yml up
云计算有三种基本模式:
- 基础设施即服务IaaS
- 平台即服务PaaS
- 软件即服务SaaS
微服务不只是业务逻辑,还要考虑服务的运行环境及服务的伸缩性和弹性
微服务架构的优点是独立部署,缺点是调试和跟踪应用程序和服务中发生的事困难
- 日志关联
- 日志聚合
- 微服务跟踪
Spring Cloud简化了将这些项目设置和配置到Spring应用程序中的工作,以便开发人员专注于编写代码,不会陷入配置构建和部署微服务应用程序的所有基础设置细节中。
Spring cloud config:确保无论启动多少个微服务实例,这些微服务始终有相同的配置
微服务与语言无关,但是引入Spring Boot和Spring Cloud框架只需要几个注解就可以为微服务添加大量的功能,参见25-27页例子
服务发现
如上图所示,这是一个在浏览器输入域名,然后获取网站服务的流程。这个流程中,DNS服务器会根据我们的域名解析出一个ip地址,返回ip地址中对应链接包含的内容。我们根据特定的标志(域名)来获取我们所需要的服务,这就是服务发现。而在微服务的领域,我们将应用拆分成一个个的微服务之后,服务发现,则变成了微服务之间相互获取彼此的信息。
目前,服务发现主要存在有两种模式,客户端模式与服务端模式,两者的本质区别在于,客户端是否保存服务列表信息。下面用两个图来表示客户端模式与服务端模式。
客户端模式
在客户端模式下,如果要进行微服务调用,首先要进行的是到服务注册中心获取服务列表,然后再根据调用端本地的负载均衡策略,进行服务调用。
服务端模式
在服务端模式下,调用方直接向服务注册中心进行请求,服务注册中心再通过自身负载均衡策略,对微服务进行调用。这个模式下,调用方不需要在自身节点维护服务发现逻辑以及服务注册信息,这个模式相对来说比较类似DNS模式。
客户端模式 | 服务端模式 |
---|---|
只需要周期性获取列表,在调用服务时可以直接调用少了一个RT。但需要在每个客户端维护获取列表的逻辑 | 简单,不需要在客户端维护获取服务列表的逻辑 |
可用性高,即使注册中心出现故障也能正常工作 | 可用性由路由器中间件决定,路由中间件故障则所有服务不可用,同时,由于所有调度以及存储都由中间件服务器完成,中间件服务器可能会面临过高的负载 |
服务上下线对调用方有影响(会出现短暂调用失败) | 服务上下线调用方无感知 |
第二章 使用Spring Boot构建微服务
成功的微服务开发的基础是从以下三个关键角色的视角开始的:
- 架构师
- 软件开发人员
- DevOps工程师
架构师
3个关键任务:
- 分解业务问题
- 建立服务粒度
- 定义服务接口
开发人员
骨架项目:pox.xml
目标是运行一个简单的微服务,然后重复这个步骤提供功能,为此需要在许可证服务微服务中创建以下两个类
- 一个Spring引导类,可被Spring Boot用于启动和初始化应用程序,eg:@SpringBootApplication
- 一个Spring控制器,用来公开可以被微服务调用的HTTP端点, eg:@RestController
DevOps工程师
- 打包和部署微服务
- 管理微服务的配置
- 服务注册和发现
- 服务监控
第三章 使用Spring Cloud配置服务器控制配置
低层级的属性文件(YAML,JSON,XML)存储配置信息,属性文件通常包含数据库和中间件连接信息,以及驱动应用程序行为的相关元数据。(但是不适用于数百个微服务的基于云的应用程序)
基于云的微服务开发强调一下几点:
- 应用程序的配置和正在部署的实际代码完全分离
- 在服务器启动时通过环境变量注入应用程序配置信息,或者在微服务启动时通过集中式存储库读取应用程序配置信息
管理配置
使用Spring Cloud配置服务器
第四章 服务发现
云中的服务发现
- 一个节点不可用,其他节点应该能够接管工作
- 每个节点共享服务实例的状态
- 负载均衡
- 有弹性:服务发现的客户端应该在本地缓存服务信息
- 容错:无人干预的情况下对故障进行检测并从服务列表中移除实例