如何正确使用 Spring Cloud?【下】
5. Spring Cloud 如何融合 DevOps?
接下来,我们来了解一下 Spring Cloud 在与 DevOps 融合方面可以做哪些事情,它是如何让应用持续交付更加快捷的?我们都知道,DevOps 打造了一套持续交付的流程,包括:开发、编译、测试、发布、运营等节点。如何让应用更顺畅地通过上述各个节点呢?Spring Cloud 可以在每个研发节点上做一些配合和优化:
- 开发环节,我们大家应该都试用过 Spring Initializer 创建过 Spring Boot 项目工程,除此之外我们还可以借助 Maven Archetype 来快速生成项目工程。Archetype 是 Maven 工程的模板工具包,一个 Archetype 定义了某种类型项目的基本骨架,借助它尽可能快地给用户提供示例工程。
- 测试环节,微服务通常对外提供 RESTful API,供各种类型客户端调用,而以往我们需要借助文档来记录这些 API 信息,以便其他人员查阅和测试。如果 API 发生了改变,那我们就需要同步更新文档,这会降低持续交付的效率,而 Swagger 可以帮我们自动生成 API 在线文档,与代码实现保持同步。在此基础上,我们还可以对 API 进行自动化测试。通过 Spring Boot 集成 Swagger,让接口测试变得更加自动化。
- 发布环节,使用 Spring Boot 开发的项目,可以嵌入应用服务器 Jetty、Tomcat 等,最适合发布成 Docker 镜像。我们可以提供制作镜像的 Dockerfile 模板,不再使用 Docker Maven 插件,而是在当前项目的根目录下新建一个 Dockerfile 文件,代码编写完了之后,用户只需要修改一些参数,直接手动执行命令将应用打成镜像,这样就不用深入学习容器相关技术了。
- 运营环节,我们可以接入统一配置中心、日志云、全链路追踪等平台,方便问题的定位解决。
6. Spring Cloud 如何适配云基础设施?
刚才我们已经详细介绍了 Spring Cloud 在开发框架、服务集成和融合 DevOps 等方面的内容,接下来我们看看 Spring Cloud 在适配云平台方面可以做哪些事情。通常为了让各种云计算技术栈对应用开发者透明,降低应用上云的难度,我们需要适配虚拟机、容器等不同类型的云基础设施。
虚拟机是物理机的抽象,包括操作系统、内存和存储等,在制作 VM 镜像的时候可以按需安装软件,例如:WEB 服务器和数据库等,这些软件也会出现在以该镜像启动的虚拟机中,VM 与它所在的主机,以及主机上其他 VM 相互隔离。容器在系统中只需要代码运行库环境所需的空间即可,同一个操作系统上的容器共享主机内核。由于实现原理不同,运行虚拟机和容器时所需的资源也不同。虚拟机本质上是一个完整的计算机,比容器需要更多的资源,而容器只是操作系统的一部分。一般容器集群资源密集度较低,因此在单个服务器上运行多容器要比在单个服务器上运行多 VM 更适合。
那我们的应用适合部署在哪种基础设施上呢?通常公共应用适合采用虚拟机部署,例如:消息队列、注册中心、数据库等等,这类应用对运行资源要求比较高,本身没有太多个组件构成;业务应用适合采用容器部署,我们可以将业务应用拆解成大量职责单一的微服务组件,每个组件对资源要求相对确定,而且在不同访问量下需要弹性伸缩。
因此,我们 DevOps 系统需要抽象出操作不同基础设施的管理接口,基于这些管理接口实现应用生命周期管理、服务治理等功能,这块可以借鉴国外厂商指定了一个云应用管理标准 CAMP(Cloud Application Management for Platform),它定义了应用构建、运行、管理、监控和更新等 API,以及资源模型和交互协议等。
7. Spring Cloud 填空式应用开发模式
在单个微服务构建上,Spring 已经从展示层、领域层和数据源层给我们提供了丰富的组件,我们只需要关注业务逻辑代码的编写;在服务集成上,Spring Cloud 已经提供了微服务全家桶,我们只需要引用这些服务,不需要自行搭建这些公共服务;在对接 DevOps 和 云基础设施上,我们可以做一些优化和适配。在它的支持下,我们可以更加轻松地拥抱微服务、DevOps 和云计算,更好地应对新技术挑战。遵循分工协作的理念,Spring Cloud 给我们提供了一种填空式的开发模式,在这种开发模式下,我们只需要聚焦业务和用户,从而以更快地迭代速度打磨出优秀的产品。
8. 总结
Spring 家族变得越来越庞大,包括 Spring Framework、Spring Boot、Spring Cloud 等,如果我们对它没有一个全局的认知,那我们很容易迷失在技术细节当中,也用不好这款产品。本文是作者参与公司微服务框架研发过程中积累的经验认知,可以作为 Spring Cloud 知识体系的索引,后续可以根据它深入学习某个特性。
本文主要价值是帮助大家梳理出 Spring Cloud 相关的知识框架,也就是我们常说的全局视角或者上帝视角。有了这个框架之后,我们可以根据自己的需要按图索骥找相关节点的资料来研究学习,不至于陷入细节找不到方向。当然,考虑到我们每个人的工作学习情况不同,平时遇到的问题也不同,本文内容无法覆盖所有人遇到的问题,请大家留言提问,也欢迎关注「 IT老兵哥 」交流互动,谢谢!
本系列其他文章索引如下:
如何正确使用 Spring Cloud?【下】的更多相关文章
- Spring Cloud下微服务权限方案
背景从传统的单体应用转型Spring Cloud的朋友都在问我,Spring Cloud下的微服务权限怎么管?怎么设计比较合理?从大层面讲叫服务权限,往小处拆分,分别为三块:用户认证.用户权限.服务校 ...
- 如何正确使用 Spring Cloud?【中】
3. Spring 集成了哪些常用组件? 从 2004 年发布 1.0 版本开始,Spring 目前已经演进至 5.x 版本了,为不同时期的应用开发提供了强有力的支撑.现在我们正面对微服务.DevOp ...
- 如何正确使用 Spring Cloud?【上】
如何更快地交付软件,每周.每天甚至每个小时向用户发布新特性?如何让新员工在入职后就能部署代码?在如此快的节奏下如何保证质量?快,我们应用开发面临的主要挑战,交付越快就越能紧密地收集到用户反馈,从而更有 ...
- Spring Cloud下基于OAUTH2认证授权的实现
GitHub(spring -boot 2.0.0):https://github.com/bigben0123/uaa-zuul 示例(spring -boot 2.0.0): https://gi ...
- 【spring boot】spring cloud下spring boot微服务启动没有报错,但是访问访问不到
spring cloud下spring boot微服务启动没有报错,但是访问访问不到 解决方法: 可能是端口被占用了,但是依旧启用成功了. 更改一下项目启用的端口号,再重新启动查看是否可以正常访问.
- Spring Cloud下基于OAUTH2+ZUUL认证授权的实现
Spring Cloud下基于OAUTH2认证授权的实现 在Spring Cloud需要使用OAUTH2来实现多个微服务的统一认证授权,通过向OAUTH服务发送某个类型的grant type进行集中认 ...
- Spring Cloud下使用Feign Form实现微服务之间的文件上传
背景 Spring Cloud现在已经被越来越多的公司采用了,微服务架构比传统意义上的单服务架构从复杂度上多了很多,出现了很多复杂的场景.比如,我们的产品是个app,支持第三方登录功能,在手机端调 ...
- Spring Cloud 升级最新 Finchley 版本,踩了所有的坑!
Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Boot 2.x 的 Finchley 版本,现在一起为项目做一次整体框架升级. 升级前 ...
- Spring Cloud 升级最新 Finchley 版本,踩坑指南!
https://blog.csdn.net/youanyyou/article/details/81530240 Spring Cloud 升级最新 Finchley 版本,踩了所有的坑! 2018年 ...
随机推荐
- shell配置mysql主从
Environment:CentOS7两台主机 一台做主机,一台做备份机 注意: 首先第一步关闭两台机器的防火墙 主机shell操作: #!/bin/bash slave_user='zjt' sla ...
- 基本shell脚本
#!/bin/bash attr=() num= while true do read -p ">>input:" name attr[$num]=$name echo ...
- (一)sync分析之为啥el-dialog中的visible需要使用.sync
首先,笔者在使用element-ui 中的dialog组件时,发现visible属性在使用时需要添加.sync才生效,心中好奇,所以研究一下原理 我们先自己创建一个dialog组件,如下 当我们点击关 ...
- Linux 使用 docker 下搭建xunsearch 搜索引擎服务
Linux 使用 docker 下搭建 xunsearch 搜索引擎服务 安装 docker 环境(菜鸟教程有说明) 安装docker说明 下载并运行 xunsearch 的服务端:docker安装x ...
- WebSSH画龙点睛之lrzsz上传下载文件
本篇文章没有太多的源码,主要讲一下实现思路和技术原理 当使用Xshell或者SecureCRT终端工具时,我的所有文件传输工作都是通过lrzsz来完成的,主要是因为其简单方便,不需要额外打开sftp之 ...
- AutoLayout的那些事儿
转自:http://www.cocoachina.com/ios/20160530/16522.html 本文投稿文章,作者:MangoMade(简书) AutoLayout非常强大也非常易用,可读性 ...
- JQuery中操作元素的属性_对象属性
我们主要是通过attr去获取元素的属性: 看body内容: <body> <p> 账号:<input type="text" id="una ...
- ARTS-S linux常用命令
压缩 把文件夹test压缩成test.tar.gz tar -czvf test.tar.gz test centos同步网上时间 cp /usr/share/zoneinfo/Asia/Shangh ...
- iSensor APP 之 摄像头调试 OV9655 测试之二
参考上一篇博客 iSensor APP 之 摄像头调试 OV9655 本次链接主要介绍,使用ov9655输出QVGA格式,320*240 YUV输出,图像效果还不错,用户可以参考此模板改变分辨率,不 ...
- iSensor APP 之 摄像头调试 OV3640 OV2640 MT9d112 ov5642
iSensor APP 之 摄像头调试 OV3640 OV2640 MT9d112 iSensor app 非常适合调试各种摄像头,已测试通过的sensor有: l OV7670.OV7725.O ...