写在前面 **本系列文章,假定读者会使用Spring Boot完成项目开发。**如果读者对这方面只是上有欠缺,建议先补足相应知识。
本文不涉及SpringCloud的相关组件,主要是为例让读者了解SpringCloud以及为什么要选择这个技术
SpringCloud怎么出现的
这个问题是需要站在企业的角度去思考的。说这个问题之前,我们先要明白几个问题:
- 互联网架构是如何演变的
- 演变过程中,不同级别企业是如何转型的
- 单机、分布式和集群的区别是什么? 如果你对上面这些问题有个大概的理解了(度娘一下),下面我说的你可能就更能理解了。
其实对企业来说,一切系统的开发,就是花更小的代价来完成更快速的响应,当然这里的“更小的代价”是一个相对的描述。
以前单机的时候,比较多的企业由于种种原因(资源有限,人力不足,为了快速开发一个产品,或上线一个网站),单机往往是一个不错的选择,此时会将应用程序、文件服务、数据库服务等资源集中在一台 Server 上。这样部署方便,就像tomcat部署war包。
后来,带宽越来越大,服务开发的时候可展示的资源(图片、短视频)也越来越多,相对的,脚手架也是百花齐放,与之带来的是对各种文件资源的依赖增多,以前一个网页加载完毕也就∏kb/十几kb/j几十kb,连接数也就那么些;现在动辄几百kb/几Mb,连接数还越来越多,用户越来越庞大。这些都是需要各种开销的,有兴趣的可以去搜一下“打开一个网页背后都发生了什么”。企业为了更快的处理好这个问题,就开始增加机器(分流),但是紧接着问题出现了,如何能保证这些机器间的隔离性以及业务的一致性(如对数据库的脏读、幻读、重复读等问题),所以某些大公司开始了专治各种不服,这就开启了集群时代。
再到后来,3G到4G时代,网络基本上不再作为互联网发展的限制,越来越多的用户开始习惯于使用互联网产品(比如知名的BAT),这些企业为了应对某些业务(如:双11)高峰时期,大量囤积了机器,自主研发了一系列技术,但是平时闲下来的时候,机器就空闲了,所以,企业需要降低成本,就有了公有云。公有云的出现,让小企业小公司也可以通过租用这些机器,完成自己系统云化,这就是云时代。
在这期间,单纯的集群下,特定时期出现的高峰访问某个业务,对机器压力都是很大的,机器高负荷运转,其他业务也会受影响(资源补足),所以企业开始拆分系统业务,一个业务分拆多个子业务,部署在不同的服务器上。 这就是分布式,Spring Cloud就是在这期间出现的,其本质实际上是整合了Spring旗下的很多组件。
所以,总的来说: 单机、分布式和集群是企业在不同时代下应对用户需求的各种部署方案。
可能有很多人之前对分布式和集群有点混淆。简单来说:
分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,分别部署在不同的服务器上
所以分布式的每一个节点,完成的是不同的业务,一个节点挂了,那么这个业务功能就无法访问了,甚至可能会影响到其他业务。而集群是一个比较有组织的架构,正因为有组织性,一个服务节点挂了,其他服务节点可以顶上来,从而保证了服务的健壮性。
所以说,集群可以理解为:你中有我,我中有你,手拉手肩并肩,一起保证服务的健壮性。
SpringCloud的组件
基本上在多家公司做过大型一点的商业项目,都会知道,分布式集群化方案,每家企业都有自己的特色,基本上都是基于nginx+docker,有条件的就是k8s+nginx+docker+jenkin或者nginx+dobbo+docker。 其实本质都是: 分流、自动化部署、自动调度。健壮性较好的,系统能够自愈,不需要重启服务。
详细点说就是:
服务治理、负载均衡、分布式配置中心、服务保护(熔断器、降级)、网关路由、监控。
这些之前主要是K8S+nginx在做。
现在Spring也开发出一套自己的(由于SpringCloud的版本命名特殊,所以,先说明,后续版本默认是基于Finchley.RELEASE
来表述),整合了一下,叫SpringCloud:
- Spring Cloud Eureka: 服务治理、服务注册(Eureka Client)、服务发现(Eureka Server)
- Spring Cloud Ribbon: 负载均衡
- Spring Cloud Consul: 配置中心
- Spring Cloud Zuul: 网关路由
- Spring Cloud Feign: 服务调用
- Spring Cloud Hystrix: 服务保护(熔断器、降级)
- Spring Boot Admin: 监控
当然,上面这些组件有的只是对应功能的一种实现方案,肯定还有其他的实现方案,具体的就需要大家自行探索了。
本文由 cuitpanfei 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2020/03/14 18:02