SpringCloud入门篇(一)- 简介

/ 默认分类javaSpringBootSpring Cloud / 没有评论 / 685浏览

写在前面 **本系列文章,假定读者会使用Spring Boot完成项目开发。**如果读者对这方面只是上有欠缺,建议先补足相应知识。

本文不涉及SpringCloud的相关组件,主要是为例让读者了解SpringCloud以及为什么要选择这个技术

SpringCloud怎么出现的

这个问题是需要站在企业的角度去思考的。说这个问题之前,我们先要明白几个问题:

  1. 互联网架构是如何演变的
  2. 演变过程中,不同级别企业是如何转型的
  3. 单机、分布式和集群的区别是什么? 如果你对上面这些问题有个大概的理解了(度娘一下),下面我说的你可能就更能理解了。

其实对企业来说,一切系统的开发,就是花更小的代价来完成更快速的响应,当然这里的“更小的代价”是一个相对的描述。

以前单机的时候,比较多的企业由于种种原因(资源有限,人力不足,为了快速开发一个产品,或上线一个网站),单机往往是一个不错的选择,此时会将应用程序、文件服务、数据库服务等资源集中在一台 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:

当然,上面这些组件有的只是对应功能的一种实现方案,肯定还有其他的实现方案,具体的就需要大家自行探索了。