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

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

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

我们公司有个面向服务的架构。其中一个服务是字体服务,字体体系和 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

分享给朋友:

相关文章

赌博、自杀、精神病:FT12短网址带你揭秘重度电竞玩家的真实生活

英国《卫报》日前发表文章称,全球成长速度最快的体育运动项目是什么?许多人可能会认为是足球。其实答案并不是它,而是电子竞技。但越来越多的影响证明,电子竞技对相关人员是有害的。以下为文章内容摘要:  如果过去的四分之一个世纪有人不在地球上,那么...

硬件巨头正在崛起,中国独占鳌头

硬件巨头正在崛起,中国独占鳌头

[ FT12短网址 ] 今天,世界上有大约213家独角兽,其中有18家是硬件创业公司。中国在这一领域处于领先地位,在18家硬件公司中,有11家来自中国。中国从强大的国内市场、无与伦比的制造业生态系统、广泛的科技人才和蓬勃发展的投资...

ofo飞鸽代工厂探访:一分钟造4辆车

ofo飞鸽代工厂探访:一分钟造4辆车

共享单车竞争趋于“白热化”的同时,各地方正在赶紧办理整治乱停乱放。大家不禁思考,这些单车终究产于何处?怎样的流程才能让单车在短时间内大批下线?带着疑问,短网址资讯小编走进天津飞鸽自行车厂,对ofo出产线进行了实地看望。  在这家位于天津市区...

腾讯推行信用分的背后,或许是小程序电商的铺垫

腾讯推行信用分的背后,或许是小程序电商的铺垫

前言  最近腾讯信誉分开端进行灰度测验,引起了相当多的重视。  事实上,腾讯信征早已对外开放,而且推出时刻和芝麻信誉一样,同样是2015年。  只不过彼时腾讯只推出了信征报告,能够查询的内容也比较有限,其给出当前信誉较好、较差,以及当前排名...

百度:我们不造车,Apollo只是人工智能的搬运工

百度:我们不造车,Apollo只是人工智能的搬运工

[ FT12短网址 ] 百度在Apollo生态中承担的角色更像是供应商,但是与传统零部件供应商不同的是,百度将不主要依赖于车企采购产品或技术的方式盈利,百度的盈利模式还有进一步的想象空间,而且在百度内部也还没完全考虑成熟...

O2O进入下半场,百度或携人工智能实现弯道超车?

近日,百度外卖副总裁陈锦晖宣布辞职的消息刷爆了互联网,百度外卖业务要出售给顺丰的消息也时有流出。正如美团CEO王兴所言,国内O2O行业已经进入了“下半场”。随着移动互联网人口红利减退,烧钱竞争所带来的粗放式增长已经告一段落。 实际上在今年第...

发表评论

访客

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