一、linkerd+consul
1.服务发现
如上,客户端直接调用各个服务的话,对服务的维护比较艰难,需要很大的一个配置,而且可能服务变化后,还需要修改配置。总结就是服务多了,配置很麻烦。
引入服务发现:
服务发现大概流程:各个服务A-N把当前自己的网络位置注册到服务发现模块(这里注册的意思就是告诉),服务发现就以K-V的方式记录下,K一般是服务名,V就是IP:PORT。服务发现模块定时的轮询查看这些服务能不能访问的了(这就是健康检查)。客户端在调用服务A-N的时候,就跑去服务发现模块问下它们的网络位置,然后再调用它们的服务。这样就解决了上面的问题,客户端完全不需要记录这些服务网络位置,客户端和服务端完全解耦!
2.linkerd
Linkerd 是 Service Mesh(服务网格)技术的一个实现,Linkerd 技术最早由 Twitter 公司贡献。
主要特性:
- 负载均衡:linkerd提供了多种负载均衡算法,它们使用实时性能指标来分配负载并减少整个应用程序的尾部延迟。
- 熔断:linkerd包含自动熔断,将停止将流量发送到被认为不健康的实例,从而使他们有机会恢复并避免连锁反应故障。
- 服务发现:linkerd 与各种服务发现后端集成,通过删除特定的(ad-hoc)服务发现实现来帮助您降低代码的复杂性。
- 动态请求路由:linkerd 启用动态请求路由和重新路由,允许您使用最少量的配置来设置分段服务(staging service),金丝雀(canaries),蓝绿部署(blue-green deploy),跨DC故障切换和黑暗流量(dark traffic)。
- 重试机制:linkerd可以在某些故障时自动重试请求,并且可以在指定的时间段之后让请求超时。
- TLS:linkerd 可以配置为使用 TLS 发送和接收请求,您可以使用它来加密跨主机边界的通信,而不用修改现有的应用程序代码。
- HTTP 代理:linkerd 可以作为 HTTP 代理,几乎所有现代 HTTP 客户端都广泛支持,使其易于集成到现有应用程序中。
- 透明代理:您可以在主机上使用 iptables 规则,设置通过 linkerd 的透明代理。
- gRPC:linkerd 支持 HTTP/2 和 TLS,允许它路由 gRPC 请求,支持高级 RPC 机制,如双向流,流程控制和结构化数据负载。
- 分布式追踪:linkerd 支持分布式跟踪和度量仪器,可以提供跨越所有服务的统一的可观察性。
- 仪表化:linkerd 提供了通信延迟和有效载荷大小的详细直方图以及成功率和负载均衡统计信息,以人类可读和机器可解析的格式
参考:https://blog.csdn.net/buxiaoxia/article/details/69788114
https://blog.csdn.net/zl1zl2zl3/article/details/78678460
二、Dubbo
1.如何暴露服务
在根据配置文件解析读取装配成bean之后, 初始化, 根据配置协议, 找到注册中心(如Zookeeper)注册, 找到对应服务Protocol(如DubboProtocol)暴露服务。
Dubbo利用Zookeeper进行服务注册。