Please enable Javascript to view the contents

Imagine: jEnvoy = pid(Java + Envoy) - 脑洞还是脑残

 ·  ☕ 3 分钟

image-20240711235224239

人们想要 service mesh 的低代码服务网格,但同时对 CPU 资源消耗与服务延迟的增加忧心重重。于是出现了各种 Sidecar-Less。本文想像一个把 Envoy 嵌入 jvm,作为一个 Servlet Container 的设计,希望达到性能、资源效益、低代码服务网格的平衡。

实话实说,我现在对这个想法还是臆想状态。不过无论如何,先记录下来吧。说不定有高人看到,觉得有用呢。

Sidecar 的成本

大概分析一下 Sidecar 的成本:

istio-data-panel-arch.drawio.svg

Istio 数据面架构。图源:我的书《Istio & Envoy 内幕》

未加入 sidecar 前,一个 Outboud 的流量,需要:

  1. Outbound App -> socket(kernel) -> TCP/IP stack(kernel)
  2. 物理网络
  3. TCP/IP stack(kernel) -> socket(kernel) -> Inbound App

加入 sidecar 后,一个 Outboud 的流量,需要:

image-20240711220957688

Source: Accelerating Envoy and Istio with Cilium and the Linux Kernel - Thomas Graf

Sidecar 的成本,长期被诟病。所以才有后来的:

经过一些 eBPF 魔术,如 Cilium 后,可以变成:

image-20240711221233721

Source: Accelerating Envoy and Istio with Cilium and the Linux Kernel - Thomas Graf

但还是避免不了 socket 层的 user space <-> kernel space 数据复制和 socket 状态维护 footprint 等等的消耗。

这些设计,说到底都是努力在减少流量在多个进程和内核间流转的次数。那么 sidecar-less 优化的极致应该是什么? 嵌入式 sidecar 。

正所谓,天下大势,分久必合,合久必分。让 sidecar 和应用在同一进程中交换数据,应该是最低的消耗了。有经验的读者可能看出来了,这不是回归到应用容器或 lib 库的原点吗?还记得 Netflix/HystrixResilience4j 吗。当年说 sidecar 如何如何解耦,独立,无应用侵入性,现在又要合回来……

Java 世界的

世界当然不只有 Java,但对于很多大型企业或大型互联网公司,还是会大量使用 java 的。只要可以把硬件资源减少 10%,P95 长尾延迟减少 10%。已经是相当可观的投资回报了。

我最近在看 Java JNI 和 Envoy 时,思考一个问题:如果把 Envoy 与 JVM 整合到同一进程,然后在 User space 完成数据交换,比起现在的多进程方案,是不是就可以减少中间商铮差价的资源和时间成本?

然后我看到 Netty 和 基于 JNI 的 Netty transport-native-epoll。Netty 可以实现自己基于 epoll 的 NIO 层,那么为什么不能实现一个基于 Envoy Native Library 的 NIO 层?

于是这有了这个脑洞(脑残)的 Imagining。

草图

Inbound

jenvoy-idea-inbound.drawio.svg

Outbound

jenvoy-idea-outbound.drawio.svg

结语

到这里。这个技术异想天开的笑话结束了。本文也已经完结了。以下内容和技术无关。

从儿童到成年,社会和现实每天都在用各种方法告诉我,离开 “想像(Imagining)” 这个词。那是不成熟的表现。可以看到的绝大部分成年人身上,都成熟得在他身上看不到 Imagining 这个词。有句话是,大部分人 30 岁时已经 abc 了,但直到 70 岁才 def 。这也是我看到为何有些家长无法进入孩子世界,和他一同成长的原因之一。这个话题太唏嘘和沉重了,多说无益。

Imagining 是不是无用?我不敢说它的好处一定多于坏处,但作为一些自己身经历,我也可以说说:

大概在 2016 年在唯品会物流信息工作时。当时负责的平台遇到了一个性能无法水平 scale out 的设计层面的瓶颈。每次大促,订单一上去就卡。这个问题困扰了项目组半年以上。直到有一天,我在从仓库坐长途大巴回家时,脑袋在不断地 Imagining 各种方案。最后,还真的想出一个成本和复杂性可控的方法出来。想出方法的那个时间点,是个有趣的 “开悟” 的过程。我不知道它从何而来,又将去往何处。它抓不住,用钱买不来,集中力量办不出,只为有趣、有准备、享受失败和折腾的人而来。

Imagine there's no heaven
It's easy if you try
No hell below us
Above us, only sky

Imagine all the people
Livin' for today
Ah

Imagine there's no countries
It isn't hard to do
Nothing to kill or die for
And no religion, too

Imagine all the people
Livin' life in peace
You

You may say I'm a dreamer
But I'm not the only one
I hope someday you'll join us
And the world will be as one

Imagine no possessions
I wonder if you can
No need for greed or hunger
A brotherhood of man

Imagine all the people
Sharing all the world
You

You may say I'm a dreamer
But I'm not the only one
I hope someday you'll join us
And the world will live as one

-- Imagine by John Lennon
分享

Mark Zhu
作者
Mark Zhu
An old developer