plproxy和pgbouncer都是skype开发的基于postgresql的开源应用;前者主要用于完成分布式计算,后者主要充当数据库连接池;它们的主页在[plproxy]和[pgbouncer]
plproxy的特性
为此,我们在系统的syshostconfig表中存储了一个key为accountNum,value为整数的参数;每次进行作时,先用plproxy在所有数据库上查出该值并返到proxy层;由pgsql函数找出哪个数据库的accountNum最小,然后就在该数据库上,并将对应的accountNum加1
这样,新增服务器将立即开始承担新用户的注册;原有服务器压力不变;
plproxy中的死锁
考虑两个账户a@a.com和b@b.com,如果出现a@a.com向b@b.com转账,恰好b@b.com也在向a@a.com转账,就会出现死锁的情况;即一个进程已经拿到a@a.com的锁,并等待b@b.com,而另一个进程拿到了b@b.com的锁,并等待a@a.com;
一个可行的解决办法就是所有作都按照一个可以预见的顺序进行;也就是限制转账作的交易顺序,通过对交易双方的账号进行排序是一个较为简单的办法;
针对以上问题,如果我们限制对a@a.com的作,无论是付款还是收款都优先作,而b@b.com永远都排在它后面,也就解决了死锁的问题;
因此,在转账交易中,首要任务是对账户名进行排序;至于先收款还先付款,其实不重要
原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]
捐赠说明