- 项目背景:
用户画像库有10+亿级别用户的用户画像数据,存储库为Hbase rowkey设计为用户ID的Hash值并经过域分区设计 使得记录基本能分布在各个region上,满足前端根据用户ID查询用户画像数据的需求、同时避免Hbase 在读写时出现热点region。
问题: 前端APP的访问需求是并发500、峰值TPS达到30000TPS、响应时间50ms内。这对一个普通的应用而言并不难,在数据量不大时通常的做法是将数据缓存进Redis等内存数据库,后端Server通过读redis来获取数据对外提供服务。但对于10+亿级别的行记录、5Tb数据大小的画像数据集而言,加载进redis等缓存数据库将直接把缓存数据库写爆,同时画像数据没有需要全量更新,更新时的写请求将对在线的服务读请求产生巨大的影响。因此,系统设计的方向是画像数据存储于Hbase、同时查询请求需要满足高并发、低时延的要求。
- 系统设计V1.0版本:
系统第一版本是HTTP Server部署多节点、画像原始数据库是使用Hbase集群、Redis作为画像维表数据库和画像数据缓存层。
前端一次请求User ID过来后,HTTP Server