共计 2544 个字符,预计需要花费 7 分钟才能阅读完成。
作者:竞霄
监控能力作为根底运维能力和外围稳定性措施,开发运维人员能够通过监控零碎无效进行故障定位,预防潜在危险,剖析长期趋势进行容量布局和性能调优,是软件开发生命周期中必不可少的一环。与此同时,Serverless 作为云计算的最佳实际和将来演进趋势,其全托管免运维的应用体验和按量付费的老本劣势,使得其在云原生时代备受推崇,在下一个十年将成为云厂商提供的外围能力。随着 Serverless 的心智遍及度越来越高,场景覆盖度越来越广,更多应用 PHP, Python,C/C++, Node.Js, Golang 等语言的用户开始进行 Serverless 架构降级。
对于这部分用户来说,传统的利用监控计划存在以下痛点:
- 建设老本高 ** 需部署一整套监控零碎,包含数据采集,指标传输,长久化存储,可视化展现,告警等模块,减少了额定的资源老本和人力老本。
- 埋点强入侵 ** 需评估各语言,各框架,各接口的监控指标诉求,引入三方依赖进行繁琐地手动埋点。尽管对于 PHP, Python 等语言,曾经有借助对象(模块)替换加强的技术实现无需批改的指标采集,但其能力成熟度,框架兼容性,运行稳定性等方面都还有进一步晋升的空间。
- 运维简单 ** 用户须要确保整个监控链路的低延时,高可用和指标准确性,须要比照剖析引入监控埋点后对原有利用性能上的影响并继续优化。
Serverless 产品须要提供一种对立的,开箱即用的,无入侵零革新的形式来实现任意语言的利用监控能力,使得多语言用户能够充沛享受 Serverless 带来的普惠技术红利。 上面咱们首先对其背地应用的 eBPF(Extended Berkeley Packet Filter)技术进行介绍。
何为 eBPF?
eBPF 全称为 Extended Berkeley Packet Filter,始于 Linux 3.18,是一项革命性的 Linux 内核技术。eBPF 提供了基于零碎或程序事件的高效,平安,无入侵执行特定代码的通用能力。在 eBPF 诞生之前,因为用户态与零碎态互相隔离,应用程序无奈间接解决内核数据,而如果间接批改内核又具备相当的复杂性,每次开发或调试都须要从新编译,效率非常低下,安全性也无奈保障。
eBPF 作为一个运行在内核中的虚拟机,容许开发人员间接提交 eBPF 程序,在不批改内核代码的状况下运行特定的性能。eBPF 程序基于事件驱动模型,当内核运行到特定 hook 点时会触发执行, 预约义的 hook 点包含零碎调用、函数进入 / 退出、内核 tracepoints、网络事件等。对于不存在的 hook 点也能够通过 KProbe,UProbe 进行动静埋点,提供内核态和用户态函数的追踪能力。借助丰盛的 hook 点,eBPF 技术可被广泛应用于包含网络监控、平安过滤和性能剖析等诸多场景。
eBPF 的工作流程如下图所示,首先通过在用户空间内应用 LLVM 或者 GCC 将编写好的 eBPF 程序编译成为字节码,而后借助零碎调用 bpf 将其加载至内核中。eBPF 虚拟机将应用验证器对字节码进行安全性校验,如只能应用受限的 helper 辅助函数,无限的循环次数和执行工夫,DAG 判断是否存在不可达代码等,防止其造成内核解体。
平安校验后 eBPF 字节码将通过即时编译器(JIT,Just-In-Time Compiler)编译成为原生机器码,提供近乎内核本地代码的执行效率,并挂载到具体的 hook 点上。用户态程序与 eBPF 程序间通过常驻内存的 eBPF Map 构造进行双向通信,每当特定的事件产生时,eBPF 程序能够将采集的统计信息通过 Map 构造传递给下层用户态的应用程序,进行进一步数据处理与剖析。
SAE 利用监控
SAE(Serverless 利用引擎)作为业界首款面向利用的 Serverless PaaS 平台,全托管免运维,实现了单体 Web 利用,微服务利用以及定时工作的 Serverless 化。其外围劣势之一在于用户能够低心智累赘,零改成老本的将其利用 / 工作间接部署至 SAE 中。目前在 JAVA 生态中,无论是代码包部署,监控调用链的集成,还是散布式调度框架的迁徙,都能够让用户无需改变任何业务逻辑和版本依赖的状况下应用。
基于 eBPF 技术,SAE 利用监控反对了针对任意语言,任意框架的无入侵指标采集与监控告警能力,提供包含利用 / 实例维度的黄金三指标 RED(申请数,谬误数,响应工夫)和 HTTP 状态码统计,以及提供服务与依赖服务的接口级别调用信息。借助内置可视化大盘,开发运维人员能够及时评估以后利用对外服务状态,无效辨认用户体验、服务中断、业务异样等问题。
SAE 利用监控能力具备以下外围劣势:
- 免运维 ** 开箱即用,部署即失效,用户无需额定运行保护监控告警组件。
- 代码无侵入 ** 无需任何代码埋点,无需任何依赖批改即可获取到丰盛的监控数据。
- 语言无关 ** 通过内核层进行网络协议解析,反对任意语言,任意框架。
- 多协定笼罩 ** 反对对 HTTP,MySQL,Redis,Kafka,DNS 等网络协议,进行指标和链路的监控。
- 高性能
** 通过缩小数据在内核态和用户态之间的拷贝,以极低的性能耗费获取指标数据。
技术实现上,SAE 通过将 eBPF 探针以 sidecar 的模式与用户业务程序部署在同一平安容器中, 实现了多租隔离。
eBPF 程序将会监听 accept/close/read/write/sendto/recvfrom 等零碎调用,获取本地及远端地址,线程上下文,文件描述符 fd 等信息,同时关联以后容器实例信息产出原始事件。
而后将原始事件的内容发送至用户态程序。用户态程序进行应用层协定辨认,解析出协定的关键字段,匹配单条链路的申请和响应,同时通过事件过滤,维度收敛,元信息关联,预聚合等步骤进行数据加工,生成最终指标。最初周期性将采集指标上报至 Arms Promethues 中进行长久化存储。
总结
面向未来,云计算将会全面 Serverless 化,多语言,全生态的反对将会是 Serverless 产品发力的重点,SAE 利用监控能力同样会继续一直的演进和加强,目前曾经全面上线了无入侵,多维度,高性能的利用外围指标监控和告警能力,欢送大家应用。同时在后续的 RoadMap 中,SAE 将会推出全局调用拓扑,服务上下游依赖,调用链路详情等进阶性能,打造更加欠缺的 Serverless 多语言可观测体系。