Intruduction to the NGINX stream subsystem and OpenResty's support

Similar documents
Community Development 社区发展

OpenResty在又拍云容器平台中的应用

(Microsoft Word - 11\244T\246\342\277\337\260l\302\334.doc)

Chap6.ppt

untitled

UDP 8.2 TCP/IP OSI OSI 3 OSI TCP/IP IP TCP/IP TCP/IP Transport Control Protocol TCP User Datagram Protocol UDP TCP TCP/IP IP TCP TCP/IP TC


(Real-time) (Local Host) (Buffer) (Video Conference) (VoD) (NetRadio) ,000 [1]( ) ( ) 1400 (2001 ) 75 (2005 ) DFC Intelligence [2] 1

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

7. 小 星 星 一 閃 一 閃 亮 晶 晶, 滿 天 都 是 小 星 星 ; 掛 在 天 空 放 光 明, 好 像 許 多 小 眼 睛 ; 一 閃 一 閃 亮 晶 晶, 滿 天 都 是 小 星 星

A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内

untitled

E11701


秘密

IP505SM_manual_cn.doc

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

OpenResty 动态流控的几种姿势

<4D F736F F D20C9CFBAA3CAD0BCC6CBE3BBFAB5C8BCB6BFBCCAD4C8FDBCB6BFBCCAD4B4F3B8D95FBDA8D2E9B8E55F5F E646F63>

MASQUERADE # iptables -t nat -A POSTROUTING -s / o eth0 -j # sysctl net.ipv4.ip_forward=1 # iptables -P FORWARD DROP #

Microsoft Word - 澎湖田調報告-宏達組9804.doc

平 凡 足 迹 李 本 川 作 者 为 中 国 科 学 院 海 洋 研 究 所 研 究 员,1935 年 生, 山 东 荣 成 人 我 今 年 63 岁 了 大 前 年 丈 夫 和 儿 子 在 一 个 月 内 先 后 离 开 了 人 世, 女 儿 又 已 出 嫁, 现 在 是 孑 然 一 身 我 是

今天 年春季号 总 92 期

*

( ) / / / / / / /

(Microsoft Word - 8\244T\244\362\277\337\272]\244W\265L\246W.doc)

Microsoft Word - 專家本色 doc


但, 你 应 该 听 过 我 们 走 在 大 路 上 这 首 歌, 或 许 还 知 道 革 命 人 永 远 是 年 轻 那 支 歌 ; 并 且, 几 乎 可 以 肯 定, 你 在 戴 红 领 巾 的 那 阵, 必 然 唱 过 牛 儿 还 在 山 坡 吃 草, 放 牛 的 却 不 知 道 哪 儿 去

2 临 终 助 念 答 问 序 临 终 关 怀, 由 佛 门 净 宗 古 来 祖 师 大 德 提 倡 助 念 往 生, 现 今 已 渐 为 社 会 大 众 所 重 视, 在 台 湾, 台 大 长 庚 等 各 大 医 院, 也 都 设 有 助 念 室 ; 大 陆 上 许 多 道 场, 也 有 专 为

校园之星

<4D F736F F F696E74202D FA8BEA861B8EAB7BDBEE3A658BB50C0B3A5CE28B773A6CBA5AB29>


之 原 則 及 國 防 部 訂 頒 國 軍 列 管 國 有 不 動 產 提 供 非 軍 方 單 位 使 用 處 理 原 則 規 定 不 符, 仍 應 以 出 租 方 式 辦 理 惟 可 就 偏 遠 地 區 提 供 官 兵 金 融 水 電 服 務 使 用 部 分, 研 議 降 低 租 金 標 準, 報

chineseall

釋禪波羅蜜次第法門

证券代码: 证券简称:锦江股份 公告编号:【】

1700 装 卸 搬 运 7645 装 卸 搬 运 服 务 2100 建 筑 7410 工 程 服 务 11% 装 卸 搬 运 服 务, 是 指 使 用 装 卸 搬 运 工 具 或 者 人 力 畜 力 将 货 物 在 运 输 工 具 之 间 装 卸 现 场 之 间 或 者 运 输 工 具 与 装 卸

前 言 教 育 无 小 事, 它 成 就 着 学 生 的 未 来 作 为 教 师, 他 们 无 时 无 刻 不 在 关 注 着 学 生 的 成 长 学 生 的 未 来 学 生 就 像 一 朵 含 苞 待 放 的 花 朵, 需 要 老 师 们 的 细 心 呵 护, 给 学 生 需 要 的 东 西, 而

《盗墓笔记》 南派三叔/著

<CFFBB7D1D5DFD0D0CEAAD1A72E6D7073>

独立学院建设与发展


Go构建日请求千亿微服务最佳实践的副本

<4D F736F F D B0EAA5C1A470BEC7A4CEB0EAA5C1A4A4BEC7B8C9B1CFB1D0BEC7B9EAAC49A4E8AED7>

PowerPoint 演示文稿

响应式在iOS开发中的应用 For PDF

PIC_SERVER (11) SMTP ( ) ( ) PIC_SERVER (10) SMTP PIC_SERVER (event driven) PIC_SERVER SMTP 1. E-

TCP/IP TCP/IP OSI IP TCP IP IP TCP/IP TCP/IP

Microsoft Word - ²Ä158´Á«ß®v³q°T

穨UPSentry_SC_.PDF

ebook12-1

untitled

Open topic Bellman-Ford算法与负环

AS北京2017-《知乎 Feed 流构架演进》-姚钢强.key

文件1

<4D F736F F D A67EAF64BEC7BCFABEC7AAF7C2B2B3B95FA5FEB3A1AAA95F2D31312E31362E646F63>

得 依 法 召 集 股 東 臨 時 會 第 十 一 條 : 股 東 常 會 之 召 集 應 於 開 會 三 十 日 前, 股 東 臨 時 會 之 召 集 應 於 開 會 十 五 日 前, 將 開 會 日 期 地 點 及 召 集 事 由 通 知 各 股 東 並 公 告 之 第 十 二 條 : 本 公

同 時, 那 些 百 萬 富 翁 們 正 乘 坐 着 私 家 噴 射 機 駛 往 歐 洲, 甘 願 花 大 把 的 鈔 票 接 受 替 代 療 法 並 且 重 獲 了 健 康 替 代 療 法 總 是 很 靈 嗎? 不, 當 然 不 是 在 這 世 界 上 没 有 盡 善 盡 美 的 事 物 但 是

高校发展动态

杭师大党字〔2011〕15号中共杭州师范大学委员会关于进一步加强和改进发展党员工作的意见

<4D F736F F D B2C431A6B8A4A4A4DFA8C6B0C8B77CC4B3ACF6BFFD E646F63>

untitled

W. Richard Stevens UNIX Sockets API echo Sockets TCP OOB IO C struct C/C++ UNIX fork() select(2)/poll(2)/epoll(4) IO IO CPU 100% libevent UNIX CPU IO

一个开放源码的嵌入式仿真环境 ― SkyEye

SEC-220

af9c70ccea1f1950c6732b99b2e51134_ pdf

untitled

Web

5B_sasaki.pdf

TCP/IP LAN : : IPv4 NGI, NGN, GENI, AGN, Veno II 2

Chap06

2

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

[Table_MainInfo]

目 錄 頁 次 政 風 法 令 宣 導 一 行 政 中 立 實 務 探 討 二 收 到 支 付 命 令 不 可 置 之 不 理 3 9 公 務 機 密 維 護 宣 導 一 淺 談 駭 客 攻 擊 14 二 何 不 自 行 設 計 入 侵 防 禦 系 統? 17 安 全 維 護 宣 導 認 識 爆 竹

VoIP Make a Rtp Call VoIP Abstract... 2 VoIP RTP...3 Socket IP...9 Config Two Voice-hub

Hippy-VueConf

<%DOC NAME%> (User Manual)

EPSON


摘 要 1. GSLB: 全 局 负 载 均 衡 2. SLB: 服 务 器 负 载 均 衡 四 层 交 换 LVS 七 层 交 换 Nginx 3. Heartbeat 实 现 HA 4. MySQL 数 据 库 集 群 5. 集 群 环 境 下 的 存 储 备 份 6. 集 群 的 监 控 及

SiteView技术白皮书

《80后职场新鲜人生存手册》

IP TCP/IP PC OS µclinux MPEG4 Blackfin DSP MPEG4 IP UDP Winsock I/O DirectShow Filter DirectShow MPEG4 µclinux TCP/IP IP COM, DirectShow I

藍牙網路在資訊家電的應用

9 Internet 10 Internet

穨CAS1042中文手冊.doc

Chapter #


(Methods) Client Server Microsoft Winsock Control VB 1 VB Microsoft Winsock Control 6.0 Microsoft Winsock Control 6.0 1(a). 2

Socket Socket TcpClient Socket.Connect TcpClient.Connect Socket.Send / Receive NetworkStream 6-5

Microsoft Word - XN30Chap3.doc

BYOD IP+Optical (IP NGN) API 4. End-to-End (Service Aware) 5. IP NGN (IP Next Generation Network) ( ) Prime Carrier Management Access Edge Co


:,,,,,,, ( CIP) /,. :, ISBN :. F CIP ( 2002) : : * : : : : 174 ( A ) : : ( 023)

C6_ppt.PDF

科研信息化技术与应用 2015, 6 (6) 联网交换中心 AP 等国内主要互联网运营商实现高 [1] 速互联 截至目前 美国 英国 新加坡 巴西 新西 兰 中国香港等国家和地区的政府机构均开展了宽带 况 在网络出现拥塞时能够快速定位问题 解决故 障 有针对性地提升我们的网络质量 并随着服务 质量的

Microsoft Word - 議題三~1

Basic System Administration

Transcription:

NGINX stream 子系统的简介 以及 OpenResty 对其的 支持 孙 大同 (@dndx) OpenResty Con 2017 北北京 2017 年年 10 月 21 日

关于我 90 后 曾在 LinkedIn,Cloudflare 等公司 工作 OpenResty Inc. 技术合伙 人 热爱钻研底层技术以及折腾 飞 行行爱好者 拥有固定翼私 人 飞 行行执照, 仪表 飞 行行资质以及 无 人机驾驶执照

NGINX stream 子系统的简介

NGINX stream 子系统的历史 从 2015 年年 4 月发布的 v1.9.0 开始正式出现 用于实现通 用的 TCP 以及 UDP 服务器器 功能在 v1.11.2 - v1.11.8 之间得到了了很 大的提升 v1.11.x 版本的 stream, 核 心变化 十分巨 大且不不向后兼容 截 止到 v1.13.x, 核 心部分已经趋于稳定 OpenResty 早在 2016 年年 1 月就有了了实验性的 支持

NGINX stream 子系统的连接处理理 (TCP) O/S, event subsystem and stream_core_module TCP 3-way handshake accept() session 初始化 stream phase engine postaccept preaccess access ssl log output filter content preread 清理理

NGINX stream 子系统的连接处理理 (UDP) O/S, event subsystem and stream_core_module 收到 UDP 数据包 recv() session 初始化 stream phase engine postaccept preaccess access ssl log output filter content preread 清理理

stream-lua-nginx-module 对最新 NGINX 核 心的 支持 Kong Inc. 赞助了了 stream-lua-nginx-module 的开发 完全基于最新的 lua-nginx-module 代码重写 重写过程中加 入了了对新的 phase 系统和变量量系统的 支持 增加了了新的 API 来适应 stream 模块的特殊需求 新的 meta-lua-nginx-module

no location block

preread_by_lua 访问控制 高级代理理策略略 可以使 用会 yield 的 API 可以向客户输出内容 不不受 preread_buffer_size 和 preread_timeout 的限制

balancer_by_lua API 于 lua-nginx-module 现有的完全兼容 需要在 stream 的 block 下单独定义 upstream state_name, status_code = balancer.get_last_failure() balancer.set_timeouts(connect_timeout, send_timeout, read_timeout)

log_by_lua 发 生在连接即将被关闭时 不不能 yield 可以使 用 ngx.timer.* API 可以访问所有的变量量以及 ngx.ctx

stream-lua-nginx-module 使 用过程中的注意事项 避免频繁在请求的内存池上分配 UDP 子系统对数据包的特殊处理理 不不要在没有完全清空操作系统的 socket 读缓冲区的情况下关闭连接 新的 API:tcpsock:shutdown() 用来模拟 lingering close

Lingering close Kernel socket 读缓存 数据 NGINX 连接读缓存 数据 close() will cause RST

tcpsock:shutdown local LINGERING_TIME = 30 -- 30 seconds local LINGERING_TIMEOUT = 5000 -- 5 seconds local ok, err = sock:shutdown("send") if not ok then ngx.log(ngx.err, "failed to shutdown: ", err) return end local deadline = ngx.time() + LINGERING_TIME sock:settimeouts(nil, nil, LINGERING_TIMEOUT) repeat local data, _, partial = sock:receive(1024) until (not data and not partial) or ngx.time() >= deadline Source: https://github.com/openresty/stream-lua-nginx-module#tcpsockshutdown

stream-lua-nginx-module 的开发思路路 I/O 主要依靠于 ngx.req.socket, 只 支持 raw socket 有少量量的 ngx.say(),ngx.print() 的 支持 可以利利 用 preread_by_lua,proxy 模块和 balancer_by_lua 来 高效的转发

stream-lua-nginx-module 未来的功能 ssl_certificate_by_lua* access_by_lua* shdict 跨 子系统的共享 lua-resty-core 的集成

例例 子 :echo 服务器器 stream { server { listen 1234; content_by_lua_block { local sock, err = ngx.req.socket() if not sock then ngx.exit(500) end while true do local data data, err = sock:receive('*l') if not data then return ngx.exit(200) end } } } end local sent sent, err = sock:send(data.. '\n') if err then return ngx.exit(200) end

Demo: telnet 聊天室 https://github.com/dndx/telnet-chat

stream-lua-nginx-module 模块在 OpenResty Edge 2 中的应 用 已经在 用 类 memcached 协议的服务 DNS 服务器器 很快会有 基于规则的四层流量量代理理 Routing Platform

OpenResty Edge 2 Routing Platform Edge Admin cluster2.node1.pri vileged.service 集群 1 集群 2 Node 1 Node 2 Node n 数据 Node 1 Node 2 Node n

代码 生成过程 meta-lua-nginx-module 渲染 渲染 lua-nginx-module NGINX stream-lua-nginxmodule 编译链接 二进制 文件

更更多信息 https://github.com/openresty/stream-lua-nginx-module https://github.com/openresty/meta-lua-nginx-module https://openresty.com Email: datong#openresty.com 欢迎贡献 PR!

Questions?

Thank You!