Linkerd简介
Linkerd是一个用于云原生应用的开源,Linkerd是一个开源的用于微服务架构的服务网格ServiceMesh工具。
Linkerd的出现是为了解决像twitter、google这类超大规模生产系统的复杂性问题。
Linkerd负责跨服务通信中最困难、易出错的部分,包括:延迟感知、负载平衡、连接池、TLS、请求路由等。
Linkerd功能
Linkerd提供了类似Istio的功能,包括服务发现、负载均衡、熔断、安全认证等。
1.服务发现
Linkerd自动执行服务发现,将请求动态分发到可用的服务实例上,提高系统的可靠性和负载均衡性。
2.负载均衡
Linkerd 会自动对 :HTTP、HTTP/2 和 gRPC 连接上所有目标端点的请求进行负载平衡。
3.安全性
Linkerd提供传输层安全(TLS)和身份认证,保护服务之间的通信安全。
4.流量控制
Linkerd支持限流和流量控制,可以控制每个服务的流量,防止其中一个服务耗尽资源,影响整体性能。
5.可观察性
Linkerd提供丰富的指标和监控数据,帮助开发者实时监控和分析服务之间的通信和性能情况,它集成了Prometheus等监控工具,支持可视化展示。
6.无侵入性
Linkerd可以在应用程序代码之外运行,对应用程序代码无侵入,减少了对现有代码的修改。
7.多语言支持
Linkerd支持多种编程语言和框架,适用于不同技术栈的微服务应用。
Linkerd架构
Linkerd架构是为微服务架构设计的,它提供了一个轻量级的服务网格层,用于管理和监控微服务之间的通信。
从较高的层次上看,Linkerd 由:一个 控制平面(control plane) 和一个 数据平面(data plane) 组成。
1.控制平面(Control Plane)
控制平面是Linkerd的控制和管理部分,它包含多个控制组件,用于配置、管理和监控整个服务网格。
- Identity Authority: 负责生成和管理服务实例的身份证书,以确保安全的通信。
- Service Profile: 存储有关每个服务的配置信息,如超时、重试策略等。
- Tap: 收集流量追踪数据,用于调试和故障排查。
- Destination: 管理服务发现,帮助将请求路由到正确的服务实例。
- Controller: 管理Linkerd代理的配置,确保代理正确地执行各项任务。
- Telemetry: 收集和存储性能指标和监控数据,用于可观察性和性能分析。
2.数据平面(Data Plane)
数据平面是真正处理请求的部分,它由一组Linkerd代理组成,这些代理嵌入到每个微服务实例中。
每个微服务实例都会有一个Linkerd代理,用于处理所有进出该实例的请求。
Linkerd原理
Linkerd通过在每个微服务实例中嵌入代理(Proxy)来实现服务通信的控制和监控。
当一个请求从客户端发出时,它会首先到达源服务实例的Linkerd代理。
代理的功能包括:
- HTTP、HTTP/2 和任意 TCP 协议的透明、零配置代理;
- HTTP 和 TCP 流量的自动 Prometheus 指标导出;
- 透明零配置的 WebSocket 代理;
- 自动、延迟感知、第 7 层负载平衡;
- 非 HTTP 流量的自动第 4 层负载平衡;
- 自动 TLS;
- 按需诊断 Tap API。
代理是Linkerd的数据平面组件,负责拦截进出服务实例的请求和响应,并执行各种功能,如负载均衡、超时控制、故障注入等。
Linkerd代理是透明的,意味着它对应用程序代码无侵入,开发者无需修改现有的应用代码。
代理在传输层上拦截请求,因此应用程序代码不需要关心服务通信的复杂性。
Linkerd的原理在于在微服务架构中引入透明代理,以实现服务之间的通信控制、监控和安全,帮助开发者更好地管理和优化微服务架构。
Linkerd总结
Linkerd是服务网格领域的一个重要工具,被广泛用于构建和管理微服务架构。
Linkerd的设计目标是为微服务架构提供透明、高性能和可观察的服务通信层,以便开发者更好地管理和监控服务之间的通信,提高系统的可用性和性能。
陈睿mikechen
十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》