基于Spring Cloud和Docker的分布式微服务架构设计

文章编号!007-757X(i019)06-0098-04
基于Spring Cloud和Docker的分布式微服务架构设计
黄强文,曾丹
(上海大学,上海200444)
摘要:近年来,微服务架构是当前最流行的分布式系统类型之一,相比传统单体架构它解决了数据、服务呈爆炸式增长带来的冲击问题#以构建一个天气预报分布式微服务系统为例,利用Spring Cloud框架将系统垂直切分为四个独立的业务服务:城市数据API微服务、天气数据采集微服务、天气数据API微服务和天气预报微服务#系统集成Eureka做服务发现,使用Zuul做路由网关,结合Hystrix熔断机制提高了系统的容错性,并使用Docker容器快速独立部署所有微服务,实现了开发、测试、部署运维的一体化#
关键词:微服务架构;Spring Cloud框架;Docker容器
中图分类号:TP3O9文献标志码:A
DesignofDistributed MicroserviceArchitecture
BasedonSpringCloudandDocker
HUANG Qiangwen,ZENG Dan
(ShanghaiUniversity,Shangahi200444)
Abstract:In recent years,as one of the most popular distributed system types,the microservice architecture has solved the problem of explosive grow2h of da2a and services compared2o2he2radi ional single2on archi ec2ure.Taking2he cons2ruc2ion of awea2herforecas2dis2ribu2edmicroservicesys2emasanexample!2hispaperuses2heSpringCloudframework2odivide2hesys-em ver ical y in2o four separa2e business services:2he ci2y da2a API microservice!2he wea2her da2a col ec ion microservice!2he wea2herda2aAPImicroservice!and2hewea2herforecas2microservice.Thesys2emin2egra2esEurekaforservicediscovering! uses Zuul as a routing gateway,improves the fault tolerance of the system in conjunction with the Hystrix zapping mechanism, andusestheDockercontainertoquicklyandindependentlydeployalservices!itrealizestheintegrationofdevelopment!tests! deploymentoperationand maintenance.
Key words:Microservice architecture;Spring Cloud framework;
0引言
随着互联网、云计算的高速发展,人们对数据信息化服
务依赖程度越来越深&以往的单体应用架构和面向服务化
应用的架构逐渐不能满足业务的需求&而微服务这种分布
式架构的兴起,是云计算应用快速发展的必然产物,也将是
未来整个软件应用架构向着灵活多变、低耦合、高扩展性、动
态伸缩发展的一个必然方向(1)&与此同时,Docker的诞生,
代表着容器虚拟化技术的盛行高峰,它将极大减少微服务应
用实现大规模部署、落地的成本&
微服务架构就是将单体应用拆分为多个高内聚低耦合
的小型服务,每个小服务运行在独立进程,由不同的团队开
发和维护,服务间采用轻量级通信机制,独立自动部署,可以
采用不同的语言及存储&微服务架构具有如下优势⑵:
(1)微服务架构将业务系统彻底的组件化、服务化,微
服务专注于业务逻辑,服务功
能简单,边界清晰,复杂度低,接口明确,服务利于开发、Dockercontainer
部署&
(I)服务耦合度低,每个服务是一个微型的应用,有完整的架构,可独立部署&
(3)微服务架构允许根据服务的功能和团队的自身条件选择不同的技术路线&
(4)优良的容错机制和熔断机制,保障微服务之间交互的友好性&
本文将以一个天气预报微服务系统为案例,使用Spring Cloud框架进行构建,将系统拆分为四个独立的子微服务:城市数据API微服务、天气数据采集微服务、天气数据API微服务和天气预报微服务&系统采用Eureka做服务注册与发现,Zuul做路由API网关,Feign做服务节点间通信,Ribbon 做负载均衡,Spring Cloud Config做统一管理微服务配置, Hystrix做服务熔断,Turbine聚合监控多个微服务运行状
态,并使用Docker容器自动、快速、独立部署所有微服务在一台阿里云服务器上&本文最后给出天气预报系统实现结果,并模拟天气数据API微服务掉线操作验证此系统优良的
作者简介:黄强文(1994-),男,江西人,上海大学,硕士,研究方向:分布式系统架构&曾丹(1982-),女,湖南人,副教授,研究方向:计算机视觉与模式识别。
容错机制&1主要框架技术
1. 1 Sping  Cloud  框架
Spring  Cloud 是一系列框架、组件的有序集合,拥有功能
完善的、轻量级的 实现 ,例如 发现治理、服务
容错、服务网关、服务配置、
、消息 、月 等
方面均有经过实践检验的成熟组件⑵。基于Spring  Cloud  各组件的完整架构图,如图1所示&
Ribbon
负载均衡
Hystrix  dashboard  组件,
Turbine  组件
Feign 组件 Config-Server
配置中心
镜像,其实是一个文件系统,用来储存容器运行时需要
的程序资源、配置资源、库资源等文件,它不包含任何动态数 &镜
分层储存,- 构建! 以 •层
为基础,内容一但构建后就不会再改变了 &
容器,是镜 动的实例&容器其实就是一个进程,运 行在一个 独立的隔
,有着自己的文件系统和网络
配置&所以容 装的 比直接在宿主运行更加安全&
仓库,是一个 储存和分发镜像的服务中心。类似
Maven 仓库!个仓库包括多种标签!个标签对应着1个特
定的镜像&
通过仓 :标签的格式来确定某个
具体的镜
本&
2系统设计
本系统的业务主要拆分为四个独立的子微服务。城市
数据API
城市列表 ! 接 气采
;天气
采 求第三方
的天气 !
在Redis  中;天气 API
气 采
的天气
接 气预报 ;天气预报 面向 「提
气 。
!API  网 路 发 求。 整体
架构如 2 所示。
1 SpringCloud
架构
其中Eureka  的注册与发现,很好将各服
务连接
。Zuul 扮演API 网关的角,它 切来自外
部的服务请求进行路由转发& Feign 作为HTTP 客户端实
现各 的通信& Ribbon  网关的配置
实现 & Config-Server
整个
了统一的配置管理中心。Hystrix 起到监控各个服务之间的
通信
,如
次数达到一个设置的
断保护。Turbine 结合Dashboard 组件是用来监控查看 Hystrix 的熔
,
护者
的界
面展示&1.2 Docker  容
Docker 是
Google 公司推出的Go 语言进行开发实
现的高级容 !
目的是实现 个完整的 I 进
行打包封装、独立部署并运行在宿主机上的管理,做到应用 级别的“一次封装,随处运行”()。从Docker 实现方式
的本质上
,它其实就是运行在宿 上的一个进程&Docker 通过namespace 实现了资源隔离,通过cgroups 实现
了资源的限制,通过写时复制机制实现了高效的文件 操作⑷。
的虚拟机技术一般都是虚拟出一套完整的硬件,在
上面运
个完整的操作 ,然后把 程序部署运行在
此虚拟操作 上&和 的虚拟化方式相比,容器就十分轻 &容 有 何硬件,也没有 ,应用程序是运行在宿
的 & Docker 容 资源更高
效,拥有着秒级的启动速度、一致的运行环境、超方便的 ;!城市数据存储
i  (XML)
/data/**
API 网关 (Zuul)
天辟集
天气数据缓存
(Redis)
天气数据API 微服务
和轻松的维护扩展特点。
配置服务器熔断器服务注册与发现
(Config) (Hystrix) (Eureka)
图2天气预报分布式微服务系统架构
能设
(1)城市数据API 微服务:包含一张全国主要城市地区
的Xml 表,建立城市Javabean 对象,然后利用JDK 自带的2.1JAXB 解析包,快速便捷将城市Xml 表解析转换为城市对
象,并对外暴露接口/ cities ,提供城市列表Json 数据&
(2) 天气数据采集微服务:引入第三方Quartz 定时器,
集成Feign 消费者客户端远程获取城市 API  [务提
供的城市列表数据,并结合配置了 Httpclient 的RestTem-
plate 客户端每隔 程调用第三方中国天气数据网的
Json 格式天气
,刷新
到Redis  中&(3) 天气数据API 微服务:根据城市Id 号或者城市名称
从Redis  中获 气 ! Redis
的是
Json 格式数据,所以用Jackson 包把天气数据转换为Jav ­
abean , 并对外暴露接口 /weather/cityId/{cityId}和/weather/ cityName /{cityName }。
Docker 容器有3个基本概念:镜像、容器和仓库&
(4)天气预报微服务:暴露接口 /report/cityId/{ cityId},
提供面向用户请求服务,把所有请求转发到API网关,并启动 Hystrix熔断机制@FeignClient#name="weather-gate-way-zuul",fallback=DataClientFallback.class)&
(5)服务注册中心:使用Eureka做服务注册和发现中心,配置服务注册中心的URL地址&一个微服务就是一个节点,是一个完整的应用程序,并且可独立运行部署&系统除了本文上述的四个主要业务相关的微服务,还有API网关节点、配置中心Config-Server节点^Turbine的Hystrix监控节点等&这些节点都是以Eureka客户端形式注册在Eureka 服务端,然后各个节点间采用轻量级Feign组件就可以实现相互调用通信了&
(6)API网关服务:根据URL转发请求到不同的微服务&用户请求访问天气预报微服务接口,天气预报微服务统一向API网关微服务发送请求,API网关再把所有请求转发到具体的其他微服务中,映射关系如下所示:
zuulroutescityserviceId:microservice-weather-city
测脑龄zuulroutesdataserviceId:microservice-weather-data 2.2Docker容器部署设计
Spring Cloud应用是在Sping Boot基础上构建的,而由Spring Boot开发的应用内嵌了Tomcat,所以一个Spring Cloud应用可以直接以Jar包的形式独立运行&利用Gradle 把各个微服务项目分别打包成Jar包,并使用Docker的Dockerfile镜像构建命令把各Jar包制作成对应镜像& Compose项目是Docker官方的开源项目,负责实现对Docker容器集的快速编排&Compose通过一个模板文件l来定义一系列相互有关联的应用容器为一个整体项目,并且可以为各应用容器设置相应的网络环境和参数配置,如下所示为本系统的部分容器编排docker compose yml文配:
services://定义系统服务节点
discovery://声明服务注册中心微服务节点
image:"discovery:.0.1"//配置discovery微服务容镜
ports:"8761:8761"//映射主机的8761端口到dis­covery容器的8761端口
microservice-weather-cityl://声明城市数据API微1
microservice-weather-city2://声明城市数据API微2,个镜,
//但通过设置不同端口来实现,用作负载均衡作用,
//其它3个微服务节点也是一样配置
microservice-weather-data://声明天气数据API微服务节点
microservice-weather-collection//声明天气数据采集微服务节点
microservice-weather-report://声明天气预报微服务节点
redis://声明redis缓存节点
weather-gateway-zuul://声明网关路由节点
……//其它节点设置
networks://设置所有容器节点在同一个网络环境service_base_default中
default
external
name:“service_base_default"
3系统实现
整个天气预报微服务系统使用IntelliJ IDEA开发,采用Java,基SpringBoot建,Gradle项目构建工具编译成可独立运行的Jar包应用&构建出来的每个可独立运行的Jar包应用都是系统的节点,本系统实现的所有节点如表1所示&
表1系统节点
节点名称节点功能pgm_430mei
discovery Eureka服务注册、发现中心
redis缓存天气数据microservice-weather-city提供城市数据API服务microservice-weather-co l ection采集天气数据microservice-weather-data
气API接microservice-weather-report面向用户提供天气查询服务weather-gateway-zuul转发用户所有请求
weather-config-server配置中心
weather-hystrix-turbine负责监控Hystrix熔断情况
weather-hystrix-dashboard Hystrix可视化显示面板
本系统采用Docker容器快速编排所有节点,其中4个主要的微服务节点都启动两个实例以作负载均衡&系统运行在阿里云服务器上,不同节点采用不同的端口,其中天气报microservice-weather-report面向接口/report/cityId/{cityId},供用户查询天气数据,用户通过htp//391081841448084/report/cityId/101020100可获得上海近日的天气预报,具体显示界面如图3所示,也可以通过该界面下拉列表选择其他城市获取对应的天气数据&
同时访问Turbine聚合节点,可以监控多个微服务运行状态,图4显示的是天气预报微服务节点microservice­weather-report的运行指标,如每秒执行的请求数、成功数、失败数等&
此时,停止天气数据API微服务,再次查询上海天气预报情况,出现图5所示界面,服务快速正常响应,并没有崩溃,说明天气预报微服务启动了断路器,并进入回退方法,响应其他良好内容“温馨提示:
天气预报查询服务暂不可用,请稍后再查询哦!”给用户,验证了分布式微服务系统优良的容错机制&
039.108.1&4.144:8084/report/cityld/101020100
全国
上海
空气质量指数:103
当前温度:23°C
温馨提示:各项气象条件适宜”无明显降温过程”发生感冒机率较低.
2018年5月23日星期三20?8年5月24日星期四2018年5月25日星期五2018年5月26日星期六睛多云中雨小雨
高温26tt C高温27°C高温28弋高温26°C
低温17X低温20°C低温20弋低温20。匚
ibjxi东南风东南风东北风
依诺娃
图3上海近日天气预报情况
Hystrix Stream:microservice-weather-report
Circuit Sort:Error then Volunie|Alphabetical|Volume|Error|Mean|Median|90|99|
9100.0%DataClienf#listCity()
1000.0%
1001ms 558ms
Hosts
Median
Mean
图4天气预报微服务节点的运行情况
联络柜
Cluster:0.9/S
Circuit Closed
90th1003ms
99th1007ms
99.5th1007ms
Host:1.0/S
Cluster:1.0/S
Circuit Closed
190th
17ms99th
18ms99.5th
22ms
24ms
24ms
D39.108.1&4.144:8084/report/cityld/101020100
全国主要城市天气预报上海=
di palomo温馨际天气预报查询禺暂不可用’靖稍后再查询聆
图5容错机制验证
4总结参考文献
本文结合当前主流的分布式微服务架构思想,将天气预报切分个独立的,各 通过Eureka实现服务注册与发现,通过轻量级Feign做通信机制&入Zuul做API网发请求,Ribbon
衡‘Turbine做Hystrix熔断情况的监控。同时,结合Docker 实现微服务容器快速,并采取停止天气API微服务作验证良的容错机制&流行的Spring Cloud框架创建扩展、灵活、风险低的微服务应并结合Doc
ker的秒级启动,进程间隔离,快速部署的特点,无疑使得基于Spring Cloud和Docker的分布式微服架构将在软件架中扮演举足轻重的角&(1)孙海洪.微服务架构和容器技术应用[J).金融电子化!
2016(5):6364.
[2)王方旭.基于Spring Cloud实现业务系统微服务化的
设计与实现[J).电子技术与软件工程,2018(8):6061. ()高礼,高昕.Docker技术在软件开发过程中的应用研究(J).软件2016,37(3):110113.
[4)马雄.基于微服务架构的系统设计与开发[D).南京:
微调电容南京邮电大学,2017.
[5)Marc Adler.Microservices Are the New Building
Blocks of Financial Technology[J).Wilmott,2017
(87):50-51.
(收稿日期:2018.06.15)

本文发布于:2024-09-23 01:18:26,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/155873.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:服务   数据   系统   天气预报   架构   容器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议