如何正确使用 Spring Cloud?【上】
如何更快地交付软件,每周、每天甚至每个小时向用户发布新特性?如何让新员工在入职后就能部署代码?在如此快的节奏下如何保证质量?快,我们应用开发面临的主要挑战,交付越快就越能紧密地收集到用户反馈,从而更有效地满足用户需求。
微服务、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,它们的依赖关系就是:
Spring -> Spring Boot > Spring Cloud
本文主要价值是帮助大家梳理出 Spring Cloud 相关的知识框架,也就是我们常说的全局视角或者上帝视角。有了这个框架之后,我们可以根据自己的需要按图索骥找相关节点的资料来研究学习,不至于陷入细节找不到方向。当然,考虑到我们每个人的工作学习情况不同,平时遇到的问题也不同,本文内容无法覆盖所有人遇到的问题,欢迎大家留言提问,关注「 IT老兵哥 」,赋能程序人生!
本系列其他文章索引如下:
如何正确使用 Spring Cloud?【上】的更多相关文章
- 如何正确使用 Spring Cloud?【中】
3. Spring 集成了哪些常用组件? 从 2004 年发布 1.0 版本开始,Spring 目前已经演进至 5.x 版本了,为不同时期的应用开发提供了强有力的支撑.现在我们正面对微服务.DevOp ...
- 如何正确使用 Spring Cloud?【下】
5. Spring Cloud 如何融合 DevOps? 接下来,我们来了解一下 Spring Cloud 在与 DevOps 融合方面可以做哪些事情,它是如何让应用持续交付更加快捷的?我们都知道,D ...
- 网络原因导致的 spring cloud config 读取git上的配置文件时报错:Cannot clone or checkout repository
今天在公司使用spring cloud config搭建配置中心的时候,出现了读取不到git库的问题:Cannot clone or checkout repository.在网上百度,前面几个答案都 ...
- 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 ...
- 手把手教你用Spring Cloud和Docker构建微服务
什么是Spring Cloud? Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接 ...
- Spring Cloud 升级最新 Finchley 版本,踩了所有的坑!
Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Boot 2.x 的 Finchley 版本,现在一起为项目做一次整体框架升级. 升级前 ...
- 凉凉了,Eureka 宣布闭源,Spring Cloud 何去何从?
今年 Dubbo 活了,并且被 Apache 收了.同时很不幸,Spring Cloud 下的 Netflix Eureka 组件项目居然宣布闭源了.. 已经从 Dubbo 迁移至 Spring Cl ...
- Spring Cloud 升级最新 Finchley 版本,踩坑指南!
https://blog.csdn.net/youanyyou/article/details/81530240 Spring Cloud 升级最新 Finchley 版本,踩了所有的坑! 2018年 ...
- 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 ...
随机推荐
- 2019-9-20:渗透测试,基础学习,笔记,metasploit的基础使用
使用kali下metasploit生成木马,控制windows系统 kali基于debin的数字取证系统,上面集成了很多渗透测试工具,前身为bt r3(BrackTrack) Metasploit,是 ...
- scrapy结合selenium抓取武汉市环保局空气质量日报
1.前言 目标网站:武汉市环境保护局(http://hbj.wuhan.gov.cn/viewAirDarlyForestWaterInfo.jspx).scrapy对接selenium模块抓取空气质 ...
- 3sql
-------------------- 三范式-- 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列. -- 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个 ...
- 英语口语考试资料Language learning
"Learning a language is easy. Even a child can do it!" Most adults who are learning a seco ...
- python迭代器生成器-迭代器和list区别
迭代 生成 for循环遍历的原理 for循环遍历的原理就是迭代,in后面必须是可迭代对象 为什么要有迭代器 对于序列类型:字符串.列表.元组,我们可以使用索引的方式迭代取出其包含的元素.但对于字典.集 ...
- 深入解析 ConcurrentHashMap 实现内幕,吊打面试官,没问题
在开发中,我们经常使用 HashMap 容器来存储 K-V 键值对,但是在并发多线程的情况下,HashMap 容器又是不安全的,因为在 put 元素的时候,如果触发扩容操作,也就是 rehash ,就 ...
- 深入理解跳跃链表在Redis中的应用
0.前言 前面写了一篇关于跳表基本原理和特性的文章,本次继续介绍跳表的概率平衡和工程实现,跳表在Redis.LevelDB.ES中都有应用,本文以Redis为工程蓝本,分析跳表在Redis中的工程实现 ...
- 带着canvas去流浪系列之一:绘制柱状图
[摘要] 学习使用canvasAPI来实现数据可视化. 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvasAPI绘制柱 ...
- [Mathematics][BJTU][Calculus]Detailed explanations and proofs of the Dirac-Abel Discriminant Methods which deal with the conditional convergence
So, today we will talk about the conditional convergence and two discriminant methods, namely Dirac- ...
- CollectionView常用的布局方式总结
结合网上的collectionView常用布局整合的collectionView使用工具 下载地址 支持五种布局方式ZFCollectionViewLayoutType有两种ZFCollectionV ...