基于Spring Cloud的微服务容器化实践.docx
- 文档编号:382733
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:11
- 大小:264.95KB
基于Spring Cloud的微服务容器化实践.docx
《基于Spring Cloud的微服务容器化实践.docx》由会员分享,可在线阅读,更多相关《基于Spring Cloud的微服务容器化实践.docx(11页珍藏版)》请在冰豆网上搜索。
基于SpringCloud的微服务容器化实践
基于SpringCloud的微服务容器化实践
近几年,互联网飞速发展的同时,也推动了云计算、大数据、人工智能的快速落地,数据本身价值也得到提升。
互联网发展对应用开发提出了更高要求。
首先数据采集的量级和效率提高,传统的单体架构将出现瓶颈,其次是数据联通性的需求,对数据对接必须保证高性能、高安全、高标准。
使用微服务架构恰好解决了大部分痛点。
本次主要介绍基于SpringCloud构建微服务,以及配套的DevOps思路,并着重介绍在Docker容器里如何部署基于SpringCloud的微服务。
一、基于SpringCloud构建微服务
历史总是惊人的相似,合久必分,分久必合。
我们经历了“合”:
单体架构(软)、计算能力超强的小型机(硬)到“分”:
分布式架构的转变,后期可能会将分发挥到了极致(去中心化的分布式,如区块链),最后很可能再经历“合”:
计算和存储能力超强的“智人”(集超级计算和存储一身的人工智能)。
单体架构也有自身优势,这里不做详细介绍,大家在做架构选型时可以根据公司组织架构和业务需求综合考虑。
SpringCloud作为Java语言的微服务框架,它依赖于SpringBoot,是由Pivotal团队提供的全新Web框架。
有快速开发、持续交付和容易部署等特点。
SpringCloud提供了开发分布式服务系统的一些常用组件,例如服务注册和发现、配置中心、熔断器、智能路由、微代理、控制总线、全局锁、分布式会话等。
先看看我们使用的一个架构:
▪服务发现中心(ServiceDiscovery):
服务注册与发现组件(选用Erueka)
▪监控面板(MonitorDashboard):
整合了熔断监控(选用Hystrix)、服务调用链路监控(选用SpringCloudSleuth)
▪日志分析面板(LoggingAnalyses):
基于efk构建的日志采集系统
服务网关(EdgeServer):
服务网关组件(Zuul&SpringCloudSecurity)
▪OAuth认证服务器(OAuthAuthorizationServer):
授权认证模块(SpringCloudsecurityOAuth2)
▪配置服务器(ConfigurationServer):
配置中心(SpringCloudConfig&SpringCloudBus)
二、基于微服务架构体系的DevOps思路
DevOps带来的不仅是技术挑战,还受公司组织架构和文化影响,这里是从技术角度去实现的思路。
先看两个微服务应用案例:
案例1:
基于微服务架构的接口开发
平台主要提供RestfulAPI服务,服务方式多样,其中一个最简单的案例流程如下:
▪首先企业通过申请账号、密码和需要调用的API
▪平台针对申请企业创建可调用API的账号和密码,并将该企业调用端IP加入服务白名单,用户可在平台下载文档、SDK,并进行测试
▪企业根据用户名、密码去获取token,并在请求header中加入申请的token调用接口
案例2:
基于微服务架构的应用开发
Web应用开发采用前后端分离方式,前端采用AngularJS,后端仍是基于SpringCloud的微服务,整套系统部署到容器云实现CI/CD,架构如下图所示:
微服务引入增加了团队配合、测试、运维等后续一系列操作的复杂度,必须考虑自动化,因此需要有一套CI/CD方案应对:
大致流程:
1.研发完成本地开发和测试提交代码
2.代码连同Dockerfile等构建文件一起push到GitLab(可以自己搭建)
3.代码提交触发Jenkins自动构建
4.Jenkins调用单元测试、代码检查等测试任务,如果测试通过自动构建Docker镜像
5.Jenkins将构建好的镜像推送到私有镜像仓库(自己搭建Harbor镜像库)
6.Jenkins调用容器管理平台(我们使用的Rancher)的接口进行升级
7.容器管理平台拉取镜像完成部署(测试环境or生产环境)
说明:
这里我们不仅使用了Docker,还选用容器编排工具构建了容器云平台,以方便我们快速实现CI/CD。
大家可以根据自己情况选择,如Kubernetes、Rancher(Rancher2.0以后底层使用的编排工具也是Kubernetes)等。
三、SpringCloud基于Docker的实践
我们使用Docker,主要因为以下4点:
1.Docker提供一个简单、轻量的建模方式
2.Docker使团队职责的逻辑分离
3.可以实现快速高效的开发生命周期
4.团队使用面向服务的架构
以下介绍如何构建Docker镜像和配置细节。
1.项目目录
Dockerfile及相关文件一般放到项目子目录,由开发维护。
这种方式对研发提出了更高的技能要求,这也是近期全栈工程师比较火的一个原因。
当然,具体协作方式还是根据公司情况定。
以下是我们的项目目录:
2.编写Dockerfile(供参考)
注:
配合自动化工具使用效果更好。
FROM
ADD *.jar service.jar
COPY formFile /
ENTRYPOINT [ "sh", "-c", "java -jar service.jar" ]
3、模块配置
我们将SpringCloud相关的配置放到了bootstrap.yml文件,需要注意的配置如下:
注意标红部分,服务要以IP地址方式注册到注册中心,否则注册中心无法做心跳检测,因为容器之间默认无法通过hostname通信。
我们也可以搭建内部DNS方式解决此问题。
服务发现中心建议配置成高可用(比如两个注册中心互相注册),也需要上图配置。
4、打包构建
这里截取了Jenkins里的打包及构建命令:
1.打包
2.构建
5、容器启动配置(docker-compose.yml)
version:
'2'
services:
zipkin:
image:
environment:
eureka.client.service-url.defaultZone:
http:
//discovery:
8761/eureka/
stdin_open:
true
tty:
true
links:
- discovery2:
discovery
volumes:
- /data/log:
/target/log
ports:
- 9411:
9411/tcp
service-config:
image:
hostname:
config
environment:
eureka.client.service-url.defaultZone:
http:
//discovery:
8761/eureka/
stdin_open:
true
tty:
true
links:
- discovery2:
discovery
volumes:
- /data/log:
/target/log
ports:
- 8889:
8889/tcp
service-monitor:
image:
environment:
eureka.client.service-url.defaultZone:
http:
//discovery:
8761/eureka/
stdin_open:
true
tty:
true
links:
- discovery1:
discovery
volumes:
- /data/log:
/target/log
discovery2:
image:
environment:
eureka.client.service-url.defaultZone:
http:
//discovery:
8761/eureka/
stdin_open:
true
tty:
true
links:
- discovery1:
discovery
volumes:
- /data/log:
/target/log
ports:
- 8762:
8761/tcp
discovery1:
image:
environment:
eureka.client.service-url.defaultZone:
http:
//discovery:
8761/eureka/
stdin_open:
true
tty:
true
links:
- discovery2:
discovery
volumes:
- /data/log:
/target/log
daas-monitor:
image:
environment:
eureka.client.service-url.defaultZone:
http:
//discovery:
8761/eureka/
stdin_open:
true
tty:
true
links:
- discovery1:
discovery
volumes:
- /data/log:
/target/log
ports:
- 9080:
9080/tcp
proxy-server:
image:
environment:
eureka.client.serviceUrl.defaultZone:
http:
//discovery:
8761/eureka/
stdin_open:
true
links:
- discovery1:
discovery
tty:
true
links:
- oauth2-server:
oauth
volumes:
- /data/log:
/target/log
ports:
- 8111:
8443/tcp
oauth2-server:
image:
environment:
eureka.client.serviceUrl.defaultZone:
http:
//discovery:
8761/eureka/
stdin_open:
true
lin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于Spring Cloud的微服务容器化实践 基于 Spring Cloud 微服 容器 实践
![提示](https://static.bdocx.com/images/bang_tan.gif)