很多客户端用TCP连接服务器A,客户频繁地做查询余额等操作。数据库在服务器B上,使用的MySQL。为了不让数据库成为整个系统的瓶颈,我现在想到了两个方案:方案一:
服务器A把所有客户的请求放到请求队列,然后开10-100个数据库操作线程,每个线程建立一个服务器B的数据库连接,线程从请求队列里面每次取一个请求,使用MySQL的C API阻塞操作数据库。方案二:
增加一个服务器C提供余额查询等操作的HTTP形式的API,服务器A使用异步的HTTP请求来想服务器C查询数据库。我考虑的利弊如下:
方案一可以直接操作数据库,不需要再经过另一个服务器C,感觉效率会高一些。但是因为每个数据库线程都是阻塞操作数据库的,如果并发量很大,比如超过100并发,会不会100个线程也忙不过来?这样的话,就需要再增加线程,再增加线程就会严重影响服务器A的CPU效率。
方案二不管并发量多大,都不需要多线程来操作数据库,因为用异步HTTP就能处理,感觉服务器A的效率就会大大提升。但是数据库操作需要再增加一个服务器C,从整体效率来看,会不会也不高?以上是我想到的两个方案,前辈们如果有更好的方案请指教。比如方案一中,怎么用异步直接操作数据库?我就不用开那么多线程了。