大数据&云计算|大数据下的用户中心如何设计


用户中心 , 几乎是所有互联网公司 , 必备的子系统 。 随着数据量不断增加 , 吞吐量不断增大 , 用户中心的架构 , 该如何演进呢 。
什么是用户中心业务?
用户中心是一个通用业务 , 主要提供用户注册、登录、信息查询与修改的服务 。
用户中心的数据结构是怎么样的?
用户中心的核心数据结构为:
User(uid, login_name, passwd, sex, age, nickname, …)
其中:
(1)uid为用户ID , 为主键;
(2)login_name, passwd, sex 等是用户属性;
其系统架构又是怎么样的呢?
在业务初期 , 单库单表 , 配合用户中心微服务 , 就能满足绝大部分业务需求 , 其典型的架构为:
大数据&云计算|大数据下的用户中心如何设计
本文插图

(1)user-center:用户中心服务 , 对调用者提供友好的RPC接口;
(2)user-db:对用户进行数据存储;
当数据量越来越大 , 例如达到1亿注册量时 , 会出现什么问题呢?
随着数据量越来越大 , 单库无法承载所有的数据 , 此时需要对数据库进行水平切分 。
常见的水平切分算法有“范围法”和“哈希法” 。
水平切分 , 什么是范围法?
范围法 , 以用户中心的业务主键uid为划分依据 , 采用区间的方式 , 将数据水平切分到两个数据库实例上去:

大数据&云计算|大数据下的用户中心如何设计
本文插图

(1)user-db1:存储0到1千万的uid数据;
(2)user-db2:存储1千万到2千万的uid数据;
【大数据&云计算|大数据下的用户中心如何设计】范围法有什么优点?
(1)切分策略简单 , 根据uid , 按照范围 , user-center很快能够定位到数据在哪个库上;
(2)扩容简单 , 如果容量不够 , 只要增加user-db3 , 拓展2千万到3千万的uid即可;
范围法有什么缺点?
(1)uid必须要满足递增的特性;
(2)数据量不均 , 新增的user-db3 , 在初期的数据会比较少;
(3)请求量不均 , 一般来说 , 新注册的用户活跃度会比较高 , 故user-db2往往会比user-db1负载要高 , 导致服务器利用率不平衡;
画外音:数据库层面的负载均衡 , 既要考虑数据量的均衡 , 又要考虑负载的均衡 。
水平切分 , 什么是哈希法?
哈希法 , 也是以用户中心的业务主键uid为划分依据 , 采用哈希的方式 , 将数据水平切分到两个数据库实例上去:
大数据&云计算|大数据下的用户中心如何设计
本文插图

(1)user-db1:存储奇数的uid数据;
(2)user-db2:存储偶数的uid数据;
哈希法有什么优点?
(1)切分策略简单 , 根据uid , 按照hash , user-center很快能够定位到数据在哪个库上;

(2)数据量均衡 , 只要uid是随机的 , 数据在各个库上的分布一定是均衡的;
(3)请求量均衡 , 只要uid是随机的 , 负载在各个库上的分布一定是均衡的;
画外音:如果采用分布式id生成器 , id的生成 , 一般都是随机的 。
哈希法有什么缺点?
(1)扩容麻烦 , 如果容量不够 , 要增加一个库 , 重新hash可能会导致数据迁移;
用户中心架构 , 实施了水平切分之后 , 会带来什么新的问题呢?
使用uid来进行水平切分之后 , 对于uid属性上的查询 , 可以直接路由到库 , 假设访问uid=124的数据 , 取模后能够直接定位db-user1:
大数据&云计算|大数据下的用户中心如何设计


推荐阅读