微服务,一般需要解决4个问题

  1. 客户端如何访问这些服务?
  2. 每个服务之间是如何通信的?
  3. 如此多的服务,如何实现?
  4. 服务挂了,该如何解决?


微服务 - Spring Cloud & Dubbo_HTTP

微服务 - Spring Cloud & Dubbo_SpringCloud_02

Dubbo

微服务 - Spring Cloud & Dubbo_HTTP_03

  • Dubbo是一个RPC框架,服务治理集成非常完善,不仅提供了服务注册发现,负载均衡,路由等面向分布式集群,面向开发测试,服务治理和监控的可视化平台。
  • 应用间通信方式:RPC(Dubbo)。

Spring Cloud

微服务 - Spring Cloud & Dubbo_Dubbo_04

  • Spring Cloud,微服务架构下的一站式解决方案,微服务之间使用Http Restful调用方式:RestTemplate、Feign。HttpRestful:本身轻量易用,适用性强,可以很容易跨语言跨平台,或者与已有的系统交互。
  • 应用间通信方式:HTTP(SpringCloud)。

异步和消息(数据一致性)

Dubbo + Zookeeper 和 Spring Cloud 在服务发现时,对数据一致性做出了不同选择。

  • 前者以Zookeeper为注册中心,对于CAP理论[数据一致性、服务可用性、服务对网络分区故障的容错性],Zookeeper保证CP。
  • Eureka设计则遵循AP原则,应该是Eureka设计时认为对于服务发现而言,服务可用性比数据一致性更加重要。所以这种权衡取舍依据业务实际出发。

微服务 - Spring Cloud & Dubbo_微服务_05