服务发现和rpc选择

rpc

使用rpc的目的: 让远程调用服务就像调本地服务一样简单

比http的优势:协议传输效率较低

sofarpc与grpc

性能: sofarpc好,grpc性能一般(单线程 30kqps,小于8k包时)
易用性: Http2出现较晚,迁移转换成本高,sofarpc支持的协议多
可行性: sofarpc的注册中心目前还没有正式支持SOFAMesh

服务发现

zookeeper

  1. 健康检查依赖TCP长链接活性探测不准确
  2. 需要在服务中集成sdk
  3. 更复杂的服务治理

参考

sofa-rpc-node: 目前只支持zk

k8s service

服务注册和发现,转发,负载均衡能力

缺点: 同一个应用的不同的实例提供了不同的服务会出错,只能在同集群内使用

istio

弥补k8s service的不足
可配置的服务发现(从k8s获取服务注册表),由Sidecar保持长连接,转发,负载并提供熔断、限流降级、调用链治理等能力

SOFAMesh

基于istio,还在测试中

Resize icon

  • 采用 Golang 编写的 MOSN 取代 Envoy(sidecar)
  • 合并 Mixer 到数据平面以解决性能瓶颈
  • 增强 Pilot 以实现更灵活的服务发现机制(主动告诉对应的 Sidecar,它需要发布哪些服务,主动告诉对应的 Sidecar,它需要订阅哪些服务),增加数据同步模块,以实现多个服务注册中心之间的数据交换