大数据量订单实时分布式处理,优化问题
大数据量订单处理,订单通过接口提交过来,保存到sql server数据库,然后有N台vps通过外网实时加锁轮询数据库表,去处理订单,处理完后马上修改订单状态,这种方案下,有几个缺点:1、数据库通过外网连接;2、N台VPS轮询访问,导致数据库连接数很高。
有另外几种方案:
方案A:加一个webapi服务,N台VPS用外网轮询该服务,然后该服务用内网去访问数据库,取订单,VPS处理完订单后,再调用 webapi服务的接口去修改订单状态。此方案可以让数据库用内网访问,同时连接数也会大大降低。
方案B:在接口提交订单过来后,把订单写数据库后,同时把订单写入消息队列msmq,然后N台VPS通过外网实时轮询这台msmq,取订单,处理订单,再直连数据库修改订单状态。此方案可以减少数据库访问与连接数,同时不用对数据库加锁询。
方案C:在接口提交订单过来后,把订单写数据库后,同时把订单写入消息队列msmq,再加一个webapi服务,N台VPS用外网轮询该服务,然后该服务用内网去访问msmq,取出订单数据返回给vps,vps处理完订单后,再调用 webapi服务,webapi服务连接数据库修改订单状态。此方案增加了msmq和webapi服务,免去了数据库的外网访问和不断轮询数据库的压力和连接数。
订单量大时,一分钟可以有60单,而且订单处理时效要求较好,最慢也要十几秒处理完。
大家帮助分析一下,还有没有更好的方案?