![](http://www.ctiforum.com/uploadfile/2018/1105/20181105012128217.jpg)
Facebook开源了一套Linux内核元件和相关工具,来解决关键队列管理(Fleet Management)问题,包括资源控制、资源利用、工作负载隔离、负载平衡、测量和监控等工具。
为确保用户可以快速可靠的存取服务,Facebook基础设施工程师开发了流量最佳化系统,而BPF则在其中扮演重要的角色。BPF是Linux核心中一个高度灵活且高效能的程式码执行引擎,允许位元组码在各种勾点(Hook Point)执行,让客制化的程式码也可以简单并安全的修改核心行为。虽然BPF已经广泛的应用在资料封包过滤上,但BPF的指令集具通用性且足够灵活,可支援网路追踪和安全性之外的应用。
使用BPF的最佳化系统Katran就是其中一种应用,Katran是软体定义的负载平衡解决方案,具有完全重新设计的转发平面(Forwarding Plane),充分利用了BPF虚拟机器的优点。Katran转发平面软体函式库强化了Facebook基础设施,同时也帮助改进效能和网路负载平衡可扩充性,大幅减少低效率的发生。
Facebook还开源了Btrfs,这是新一代的档案系统,以当今的数据中心作为设计基础,支援写入时复制(Copy-on-write,COW)功能,能实现许多进阶功能,具有高容错、修复和易於管理的特性。Btrfs目的在解决和管理大型储存子系统,支援快照、线上资料重组、池化(Pooling)和整合多重装置支援。
Btrfs在Facebook数据中心应用程式效率和资源使用率上扮演重要角色,近期的使用案例是Cgroup2进行I/O控制的时候,Btrfs会帮忙消除由前一个档案系统的日志行为,引起的优先顺序倒置状况。Btrfs是目前唯一可用於资源隔离的档案系统实作,目前在Facebook的百万伺服器都有部署,显着提升执行效率。
另外,Netconsd是一个基於UDP的Netconsole守护行程,为Linux Netconsole讯息提供轻量级的传输服务。Netconsd可以接收并处理来自Linux核心的日志资料,并帮助产品工程师快速识别丛集中的问题。在Facebook中,Netconsd提供重要的数据中心统计资料,该系统可以连续纪录数百万台主机的资料,并允许工程师从核心中产生大量的日志资料,以提取有意义的讯号,协助产品工程师快速识别和诊断有状况的服务。
在7月的时候,Facebook开源了内部记忆体不足解决方案Oomd,其中提到了两项关键的功用工具PSI(Pressure Stall Information)和Cgroup2,现在也都开源给外部使用。Cgroup2是用於分组以及结构工作负载的Linux核心机制,能够控制分配给每个群组的系统资源量,其具有记忆体、I/O和CPU等控制器,允许使用者隔离工作负载,并确定每个工作负载分配的资源以及优先顺序。Cgroup2能良好处理记忆体中,过量使用以及记忆体稀缺的问题,改善了Facebook数据中心的多租户服务,
而PSI则提供一种规范方法,以三种主要资源指标量化资源短缺,分别是记忆体、I/O和CPU,这些压力指标将作为此开源的一部分,能与其他核心和使用者空间工具结合使用。当在进行开发和回应时,能智慧地侦测资源短缺。PSI统计资料为即将发生的资源短缺提供早期预警,从而实现更积极主动,更细致的回应。Facebook将PSI与Cgroup2结合使用,监控每个Cgroup各种工作负载的资源使用,进而在资源不足的情况下提高利用率和可靠性。
Facebook核心和核心应用程式开发人员,会与各内部团队合作,共同开发解决Facebook数据中心问题的技术,而这些问题也是同样产业都会遇到的,Facebook现在开源这些已经用於内部产品阶段的专案,供其他企业使用。而Facebook提到,开源解决方案是他们工程文化的一部分,这些解决方案解决了实际的产品问题,同时也解决了现代大规模云端计算的挑战。