谈一谈对spring cloud的宏观理解
最近学习了spring cloud的一些主要组件,大概的看了下这些组件的源码。想着可以写一篇文章来总结一下对于spring cloud的理解。技术细节就不写了,主要是从宏观上来谈谈对spring cloud的理解。
一、什么是spring cloud?
spring cloud 可以认为是一种分布式服务的框架,它为开发人员提供了快速构建分布式系统的常用模式的一些工具,比如说配置管理、服务的注册与发现、服务调用的负载均衡、资源隔离、熔断降级等等,spring cloud为这些提供了一阵套完整的解决方案。
二、什么是分布式系统?
上面说spring cloud是一种分布式服务的框架,那么什么是分布式服务呢?
在谈什么是分布式系统之前,可以先回顾一下以前的那种所有的功能模块都放在一个服务里的那种系统,一个系统化几十万行代码,部署在单台机器上。一个比较大的系统,可能有十几个人协作开发,但是使用的都是同一套代码,大家功能开发完成过后,使用的都是同一套代码来发布生产上线。这样做有些什么问题呢?
- 代码耦合严重,维护很困难。大家使用的同一套代码,一旦一个人有需求需要修改公用代码,由于对其他人的业务逻辑不熟悉,很可能改了上线过后,会影响其他人的已经存在于线上的功能。另外数据也有可能是耦合在一起的,一个人修改了数据,然后并不知道别人对这个数据是有依赖的,最后一上线,就发现出问题了。系统不复杂还好,随着业务发展,功能增多,在原有的一个工程里面不断地增加代码,这对于后期的维护简直是一个灾难。
- 代码复用性问题。多个人协作开发,一个人之前写过这个功能的代码,但对另外一个人没有感知且需要依赖这个功能的代码,那另外那个人有可能就会写出来相同功能的不同代码出来。
- 开发效率问题。一个大系统多个人开发,你的功能开发好了,并不能立马就能上线,可能要等到别人的也开发好了过后才能一起测试上线。
- 可用性问题。别人模块的代码产生了bug,比如死循环导致CPU资源过载,或者内存溢出的一些故障,也会导致自己模块收到影响。另外程序部署在单个节点,假如说机器断电、宕机等,就会导致服务的不可用。
- 请求量很大,单台机器瓶颈了。一台机器,