Linkerd
是 Buoyant 公司 2016 年率先开源的高性能网络代理,是业界的第一款Service Mesh
框架。其主要用于解决分布式环境中服务之间通信面临的一些问题,如网络不可靠、不安全、延迟丢包等问题。
Linkerd
使用 Scala 语言编写,运行于JVM
,底层基于 Twitter 的Finagle
库,并对其做了相应的扩展。最主要的是Linkerd
具有快速、轻量级、高性能等特点,每秒以最小的延迟及负载处理万级请求,易于水平扩展。除此之外,还有以下功能:
-
支持多平台:可运行于多种平台,比如
Kubernetes
、DC/OS
、Docker
,甚至虚拟机或物理机。 -
无缝集成多种服务发现工具。
-
支持多协议,如
gRPC
、HTTP/1.x
、HTTP/2
,甚至可通过linkerd-tcp
支持 TCP 协议。 -
支持与第三方分布式追踪系统
Zipkin
集成。 -
灵活性、扩展性高,可通过其提供的接口开发自定义插件。
目前,Linkerd
和Linkerd2
并行开发,其情况如下:
-
Linkerd
:Linkerd
使用**Scala
语言编写**,运行于JVM
,底层基于 Twitter 的Finagle
库,并对其做了相应的扩展。 -
Linkerd2
:使用Go
语言和Rust
语言完全重写了Linkerd
,专门用于Kubernetes
。
Linkerd
本身是数据平面,负责将数据路由到目标服务,同时保证数据在分布式环境中传输是安全、可靠、快速的。另外,Linkerd
还包括控制平面组件Namerd
,通过控制平面Namerd
实现中心化管理和存储路由规则、中心化管理服务发现配置、支持运行时动态路由以及暴露Namerd API
管理接口。
- 控制平面
是在Kubernetes
特定命名空间中运行的一组服务。这些服务可以完成各种事情:聚集遥测数据,提供面向用户的 API,向数据平面代理提供控制数据等。
由以下部分组成:
-
Controller
:由public-api
容器组成,该容器为CLI
和dashboard
提供接口 API。 -
Destination
:数据平面中的每个代理都使用此组件来查找将请求发送到哪里。还用于获取服务配置信息,如:路由指标,重试和超时等。 -
Identity
:该组件提供了证书的颁发,接受来自代理的CSRs并返回正确身份签名的证书。这些证书由代理在启动时获取,并且必须在代理准备就绪之前发出。随后,它们可用于Linkerd
代理之间的任何连接以实现mTLS
。 -
Proxy Injector
:是一个注入程序,每次创建一个pod
时,它都会接收一个webhook
请求。该注入程序检查资源以查找特定于Linkerd
的注释(linkerd.io/inject: enabled
)。当存在该注释时,注入器将更改容器的规范,并添加initContainer
包含代理本身的以及附属工具。 -
Service Profile Validator
:用于在保存新服务配置文件之前先对其进行验证。 -
Tap
:从CLI
和dashboard
接收请求,以实时监视请求和响应。 -
数据平面
由轻量级代理组成,这些代理作为sidecar
容器与服务代码的每个实例一起部署。为了将服务“添加”到Linkerd
服务网格,必须重新部署该服务的Pod
,以在每个 Pod 中包含数据平面代理。
2、Envoy
=======
同Linkerd
一样,Envoy
也是一款高性能的网络代理,于 2016 年 10 月份有 Lyft 公司开源,为云原生应用而设计,可作为边界入口,处理外部流量,此外,也作为内部服务间通信代理,实现服务间可靠通信。Envoy
的实现借鉴现有生产级代理及负载均衡器,如Nginx
、HAProxy
、硬件负载均衡器及云负载均衡器的实践经验,同时基于C++
编写及 Lyft 公司生产实践证明,Envoy
性能非常优秀、稳定。
Envoy
既可用作独立代理层运行,也可作为Service Mesh
架构中数据平面层,因此通常Envoy
跟服务运行在一起,将应用的网络功能抽象化,Envoy
提供通用网络功能,实现平台及语言无法性。除此之外,还有以下功能:
-
优先支持
HTTP/2
和gRPC
,同时支持Websocket
和 TCP 代理。 -
API 驱动的配置管理方式,支持动态管理、更新配置以及无连接和请求丢失的热重启功能。
-
L3/L4
层过滤器形成Envoy
核心的连接管理功能。 -
通过与多种指标收集工具及分布式追踪系统集成,实现运行时指标收集、分布式追踪,提供整个系统及服务的运行时可见性。
-
内存资源使用率低,
sidecar
是Envoy
最常用的部署模式。
3、Istio
=======
Istio
是由Google
、IBM
和Lyft
发起的开源的Service Mesh
框架。该项目在 2017 年推出,并在 2018 年 7 月发布了 1.0 版本。
Istio
是Service Mesh
目前的实现的典型代表,如果Sidecar
是整个Service Mesh
的数据面,那么Istio
主要在控制面上做了更多的改进,Istio
使用Envoy
作为Sidecar
,控制面相关全部使用Golang
编写,性能上有了很大的提升。
**Istio
首先是一个服务网格,但是Istio
又不仅仅是服务网格:在 Linkerd
,Envoy
这样的典型服务网格之上,Istio
提供了一个完整的解决方案,为整个服务网格提供行为洞察和操作控制,以满足微服务应用程序的多样化需求。**
Istio
在服务网络中统一提供了许多关键功能:
-
流量管理:控制服务之间的流量和 API 调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮。
-
可观察性:了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力。
-
策略执行:将组织策略应用于服务之间的互动,确保访问策略得以执行,资源在消费者之间良好分配。策略的更改是通过配置网格而不是修改应用程序代码。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。**
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!