我们公司有个面向服务的架构。其中一个服务是字体服务,字体体系和 unicode 编码范围(unicode range)提供字体数据,为用户上传的字体验证权限。我们没想到这个字体服务会有很高的负载1(负载是指线程消耗和 CPU 等待的平均值)。但是去年我们注意到字体服务出人意料地出现高负载,尤其是晚上我们没什么流量的时候。幸运的是,我们发现了这一问题的根本原因,并大幅提升了字体服务的性能和系统整体的稳定性。以下内容是我们的f5负载均衡优化过程。
我一个同事从 Netflix 公司的 Brendan Gregg 那里发现并部署了一个小巧的火焰图工具。这个工具可以把多个性能检测工具的数据结合起来,生成一张本地方法和 JVM 方法资源使用情况的图象。图里每一个矩形都代表一个栈帧,矩形的宽度代表资源的使用情况,如 CPU 时间,y 轴代表调用栈。你可以简单地通过找出比较宽的矩形来定位出问题所在。这个工具对于调试字体服务的性能是非常宝贵的。
我们收集了几张字体服务高负载状态下的火焰图。下面展示了其中一张,图里有一处 JVM 部分几乎到顶。我们很快注意到这些图的规律。绝大部分时间都是消耗在 libz.so(用于 gzip 压缩和解压)上,而 JVM 里的绝大部分时间都是消耗在 XML 转义和 UTF-8 编码上。
首先,介绍一点关于我们字体服务如何工作的背景。我们将字体数据保存在 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% 启用前,先启用一定比例的请求来测试它能够正常工作。
通过对生产环境服务器的监控,我们能够定位并删除服务器上没必要的功能。下面是我们这次经历中几个关键的步骤:
评论时间:2024-04-13 03:25:01
服务器cpu的核心是指处理器中最重要也是最难处理的部分,它与主台式机变云主机 板、内存等部件一起组成了计算机系统做服务器的电脑需要什么配置 计算机系统
评论时间:2023-08-19 06:25:02
服务器租用哪一家好呢?目前云主机购买后多久才可以备案 市场上主要有两种服务器类型:1.x86服务器2.ARM服务宝塔服务器安装教程 x86服务器2.ARM服务器
评论时间:2023-04-14 00:40:06
因此,服务器租用成本中最重要的部分就是服务器的维机房云主机 护费用云服务器和云主机哪个好 重要的部分就是服务器的维护费用
评论时间:2023-01-06 00:25:01
29.智便宜服务器租用托管 能化管云主机平台租用 智能化管理
评论时间:2022-12-03 09:25:02
服务器搭建教程免费学习,提供最新的硬件配置和软国内云主机便宜的 件安装云主机哪个牌子稳定 学习,提供最新的硬件配置和软件安装
评论时间:2022-08-27 12:25:01
6.我的世界服务器官网 精通HTML数据服务器英文 ML
2023-12-25 22:44:35 admin
活动发布区版规2023-05-27 22:03:52 御风而行
容器、无服务器、虚拟机:安全性差...2023-05-27 20:43:39 1356
服务器宕机的造成原因和解决方法介...2023-05-27 20:43:25 qingym
别糊涂了!服务器与工作站的五大区...2023-05-27 19:08:41 小绵羊0123
科技巨头布局云端 服务器 网络硬...2023-05-27 18:17:46 姐姐的跟屁虫
钉钉因系统访问流量激增,宕机1小...2022-07-23 00:34:02 freeatom
常见ftp命令 FTP命令使用详...2022-07-21 02:17:02 ares
双硬盘组建Raid0磁盘阵列图文...2022-07-20 06:17:02 mankeung123
用友软件客户端连接不上服务器的解...2022-07-23 00:51:02 antonfxb
WebService实例2022-07-13 05:38:02 苯小孩
开发、运维不可不看的Linux调...2022-07-20 18:51:02 nightstone
如何使用Charles抓取Web...2021-12-21 05:38:01 蓝然左右
BGP技术帮你解决不同线路互通问...2022-01-15 05:38:02 二图
我应该选择双线双IP机房还是双线...2022-07-04 05:38:02 csf1906
20款开发运维必备的顶级工具,速...2022-07-06 05:38:02 9999999999999
7个有效的物联网应用案例2022-07-19 06:51:02 kingnw
2款超好用的redis可视化工具2022-07-20 01:51:02 niles
金蝶KIS标准版工资管理系统初始...2022-07-19 20:17:02 dengyu0429
linux vi使用及详细介绍2022-07-20 01:00:05 激动的舌头
Linux视频教程:用户管理命令...2022-07-21 20:51:02 jessica-an
创建本地FTP站点2022-02-07 05:38:03 jasonkidd
WEB服务器配置详解2022-07-20 04:51:02 wolfssss
ACL权限-默认与递归(4)2022-07-22 15:00:05 淡水珊瑚
Linux下 Samba Ser...