Linkerd 初探

简介

Linkerd 是 Service Mesh(服务网格)技术的一个实现,另一个实现是 Istio。Linkerd 技术最早由 Twitter 公司贡献,而 Istio 背景更大,由 Google、IBM 等公司贡献。

计算机领域有这么一句话:没有什么问题不是抽象出一层解决不了的。如果有,那就再抽象一层。服务网格就是使用了这样的思想,抽象出专门的一层,提供服务治理领域所需的服务注册发现、负载均衡、熔断降级、监控等功能。

之所以要抽象出这么一层,原因在于很多语言、框架,在服务治理方面并没有完善的解决方案。即便是一些成熟的技术,比如 Java 语言、Spring 框架,在这方面也没有大家想象的那么理想。尤其是现在微服务架构越来越流行,一个系统往往会使用各种技术。如何在服务治理领域打通这些技术对于任何一家公司都是不小的挑战。这也是现在为什么出现 Service Mesh 概念,以及 Linkerd、Istio 等技术的原因。

为什么需要 Service Mesh

上一节“简介”已经介绍了部分原因。进一步说,即便只用 Java 开发应用,推进服务治理也有颇多困难。比如,老系统如何实施服务治理?老系统中有一些是核心系统,技术栈虽老,但实施技术升级很有意义。但同时,对于复杂的核心老系统,技术升级往往风险较大,业务团队往往不愿意触碰。这就形成一个困局:有价值的事情,但是推进很难。

如何解决这一难题,服务网格给我提供了一个新选项。虽然引入服务网格不是一点风险没有,但是它提供了在不进行代码改造,或少量改造(主要是服务注册功能,但也可使用 Sidecar 模式实现)的情况下,提升服务治理方面的能力。提升开发运维和服务间调用的效率。

什么是 Linkerd

Linkerd 是一个实现了服务网格设计的开源项目。其核心是一个透明代理,可以用它来实现一个专用的基础设施层以提供服务间的通信,进而为软件应用提供服务发现、路由、错误处理以及服务可见性等功能,而无需侵入应用内部本身的实现。

它作为独立代理运行,无需特定的语言和库支持。应用程序通常会在已知位置运行 Linkerd 实例,然后通过这些实例代理服务调用,服务连接到它们对应的 Linkerd 实例,并将它们视为目标服务。

Image result for linkerd
Image result for linkerd

运行环境

Linkerd 可在 Kubernetes、Mesos、AWS 容器服务等环境中运行,也可本地运行。Linkerd 基于 Java,所以运行时必须有 JVM 支持。

服务间调用模式

在使用 Linkerd 之后,服务之间的调用有两种模式。

模式一:

Local client -> local Linkerd ----------> Remote Linkerd -> Remote Server

模式二:

Local client -> local Linkerd ----------> Remote Server

使用哪种模式取决于真实服务是否直接注册到服务注册中心。

服务注册发现的实现

Linkerd 使用 Announcer 实现服务的注册,详见 https://linkerd.io/config/1.3.2/linkerd/index.html#announcers

对于服务发现,这里介绍一下 HTTP 协议,TCP 协议类似。

如上图所示,Linkerd 会作为本地代理,以 Sidecar 模式运行在虚机或容器中。当一个服务(用 ServiceA 指代)使用 HTTP(或 TCP)协议调用另一个服务时,ServiceA 会将请求代理给 Linkerd 实例。实现方法是使用 HTTP 代理机制。具体的细节是依赖于语言的。以下是常见设置的一些示例:

  • C、Go、Python、Ruby、Perl、PHP、curl、wget、Node.js 的请求包:这些语言和工具支持 http_proxy 环境变量,它在所有请求中设置全局 HTTP 代理。简单地设置这个变量就好了。
  • Java、Scala、Clojure 和 其它 JVM 语言:可以通过设置 http.proxyHosthttp.proxyPort 环境变量(例如,java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=4140)将 JVM 配置为使用 HTTP 代理...)。

Linkerd 与 Nginx 的区别

同 Nginx 相比,Linkerd 像一个超集,包含了除负载均衡以外更多的功能。虽然 Nginx 通过与 ZK、Consul 等服务集成,也可实现服务动态路由的功能,但显然服务治理包含了更多的内容,这些内容单靠 Nginx 难以全面实现。

总结与参考

上面总结我对 Linkerd 技术以及 Service Mesh 思想的初步了解。因为时间有限,上述内容难免显得过于简单,部分内容恐怕还存在错误,欢迎大家指正和讨论。下面给出一些不错的参考文章:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351