系统架构的发展
(1)单一应用架构。一个单体应用部署在一个服务器上。当流量越来越大的时候,可以将同一个应用部署到多台服务器上,然后进行负载均衡。
(2)分布式架构。将应用按照业务逻辑拆分成各个模块,各个模块部署在不同的服务器上,各个模块通过API互相调用服务。当服务越来越多的时候,此时用于提升服务质量的服务治理中心是关键。

什么是分布式
分布式就是利用物理架构由多个自治处理元素,自治之间不共享内存,通过网络发送消息合作

springcloud
springcloud是基于springboot实现分布式系统开发的一个框架。
springcloud的主要组件:
服务发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon
断路器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config

什么是Eureka
Eureka是一个基于 REST 服务的,服务注册与发现的组件。

Eureka由两个组件组成:
Eureka Server:注册中心,提供服务注册和发现的能力
Eureka Client :服务的客户端,向注册中心注册自己提供服务,并可以调用被注册中心发现的服务。

客户端之间如何互相调用服务:
可以使用RestTemplate或者feign调用服务

Eureka是客户端发现的方式,客户端会向注册中心拉取已注册的可用服务信息然后根据负载均衡策略选择某一台服务器调用服务,整个过程都是在客户端完成的。客户端的负载均衡基于Ribbon组件完成。添加@LoadBalanced之后,Ribbon组件就会自动帮你通过某种规则实现负载均衡。

dubbo
dubbo是一个阿里系的分布式服务治理框架,dubbo框架客户端间的通信是基于RPC。dubbo的注册中心是使用zookeeper。

Zookeeper与Eureka的区别
一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。在此Zookeeper保证的是CP, 而Eureka则是AP。Eureka可以接受分布式节点出现问题,而Zookeeper则不行。
另外Eureka是客户端发现,而Zookeeper服务端发现。
客户端发现:客户端要调用服务的时候,注册中心会向客户端返回所有的可用服务,由客户端来选择服务。
服务端发现:客户端调用服务的时候,需要通过代理来调用,服务对于客户端是隐藏的。