Spring Cloud是个啥
其实你问我Spring Cloud是个啥,我也还是说不清的。因为看了网上的文章,我还是看的有点懵逼的。毕竟,我还是项(人)目(生)经验太少,too young,想东西too simple了。不过,作为一名懒惰的程序员,就算sometimes naive,在设计的时候多多少少有一点倾向Spring Cloud所提倡的来实现了。
微服务
所谓微服务,就是把整个项目分解成多个功能模块。由于经过分解,这些模块都很小,所以【微】。并且这些模块都独立实现,对外界提供【服务】。这些微服务再通过轻量级的通讯机制(如http)来组合在一起,构成一个大型的系统再对外界提供服务。
这样做的优点。第一,各个微服务之间都是松耦合的,能非常方便地增删改微服务。第二,由于微服务都比较小,所以其实现的难度和复杂度都小,升级改版维护难度小,甚至重构也算不算麻烦,可以让个小团队独自掌握。微服务都是各自独立,部署互不影响,对环境依赖小。
Spring Boot与Spring Cloud
springboot简单的说,是整合了常用的spring系列框架和配置的框架,使得我们用springboot再也不用配置复杂的文件,实现开箱即用。而springcloud是基于springboot的,新潮东西啊,不用springboot这种新东西就用不上springcloud这种更新的东西。
应该可以这么理解吧,我们可以用springboot来实现各个微服务(当然,如果只是实现的话,用servlet都可以,但是人家springcloud就是要你用springboot)。一个大型项目进行微服务拆分,自然微服务数量就会非常多。然后又像spring体系下的东西众多整出个springboot那样。springcloud就是用来管理众多的微服务的。
举个例子。就例如我的博客。当前版本的博客在设计的时候,我就把整个博客系统才分为三个微服务:做图床用的文件服务器,管理文件床的系统和这个博客。文件服务器我开始使用tomcat来实现的,之后换成了nginx。而管理文件床的系统也经历了两个版本,第一个版本是用mysql储存的,另一个使用mongodb来储存的。所以我没有用到springcloud,甚至他们之间也没有进行任何通讯,只是单纯是个独立的服务。但是这种微服务形式的解耦所带来的灵活性显然是很高的。但是可以继续想象,如果之后我为了在博客里添加什么奇奇怪怪的功能,又拆分出好几个,十几个甚至几十个微服务,他们之间还要通讯,其中一个微服务修改了什么,就可能要把其余的全部微服务,起码是配置文件改个遍。哇,真麻烦,因此才有了springcloud。
Spring Cloud干啥子了
既然如此,具体springcloud帮我们干了啥呢。springcloud的一些核心功能:
- 分布式/版本化配置
- 服务注册和发现
- 路由
- 服务和服务之间的调用
- 负载均衡
- 断路器
- 分布式消息传递
我们来看个图(虽然我都看不懂,但还是要贴上了)
各个组件的工作流程是
- 请求统一通过API网关(Zuul)来访问内部服务.
- 网关接收到请求后,从注册中心(Eureka)获取可用服务
- 由Ribbon进行均衡负载后,分发到后端具体实例
- 微服务之间通过Feign进行通信处理业务
- Hystrix负责处理服务超时熔断
- Turbine监控服务间的调用和熔断相关指标
参考文章: