微服务,一般需要解决4个问题
- 客户端如何访问这些服务?
- 每个服务之间是如何通信的?
- 如此多的服务,如何实现?
- 服务挂了,该如何解决?
Dubbo
- Dubbo是一个RPC框架,服务治理集成非常完善,不仅提供了服务注册发现,负载均衡,路由等面向分布式集群,面向开发测试,服务治理和监控的可视化平台。
- 应用间通信方式:RPC(Dubbo)。
Spring Cloud
- Spring Cloud,微服务架构下的一站式解决方案,微服务之间使用Http Restful调用方式:RestTemplate、Feign。HttpRestful:本身轻量易用,适用性强,可以很容易跨语言跨平台,或者与已有的系统交互。
- 应用间通信方式:HTTP(SpringCloud)。
异步和消息(数据一致性)
Dubbo + Zookeeper 和 Spring Cloud 在服务发现时,对数据一致性做出了不同选择。
- 前者以Zookeeper为注册中心,对于CAP理论[数据一致性、服务可用性、服务对网络分区故障的容错性],Zookeeper保证CP。
- Eureka设计则遵循AP原则,应该是Eureka设计时认为对于服务发现而言,服务可用性比数据一致性更加重要。所以这种权衡取舍依据业务实际出发。