- 前言
- 第一部分 基础应用开发
- 第 1 章 Spring Boot 入门
- 第 2 章 在 Spring Boot 中使用数据库
- 第 3 章 Spring Boot 界面设计
- 第 4 章 提高数据库访问性能
- 第 5 章 Spring Boot 安全设计
- 第二部分 分布式应用开发
- 第 6 章 Spring Boot SSO
- 第 7 章 使用分布式文件系统
- 第 8 章 云应用开发
- 第 9 章 构建高性能的服务平台
- 第三部分 核心技术源代码分析
- 第 10 章 Spring Boot 自动配置实现原理
- 第 11 章 Spring Boot 数据访问实现原理
- 第 12 章 微服务核心技术实现原理
- 附录 A 安装 Neo4j
- 附录 B 安装 MongoDB
- 附录 C 安装 Redis
- 附录 D 安装 RabbitMQ
- 结束语
9.2 创建和管理一个高性能的服务体系
使用 Docker 发布服务之后,可以使用其他一些服务管理工具来构建高性能和高可用的服务平台。上面创建的镜像可以很方便地使用 docker-compose 来管理。
docker-compose 工具是一个 Docker 容器管理工具集,可以很方便地用来创建和重建容器、执行启动和停止容器等管理操作,以及查看整个服务体系的运行情况和输出日志等。使用 docker-compose 工具,只要一条指令就能启动整个分布式服务体系。
9.2.1 安装 docker-compose
首先,安装 docker-compose 工具,使用下列指令下载已经编译的 docker-compose:
#curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose -`uname -s`-`uname -m` > /usr/local/bin/docker-compose
执行指令将下载 docker-compose 可执行文件,并保存在“/user/local/bin”中。这样,可以使用下列指令,赋予它为任何用户可执行:
# chmod +x /usr/local/bin/docker-compose
这就完成了安装,现在可以使用 docker-compose 指令查看它的版本号:
# docker-compose --version
如果安装成功,将打印出类似如下的信息:
docker-compose 1.7.1
9.2.2 docker-compose 常用指令
使用下列指令可以查看 docker-compose 的帮助说明:
#docker-compose – h
表 9-2 列出了 docker-compose 主要指令的功能。
表 9-2 docker-compose 主要指令列表
9.2.3 使用 docker-compose 管理服务
为了使用 docker-compose 将上一节创建的所有镜像,构建成一个服务体系,需要编写一个 docker-compose 模板,如代码清单 9-2 所示。其中 image 用来指定镜像的名称,ports 设定容器的内部和外部端口,links 用来指定一个服务需要依赖的其他服务列表。注意,服务 data 没有指定外部端口,它只供内部调用。
这个 docker-compose 模板将一些高可用的微服务,通过 links 连接成为一个整体,这样就可以通过 docker-compose 统一管理,并且可以在运行的过程中,动态设定服务的负载均衡实例,从而建立一个高性能的服务平台。
代码清单 9-2 docker-compose.yml 文件内容
hystrix: image: hystrix ports: - "7979:7979" links: - discovery discovery: image: discovery ports: - "8761:8761" config: image: config ports: - "8888:8888" links: - discovery data: image: data links: - discovery - config web: image: web ports: - "9001:9001" links: - discovery - config
将这个模板保存为 docker-compose.yml 文件,并上传到 Linux 服务器上,然后在文件所在位置,执行下列指令,创建如模板所设置的容器,并启动其相应的服务。
#docker-compose up
在控制台中,可以看到输出日志。从日志中可以看出,docker-compose 按照模板一个一个地创建镜像的容器,然后开始启动服务。
上面指令只有在未创建容器,即第一次运行时,才需要这样执行。当从控制台中退出时,会同时停止已经启动的服务,除非上面指令加上“-d”参数。生成容器之后,就可以使用如下指令来启动整个服务体系:
#docker-compose start
在服务运行过程中,如果启动脚本中未设定服务的外部端口,如服务 data,可以使用如下命令指定服务的个数,这个指令将会在线增加一个容器,并且将其自动纳入负载均衡的管理中。
#docker-compose scale data=2
负载均衡是 Spring Cloud 工具集中一个组件 Ribbon 的功能,这是一个内置了可插拔、可定制的负载均衡组件,它主要具备如下负载均衡规则:
- 简单轮询规则;
- 加权响应时间规则;
- 区域感知轮询规则;
- 随机规则。
Spring Cloud 默认启用 Ribbon 的负载均衡功能,也可以在工程的配置中增加如代码清单 9-3 所示的配置,明确指定启用 Ribbon 的功能。
代码清单 9-3 负载均衡配置
ribbon: eureka: enabled: true
现在按照第 8 章的测试方法来测试各个服务的运行情况。注意,为了完成测试,Linux 服务器至少需要 4GB 以上的内存。图 9-2 是发现服务器的控制台,它展示了发现服务器中服务的注册情况。其中 IP 地址 192.168.1.221 是我们使用的 Linux 服务器的 IP,同时可以看到 data 应用已经注册了两个服务,而监控服务 hystrix 因为没有在发现服务器中注册,所以这里看不到。
图 9-2 服务注册情况
对于两个 data 服务的负载均衡配置,系统只是采用了默认的简单轮询负载均衡规则,当人为停止其中一个 data 服务时,如果不断地调用 getUserByName 方法,会有一瞬间出现 50%故障的情况,再过一秒左右,系统自动调整以适应只有一个 data 服务的情况,这是 Spring Cloud 的自动修复功能所起的作用,如图 9-3 所示。
图 9-3 监控服务器中显示出现故障的情况
使用 docker-compose,很轻易地创建了一个高可用和高性能的服务平台,它不但容易管理,而且服务启动速度很快,更加难能可贵的是,它能够动态调整负载均衡配置,实现服务的在线可插拨功能,并且具有自我修复故障的能力。当然,这些功能和性能优势与 Spring Cloud 的支持是分不开的。
这个实例的高可用服务体系结构简图如图 9-4 所示。其中,配置服务器、监控服务器和发现服务器处于整个服务体系的顶层之中,为数据服务和应用实例提供顶端的管理服务功能。而数据服务和应用实例可以使用顶层服务提供的功能,轻易地实现动态路由、断路器和负载均衡等服务。底层的数据服务实例就是由数据服务使用顶层服务提供的负载均衡功能而实现的几个负载均衡的运行实例。
图 9-4 微服务高可用服务体系结构图
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论