# 34 | Spring Cloud:面向应用层的云架构解决方案 上期文章我们介绍了混合云,以及在实际操作中我们常见的几种混合云模式。今天我们来聊一聊Spring Cloud如何解决应用层的云架构问题。 对于Spring Cloud,你大概不会陌生,它跟Spring生态中的另一个开源项目Spring Boot,基本上已经成为国内绝大多数公司向微服务架构转型时的首选开发框架。 Spring Boot可以支持快速开发单个微服务应用,Spring Cloud则提供一系列的服务治理框架,比如服务注册、服务发现、动态路由、负载均衡以及熔断等等能力,可以将一个个独立的微服务作为一个整体,进行很好的管理和维护。 从业界实际使用情况和反馈来看,由于两者完美的搭配,Spring Cloud和Spring Boot确实是可以通过相对较低的技术成本,让开发人员方便快速地搭建起一套分布式应用系统,从而进行高效的业务开发。 同时,优秀的服务治理能力,也为其后续在稳定性保障工作方面打下了不错的基础。 (注:因为Spring Cloud必须基于Spring Boot框架才能发挥它的治理能力,所以下面我们提到的Spring Cloud是默认包含了Spring Boot框架的。) 所以,通常我们更多地是把Spring Cloud作为微服务应用层面的开发框架,帮助我们提升开发效率。看起来,它貌似跟“云”这个概念没有什么直接关系。 而实际上,在将应用与云平台连接方面,Spring Cloud也发挥着非常核心的作用。这也是为什么本期文章的标题没有直接定义为微服务治理架构,而是面向应用层的云架构。 下面我们具体来看看。 ## Spring Cloud框架中云的影子 目前整个Spring生态是由Pivotal这家商业公司在主导,但是Pivotal更大的目标是要为客户提供云上的端到端的解决方案。 所以Pivotal最早提出了Cloud-Native(云原生)的概念,或者说是一种理念,**目的是帮企业提供云上业务端到端的技术解决方案,全面提升软件交付效率,降低运维成本。**简单来说,就是除了业务解决方案和代码,其它事情都可以交给平台处理。 基于这样的理念,Pivotal打造了自己的云原生解决方案PCF(Pivotal Cloud Foundry),包括多云和跨云平台的管理、监控、发布,以及基础的DB、缓存和消息队列等等,一应俱全。 我们可以看到,在PCF整体解决方案中,Spring生态是向用户的业务应用层架构拓展的非常重要的一环,帮助其进行高效的业务开发,并提供后续的稳定性保障。  ![](https://static001.geekbang.org/resource/image/88/17/880d3bf4d381126a0795b06de279de17.jpg) 所以,这个时候,**Spring Cloud除了提供微服务治理能力之外,还成为了微服务应用与云平台上各项基础设施和基础服务之间的纽带,并在其中起到了承上启下的关键作用。** 至此,我们可以得出这样一个判断,也是本篇文章想传递的一个信息:**Spring Cloud不仅仅是微服务治理解决方案,它同时还是面向应用层的云架构解决方案。** 虽然Pivotal最早提出了云原生的理念,也提供了PCF这样的云原生整体商业解决方案,但是从目前业界的实际应用情况来看,Spring Cloud这个局部解决方案的应用更为广泛。 而且从图中我们看到,其与AWS的深度整合,也正反映出当前Spring Cloud在整个业界的影响力和被应用的广泛程度。 插句题外话。早期阿里开源的Dubbo,其实是跟Spring Cloud类似的微服务框架,并且经过阿里大规模的应用实践,可以说是非常优秀的开源项目。早些年国内在选择微服务框架时,Dubbo基本是首选,但是近年来因为开源维护不力,很早停止了版本更新,导致大量的用户流失,促使用户纷纷涌入Spring Cloud阵营。 而Spring Cloud经过近几年的发展,深入了解用户需求和痛点,不断完善改进,早已蜕变成我们所说的应用层的云架构,紧跟整个云计算发展趋势的大潮。 最近Dubbo重启开源维护,与阿里云EDAS产品体系整合,很大原因就是因为在用户技术架构体系里,缺少了Spring Cloud这样的产品,再加上Dubbo原有的一些用户基础,重启维护无论从哪方面看都是值得的。但是需要多久才能重拾用户的信心,就要看Dubbo的后续表现了。 以Spring Cloud为代表的云原生模式也是当前业界的主流模式。虽然它可能以解决应用层面的问题为主,尚未与云平台全面对接整合,不过它所带动起来的云原生的理念却被业界越来越广泛地接受。 同时,随着容器及编排技术的发展和成熟,就出现了另外一个云原生的体系,且活跃程度非常高:它就是以Google为首的CNCF(Cloud Native Computing Foundation)。下面我们一起看一下。 ## CNCF CNCF设想中的云原生分层架构示意图:  ![](https://static001.geekbang.org/resource/image/9e/b4/9e9ced0a6e757a2349cdc1c090b4d0b4.jpg) CNCF组织成立后,圈中大佬们纷纷加入,比如AWS、微软、思科、Pivotal等等,国内的腾讯云、阿里云和华为也参与其中,可见其影响力有多大。 CNCF的核心项目除了K8S外,还有Goggle的gRPC,Docker的ContainerD,CoreOS的Rkt等重量级开源项目。同时也有与Spring Cloud类似,但更加通用的微服务治理框架,如Linkerd和Envoy,它们被称为Service Mesh(服务网格)。 这些项目的优势在于,它们是与K8S集成和配套的,可以很便捷地应用于K8S生态中。虽然K8S自身也是支持服务发现、负载均衡这些基本的微服务治理的,但是在CNCF中,它显得更加包容与开放,不断吸引业界最佳实践的开源产品加入,共同打造更加开放的生态。下图为CNCF当前的项目。  ![](https://static001.geekbang.org/resource/image/e0/99/e08aed7839e2d337d2970a8c6739de99.jpg) 同时,因为目前K8S已实际上成为业界容器编排方面的标准,且被广泛应用,所以各大云厂商,无论公有云和私有云,都会主动支持K8S在云计算体系中的落地。 因此,我们根本不用担心K8S与云平台上 的资源和各种服务的对接问题,而且它最终也会将应用与云平台很好地连接起来,让开发者能够更加专注于业务开发。至于剩下的工作,则都交由平台去做。 当前,CNCF的各个项目社区非常活跃,以至于我们一提到云原生,就会联想到基于CNCF和K8S的生态体系。虽然Google和CNCF都不是云原生的提出者,但目前看来,它们都是云原生的最佳实践者。 ## 可以预见的技术发展趋势 我们可以看到,无论是Spring Cloud、CNCF、云原生、还是K8S等等新技术或理念,究其根本,都是为了能够更快更好地支持业务需求的快速实现。 从云原生的理念中,我们可以看到,跟业务无直接关系且相对通用的技术在不断地被标准化,而且标准化层面越来越高。 从最底层的硬件和网络设备,到上层数据库、缓存、文件存储以及消息队列等等基础组件服务,再到Spring Cloud和Service Mesh这样的应用层面的服务管理和治理能力,都正变得越来越标准和通用。 技术每被标准化一层,原来繁琐低效的工作就少一些,技术标准化的层面越高,技术门槛就会变得越低。我们可以作个大胆的预想:或许未来真的只会有业务解决方案和业务代码。 对于我们技术人来说,未来更多更迫切的能力需求将会是:如何利用好业界已有的丰富的技术产品和平台,在面对更加丰富多样且复杂的业务领域需求时,能够更加专注于寻求业界解决方案,以更好地将业务和技术连接起来。找到适合业务解决方案的技术并落地实现,而不再只是专注于技术层面的造轮子。 对于运维来说,我们同样要了解技术发展趋势。虽然我们不会直接参与具体的业务解决方案和代码的开发,但是,如果架构师是业务架构的设计者,那么我们应该成为技术架构的管理者,从效率、成本、稳定性这几个方面来检验架构是否合理,并为架构朝着更加健康的方向发展保驾护航。这也是运维职能转型和思路转变的一个重要方向。 欢迎你留言与我讨论。 如果今天的内容对你有帮助,也欢迎你分享给身边的朋友,我们下期见!