如何正确使用 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年 ...
随机推荐
- 关于Block内部要不要使用weakSelf的几种情况
本文转载自http://www.jianshu.com/p/c6ca540861d9 关于Block内部要不要使用weakSelf的几种情况 我们知道当对block使用不当时会造成循环引用导致内存泄露 ...
- Mybatis动态查询
需要导入的jar包: 实体类User: package com.bjsxt.pojo; import java.io.Serializable; public class User implement ...
- Python字符串学习
Python字符串(不可变的): 一.相关的运算: 1.字符串的拼接: str = str1 + str2 2.字符串的重复: print(str * 3) 3.下标访问字符串某个字符: str[1] ...
- A* 算法讲解
在看下面这篇文章之前,先介绍几个理论知识,有助于理解A*算法. 启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无 ...
- HDU3191-How many paths are there(次短路的长度及其个数)
oooccc1 is a Software Engineer who has to ride to the work place every Monday through Friday. For a ...
- CC1605&CC1604 usb3.0+FPGA 高速视频采集 双目相机测评
CC1605&CC1604 usb3.0+FPGA 高速视频采集 双目相机测评 摄像头配置:ov5640.OV5642.mt9p031.mt9m001c12stm OV5640 xclk:24 ...
- 【Git】405- 分享:大牛总结的 Git 使用技巧
作者:你喜欢吃青椒么 来源:juejin.im/post/5d157bf3f265da1bcc1954e6 前言 本文是参考廖雪峰老师的Git资料再加上我自己对Git的理解,记录我的Git学习历程,作 ...
- irules
BIG-IP系统iRules基本概念_v11.6.1 2017年10月10日 00:35:16 ifelif 阅读数:1097 1 iRules介绍 什么是iRule iRule是BIG-IP本地 ...
- 201871010119-帖佼佼《面向对象程序设计(java)》第十三周学习总结
博客正文开头格式: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nw ...
- HyperLedger Fabric 1.4 生产环境动态添加组织及节点
网易云课堂视频在线教学,地址:https://study.163.com/course/introduction/1209401942.htm 1.1 操作概述 在“kafka生产环境部署” ...