I希望您能在云上实现一个原子计数器,以从并发连接生成连续整数。这背后的业务是跟踪服务器。
优先要求:
- (必须) 耐用 - 确保一旦客户获得一个数字,其他客户永远不会获得相同的数字。不要重复。
- (必须) 可扩展 - 当前负载为每秒10K,在200-1000并发客户端连接中未来将达到每秒1M。可扩展性特性增加了100。
- (必须) 平均误差在+-15毫秒内(postgres/mysql/redis很好,但像DynamoDB这样的http延迟是不可能的)这只是为了筛选出较慢的解决方案
- (可选) 以增量方式增加 这是一种扩展性方法,其中客户端按块(例如100)递增并在应用程序内存中管理递增。
- (可选) 公平价格< 150美元,每秒5k,预计在更低的定价增长。
- (可选) HA(高可用性) - 我可以处理0.01%的故障,但耐久性很重要,我需要没有重复的号码。
我的备选方案是:
- postgres序列的顺序为
CREATE SEQUENCE serial CACHE 100; SELECT nextval(sequence)
- 140$/m MultiAZ AWS RDS db.m3.medium不像redis那样快,但我认为平均速度< 7ms。 "缓存"是一个强大的功能,应该提高性能。 - Redis INCR与Redis Sentinel/RDS MultiAZ - cache.m3.medium MultiAZ - 120$/m - 耐久性有问题。
Redis具有INCRBY,而Postgres仅具有序列的“缓存”功能,需要往返到数据库。
您有任何意见吗?关于这两个选择或其他选择?