在 2012年3月10日 下午4:09,agentzh <age...@gmail.com> 写道:
> On Fri, Mar 9, 2012 at 11:35 PM, Zoom.Quiet <zoom...@gmail.com> wrote:
>> - bsd 中没有 lua 时, configure 时就吼,要的,,
>> 看来是 openresty 的版本问题,,,
> 什么错误信息?是最新版的 ngx_openresty 1.0.11.21 么?
>
- 不是,俺从中文维基,下载了过老的版本,明天再去尝试,应该没问题了
- 嗯嗯嗯,发现 中文维基和e文内容相差太多
- 俺来同步吧,,
>>> 在 ngx_lua 中使用 luacurl 会导致 nginx worker 进程阻塞,从而性能急剧下降。应使用
>>> ngx.location.capture + ngx_proxy 组合来访问上游 http 服务,或者直接操纵 cosocket
>>> 访问之,这些方式是非阻塞的。
>>>
>> - 这是必然的,
>> - 不过,俺是需求,不是访问自身提供的服务
>> - 而是远程的 api 服务,比如说 sina weibo 的,,,
>> - 所以?!
>>
> 我这里说的就是相对于 nginx 而言的远方的 HTTP 服务,用 nginx 世界中的术语来说就是"上游服务"(upstream
> services)。如果是 nginx 自身的服务根本不必使用 ngx_proxy 或者 cosocket,直接用 nginx
> 子请求就可以了,因为不必涉及 HTTP 通信。
>
> luacurl 这样的库必然阻塞 nginx 进程,并发模型立马退化为 apache prefork,变成一个 worker 只能处理一并发了。
>
- 是也乎,是也乎,这种情景在面向 web 开发时,最常见:
- 现在 openresty 对 mysql/mongo/memcached/redis/pg 进行了合理的非阻塞封装
- 其它的,得自行解决了吧?
- 比较自然的,通过内部消息系统进行子任务分发
- 前端直接302 响应,給出任务等待url ?
即:
- 确认阻塞任务后,立即返回請求,給出新的請求url
- 将阻塞任务,丢给内部消息系统,不进行具体的阻塞执行
- 通过其它专用进程,进行 apache prefork 式的阻塞处理,和响应
只是,需要明白 http RESTful 行为的客户端来配合?
过程类似 附件泳道图?
问题在:
- 怎么能将一个请求在内部,进行安全的分离?
即:图中 1.0->2.0 怎么作到?
- 而且,怎么将阻塞工作进程和非阻塞工作进程进行显示的标定/指代使用?
解决了这个关键问题, openresty 进入广泛的即有系统,指日可侍吼,,
--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/
Attachment:
openresy-prefork4nonblock_wsd-napkin.png
Description: PNG image