Spring Cloud在国内中小型公司能用起来吗?

今天吃完饭休息的时候瞎逛知乎,忽然看到这个一个问题Spring Cloud在国内中小型公司能用起来吗?,吸引了个人注意。仔细的看了题主的问题,发现这是一个好问题,题主通过了一番思考,而且用图形全面的将本身的疑问表达了出来,做为一个研究并使用Spring Boot和Spring Cloud近两年的程序员,看的我手痒痒不答不快呀。

html

好问题

好问题必须配认真的回答,仔细的看了题主的问题,发现这个问题很是具备表明性,多是广大网友想使用Spring Cloud却又对Spring Cloud不太了解的共同想法,题主对Spring Cloud使用的方方面面都进行过了思考,包括市场,学习、先后端、测试、配置、部署、开发以及运维,下面就是题主本来的问题:前端

想在公司推广Spring Cloud,但我对这项技术还缺少了解,画了一张脑图,总结了种种问题。java

微服务是这样一个结构吗?nginx

前端或二方 - > ng集群 -> zuul集群 -> eureka-server集群 -> service provider集群

(二方指其余业务部门)git

想要明白这个问题,首先须要知道什么是Spring Boot,什么是Spring Cloud,以及二者之间有什么关系?

程序员

什么是Spring Boot

Spring Boot简化了基于Spring的应用开发,经过少许的代码就能建立一个独立的、产品级别的Spring应用。 Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就能够有条不紊地开始。多数Spring Boot应用只须要不多的Spring配置。github

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员再也不须要定义样板化的配置。用个人话来理解,就是Spring Boot其实不是什么新的框架,它默认配置了不少框架的使用方式,就像maven整合了全部的jar包,Spring Boot整合了全部的框架(不知道这样比喻是否合适)。redis

Spring Boot的核心思想就是约定大于配置,一切自动完成。采用Spring Boot能够大大的简化你的开发模式,全部你想集成的经常使用框架,它都有对应的组件支持。若是你对Spring Boot彻底不了解,能够参考个人这篇文章:Springboot(一):入门篇

spring

什么是Spring Cloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,均可以用Spring Boot的开发风格作到一键启动和部署。Spring并无重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,经过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。数据库

微服务是能够独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,Spring Cloud就是这些微服务的大管家,采用了微服务这种架构以后,项目的数量会很是多,Spring Cloud作为大管家就须要提供各类方案来维护整个生态。

Spring Cloud就是一套分布式服务治理的框架,既然它是一套服务治理的框架,那么它自己不会提供具体功能性的操做,更专一于服务之间的通信、熔断、监控等。所以就须要不少的组件来支持一套功能,若是你对Spring Cloud组件不是特别了解的话,能够参考个人这篇文章:springcloud(一):大话Spring Cloud

Spring Boot和Spring Cloud的关系

Spring Boot 是 Spring 的一套快速配置脚手架,能够基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring Boot专一于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;Spring Boot使用了默认大于配置的理念,不少集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot来实现,能够不基于Spring Boot吗?不能够。

Spring Boot能够离开Spring Cloud独立使用开发项目,可是Spring Cloud离不开Spring Boot,属于依赖的关系。

Spring -> Spring Boot > Spring Cloud 这样的关系。


回答

如下为我在知乎的回答。

首先楼主问的这些问题都挺好的,算是通过了本身的一番思考,我刚好经历了你所说的中小公司,且都使用Spring Cloud而且已经投产上线。第一家公司技术开发人员15人左右,项目实例 30多,第二家公司开发人员100人左右,项目实例达160多。

实话说Spring Boot、Spring Cloud仍在高速发展,技术生态不断的完善和扩张,难免也会有一些小的bug,但对于中小公司的使用来将,彻底能够忽略,基本均可以找到解决方案,接下来回到你的问题。

一、市场

据我所知有不少知名互联网公司都已经使用了Spring Cloud,好比阿里、美团但都是小规模,没有像我经历的这俩家公司,业务线所有拥抱Spring Cloud;另外Spring Cloud并非一套高深的技术,普通的Java程序员通过一到俩个月彻底就能够上手,但前期须要一个比较精通人的来带队。

二、学习

有不少种方式,如今Spring Cloud愈来愈火的状况下,各类资源也愈来愈丰富,查看官方文档和示例,如今不少优秀的博客在写spirng cloud的相关教程,我这里收集了一些Spring Boot和Spring Cloud的相关资源能够参考,找到博客也就找到人和组织了。

三、先后职责划分

其实这个问题是每一个系统架构都应该考虑的问题,Spring Cloud只是后端服务治理的一套框架,惟一和前端有关系的是thymeleaf,Spring推荐使用它作模板引擎。通常状况下,前端app或者网页经过zuul来调用后端的服务,若是包含静态资源也可使用nginx作一下代理转发。

四、测试

Spring-boot-starter-test支持项目中各层方法的测试,也支持controller层的各类属性。因此通常测试的步奏是这样,首先开发人员覆盖本身的全部方法,而后测试微服务内全部对外接口保证微服务内的正确性,再进行微服务之间集成测试,最后交付测试。

五、配置

session共享有不少种方式,好比使用tomcat sesion共享机制,但我比较推荐使用redis缓存来作session共享。彻底能够分批引入,我在上一家公司就是分批过渡上线,新旧项目经过zuul进行交互,分批引入的时候,最好是新业务线先使用Spring Cloud,老业务作过渡,当彻底掌握以后在所有替换。若是只是请求转发,zuul的性能不必定比nginx低,可是若是涉及到静态资源,仍是建议在前端使用nginx作一下代理。另外Spring Cloud有配置中心,能够很是灵活的作全部配置的事情。

六、部署

多环境不一样配置,Spring Boot最擅长作这个事情了,使用不一样的配置文件来配置不一样环境的参数,在服务启动的时候指明某个配置文件便可,例如:java -jar app.jar --spring.profiles.active=dev就是启动测试环境的配置文件;Spring Cloud 没有提供发布平台,由于jenkins已经足够完善了,推荐使用jenkins来部署Spring Boot项目,会省很是多的事情;灰度暂时不支持,可能须要本身来作,若是有多个实例,能够一个一个来更新;支持混合部署,一台机子部署多个是常见的事情。

七、开发

你说的包含html接口就是前端页面吧,Spring Boot能够支持,但其实也是Spring Mvc在作这个事情,Spring Cloud只作服务治理,其它具体的功能都是集成了各类框架来解决而已;excel报表能够,其实除过swing项目外,其它Java项目均可以想象;Spring Cloud和老项目能够混合使用,经过zuul来支持。是否支持callback,能够经过MQ来实现,仍是强调Spring Cloud只是服务治理。

八、运维

Turbine、zipkin能够用来作熔断和性能监控;动态上下线某个节点能够经过jenkins来实现;provider下线后,会有其它相同的实例来提供服务,Eureka会间隔一段时间来检测服务的可用性;不一样节点配置不一样的流量权值目前还不支持。注册中心必须作高可用集群,注册中心挂掉以后,服务实例会所有中止。

总结,中小企业是否能用的起来Spring Cloud,彻底取决于本身公司的环境,若是是一个技术活跃型的团队就大胆的去尝试吧,目前Spring Cloud是全部微服务治理中最优秀的方案,也是一个趋势,将来一两年可能就会像Spring同样流行,早接触早学习岂不更好。

但愿能解答了你的疑问。


Spring Cloud 架构

咱们从总体来看一下Spring Cloud主要的组件,以及它的访问流程

  • 一、外部或者内部的非Spring Cloud项目都统一经过API网关(Zuul)来访问内部服务.
  • 二、网关接收到请求后,从注册中心(Eureka)获取可用服务
  • 三、由Ribbon进行均衡负载后,分发到后端的具体实例
  • 四、微服务之间经过Feign进行通讯处理业务
  • 五、Hystrix负责处理服务超时熔断
  • 六、Turbine监控服务间的调用和熔断相关指标

图中没有画出配置中心,配置中心管理各微服务不一样环境下的配置文件。

以上就是一个完整的Spring Cloud生态图。

最后送一个完整示例的Spirng Cloud开源项目等你去spring-cloud-examples