还记得2年前,我有幸参加了首届云原生编程挑战赛,当时的比赛场景还历历在目。光阴如梭,转眼2年过去了,没想到机缘巧合,我又有机会参见第三届云原生编程挑战赛,心里也甚至激动。
我选择了赛道一,对Sidecar的性能进行优化,这是一个非常有意思的题目。我们需要用最合理的方式为Sidecar分配资源,让整个系统的整体性能达到最优,但同时又要尽可能的降低资源的使用量(无脑大量分配资源的方法显然不可取的)。
那如何为了个Sidecar分配资源呢?显然的方法就是,那个服务比较繁忙,就为哪个服务分配更多的资源了。于是,我就想当然的根据每个容器的CPU使用率进行分配了。可代码运行结果一出来,我就傻眼了,效果非常的差。经过一番调查,发现拿到的实际CPU使用率是一段时间的平均值,非常不准,无法真实反映case执行时的情况,无奈只能另寻出路。
我一直坚信,对资源的分配,一定是基于业务的繁忙情况,那除了CPU使用率外,还有哪些指标可以体现这个繁忙情况呢?经过反复阅读赛题(每次,一切答案也许都隐藏在赛题之中),我发现系统提供的日志里,包含了每个服务的调用和被调用信息,如果能得到每个服务的调用次数,和流量情况,那不是可以按照这个负载进行资源分配了?想到就做,于是,一个日志分析程序呼之而出,上线一跑,别说,效果还是不错,至少证明方向没有错误。
除了资源的分配,赛题提示可以通过EnvoyFilter对Sidecar进行优化,由于我对Istio是零基础,于是只能恶补各种基础知识,经过一番研究,有了几个点子,比如开启port reuse,设置负载均衡等等,但是根据一番测试,效果并不明显,也不明白具体的原因。为初赛留下了遗憾。不过,我觉得这也应该是比赛的有趣之处,留一些困惑,留一些疑问,才会有更大的进步嘛。待到决赛那天一定要好好请教各位导师,这其中的奥妙所在。
经过数月的努力,最终终于入围了决赛,心里也是无比激动的。每一次比赛都是对自身的磨练,感慨于对手的强大,抒发着自己的激情,打磨着自己的意志,体会着自身的进步,这就是比赛的意义。因此,最后不得不由衷感谢大赛主办方和天池,正是他们的存在,才让我们有机会接触一些最前沿的技术,找到前进的方向!