Spring Cloud总述

Spring Cloud Netflix 是 Spring Cloud 中的一套框架,由 Netflix 开发后来又并入 Spring Cloud 大家庭,它主要提供的模块包括:服务发现、断路器和监控、智能路由、客户端负载均衡等。

自己只是粗略的总结的一下知识点。想系统学习Spring Cloud相关知识,请查看https://windmt.com/2018/04/14/spring-cloud-1-services-governance/这个博主的系列文章,讲述的非常清楚。


Spring Cloud Netflix 的优势

对于微服务的治理而言,核心就是服务的注册和发现。所以选择哪个组件,很大程度上要看它对于服务注册与发现的解决方案。在这个领域,开源架构很多,最常见的是 Zookeeper,但这并不是一个最佳选择。

在分布式系统领域有个著名的 CAP 定理:C—— 数据一致性,A—— 服务可用性,P—— 服务对网络分区故障的容错性。这三个特性在任何分布式系统中不能同时满足,最多同时满足两个。

Zookeeper 是著名 Hadoop 的一个子项目,很多场景下 Zookeeper 也作为 Service 发现服务解决方案。Zookeeper 保证的是 CP,即任何时刻对 Zookeeper 的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性,但是它不能保证每次服务请求的可用性。从实际情况来分析,在使用 Zookeeper 获取服务列表时,如果 zookeeper 正在选主,或者 Zookeeper 集群中半数以上机器不可用,那么将就无法获得数据了。所以说,Zookeeper 不能保证服务可用性。

诚然,对于大多数分布式环境,尤其是涉及到数据存储的场景,数据一致性应该是首先被保证的,这也是 zookeeper 设计成 CP 的原因。但是对于服务发现场景来说,情况就不太一样了:针对同一个服务,即使注册中心的不同节点保存的服务提供者信息不尽相同,也并不会造成灾难性的后果。因为对于服务消费者来说,能消费才是最重要的 —— 拿到可能不正确的服务实例信息后尝试消费一下,也好过因为无法获取实例信息而不去消费。所以,对于服务发现而言,可用性比数据一致性更加重要 ——AP 胜过 CP。而 Spring Cloud Netflix 在设计 Eureka 时遵守的就是 AP 原则。

Eureka 本身是 Netflix 开源的一款提供服务注册和发现的产品,并且提供了相应的 Java 封装。在它的实现中,节点之间是相互平等的,部分注册中心的节点挂掉也不会对集群造成影响,即使集群只剩一个节点存活,也可以正常提供发现服务。哪怕是所有的服务注册节点都挂了,Eureka Clients 上也会缓存服务调用的信息。这就保证了我们微服务之间的互相调用是足够健壮的。

除此之外,Spring Cloud Netflix 背后强大的开源力量,也促使我们选择了 Spring Cloud Netflix:

  • 前文提到过,Spring Cloud 的社区十分活跃,其在业界的应用也十分广泛(尤其是国外),而且整个框架也经受住了 Netflix 严酷生产环境的考验。
  • 除了服务注册和发现,Spring Cloud Netflix 的其他功能也十分强大,包括 Ribbon,hystrix,Feign,Zuul 等组件,结合到一起,让服务的调用、路由也变得异常容易。
  • Spring Cloud Netflix 作为 Spring 的重量级整合框架,使用它也意味着我们能从 Spring 获取到巨大的便利。Spring Cloud 的其他子项目,比如 Spring Cloud Stream、Spring Cloud Config 等等,都为微服务的各种需求提供了一站式的解决方案。

你可能感兴趣的:(spring,Cloud)