范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

我们被一个kong的性能bug折腾了一个通宵

  故事背景
  在 Erda 的技术架构中,我们使用了 kong 作为 API 网关的技术选型。因其具备高并发低延时的特性,同时结合了 Kubernetes Ingress Controller,基于云原生的声明式配置方式,能够实现丰富的 API 策略。
  在我们最早交付的集群中,kong 还是较为早期的 0.14 版本,随着业务层面对安全的要求日益趋增,我们需要基于 kong 实现安全插件,帮助系统能够具备更好的安全能力。由于较为早期的 0.14 版本不能使用 go-pluginserver 来扩展 kong 的插件机制,我们不得不在古老的集群中将 kong 升级为相对较新的 2.2.0 版本。
  升级过程就不在此赘述了,基本就是照着官方文档一步步顺利的升级上去,但是在升级上去之后的几天里,我们的 SRE 团队收到了非常密集的咨询甚至是声讨,部署在该集群上的业务 间歇性的无法访问,延迟非常高 。 一系列失败的尝试参数调优
  最开始为了快速修复这个问题,我们对 kong 的 NGINX_WORKER_PROCESSES、MEM_CACHE_SIZE、 DB_UPDATE_FREQUENCY、WORKER_STATE_UPDATE_FREQUENCY 参数以及 postgres 的 work_mem、 share_buffers 都进行了适当的调优。
  但是,没有任何效果 。 清理数据
  由于这个集群的历史原因,会频繁的注册或者删除 api 数据,因此集群中累计了大约 5 万多条 route 或者 service 数据。
  我们怀疑是数据里量大导致的性能下降,于是结合 erda 中的数据对 kong 中的历史数据进行删除,在删除的过程中出现的删除较慢并且同时 kong 的性能急剧下降的现象。
  反复测试了几次后我们确定了 「 只要调用 admin 的接口导致 kong 性能下降 」 这一结论,跟社区的这个问题非常相似,链接如下:
  https://github.com/Kong/kong/issues/7543 kong 实例的读写分离
  确定了是 admin 接口的原因后,我们决定将 admin 跟业务的 kong 实例分开,希望 admin 的调用不会影响到业务的正常流量访问,期待达到 kong 的 admin 接口慢就慢吧,但是不要影响业务的访问性能。
  然而,没有任何效果。 postgres 迁移 RDS
  kong 层面的努力无果之后,我们在测试过程中同时观察到了当调用 admin 接口试,postgres 的进程也增多了很多,CPU使用率也涨了起来,也是决定将 pg 迁移到 更为专业的RDS中。
  还是,没有任何效果。 回滚
  最终我们还是回滚到了 0.14 版本,追求暂时"心灵的宁静"。
  至此,线上的尝试基本搞一段落,也大致摸清了问题复现的条件,于是我们决定在线下构造一个环境来继续找出问题的原因。 问题的复现之路
  我们将出问题的 kong 的 postgres 数据导一份到开发环境中,模拟 「 调用 admin 接口是性能急剧下降 」的情况,并寻找解决之道。 导入数据
  我们将有问题的集群中的 postgre 的数据备份之后然后在一个新的集群中导入: psql -h 127.0.0.1 -U kong < kong.sql
  并且开启 kong 的 prometheus 插件, 方便使用 grafana 来查看性能图标: curl -X POST http://10.97.4.116:8001/plugins --data "name=prometheus"现象一
  调用 admin 服务的 / 同样的慢,跟线上的现象吻合,当数据量大的时候调用 admin 的 / 目录需要耗费更多的时间。 curl http://10.97.4.116:8001
  现象二
  然后我们来模拟在线上遇到的调用 admin 接口后业务访问性能变差的现象,先调用 admin 接口创建个业务的 api,以供测试,我们创建了一个 service 以及一个 routes: curl -i -X POST http://10.97.4.116:8001/services/ -d "name=baidu2"  -d "url=http://www.baidu.com"  curl -i -X POST http://10.97.4.116:8001/services/baidu2/routes  -d "name=test2"       -d "paths[1]=/baidu2"
  后面可以使用 curl http://10.97.4.116:8000/baidu2 来模拟业务接口进行测试。
  准备 admin 接口的测试脚本, 创建并删除一个 service/route,中间穿插一个 service list。 #!/bin/bash  curl -i -X POST http://10.97.4.116:8001/services/ -d "name=baidu"  -d "url=http://www.baidu.com"  curl -i -X POST http://10.97.4.116:8001/services/baidu/routes       -d "name=test"       -d "paths[1]=/baidu"   curl -s http://10.97.4.116:8001/services  curl -i -X DELETE      http://10.97.4.116:8001/services/baidu/routes/test
  然后持续调用该脚本: for i in `seq 1 100`; do sh 1.sh ; done
  在持续调用该脚本的过程中去访问一个业务的接口,会发现非常慢,跟线上的现象完全吻合。 curl  http://10.97.4.116:8000/baidu2
  PS:精简脚本,后只触发一条写入,或者删除也会触发该现象 伴随现象kong 实例的 cpu 跟 mem 都持续上涨,且当 admin 接口调用结束后此现象依然没有结束。mem 上涨到一定程度会到时 nginx worker 进程 oom 掉,然后重启,这个也许是访问慢的原因; 我们设置了 KONG_NGINX_WORKER_PROCESSES 为 4,并且为 pod 的内存为 4G 的时候,pod 的整体内存会稳定在 2.3G, 但是 调用 admin 接口试,pod 的内存就会一直上涨至超过 4G,触发 worker 的 OOM,于是我将 pod 的内存调整到了 8G。再次调用 admin 接口,发现 pod 的内存依然一直上涨,只是上涨到了 4.11 G 就结束了,这似乎意味着我们是要设置 pod 的内存为 KONG_NGINX_WORKER_PROCESSES 两倍,这个问题就解决了(但是还有个重要的问题是为什么调用一次 admin 接口,会导致内存涨了那么多); 另外,当我持续调用 admin 接口的时候, 最终的内存会持续增长并且稳定到 6.9G。
  这个时候我们将问题抽象一下 :
  调用「kong admin 接口」导致内存一直上涨,进而触发 oom 导致 worker 被 kill 掉,最终导致业务访问慢。
  继续调查内存是被什么占用了 :
  我使用 pmap -x [pid] 前后两次查看了 worker 进程的内存分布,变化的是第二张如中框起来来的部分,从地址上看整块内存都被换过了,但是将内存数据导出并且字符串化之后,没有什么有效的信息可供进一步排查。
  结论该问题跟 kong 的升级(0.14 --> 2.2.0) 没有关系,直接使用 2.2.0 版本也会有这个问题; kong 每隔 worker_state_update_frequency 时间后会在内存中重建 router,一旦开始重建就会导致 内存上涨,看了下代码问题出在了 Router.new 的方法这里,会申请 lrucache 但是使用后没有 flush_all,根据最新的 2.8.1 版本的 lrucache 进行了释放问题依然存在; 也就是 kong 的 Router.new 方法里的其他逻辑到时的内存上涨;
  这也就表明这个问题是 kong 存在的一个性能 bug,及时在最新的版本中依然存在,当 route 跟 service 达到某个量级的时候会出现调用 admin 接口,导致 kong 的 worker 内存迅速上涨,使得 oom 进而引发业务访问性能变差的现象,临时的解决办法可以是减少 NGINX_WORKER_PROCESSES 的数量并且增加 kong pod 的内存量,保证调用 admin 接口后需要的内存足够使用不触发 oom,才能保证业务的正常使用。
  最后,我们会在  https://github.com/Kong/kong/issues/7543  这个 issue 中将该现象补充进去,欢迎大家持续关注,一起讨论
  更多技术干货请关注【尔达 Erda】公众号,与众多开源爱好者共同成长

为你写诗徐云骑行西藏之错鄂湖奇缘给我的是爱,收下的是感动从陌生到相识,从相识到神往,有可能是薄薄的一张纸,也可能是厚厚的一堵墙。缘份,如此的妙不可言,你认出了我,我记住了你。错鄂湖畔,没看到向往中圣湖的美丽,却让一个人没有资金,但想自主创业,当下应该满足哪些条件呢?针对当前的经济形势和创业环境,没有资金,想创业很容易,但想成功很难。回答这个粉丝的问题,一个人没有资金,但想自主创业,当下应该满足哪些条件呢?这个答案就比较简单,主要是以下这几方面当野性消费热情慢慢褪去央视315晚会曝光湖南土坑酸菜后,康师傅统一等品牌的食品安全质量深陷网友质疑。国货品牌白象方便面果断回应没合作,放心吃,身正不怕影子斜,冲上微博热搜。网友为了表示对国货的支持,纷纷从比亚迪停止生产燃油整车看目前锂电个股的调整本文不作为投资依据。这几天的新闻有点多,先是节前的碳酸锂妖价论新能源汽车过剩论,演变为节中的特斯拉转型氢能源澳洲MtCattlin2022Q2锂精矿定价为5000美元吨,二季度涨幅清明时节,为人子女,怎样少些追思的悔与愧?奔向远方的年轻人,你可曾回头望一下那双泪眼。你在他乡不易时,她默默的担忧和祈祷你在他乡有成就时,她虽然骄傲,却依旧觉得你艰难。当她逐渐老去衰弱,握着你的手和你说能多留几天吗?除了夺每天积累一些好句子411跟喜欢的人一起漫步街边,晚风温柔,灯光温柔,市井的喧嚣声都温柔。德卡先生的信箱2总之我们饥肠辘辘,结果就是,我们打算奔向恶。并非饥饿感驱使着我们奔向恶,而是恶驱使着饥饿感袭向我们心好累好迷茫的伤感句子一有的人把心都掏给你了,你却假装没看见,因为你不喜欢。有的人把你的心都掏了,你还假装不疼,因为你爱。二好的坏的就照单全收吧,不要任何事情都跟别人讲,这世上真的没有感同身受,只能冷暖奇妙的海洋和陆地水地球上的水除了海洋河流湖泊地下水大气水冰雪水外,还有各种矿物中的化合水结合水,以及岩石圈深部封存的水分,它们共同构成了地球的水圈。其中海水是地球水量的主体,占总水量的97以上。陆地为什么水星会被钻石包裹上个月在德克萨斯州伍德兰兹举行的月球和行星科学会议上,科罗拉多矿业学院的凯文坎农博士展示了有关水星组成的令人惊讶的细节。坎农显示,水星被流星撞击的历史,再加上它的一些独特性质,可能国际研究揭示南大西洋海域的微塑料分布情况2022年1月19日,全球变化生物学(GlobalChangeBiology)刊登了一项由佛罗里达大西洋大学(FloridaAtlanticUniversity)荷兰海洋皇家研究所2000到3000,各个品牌的代表手机是哪些?2000到3000元的手机,才是市场上占比最多的选择,毕竟不是每一个人都能买得起苹果。这个价格到不了旗舰机的等级,但是次旗舰是无疑的,相对于旗舰机,次旗舰的性价比更高,所以次旗舰的
山东一名酒崛起,曾年销10亿,也曾破产重组,如今涅槃重生在中华民族上下五千年的历史中,酒一直占据着非常重要的地位。从前人们喜欢借酒抒情,现在大家喜欢以酒会友,可以说,酒如今已经成为了我们生活中不可或缺的东西。纵观我国白酒市场,有多少酒质FIFA排名朝鲜女足被除名,中国女足升至世界第13亚洲第3北京时间3月24日,FIFA在官网公布了新一期的女足排名,中国女足的排名提升一位,来到世界第13位,亚洲区方面,中国女足位列第3,澳大利亚女足成为新的亚洲第1。近几年来一直没有参赛晚报杯全国业余围棋锦标赛开幕,羊城晚报天河弱电队三将出击文羊城晚报全媒体记者赵亮晨第35届晚报杯全国业余围棋锦标赛3月24日在河南开封拉开战幕。本届比赛,来自全国各地的72支围棋代表队汇聚古城开封,在为期一周的比赛中展开棋枰厮杀。羊城晚浅谈吃寿司的时候有什么规矩?知乎中有很多有趣的话题,就让我们来探索,如果你喜欢,不妨点赞关注。吃寿司是一项高雅的饮食文化,它需要我们遵循一定的规矩和礼仪。尤其是在日本,吃寿司是非常严格的,如果不懂得一些基本的不吃碗水粉,你就算白去了南丰一说起江西南丰,文化热衷者会想起南丰先生曾子固千载非遗南丰跳傩,户外达人会迷恋这里的军峰山南丰古城,而美食客会立刻想到南丰蜜桔及傩菜当然吃货朋友在走街串巷搜罗南丰美食的时候,一定少中吉乌铁路的终点,是中亚的粮仓中亚的油库,也是中亚的火药桶中吉乌铁路的终点站是安集延。中吉乌铁路线路示意图(物流启示录制图)安集延所处的经济地理区域,叫费尔干纳盆地。这个盆地,还被称为中亚的粮仓中亚的聚宝盆中亚的天府之国中亚的油库中亚的火春天穿衣营造小众时髦氛围感,大前提是看好场合,洋气又得体四五月乱穿衣即将上线,仙女们是否已经跃跃欲试?如何营造小众时髦的穿衣氛围感?大前提是看好场合,整体look方能做到洋气又得体下面就让栗子君来举几个例子图源CanCam(2023年5小米集团2022年全年营收2800亿元,预计5年总研发投入超千亿小米集团发布2022年Q4及全年财报,2022年全年营收2800。4亿元,经调整净利润85亿元。第四季度收入660。47亿元,同比降22。8期间利润31。42亿元,同比增28。6。国足移师惠灵顿扬科维奇期待下场收获胜利京报体育记者李立3月24日,中国男足飞抵惠灵顿。26日,他们将在这里和新西兰队再进行一场热身赛。首战0比0和对手战平,国足主帅扬科维奇在肯定球员的拼搏精神的同时,也表示球员的体能仍26000名跑友参赛!汉马将于4月16日7时30分开跑人间四月天,好汉终归来。2023年3月24日下午,在2023武汉体育消费周暨中国银行2023武汉马拉松新闻通气会上,组委会宣布2023武汉马拉松将于4月16日上午730在武汉科学技三提升助力2023丽水马拉松!来源丽水市交通运输局交通要闻2023丽水马拉松将于3月26日在莲都区花园路鸣枪起跑,积攒了一年多参赛热情的跑者将开展一场速度与激情的角逐。为保障赛事成功举办,创造良好路域环境,丽水