查看: 1900| 回复: 7
跳转到指定楼层
上一主题 下一主题
收起左侧

[题目讨论] 请问现实中的服务怎么避免username duplicate

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x

在看ddia第九章讲linearizability,一个例子就是用户注册用的username,需要保证唯一性。一个方法就是用total order broadcast来实现,注册的时候发送给所有别的node查看有没有被用掉,如果没有就自己注册。有个问题是如果有node not reachable怎么办?是不是就做不到了,这个时候是abort还是继续执行呢?如果继续执行就会有重复的风险。比较好奇现实中是如何保证的,是不是用mysql来保证strong consistency?小白还在学习ing,先谢谢大家了

上一篇:Android Mobile System Engineer如何准备Meta的General System Desgin面试
下一篇:请问 系统设计 actor模型
推荐
goldsail 2023-8-26 13:16:04 | 只看该作者
全局:
技术实现请参阅楼上的回答。这里补充一点,拿到一个问题,我们首先可以问自己,新用户注册这个需求的QPS有多高?相比日常业务,每个用户终身只需注册一次,因此这个QPS真的会高到单机无法承受的地步吗?如果QPS不高,一个单独的提供自增id的单服务器service即可简单满足需求~

评分

参与人数 2大米 +3 收起 理由
雨雨人 + 1 赞一个
qinshimingyue + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

推荐
goldsail 2023-8-27 23:59:45 | 只看该作者
全局:
qinshimingyue 发表于 2023-8-26 22:19
追问一个蠢问题,如果server自动给一个user id,还可以实现用户customize username吗?如何把user id和us ...

这个问题不难,因为user id到username的mapping完全是一个低频write、高频read的关系,技术上的解决方法太多了。哪怕是最简单的主从结构的SQL数据库都足够解决,更别提其他方法了。

这里更关键的问题应当是,是否支持用户将来改username。如果是,那么username就不应该作为数据库的表的主键,而是需要另加一个永久不变的user id。例如,微信早期不支持用户改微信号,但是现在支持每年改一次了,这就是一个需求的重大变更。

如果不支持用户改username,那么这个username就像企业员工的alias一样是永久的,可以作为email邮箱地址以及数据库主键(因为email地址是不可以改的)。
回复

使用道具 举报

🔗
imfht 2023-8-26 07:34:18 | 只看该作者
全局:
有相关算法可以了解一下,例如雪花算法:https://zhuanlan.zhihu.com/p/85837641

一般是user-id用不重复的随机串,username可重复

评分

参与人数 1大米 +2 收起 理由
qinshimingyue + 2 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
 楼主| qinshimingyue 2023-8-27 13:16:19 | 只看该作者
全局:
imfht 发表于 2023-8-25 16:34
有相关算法可以了解一下,例如雪花算法:https://zhuanlan.zhihu.com/p/85837641

一般是user-id用不重复 ...

谢谢解答
回复

使用道具 举报

🔗
 楼主| qinshimingyue 2023-8-27 13:19:10 | 只看该作者
全局:
goldsail 发表于 2023-8-25 22:16
技术实现请参阅楼上的回答。这里补充一点,拿到一个问题,我们首先可以问自己,新用户注册这个需求的QPS有 ...

追问一个蠢问题,如果server自动给一个user id,还可以实现用户customize username吗?如何把user id和username对应起来?还是说用户直接用server返回的user name来登陆
回复

使用道具 举报

🔗
comeshare 2023-10-20 09:16:08 | 只看该作者
😃 1
全局:
可不可以说直接用email作为username ?
回复

使用道具 举报

🔗
不想刷题223 2023-11-30 10:32:12 | 只看该作者
全局:
如果是userid,那都不需要用到自增键,现在的算法已经可以做到在分布式不同地区创造完全唯一性的userid
如果是username,那必然要保证主键唯一,用传统的mysql执行创建就很轻松了。耗时是必然的

这个问题的核心就是问availablity和consistency之间的关系,答案就是不可能二者兼容。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表