【发布时间】:2021-09-02 02:38:37
【问题描述】:
我有很多用户数据。每个都有一个唯一的用户 ID,由六个字符的 base64 表示。例如(Fga6=gY)。 我使用哈希函数将用户分布在我的 MySQL 机器上。
我有四台机器,所以当我想保存一个新用户时,我只需检查应该保存在哪个服务器上:
hash(userId) % 4
我的问题是如何添加更多机器以防 4 台机器上的负载过多。 如果我将开始使用 6 台机器并使用模 6 而不是 4 它将适用于新用户。但是当尝试查询老用户时,我的应用服务器会被转发到错误的机器上。
对于已经投入生产的系统,我该如何解决?
我怎样才能更好地规划一个系统,以便我可以在需要时横向扩展机器?
【问题讨论】:
-
要回答“我如何才能更好地规划系统以允许横向扩展”的问题,consistent hashing 是一个很好的起点!
-
另一种不涉及重新分配的方法是拥有一个“协调器”(可能由数据库支持)来跟踪每个帐户的存储位置。然后你会使用它而不是你的 hash + mod 函数。
标签: mysql sql database database-design sharding