SpringCloud五大神器(对比Dubbo+Zookeeper)

微服务生态

在如今互联网盛行的今日,谈及架构,分布式微服务的理论应该火遍大江南北,其中以Spring家族发展而来的生态更是当今必备技能。
Spring是一个全家桶,集合了众家所长,俨然成为编程行业的春天,SpringBoot则简化了Spring中繁杂的配置,实现了自动装配,而SpringCloud则用于管理一个个的SpringBoot开发出的微服务。
因此说SpringCloud是一门技术不如说是一个生态。
SpringCloud主要用来解决由网络的不可靠而引发的一系列问题。

服务很多,客户端该如何访问?
众多的微服务该如何通信?
这么多服务该如何治理?
如果服务挂了该怎么办?

而为了解决这些问题,市面上出现了很多套解决方案,我认为都可以将其列入SpringCloud生态。
而SpringCloud NetFlix无疑是最火的,它完美的兼容了Spring生态,而最近出现的SpringCloud Alibaba更是势头正盛。

SpringCloud五大神器

Spring Cloud为了解决这一系列问题,推出了五大神器,分别为

  • 服务网关——Netflix Zuul
  • 客户端端负载均衡——Netflix Ribbon
  • 服务发现——Netflix Eureka
  • 断路器——Netflix Hystrix
  • 分布式配置——Spring Cloud Config

在讨论SpringCloud之前我们先来聊聊Dubbo,同样是为了解决微服务的管理问题,Dubbo更倾向于通信,因此对于通信,Dubbo采取了一种新的通信协议,RPC协议,而SpringCloud则采用原始的Http协议,这无疑使Dubbo在通信方面强于SpringCloud,但Dubbo生态只解决了通信与服务的治理问题,其他则需要自研或者集成其它组件,因此是不完整的。可是Dubbo表示它并不是想要与SpringCloud竞争,只是想单纯的做一款RPC通信的框架。

通信(对比Dubbo)

对于通信,SpringCloud采取的是使用RestTemplate的一个对象,通过客户端使用RequestMapping等方法传入客户端url,可以调用对象的方法,传入三个参数,分别为服务端url,传入的参数,返回的class对象来实现客户端任意网址访问服务端特地网址,可以保障安全性。而Dubbo则是通过@Reference注解来引用服务端的对象,直接调用对象中的方法,这种方式需要有相同的接口。

Zuul

为了解决服务很多,客户端如何访问的问题,SpringCloud Netflix采取了Zuul组件,Zuul其实是增加了一层api网关,类似nginx,反向代理的功能,不过Zuul自己增加了一些配合其他组件的特性。而Dubbo则没有这方面功能。

Ribbon

Ribbon是为了解决负载均衡而产生的组件,是为了使服务器之间的压力更加平均,不至于造成某些服务器并发量特别大,而其他的服务器基本没什么人访问。常用的策略有轮询、随机等……
相比于Ribbon,还有一个社区版组件Feign,它的使用方式更符合java后端开发的习惯,它是以接口的方式来调用的。而Dubbo则没有这方面功能。

Eureka(对比Zookeeper)

Eureka是SpringCloud中用于解决服务注册与发现的组件,有一个监控界面用来查看集群部署以及服务的注册。
这里存在一个CAP原则。

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

在这里容错性是必须要兼顾的,但鱼与熊掌不可兼得,在这里Eureka选择了AP原则,即首先保证了可用性和容错性,Eureka中集群之间的地位是平等且互相依赖的,有点类似于区块链,当一个服务器崩掉的时候并不会造成服务瘫痪,而是继续运转,与此同时Eureka的自我保护机制也会使崩掉的服务不会马上被杀死,而是继续保留等待它重新连接,因此在Eureka中服务可以保持长久可用,但数据不一定是最新的。
Zookeeper则是选择了CP原则,其有一个主服务器,下面有附属服务器,当一个服务器崩掉的时候则整个服务不可维持,但可以保证数据的准确性。

Hystrix

Hystrix断路器是为了防止服务雪崩,以及服务降级操作,同样有一个监控界面用来观察服务的状态,例如一个微服务需要调用A服务,A又需要调用B,此时B服务不可用,如果不做处理则会报出404、500等错误,但有了Hystrix的熔断机制,我们可以运行另一套方案,此时可以给用户返回一个错误的信息,告诉用户现在服务器有错误,而不会任其超时或者报错。
服务降级则是在某个时间点,有些服务器并发很高,有些则没什么用户时,服务器比较空闲的服务可以给出一个提示告诉用户服务暂时关闭,让用户去其他地方办理业务,从而将更多的资源倾斜向资源更紧张的服务器。

Spring Cloud Config

Spring Cloud Config通过客户端连接服务端,服务端连接远程服务器(如Git)实现远程动态修改配置,只需配置远程git的url等地址可以实现不修改源码,运维人员可以动态修改任意配置的操作。

五大神器的分工合作

正是因为有这五大神器,使得SpringCloud可以使各大系统之间协调合作,使开发变得更加简单。
SpringCloud五大神器(对比Dubbo+Zookeeper)_第1张图片

你可能感兴趣的:(SpringCloud五大神器(对比Dubbo+Zookeeper))