如何更快地交付软件,每周、每天甚至每个小时向用户发布新特性?如何让新员工在入职后就能部署代码?在如此快的节奏下如何保证质量?快,我们应用开发面临的主要挑战,交付越快就越能紧密地收集到用户反馈,从而更有效地满足用户需求。
微服务、DevOps、云计算,业界应对“快”挑战的三大兵器,但其中任何一件都不是能轻松玩转的。微服务,在带来好处的同时,也引入了大量复杂度;DevOps,不仅要求团队文化、组织架构和研发流程做出调整,还对应用开发提出了新的要求;虚拟机、容器、镜像等新技术亟待学习,我们能快速跨越云计算这套技术栈吗?
Spring Cloud,它将帮我们填平横跨在应用开发与微服务、DevOps、云计算之间的沟壑,让我们轻松拥抱云上微服务,但你知道它是如何做到的吗?你对它有全面的了解吗?你知道如何正确使用它吗?新概念新技术层出不穷,让人云里雾里,你是否想拨开云雾对它们有更清晰的认知?磨刀不误砍柴工,赶快来看一看吧,通过本系列文章你将了解到如下内容:
随着互联网重构各行各业的速度不断加快,我们应用开发主要遭遇了哪些新的挑战?快,天下武功唯快不破,应用开发的速度也越来越快。软件研发流程运转越快,企业就能更快地交付软件,就能更紧密地收集用户反馈,从而更有效地满足用户需求,打造出更加优秀的产品,从而构筑起强大的竞争力,但:
这就是我们应用开发面临的主要挑战,微服务、DevOps、云计算是业界应对此挑战的三大法宝:
上述三件宝物中的任何一件都不是轻轻松松就能玩转的,接下来我们分头来看一看,在掌握使用它们时会遇到哪些问题或困难:
现在我们已经初步清楚遇到了什么问题,接下来我们一起来看一下,Spring Cloud 是如何帮助我们应对这些挑战的?它会给应用开发带来哪些变化呢?我们人类文明的发展主要体现在分工合作上,就像水电成为基础设施之后,我们每家每户就不会自己生产水和电了,技术的发展也符合这个趋势,云计算就是将一些通用的、标准的技术纳入到基础设施范畴,让我们可以聚焦在业务领域,通过分工协作来提升交付的效率。Spring Cloud 也是遵循上述规则,从不同维度帮我们应用开发做了许多辅助工作,让应用开发变得更加简单。
Spring 作为应用开发框架已经存在很多年了,随着JAVA开发技术的不断发展丰富,Spring 的体量变得越来越大,配置使用也变得越来越复杂,尤其是云计算和微服务等新技术的出现,Spring Boot 和 Spring Cloud 应运而生了,新概念容易让人困惑,我们有必要厘清它们彼此的关系:
Spring Framework,一个开源 Java/Java EE 全功能栈的应用开发框架,包含了展示层、领域层、数据层等主流的技术框架:
1) 核心容器(Core Container)
2) AOP
3) 消息(Messaging)
4) Web
5)数据访问/集成(Data Access/Integration)
除此之外,围绕着 Spring Framework 已经形成一个庞大的生态圈,包含 Spring Data、Spring Batch、Spring Security、Spring Integration、Spring AMQP、Spring Mobile、Spring for Android、Spring Web Flow、Spring Shell 等顶级子项目,通过复用让开发者可以快速开发业务应用。
Spring Boot 对 Spring 做了一层简单包装,简化了 Spring 应用的开发,通过编写少量的代码就能搭建一个简单的应用。它秉持默认约定大于配置的理念,简化了原本复杂的配置文件,为 Spring 和第三方库提供开箱即用的设置,提供一套快速开发单个微服务的脚手架,让我们上手和开发更加方便高效。
一套分布式服务治理的框架,为我们提供分布式服务所依赖的配置中心、服务注册发现、断路器、负载均衡、微代理、消息总线、数据监控等套件。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老兵哥 」交流互动,谢谢!