我正在编写一个API,它大部分时间都会有中等数量的流量,但在某些情况下会有很多并发用户。假设API应该能够在“突发模式”下每秒处理至少10000个请求。
当一个请求进来时,API需要做两件事(简化)。
1)从数据库中获取计数器。
2)如果计数器低于500 ->,则在数据库中插入新行并增加计数器。如果计数器已达到500,则返回响应而不执行insert。
我的问题是:当我有这么多并发请求时,处理这种情况的最佳实践是什么?
我正在考虑如何确保我永远不会插入超过500行。
您将如何设计数据库?
如何保证数据库的并发性?
如何在不爆炸服务器/cloud的情况下处理这么多并发用户?
我真的不应该使用哪些编程语言(主要与哪些sec服务器/语言可以处理如此多的请求/秒有关)?
我可以更详细地介绍托管、编程语言、数据库选择和缓存--但我不是故意这么做的。
假设我最初选择的是heroku或一个大容量的数字海洋计划,因为它涉及到托管,node (使用restify)作为语言,mongo和redis作为db/caching -但在我进入更多细节之前,我想获得一些最佳实践和技巧。
发布于 2015-10-08 22:10:57
如果不接触你的应用程序,我们就不能猜得更好。我只是建议你一个可能不适合你实际情况的估计,但你可以根据负载和响应时间,数据(文档大小)来扩展或缩小。由于并发写入的文档级锁定,最好使用有线Tiger存储引擎而不是Mmapv1。
如果您有更多的并发读请求和更少的并发写请求(一天500个),但并发不多,那么复制(1个主服务器和2个从服务器)就足够了。
如果你同时有很多写请求(20到50个),那么它可能会减慢读操作,所以你可以使用分片。(3个分片,每个有1个副本,3个配置服务器,每个副本上运行3个mongos )。
随着写请求的增加,你可以增加分片,而对于读请求,你可以增加副本。但最好对NoSql类型的数据库进行最大限度的最佳配置,而且您知道在未来数据将会快速增长。如果您不关心这一点,您将不得不为数据库服务器的管理付出努力,这可能还会花费您的应用程序性能一段时间。
https://stackoverflow.com/questions/33014190
复制相似问题