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

微服务、DevOps、云计算,业界应对“快”挑战的三大兵器,但其中任何一件都不是能轻松玩转的。微服务,在带来好处的同时,也引入了大量复杂度;DevOps,不仅要求团队文化、组织架构和研发流程做出调整,还对应用开发提出了新的要求;虚拟机、容器、镜像等新技术亟待学习,我们能快速跨越云计算这套技术栈吗?

Spring Cloud,它将帮我们填平横跨在应用开发与微服务、DevOps、云计算之间的沟壑,让我们轻松拥抱云上微服务,但你知道它是如何做到的吗?你对它有全面的了解吗?你知道如何正确使用它吗?新概念新技术层出不穷,让人云里雾里,你是否想拨开云雾对它们有更清晰的认知?磨刀不误砍柴工,赶快来看一看吧,通过本系列文章你将了解到如下内容:

  • 微服务、DevOps、云计算的关系
  • Spring Boot 的设计原理
  • Spring Boot 集成了哪些常用套件
  • Spring Cloud 微服务全家桶有哪些
  • Spring Cloud 如何支持 DevOps
  • Spring Cloud 如何适配云基础设施
  • Spring Cloud 填空式应用开发模式

1. 微服务、DevOps、云计算之间的关系

随着互联网重构各行各业的速度不断加快,我们应用开发主要遭遇了哪些新的挑战?快,天下武功唯快不破,应用开发的速度也越来越快。软件研发流程运转越快,企业就能更快地交付软件,就能更紧密地收集用户反馈,从而更有效地满足用户需求,打造出更加优秀的产品,从而构筑起强大的竞争力,但:

  • 如何做到每周、每天甚至每个小时向客户发布新特性呢?
  • 如何让新员工在入职第一天甚至面试阶段就部署代码呢?
  • 在代码部署之后,如何确信应用运行正常而安然入睡呢?

这就是我们应用开发面临的主要挑战,微服务、DevOps、云计算是业界应对此挑战的三大法宝:

  • 微服务:互联网业务的复杂度和规模都在快速地增长,单体式应用很难满足这种发展需求,将应用程序分解成独立的微服务,每个微服务都能很好地完成一个小任务,化整为零。每个微服务可以选择最合适的技术和语言来开发,由小型团队创建和管理,彼此沟通成本较低,从而做到快速迭代。
  • DevOps:微服务解决了单个应用规模大、迭代速度慢、扩展变更难等问题,提升了应用开发的速度,但整体研发流程的效率还有待于提升,传统职能矩阵式的研发方式就不太适应了,需要以产品为线索打破不同职责团队之间的隔阂,开发运维一体化就应运而生了,做到持续集成和持续交付。
  • 云计算:微服务关注软件的开发期,云计算关注软件的运行期,DevOps 就是连通开发期和运行期。互联网业务的访问量都是海量的,而且存在波峰波谷,这就需要应用能够弹性伸缩,也就要求基础资源可以自动地创建和销毁,从而引出了虚拟机和容器等云计算技术。

上述三件宝物中的任何一件都不是轻轻松松就能玩转的,接下来我们分头来看一看,在掌握使用它们时会遇到哪些问题或困难:

  • 首先,应用架构从“单体式”演进到“微服务”,在拥抱“微服务”上我们会遇到什么困难呢?任何事物都有两面性,“微服务”也不例外,它在带来一些好处的同时,也引入了一些复杂度。相对于单体式架构,微服务在迭代速度、部署频率、系统性能、系统扩展性、技术栈多样性等方面更有利于快速交付,但在架构复杂度、部署难度、运维难度、问题定位、管理成本等方面都有不少新的挑战,那我们如何扬长避短真正拥抱“微服务”呢?
  • 再者,DevOps,开发运维一体化,在此基础上达到更高效地持续集成和持续交付。除了对企业文化、组织结构和流程系统提出了新的要求,DevOps 也要求我们应用开发做出新的调整。应用是否足够标准化?是否能够适用部署流水线?是否能够做到一键部署等等?
  • 最后,云计算,这是一种全新的 IT 基础设施,我们可以像使用水电一样使用计算、存储和网络等资源。虚拟机、容器、镜像等新技术需要我们熟悉和掌握,我们大家能否快速跨越云计算这套技术栈呢?我们的应用能否快速地迁移上云呢?怎样充分使用云计算的特性,让应用更具弹性,这些都是我们将要面临和解决的新挑战。

2. Spring、Spring Boot、Spring Cloud 之间的关系

现在我们已经初步清楚遇到了什么问题,接下来我们一起来看一下,Spring Cloud 是如何帮助我们应对这些挑战的?它会给应用开发带来哪些变化呢?我们人类文明的发展主要体现在分工合作上,就像水电成为基础设施之后,我们每家每户就不会自己生产水和电了,技术的发展也符合这个趋势,云计算就是将一些通用的、标准的技术纳入到基础设施范畴,让我们可以聚焦在业务领域,通过分工协作来提升交付的效率。Spring Cloud 也是遵循上述规则,从不同维度帮我们应用开发做了许多辅助工作,让应用开发变得更加简单。

Spring 作为应用开发框架已经存在很多年了,随着JAVA开发技术的不断发展丰富,Spring 的体量变得越来越大,配置使用也变得越来越复杂,尤其是云计算和微服务等新技术的出现,Spring Boot 和 Spring Cloud 应运而生了,新概念容易让人困惑,我们有必要厘清它们彼此的关系:

2.1 Spring

Spring Framework,一个开源 Java/Java EE 全功能栈的应用开发框架,包含了展示层、领域层、数据层等主流的技术框架:

1) 核心容器(Core Container)

  • Spring-Core:核心工具类,Spring 其他模块大量使用 Spring-Core;
  • Spring-Beans:Spring 定义 Bean 的支持;
  • Spring-Context:运行时 Spring 容器;
  • Spring-Context-Support:Spring 容器对第三方包的集成支持;
  • Spring-Expression:使用表达式语言在运行时查询和操作对象;

2) AOP

  • Spring-AOP:基于代理的 AOP 支持;
  • Spring-Aspects:基于 AspectJ 的 AOP 支持;

3) 消息(Messaging)

  • spring-Messaging:对消息架构和协议的支持。

4) Web

  • Spring-Web:提供基础的 Web 集成的功能,在 Web 项目中提供Spring的容器;
  • Spring-WebMVC:提供基于 Servlet 的 Spring MVC;
  • Spring-WebSocket:提供 WebSocket 功能;
  • Spring-WebMVC-Portlet:提供 Portlet 环境支持;

5)数据访问/集成(Data Access/Integration)

  • Spring-JDBC:提供以JDBC访问数据库的支持;
  • Spring-TX:提供编程式和声明式的事务支持;
  • Spring-ORM:提供对对象/关系映射技术的支持;
  • Spring-OXM:提供对对象/XML映射技术的支持;
  • Spring-JMS:提供对JMS的支持;

除此之外,围绕着 Spring Framework 已经形成一个庞大的生态圈,包含 Spring Data、Spring Batch、Spring Security、Spring Integration、Spring AMQP、Spring Mobile、Spring for Android、Spring Web Flow、Spring Shell 等顶级子项目,通过复用让开发者可以快速开发业务应用。

2.2 Spring Boot

Spring Boot 对 Spring 做了一层简单包装,简化了 Spring 应用的开发,通过编写少量的代码就能搭建一个简单的应用。它秉持默认约定大于配置的理念,简化了原本复杂的配置文件,为 Spring 和第三方库提供开箱即用的设置,提供一套快速开发单个微服务的脚手架,让我们上手和开发更加方便高效。

2.3 Spring Cloud

一套分布式服务治理的框架,为我们提供分布式服务所依赖的配置中心、服务注册发现、断路器、负载均衡、微代理、消息总线、数据监控等套件。Spring Boot 是 Spring 的快速配置脚手架,我们可以基于 Spring Boot 快速开发单个微服务,Spring Cloud 是基于 Spring Boot 的微服务开发套装;Spring Boot 专注于快速地开发单个微服务,Spring Cloud 关注全局的服务治理框架。

Spring 没有重复发明轮子,它只是将目前各家公司比较成熟、经过考验的服务框架组合起来,通过 Spring Boot 封装屏蔽了复杂的配置和实现原理,最终给开发者提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。微服务是可以独立部署、水平扩展、独立访问的服务单元,Spring Cloud 就是这些微服务的大管家,微服务架构下组件的数量会非常多,Spring Cloud 需要提供各种方案来管理整个生态。Spring Boot 可以不依赖 Spring Cloud 独立使用,但是 Spring Cloud 离不开 Spring Boot,它们的依赖关系就是:

  1. Spring -> Spring Boot > Spring Cloud

本文主要价值是帮助大家梳理出 Spring Cloud 相关的知识框架,也就是我们常说的全局视角或者上帝视角。有了这个框架之后,我们可以根据自己的需要按图索骥找相关节点的资料来研究学习,不至于陷入细节找不到方向。当然,考虑到我们每个人的工作学习情况不同,平时遇到的问题也不同,本文内容无法覆盖所有人遇到的问题,欢迎大家留言提问,关注「 IT老兵哥 」,赋能程序人生!

本系列其他文章索引如下:

如何正确使用 Spring Cloud?【上】的更多相关文章

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

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

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

    5. Spring Cloud 如何融合 DevOps? 接下来,我们来了解一下 Spring Cloud 在与 DevOps 融合方面可以做哪些事情,它是如何让应用持续交付更加快捷的?我们都知道,D ...

  3. 网络原因导致的 spring cloud config 读取git上的配置文件时报错:Cannot clone or checkout repository

    今天在公司使用spring cloud config搭建配置中心的时候,出现了读取不到git库的问题:Cannot clone or checkout repository.在网上百度,前面几个答案都 ...

  4. Spring cloud项目实践(一)

    链接地址:http://sail-y.github.io/2016/03/21/Spring-cloud%E9%A1%B9%E7%9B%AE%E5%AE%9E%E8%B7%B5/ 什么是Spring ...

  5. 手把手教你用Spring Cloud和Docker构建微服务

    什么是Spring Cloud? Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接 ...

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

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

  7. 凉凉了,Eureka 宣布闭源,Spring Cloud 何去何从?

    今年 Dubbo 活了,并且被 Apache 收了.同时很不幸,Spring Cloud 下的 Netflix Eureka 组件项目居然宣布闭源了.. 已经从 Dubbo 迁移至 Spring Cl ...

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

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

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

    升级前 => 升级后 Spring Boot 1.5.x => Spring Boot 2.0.2 Spring Cloud Edgware SR4 => Spring Cloud ...

随机推荐

  1. oracle内存占用过高和修改不当无法启动oracle实例的解决办法

    今天,在自己机器上装了oracle 12c,发现Oracle的服务Oracle RDBMS Kenel  Executable (OracleServiceORCL)占用内存高达5G,本人电脑内存才1 ...

  2. C博客作业00—我的第一篇博客

    C博客作业00-我的第一篇博客 1. 你对网络专业或者计算机专业了解是怎样? 泛泛了解 - 原先只知道网络工程隶属于计算机工程学院,与院中其他专业一样,同样都需要学习大量的计算机基础知识,然后再分支学 ...

  3. 微信小程序获取二维码(直接上代码)https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN

    应为是直接返回二进制数据所有与其他接口些许差别,希望能帮助现在的你! 谢谢!!!    /** * 37.微信二维码生成 */ public String getWeiXinCourseMap() { ...

  4. vi指令详解

    ★ vi的模式(命令模式.插入模式.ex模式) 1)命令模式: 在我们刚刚通过vi新建或打开一个已经存在的文件时,首先默认被读取的模式就是“命令模式”,命令模式的特征就是,在编辑器窗口左下角的位置上没 ...

  5. requests请求库

    # coding = utf-8 """ 同urllib一样 requests 也是发送http请求的第三方库 兼容Python2和3 实现了http的绝大部分功能. 安 ...

  6. 【02】对象的Getter and Setter

    java和C#非常相似,它们大部分的语法是一样的,但尽管如此,也有一些地方是不同的. 为了更好地学习java或C#,有必要分清它们两者到底在哪里不同. 我们这次要来探讨对象的Getter and Se ...

  7. Java基础面试题及答案(四)

    反射 57. 什么是反射? 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力 Java反射: 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能 ...

  8. Python用正则表达式匹配汉字

    Python用正则表达式匹配汉字 匹配多个汉字,不包括空格 import re res = re.match(r'[\u4E00-\u9FA5]+', '我是 汉字') print(res) # &l ...

  9. 【JAVA - 基础】之String存储机制浅析

    本文主要解决以下几个问题 String源码解析? String和new String的区别? String通过"+"或concat累加时的对象创建机制? StringBuilder ...

  10. 生活小插曲(长篇连载,持续更新ing)^_^

    这个帖子,长期记录一些小小的生活插曲 在北京朋友开店了-关于同学开快餐店的故事.今天下午听说这个朋友在附近开了一个店,下午5点多吧,出门去他那里去了.走路过去的.在那里聊了将近一个小时吧.对最近我们自 ...