是后者,现在看来得写一个代理了,保证一个usreid,写操作用同一个mysql连接
在 2012年11月7日星期三UTC+8上午3时13分18秒,agentzh写道:
Hello!2012/11/6 zhan hu:
> 业务场景是这样,希望同一个用户来的请求,都走同一个msyql连接处理,先来的先处理后面的排队,比如一个操作要5条sql,
> 如果同一个用户同时请求两次,要保证第一次5条sql完成后,在操作第二而操作的5条sql,以前是自己写一个mysql连接池,同一个用户的请求hash到同一个mysql连接,这样保证每次操作可以原子
>
你这里的目的究竟是减少 mysql 连接数还是想通过前端严格串行化来避免使用 DB 事务但同时保证一致性?
如果是前者,则未来可以通过 ngx_lua + lua-resty-mysql 来实现。具体实现方法是给 ngx_lua 的
cosocket 连接池添加池溢出时的排队等待机制,在此模式下,把池的容量设为 1 便可以达到你想要的效果。这个特性仍然是一个 TODO.
但如果是后者,则需要同时只启用一个 nginx worker 进程,因为 cosocket 连接池(以及 ngx_drizzle
的连接池)的共享粒度是每 nginx worker 进程。当然,只启用一台机器一个 worker 进程同时意味着你的前端是无法 scale
的。
Best regards,
-agentzh