OpenResty XRay 订阅下的私有库和模块

OpenResty XRay 订阅下的私有库和模块的介绍

lua-resty-tls-session

lua-resty-tls-session 是一个用于 TLS session ticket keys 轮转的 Lua 库。

Nginx 配置文件中的 TLS session ticket key 是用于生成 TLS session ticket 的。 客户端使用 session ticket 就可以恢复之前和服务端的会话而不需要重新进行握手, 但这个 ticket key 长期不更换并且泄漏的话则存在安全问题。 如果定期更换配置文件中的 ticket keys 并重启 Nginx 进程能够满足安全需求。但是这种方式 对于运维非常麻烦,并且重启会造成短暂的业务中断,对于 SLA 等级高的业务是不可接受的。

另外,对于集群的多个 Nginx 服务器,要求配置相同的 ticket key,否则客户端请求在不同的服务器间切换 会导致服务器无法解密 session ticket,进而无法实现会话恢复。这种情况下需要进行全新的 SSL/TLS 握手, 会有非常高的额外的 CPU 开销。

使用 lua-resty-tls-session 库,就可以通过指定 keys_fetcher 的方式定时获取最新的 key 来动态更新 Nginx 内的 key,淘汰之前已经过期的 key ,也无需重启 Nginx 进程。

我们也提供了一个内置的 redis_fetcher,只要集群内使用的是相同的 redis_fetcher 配置,集群就可以共享这些 ticket key, 客户端使用有效的 session ticket 和集群内的服务端都可以恢复会话,提高了客户端和服务端的会话复用率。

lua-resty-jsonb

lua-resty-jsonb 是用来代替 lua-cjson 的一个操作和存储 JSON 数据的解决方案。它通过避免序列化和反序列化操作来极大的减少 GC 对象的创建,同时又无须对已有的数据结构进行改变。

因为 lua-resty-jsonb 不需要进行反序列化即可查询 JSON 数据,所以在需要频繁进行反序列化或者只查询一个大的对象中的少数子对象时特别适合使用 lua-resty-jsonb 来替换 lua-cjson。

比如可以在控制面的机器上生成 JSONB 对象,将该 JSONB 对象分发到数据面的所有机器上。 数据面机器就可以实现不需要反序列化就查询 JSONB 里面的数据。

lua-cjson-plus

因为 JSON 消息格式简单易读,因此经常使用 JSON 来进行消息交换,保存配置等。在实际业务中经常会有大量的 JSON 对象的编解码需要,这些操作会消耗大量的 CPU 资源。

lua-cjson 这个 JSON 编解码库在 OpenResty 服务中有着非常广泛的应用。因此 OpenResty Inc. 对 lua-cjson 软件进行全面的优化, 提升了 JSON 数据的编解码效率。

在很多情况下, 性能最高可达开源库的 4 倍。

该库的安装和使用说明可参考此文档

lua-resty-http-fast

该软件是 OpenResty 公司基于纯 C 实现的高性能 HTTP 客户端库。 该库的接口与开源的 lua-resty-http一致, 用户可以直接使用该库替换开源的 lua-resty-http。

该库的核心实现确保了 100% 非阻塞 IO 通信,性能远超开源 OpenResty 中的 Lua cosocket API。 与 lua-resty-http 相比,该库具有显著更高的性能和更少的内存开销。

该库的安装说明可参考安装文档

该库的使用说明可参考使用手册

luajit-plus

luajit-plus 是 OpenResty Inc. 优化过的 LuaJIT 引擎。

该软件具有如下特性

  1. 相比开源 LuaJIT, 在一些应用场景下,luajit-plus 私有库的表操作性能提升可达上千倍。
  2. luajit-plus 私有库还提供了更多的操作符号, 比如 +=, -=, %= 等。
  3. 支持表达式级别的 do end 语句。
  4. 优化内存使用,减少 LuaJIT 内存分配器的内存占用。

该库的安装和使用说明可参考此文档

lua-resty-kafka-fast

该软件是 OpenResty Inc. 开发的 Kafka 消费者的接口,使得 OpenResty 网关能够在 Lua 层面消费 Kafka 消息。 该模块实现的接口也保证 100% 是同步非阻塞的,不会影响 OpenResty worker 进程的主循环。

该库的安装和使用说明可参考此文档

lua-resty-redis-fast

该软件是 OpenResty Inc. 基于纯 C 实现的高性能 Redis 客户端库。该库的接口和开源的 lua-resty-redis 保持一致,可以实现快速的替换。

该库的核心实现确保了 100% 非阻塞 IO 通信,性能远超开源 OpenResty 中的 Lua cosocket API。相比 lua-resty-redis,该库具有显著更高的性能和更少的内存开销。在一些情况下,性能最高可达开源库的 2.5 倍。

lua-resty-redis-cluster-fast

该软件是 OpenResty Inc. 基于 C 协程实现的高性能 Redis 客户端库。相比 lua-resty-redis-fast 增加了对 Redis 集群的支持。该库的安装和使用说明可参考此文档

lua-resty-mysql-fast

该软件是 OpenResty Inc. 基于纯 C 实现的高性能 mysql 客户端库。该库的接口和开源的 lua-resty-mysql 保持一致,可以实现快速的替换。

该库的核心实现确保了 100% 非阻塞 IO 通信,性能远超开源 OpenResty 中的 Lua cosocket API。相比 lua-resty-mysql,该库具有显著更高的性能和更少的内存开销。

lua-resty-memcached-fast

该软件是 OpenResty Inc. 基于纯 C 实现的高性能 memcached 客户端库。该库的接口和开源的 lua-resty-memcached 保持一致,可以实现快速的替换。

该库的核心实现确保了 100% 非阻塞 IO 通信,性能远超开源 OpenResty 中的 Lua cosocket API。相比 lua-resty-memcached,该库具有显著更高的性能和更少的内存开销。

lua-resty-dymetrics

开源的 nginx-module-vts 等指标统计模块在多 worker 的情况下性能会严重下降,进而影响到业务,因此不适合高流量的生产环境使用。

OpenResty Inc. 基于无锁技术实现的高性能的指标统计模块可以将指标结果输出为 JSON 格式或者 Prometheus 格式, 适合对接各种原有的采集系统。在高流量的情况下,该模块也有十分优异的性能。该库的安装和使用说明可参考此文档

openresty-minifiers

openresty-minifiers 库是一个由 OpenResty Inc. 实现的高性能压缩库,支持对 HTML、CSS 和 JavaScript 文件的压缩。该库基于私有库 replace-filter-nginx-module+ 实现,可以用于最小化 HTML、CSS 和 JavaScript 文件。该库的安装和使用说明可参考此文档

lua-resty-limit-traffic-dynamic

lua-resty-limit-traffic-dynamic 是一个高级的模块,旨在通过动态管理 HTTP 请求的速率限制来优化 Nginx 性能。 这个智能系统能够适应服务器的实时状况,主要目标是将 Nginx 工作进程的 CPU 利用率维持在指定的目标范围内。

该模块通过收集关键指标来运作,包括各种 URI 的请求响应总大小以及 Nginx 工作进程的 CPU 使用情况。利用这些数据,它计算并应用新的速率限制值到incoming请求,确保 CPU 使用率保持在预期的阈值内。

lua-resty-limit-traffic-dynamic 的主要特点包括:

  1. 动态调整:根据当前服务器负载和流量模式自动修改速率限制值。
  2. CPU 利用率控制:帮助防止 CPU 使用率超过配置的目标。
  3. URI 特定监控:收集不同 URI 的响应大小统计,实现更精细的流量管理。
  4. 无缝集成:设计为在 Nginx 的请求处理阶段中工作,包括 init_worker、access 和 log 阶段。

通过实施 lua-resty-limit-traffic-dynamic,系统管理员和开发人员可以实现更高效的资源利用,并提高 Nginx 服务器的整体性能,特别是在高流量环境中,保持最佳 CPU 使用率至关重要。