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-plus

OpenResty Inc. 对该库进行了大量的优化,降低了该库的内存和 CPU 开销。 同时,相关的接口和开源版本是一致的,可以实现对开源库的平移替换。

有些业务需要大量使用 lua-resty-http 来发送 HTTP 请求, 使用该库可以提升 OpenResty 应用的整体效率。

luajit-plus

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

该软件具有如下特性

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

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

lua-resty-kafka-fast

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

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

lua-resty-redis-fast

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

相比 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 保持一致,可以实现快速的替换。

相比 lua-resty-mysql,该库的性能更高,内存开销更少。

lua-resty-memcached-fast

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

相比 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 文件。该库的安装和使用说明可参考此文档