我编写的API大多数时间都会有中等流量,但在某些时候它会有很多并发用户。 假设API应该能够在" burst-mode"中每秒处理至少10 000个请求。
当API中有请求时,需要做2件事(简化) 1)从数据库中获取计数器 2)如果计数器低于500 - >将新行插入数据库并增加计数器。如果计数器已达到500,则返回响应而不进行插入。
我的问题是:当我有这么多并发请求时,处理这种情况的最佳做法是什么?
我正在考虑如何确保不会插入超过500行
你会如何设计数据库?
如何确保数据库并发?
如何在不爆炸服务器/云的情况下处理那么多并发用户?
我真的不应该使用哪些编程语言(主要与哪些web服务器/语言可以处理这么多req / sec有关)?
我可以更详细地了解托管,编程语言,数据库选择和缓存 - 但我并没有故意这样做。
让我们说我最初选择heroku或大量的数字海洋计划,因为它涉及托管,节点(与restify)作为语言,mongo和redis作为db /缓存 - 但我想得到一些最好的在我详细介绍之前的做法和提示。
答案 0 :(得分:0)
如果不触摸您的应用程序,我们无法更好地猜测。我只是建议你的估计可能不适合你的实际情况,但你可以根据负载和响应时间,数据(文档大小)扩展或缩小。由于文件级锁定用于并发写入,因此最好使用有线Tiger存储引擎而不是Mmapv1。
如果你有更多的并发读取请求和更少的并发写入(如一天总共500个并不痛苦)但没有多少并发,那么复制(1个主服务器和2个从服务器)就足够了。
如果您同时有大量写入请求(20到50),那么它可能会降低读取速度,因此您可以使用分片。 (3个分片,每个分片有1个副本,3个配置服务器,每个副本上运行3个mongos)。
当您增加写入请求时,您可以增加分片,对于读取请求,您可以增加副本。但最好为NoSql类型数据库采取最佳配置,并且您知道将来数据将快速增长。如果您不关心这一点,您将不得不为数据库服务器的管理付出代价,这可能会花费您的应用程序性能一段时间。