less than 1 minute read

xDS 控制面实战 (三):Linear Cache 大揭秘,如何省下 90% 的内存?

上一篇文章里我们留了一个悬念:既然 1 万个 Envoy 代理需要的配置其实 99% 都一模一样,那为什么控制面(Simple Cache)还要傻乎乎地在内存里复制 1 万遍呢,这不是白白浪费服务器吗?

为了解决这个“堆抽屉”的痛点,go-control-plane 为大内卷时代的大佬们准备了一件神器——Linear Cache (线性缓存)

1. Linear Cache 拆掉抽屉盖一面墙!

回想一下我们上一篇的比喻:Simple Cache 是给每个骑手一个带名字的小抽屉。 而 Linear Cache 就是在办公室大厅立起了一块巨大的黑板。并且,把所有的抽屉全砸了!

这块大黑板上,贴着成百上千条具体的规则,比如: 1号餐厅的地址。 2号餐厅的电话。

在这个模式下,没有任何规定说哪条信息只属于谁,所有配置统统平铺在这块全公司唯一的黑板上。 这意味着,无论外面有 10 个 Envoy 还是 1 万个 Envoy,内存中,这份包含许多餐厅的清单只保存了唯独的一份!

控制面的内存占用,瞬间经历了断崖式的暴降!老板看了都得给你升职加薪。

2. 它是怎么分辨最新版本的?——“时间戳贴纸”机制

问题来了,不用一人一个本子了,Envoy(骑手)来大厅的时候,该怎么知道黑板上哪些是新加的呢?

Linear Cache 就是靠线性递增的版本号来解决的。你可以简单把它理解为上面打了一个个时间戳。 每次你在某个记录上做更改时,Linear Cache 会给它盖一个不断变大的数字。

  • 小明 (Envoy A) 早上 9 点来的大厅(当前持有版本为 9)。对黑板(缓存)说:“给我 9 点以后的新消息”。
  • Cache 发现了一条变更时间戳(版本)为 10 的记录,马上发给小明。
  • 老李 (Envoy B) 下午发现连接断了,傍晚回来对大厅说:“我一整天都断网,我的版本还是 1,能不能全发我?” Cache 发现所有时间戳大于 1 的统统包起来一起发给老李。

这就是之所以叫 Linear (线性的) 的原因:依靠一个单向递增的版本线,就能瞬间分辨出哪些资源是被更新过的。

3. 性能这么高,为什么不全换成 Linear Cache?

如果你能想到砸掉抽屉立黑板,那肯定也能想到这带来的麻烦。

最大麻烦一:没有隐私啦!(极难做个性化) 黑板上的内容对所有人都是可见的。万一有个配置你指向单独发给少数几个特殊的节点,你就在这大鱼塘里很难办了。这需要你自己在写业务逻辑的时候增加好几层前置过滤。

最大麻烦二:牵一发而动全身 对于那些更新极度频繁的数据(比如 Endpoint 服务实例,动不动就因为健康检查变化),丢在黑板上一旦更新,可能会触发现场一万个等待中的请求齐刷刷被唤醒发数据,对性能也会有一波小冲击。

4. 小结

Simple Cache:一人一个精美专属本子(全量 Snapshot),开发简单不容易搞砸,但一万份副本会把内存挤挂。 Linear Cache:大家共看一面黑板(无脑共享资源池并标记版本),极致节省内存!非常适合全局全量同步。

如果你觉得 Linear Cache 的按“版本戳”只拿最新的就已经很智能了,那么请坐稳,因为下一篇我要介绍的,才是改变现代 Service Mesh 同步规则的终极大杀器——Delta xDS (增量下发)。我们将用最接地气的方式为你彻底讲透这四个神秘字母带来的魔法!

<hr />
<section>
  <h2>xDS开发实战专栏</h2>
  <p>当前进度:第 3 篇 / 共 4 篇</p>
  <p><a href="/series/#series-xds-dev">查看本专栏目录</a></p>
  <ul>
    
      
        <li><a href="/network/xds/xds-go-control-plane/">第 1 篇:xDS 控制面实战 (一):新手也能看懂的 go-control-plane 架构</a></li>
      
    
      
        <li><a href="/network/xds/xds-simple-cache/">第 2 篇:xDS 控制面实战 (二):Simple Cache 是如何“偷懒”又如何“爆掉”的?</a></li>
      
    
      
        <li><strong>第 3 篇(当前):xDS 控制面实战 (三):Linear Cache 大揭秘,如何省下 90% 的内存?</strong></li>
      
    
      
        <li><a href="/network/xds/xds-delta/">第 4 篇:xDS 控制面实战 (四):Delta xDS 拯救网络带宽的终极魔法</a></li>
      
    
  </ul>
  <p>
    
      上一篇:<a href="/network/xds/xds-simple-cache/">xDS 控制面实战 (二):Simple Cache 是如何“偷懒”又如何“爆掉”的?</a><br />
    
    
      下一篇:<a href="/network/xds/xds-delta/">xDS 控制面实战 (四):Delta xDS 拯救网络带宽的终极魔法</a>
    
  </p>
</section>

Categories: ,

Updated: