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

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

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

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

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

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

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

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

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

  • 微服务:互联网业务的复杂度和规模都在快速地增加,单体式应用很难知足这种发展需求,将应用程序分解成独立的微服务,每一个微服务都能很好地完成一个小任务,化整为零。每一个微服务能够选择最合适的技术和语言来开发,由小型团队建立和管理,彼此沟通成本较低,从而作到快速迭代。
  • 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,它们的依赖关系就是:

Spring -> Spring Boot > Spring Cloud
复制代码

本文主要价值是帮助你们梳理出 Spring Cloud 相关的知识框架,也就是咱们常说的全局视角或者上帝视角。有了这个框架以后,咱们能够根据本身的须要按图索骥找相关节点的资料来研究学习,不至于陷入细节找不到方向。固然,考虑到咱们每一个人的工做学习状况不一样,平时遇到的问题也不一样,本文内容没法覆盖全部人遇到的问题,欢迎你们留言提问。

今天先分享到这里,若是你以为有价值,麻烦动动手指 转发 给其余须要的小伙伴。另外,老兵哥我后续还会分享职业规划、应聘面试、技能提高、影响力打造等经验,欢迎 关注 本专栏或歪信公主号 「IT老兵哥」!

公众号

本系列其余文章索引以下:

  • 如何正确使用 Spring Cloud?【中】
  • 如何正确使用 Spring Cloud?【下】
相关文章
相关标签/搜索