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?【下】的更多相关文章

  1. Spring Cloud下微服务权限方案

    背景从传统的单体应用转型Spring Cloud的朋友都在问我,Spring Cloud下的微服务权限怎么管?怎么设计比较合理?从大层面讲叫服务权限,往小处拆分,分别为三块:用户认证.用户权限.服务校 ...

  2. 如何正确使用 Spring Cloud?【中】

    3. Spring 集成了哪些常用组件? 从 2004 年发布 1.0 版本开始,Spring 目前已经演进至 5.x 版本了,为不同时期的应用开发提供了强有力的支撑.现在我们正面对微服务.DevOp ...

  3. 如何正确使用 Spring Cloud?【上】

    如何更快地交付软件,每周.每天甚至每个小时向用户发布新特性?如何让新员工在入职后就能部署代码?在如此快的节奏下如何保证质量?快,我们应用开发面临的主要挑战,交付越快就越能紧密地收集到用户反馈,从而更有 ...

  4. Spring Cloud下基于OAUTH2认证授权的实现

    GitHub(spring -boot 2.0.0):https://github.com/bigben0123/uaa-zuul 示例(spring -boot 2.0.0): https://gi ...

  5. 【spring boot】spring cloud下spring boot微服务启动没有报错,但是访问访问不到

    spring cloud下spring boot微服务启动没有报错,但是访问访问不到 解决方法: 可能是端口被占用了,但是依旧启用成功了. 更改一下项目启用的端口号,再重新启动查看是否可以正常访问.

  6. Spring Cloud下基于OAUTH2+ZUUL认证授权的实现

    Spring Cloud下基于OAUTH2认证授权的实现 在Spring Cloud需要使用OAUTH2来实现多个微服务的统一认证授权,通过向OAUTH服务发送某个类型的grant type进行集中认 ...

  7. Spring Cloud下使用Feign Form实现微服务之间的文件上传

    背景 ​ Spring Cloud现在已经被越来越多的公司采用了,微服务架构比传统意义上的单服务架构从复杂度上多了很多,出现了很多复杂的场景.比如,我们的产品是个app,支持第三方登录功能,在手机端调 ...

  8. Spring Cloud 升级最新 Finchley 版本,踩了所有的坑!

    Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Boot 2.x 的 Finchley 版本,现在一起为项目做一次整体框架升级. 升级前 ...

  9. Spring Cloud 升级最新 Finchley 版本,踩坑指南!

    https://blog.csdn.net/youanyyou/article/details/81530240 Spring Cloud 升级最新 Finchley 版本,踩了所有的坑! 2018年 ...

随机推荐

  1. 化鲲为鹏,我有话说 ,鲲鹏ARM架构的优势

    首先我在想为什么会用到鲲鹏,我个人认为最重要的还是要掌握自主研发的能力,打破国外关键技术的封锁.鲲鹏芯片完全是华为于自主设计内核,华为云Kunpeng服务器关键计算芯片全自研,提供产品可持续供应能力. ...

  2. 如何把图片变得炫酷多彩,Python教你这样实现!

    有趣的图片 如何能让图片变得好玩?首先需要让它动起来!可如果是多张图片,我们还可以将其拼接起来组成gif动图,可一张图怎么玩?记得之前写过一个小练习,把一张图片拆分成九宫格的分片图.那么,能否由此下手 ...

  3. Python中的Tcp协议的应用之Tcp服务端程序开发

    TCP通信协议是面向连接的可靠的网络通信协议. 网络间想要进行数据传输必须要用到socket,socket翻译过来叫做套接字,其主要作用是不同设备或同一台设备之间的进程通信工具. Python中的Tc ...

  4. markdown使用方法介绍

    markdown使用方法介绍 最近在更新微信公众号的时候发现有很多格式无法编辑尤其是涉及到代码的,每次都要截图贴上去,费时费力.穷则生变,研究了markdown格式,果然豁然开朗,一片新的天地瞬间打开 ...

  5. BZOJ 3108: [cqoi2013]图的逆变换

    3108: [cqoi2013]图的逆变换 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 627  Solved: 415[Submit][Statu ...

  6. POJ 3281 Dining(网络流-拆点)

    Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will c ...

  7. tensorflow sequence_loss

    sequence_loss是nlp算法中非常重要的一个函数.rnn,lstm,attention都要用到这个函数.看下面代码: # coding: utf-8 import numpy as np i ...

  8. 同时安装Office2016和Visio2016

    最近由于学习需要使用Visio,于是下载来安装.之前使用的Office2016一切正常,但是怎么都安装不上visio,把Office2016卸载了安,又没有word.ppt这些,反正就是没法同时安装上 ...

  9. Electron开发和Web开发对比

  10. 解决:Sass Loader has been initialised using an options object that does not ma tch the API schema.

    今天是犯傻的一天,第一回用sass遇到了bug: 结果就是:<style lang = 'scss'>.写成了<style lang = 'sass'> (脑子要清醒一点.太笨 ...