nginx lua


  • 为什么会选择 OpenResty
    首先,它最大的特点就是用同步的代码逻辑实现非阻塞的调用,其次它有单进程内的 LRU cache 和进程间的 share DICT cache,而且它是揉合 nginx 和 LuaJIT 而产生的。



非阻塞的访问网络IO。在连接 MySQL 、Redis 和发起 HTTP 请求时,工作进程不能傻傻的等待网络IO的返回,而是需要支持事件驱动,用协程的方式让 CPU 资源更有效的去处理其他请求。很多语言并不具备这样的能力和周边库。



有完备的缓存机制。不仅需要支持 Redis 、Memcached 等外部缓存,也应该在自己的进程内有缓存系统。我们希望大部分的请求都能在一个进程中得到数据并返回,这样是最高效的方法,一旦有了网络IO和进程间的交互,性能就会受到很大影响。



同步的写代码逻辑,不要让开发者感知到回调和异步。这个也很重要,程序员也是人,代码应该更符合人的思维习惯,显式的回调和异步关键字,会打断思路,也给调试带来困难。




  • nginScript 这样的尝试会替代 OpenResty 吗?
    nginScript 是今年 nginx 大会上,Nginx 官方推出的一个新的配置语言。它是模仿了 OpenResty 的做法,把 JavaScript VM 嵌入到 nginx 中,提供简单的 nginx 配置功能。



我们看下它的 hello world:



locationi / {
js_run "
var res;
res = $r.response;
res.status = 200;
res.send("hello world!");
res.finish();
"
} 再对比下 OpenResty 的 hello world:

location / {
content_by_lua_block {
ngx.say("hello world")
}
} 看上去差不多,只是 OpenResty 简洁一些。根据 nginx 官方的说明,nginScript 只是想提供一种更方便配置 nginx 的方法,并不想取代 ngx_lua。


Category web