基于 kitex RPC微服务 + Hertz HTTP服务 + 图数据库构建的第四届字节跳动青训营-极简抖音后端项目
项目服务地址: http://1.117.77.53:1060
Github地址: https://github.com/edufriendchen/tiktok-demo
坚持到最后的人
团队成员 | 主要贡献 |
---|---|
@陈朋 | 负责架构设计/选型xxx |
可以补充场景分析环节,明确要解决的问题和前提假设,比如按当前选型和架构总体预计需要xxx存储空间,xxx台服务器......
项目整体技术选型的框架,通过这个框架图你会很快的了解整个项目的技术骨架……
考虑到系统目前或者未来存在许多譬如以下,我采用了图数据库作为持久层而不是传统的关系型数据库,这使得未来有了更多的可能性……
一、推荐引擎和产品推荐系统:
图形驱动的推荐引擎通过实时利用多种连接,帮助公司个性化视频,内容和服务。
应用:内容和媒体推荐,图形辅助搜索引擎,产品推荐,专业网络,社会推荐。
二、社交媒体和社交网络图:
当您使用图形数据库为社交网络应用程序提供动力时,可以轻松利用社交关系或根据活动推断关系。
应用:社区聚类分析,朋友朋友推荐,影响者分析,共享和协作,社会建议。
三、知识图:
利用基于图形的搜索工具,利用市场上最灵活,最具扩展性的解决方案,实现更好的数字资产管理。
应用:资产管理,编目,内容管理,库存,工作流程
四、IT运营的网络和数据库基础设施监控:
图形数据库本质上比RDBMS更适合于理解管理网络和IT基础架构的复杂相互依赖性。
应用:资产管理,网络安全,影响分析,服务质量映射,根本原因分析。
五、主数据管理:
使用灵活且无架构的图形数据库模型组织和管理主数据,以获得实时洞察和360度客户视图。
应用:客户的360度视图,交叉引用业务对象,数据所有权,主数据,组织层次结构。
六、身份和访问管理:
使用图形数据库进行身份和访问管理时,可以快速有效地跟踪用户,资产,关系和授权。
应用:访问管理,资产来源,数据所有权,身份管理,互连组织,主数据,资源授权。
七、隐私,风险和合规性:
快速有效的法规遵从性(GDPR,BCBS 239,FRTB ……)。管理企业风险,同时利用连接数据来提高商业智能
应用:巴塞尔协议III,BCBS 239,CCAR,合规性,数据沿袭,数据保护,FATCA,FIBO,金融服务,FRTB,GDPR,PII,隐私,法规遵
从,风险管理。
八、人工智能和分析:
人工智能(AI)准备推动几乎所有行业的下一波技术中断。就像之前的网络和移动技术革命一样,基于谁利用这项技术获得真正的竞争优势,
将会有赢家和输家。
应用:AI,人工智能,图形数据库,图形技术,图形可视化,知识图,机器学习。
九、欺诈检测和分析解决:
在欺诈者和犯罪分子造成持久性损害之前,实时分析数据关系对于发现欺诈戒指和其他复杂诈骗至关重要。
应用:反洗钱(AML),电子商务欺诈,第一方银行欺诈,保险欺诈,链接分析。
可以补充场景分析环节,明确要解决的问题和前提假设,比如预计0.5%的用户属于大V,粉丝很多,也会经常上传视频,当前架构的解决方案是分布式缓存方案。
其次我们使用了独有的多级缓存方案也就是 L1、 Master 、Slave 三层缓存方案。
L1 是一个热度极高容量极小的缓存,我们称其为“极热缓存”,其特点是便于横向扩展。
假设 L1 只有 200MB 缓存,我们使用 LRU 算法通过热度分析把访问最热的数据存储在 L1 中;之后的 Master 与 Slave 的缓存空间则是 4GB、6GB,比 L1 大很多倍。
因为抖音的流量比较集中于热点事件、大V或某个新闻,小容量的 L1 可进行快速扩容;在发生热门事件时利用云的弹性自动扩容从而分担热点事件短时间激增的流量压力。
由于自动扩容时 L1 仅占用每台缓存中很小的空间,扩容的速度就会非常快,通过这种手动或自动的瞬间弹性扩容来确保服务器稳定承受热点事件背后的数据激增量。
第二层的 Master 与 Slave 具有比 L1 大好多倍的缓存空间,主要用于防止数据冷穿。
虽然 L1 主要承担的是热点数据,但却无法确保一些短时间内不热但在某个时间段热度突然高涨所带来的流量短时间爆发时服务器的稳定性。
数据库采用neo4j图数据库
目录 | 子目录 | 说明 | 解释 | 技术选型 | |
---|---|---|---|---|---|
cmd | api | api封装业务代码 | |||
comment | 微服务: command业务代码 | ||||
favorite | 微服务: favorite业务代码 | ||||
feed | 微服务: feed业务代码 | ||||
message | 微服务: message业务代码 | ||||
publish | 微服务: publish业务代码 | ||||
relation | 微服务: relation业务代码 | ||||
user | 微服务: user业务代码 | ||||
idl | ————— | thrift接口定义文件 | |||
kitex_gen | ————— | kitex_gen代码生成文件 | |||
pkg | consts | ||||
errno | |||||
global | 全局配置 | ||||
initialize | 中间件初始化 | ||||
jwt | |||||
minio | |||||
建议从功能测试和性能测试两部分分析,其中功能测试补充测试用例,性能测试补充性能分析报告、可优化点等内容。
由于系统持久层采用图数据库,我们可以根据用户点赞评论视频的权重很容易的分析出用户喜欢的视频类型,并以此作为参考条件向用户推送相关视频。
对抖音整体架构的分析图,对未来可能的字节青训营大项目方向有一个提前的认知