当前位置:首页 > 短网址资讯 > 正文内容

减轻服务器负载的建议和技巧

www.ft12.com7年前 (2017-07-08)短网址资讯1718

我们公司有个面向服务的架构。其中一个服务是字体服务,字体体系和 unicode 编码范围(unicode range)提供字体数据,为用户上传的字体验证权限。我们没想到这个字体服务会有很高的负载1(负载是指线程消耗和 CPU 等待的平均值)。但是去年我们注意到字体服务出人意料地出现高负载,尤其是晚上我们没什么流量的时候,很多人同时非常多同行去刷你的短链接。幸运的是,我们发现了这一问题的根本原因,并大幅提升了字体服务的性能和系统整体的稳定性。以下内容是我们的优化过程。



图1:修改前后系统复制(12 月 21 日发布修复版本)



用火焰图调试


我一个同事从 Netflix 公司的 Brendan Gregg 那里发现并部署了一个小巧的火焰图工具。这个工具可以把多个性能检测工具的数据结合起来,生成一张本地方法和 JVM 方法资源使用情况的图象。图里每一个矩形都代表一个栈帧,矩形的宽度代表资源的使用情况,如 CPU 时间,y 轴代表调用栈。你可以简单地通过找出比较宽的矩形来定位出问题所在。这个工具对于调试字体服务的性能是非常宝贵的。



图2:字体服务器高负载情况下的一张火焰图



我们收集了几张字体服务高负载状态下的火焰图。下面展示了其中一张,图里有一处 JVM 部分几乎到顶。我们很快注意到这些图的规律。绝大部分时间都是消耗在 libz.so(用于 gzip 压缩和解压)上,而 JVM 里的绝大部分时间都是消耗在 XML 转义和 UTF-8 编码上。



图3:在 JVM 部分放大的火焰图



为什么这么慢


首先,介绍一点关于我们字体服务如何工作的背景。我们将字体数据保存在 Amazon S3 容器中,每一种字体的每一 unicode 编码范围(unicode range)是一个独立的对象。其他服务会为字体体系、一系列 unicode 编码范围(unicode range)或者用户来请求字体数据。字体服务会下载用户请求的字体体系中特定 unicode 编码范围(unicode range)的数据,并返回包含这所有数据的 XML。


这一功能非常简单,并没有什么明显密集计算的东西。然而,我们遇到了高负载。我们在火焰图的帮助下发现 libz、XML 转义和 UTF8 编码占用了 CPU 大量资源。但是为什么我们花了这么多时间在编码和压缩上呢?记得我刚才说的,晚上负载最高吗?我们的晚上(美国山区标准时)在亚洲是白天。每当晚上我们本地没什么流量的时候,大量其他地区的用户正在用亚洲语言的 unicode 编码范围(unicode range),比如中文、日语和韩语。事实上,相比起来这些类别的字体数据是非常庞大的。这些数据通过 gzip 解压、UTF-8 解码然后 XML 转义、UTF-8 编码最后 gzip 压缩。对于体积很小的基本拉丁文类别,这一过程没什么。然而,CJK 类别比基本拉丁文类别大了两个数量级(1MB 对比 60KB)。对于这些体积大的字体类别,这所有的转换都使得 CPU 吃不消。Gzip 压缩和解压相对很耗资源,XML 转义也没有那么快。


怎样加速


字体服务响应的内容本质上只是来自 S3 的原始数据。字体服务的确做了其他重要的工作,比如权限验证,查找字体关键字。但是没有理由必须让字体服务从 S3 转发字体数据。我们的解决方案非常简单粗暴,直接返回一系列包含字体数据的 S3 对象的链接,而不是通过字体服务下载然后重新编码字体数据。


这一修改几乎将字体服务器的负载降为 0(见图1)。客户端服务器也察觉不到任何影响。尽管我们第一次尝试非常成功,但我也应该记住,我们部署的同时增加了功能发布控制,它可以让我们在 100% 启用前,先启用一定比例的请求来测试它能够正常工作。


结论


通过对生产环境服务器的监控,我们能够定位并删除服务器上没必要的功能。下面是我们这次经历中几个关键的步骤:


  1. 用火焰图等性能检测工具定位那些霸占 CPU 的功能方法。


  2. 压缩和其他编码也会非常耗资源。


  3. 如果客户端能够直接获取到数据,那么直接发给它一个连接而非转发数据会提升整体的性能。(声明:这并不是灵丹妙药,有些情况下会对客户端性能造成损失,因为它必须要做二次请求)。


#1: 负载是指线程消耗和 CPU 等待的平均值。


扫描二维码推送至手机访问。

版权声明:本文由短链接发布,如需转载请注明出处。

本文链接:https://www.ft12.com/article_270.html

分享给朋友:

相关文章

人人网,微博等网站在分享url的时候都会转换成短链接,这样有什么好处?

比如 http://u6.gg/baidu【李卿的回答(9票)】:正如@sqybi 所说,初衷应该是微博类网站为了缩短字数,毕竟这些地方惜字如金。前几位都说到了垃圾外链的问题,其实这个并不是大问题,是可以用nofollow属性来处...

人工智能识别性取向:披着技术外衣的面相学?

人工智能识别性取向:披着技术外衣的面相学?

[ FT12短网址 ] 近期,一份来自斯坦福大学的研讨宣称,他们的算法能够经过对照片中人物的表情、动作和神态停止剖析,推断出人物的性取向。但批判家却以为,这只是披上了人工智能外衣的伪科学和面相学。图片来自“123rf.com.cn...

失去微信的惊艳,腾讯还能走多远

失去微信的惊艳,腾讯还能走多远

最近微信再次改版,上线了“看一看”、“搜一搜”这么两个功用,而悉数职业又是一片唱好,认为微信又找到了全新的增加点之类之类。可是作为一个普通用户,却对这次更新感到绝望,微信正在变得越来越不酷,当年摇一摇、语音发送、公众号、微信红包等等所带来的...

FT12短网址:干事业不是先有钱,而是先有胆!

FT12短网址:干事业不是先有钱,而是先有胆!

胆量决议财富1、想常人之不敢想,做常人之不敢做2、不拼,怎么知道不行3、有没有勇气走出第一步,往往是人生的分水岭4、人的成功是被冒险逼出来的5、不冒险即是最大的冒险,咱们坚决不做老实人6、惧怕失利,就等于回绝成功7、要想知道梨子的滋味,就要...

一个40岁华为男的自白:作为前IBM员工,除了钱,我为什么要来华为“受虐”

我离开“我摸”(IBM的江湖俗名)加入华为的时候,老板、同事、同学、朋友都十分惊讶的问我为什么。当时总是很装逼的说:“换个环境,我想看看自己的career。”实际上入职后的好几年里,我还在问自己到底为什么来华为。别笑我如此纠结,当年华为的名...

Prime Day筹备全攻略 各路商家一起解决备货难题

【FT12短网址资讯】还有一个月,本年跨境出口电商第一个大促旺季——亚马逊Prime Day将到来,而此时则成了各卖家最首要的备战时刻。而这也是全球跨境电商解决方案效劳商ESG集团(E-Services Group)参与的第2次亚马逊Pri...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。