Kong:一个请求的生命期
Kong 扮演的角色 作为一个 API 网关,Kong 既可以作为负载均衡器,也可以作为反向代理、认证中心等等。可以看作一个基于 Lua 的超级加强版的 Nginx
Kong 的每个 Node 是多进程的。有一个 master 进程,多个 worker 进程。每个进程又拥有多个线程。就像下图的黄色圈圈。
作为 worker 的线程,各自又会管理很多个连接。这些连接可以如下分类:
可用连接:这些连接是空闲的,可以被 worker 使用
未阻塞连接:当一个新请求到来时,worker 会从可用连接中取出一个,然后将其放入未阻塞连接中。当请求处理完毕后,worker 会将连接放回可用连接中
正在处理的连接:由于采用多路复用模型,实际上正在处理的连接只有一个。未阻塞连接会一个接一个地被处理
阻塞连接:当请求处理过程中,需要等待外部服务的响应时,连接会被放入阻塞连接中。当外部服务响应后,连接会被放回未阻塞连接中
保持存活(keepalive)的连接:当请求处理完毕后,worker 会判断是否需要保持连接。如果需要,连接会被放入保持存活的连接中。当下一个请求到来时,worker 会从保持存活的连接中取出一个,然后将其放入未阻塞连接中
Keep-Alive 是用于复用连接的方式。由于 TLS 需要进行 SSL 握手,这个过程的开销比较大。所以,如果能够复用连接,就可以避免这个开销。
Phases 每个 Kong Node 都会经历多个阶段。
Init 这个阶段只会在 Node 启动时执行,且只在 Master 进程执行。主要做以下事情:
创建 Lua VM
加载配置文件
检查迁移
加载插件
初始化数据库 / Dbless / Hybird
初始化 DNS
初始化 PDK
初始化证书
初始化路由和插件迭代器
Init Worker 之后进入 init_worker 阶段。这个阶段会在每个 Worker 进程中执行。主要做以下事情:
Read more...