像亚马逊( Amazon )和苹果( Apple )这样的公司有几天的时间,他们的网络流量很大。对于苹果来说,这可能是在新的iPhone发布期间,而对于亚马逊来说,可能是在黑色星期五/赛博星期一。处理服务器负载本身是一个需要高度扩展的问题,但是当有这么多人购买相同的东西时,这些公司如何管理库存呢?
总计数器可以是库存本身,也可以是这些电子商务平台提供给在某一天购物的前100名顾客的优惠券。
本质上,我想知道人们如何处理一个简单的场景:给第一批10000名成员提供他们周末可以使用的独特优惠券。这种方法的第一个问题是实时识别前100000名成员,因为你想告诉他们他们赢得了一张优惠券。我在这里看到的第二个挑战是只给一个成员一张特定的优惠券。
第一个问题似乎是维护原子计数器的问题。电子商务网站会使用像ZooKeeper这样的工具来实现这种计数器吗?
第二个问题似乎是一个分布式队列的问题,您必须用现有的10000张优惠券来匹配10000个客户中的每一个。即使不需要FCFS,您也需要在高流量环境中将特定的优惠券分配给单个成员,在此环境中,您的前10000名客户可以在销售的前1分钟内完成交易。
大型电子商务平台是否实时解决了这些问题,是否以适当的时间延迟将这些决策以异步方式发生?
发布于 2021-03-20 07:34:07
在高级别,你可以简化你的一切。
你一定要开N张优惠券吗?不是的。您可以对单个服务器进行投票,了解它们在本地DB中发布了多少优惠券。当和超过阈值时,你就发出停止的信号。
至于优惠券代码,您不需要一个中央服务器来检查是否有任何特定的代码被发出。您可以在节点上本地存储它们,甚至可以动态生成它们。使用这一事实,优惠券不需要立即使用,所以你有时间收集他们在一个地方,如果你需要。
如果您绝对需要发出确切的计数,则将优惠券存储在节点上,并接受一个节点在其他节点之前会耗尽的事实,这将是一个秒差的问题。如果您不能接受这一点,请使用一台服务器,在节点几乎耗尽时将优惠券分批分配给节点。这样,不平衡就不会超过批次大小。
你可能会以指数更高的价格把事情推得更远。
作为高规模世界的介绍,请参阅“站点可靠性工程”,这是Google工程师关于他们如何处理事情的免费书籍:https://sre.google/books/。
https://stackoverflow.com/questions/66427957
复制相似问题