微博是一个社交平台。人们可以发文字。人们可以发图片。人们可以发视频。每个人都能看。每个人都能评论。每个人都能转发。这个系统很大。很多人用。它改变了生活。它改变了信息传播的方式。
微博系统有很多技术。这些技术很复杂。这些技术也很有趣。我们想了解这些技术。我们想了解这个系统怎么工作。我们想了解这个系统怎么设计。这就是毕业论文的内容。我们慢慢说。
微博系统有很多用户。用户数量很大。可能有几亿人。这么多人同时用。系统压力很大。系统必须很快。系统不能卡。系统不能坏。这是一个大问题。工程师要解决这个问题。
首先说存储。用户发一条微博。这条微博要存起来。评论要存起来。点赞要存起来。转发也要存起来。数据太多太多了。普通电脑存不下。普通数据库也存不下。怎么办?他们用很多台电脑。这些电脑一起工作。这些电脑组成一个集群。数据分开放。你的数据可能在这台电脑。他的数据可能在那台电脑。这样就能存很多数据。这叫分布式存储。
再说访问速度。那么多人看同一条微博。比如一条新闻。几千万人同时点开。这些请求都到一台电脑。这台电脑就瘫痪了。他们用复制的方法。把一条微博复制很多份。放在不同的电脑上。你看的时候找这台电脑。他看的时候找那台电脑。压力就分散了。这叫负载均衡。
微博要实时更新。你关注了一百个人。他们发新微博。你要立刻看到。这个很难。你刷新一下页面。系统要查一百个人的最新动态。这一百个人的数据可能在不同的电脑上。系统要很快收集这些数据。系统要排序。系统要把最新的给你看。他们用一种叫时间线混合的技术。他们提前算好一些结果。他们把你的时间线存在一个地方。你刷新的时候直接给你看。这样速度就快了。
搜索功能很重要。你想找一条旧微博。你输入几个关键词。系统要从海量微博里找。系统要立刻给你结果。他们用倒排索引。什么是倒排索引?比如“猫”这个字。系统知道哪些微博里有“猫”这个字。系统把这些微博的编号记下来。你搜“猫”。系统立刻找到这些编号。系统很快把微博找出来给你看。这个索引很大。这个索引也要放在很多台电脑上。
安全很重要。有人想攻击系统。有人想偷用户数据。系统必须保护自己。系统必须保护用户。他们有很多办法。用户密码不能明文存。他们存密码的摘要。这叫哈希。即使数据库泄露。别人也看不到原始密码。他们检查用户行为。一个账号一秒内发一百条微博。这不对。这可能是机器人在发。系统会暂时封掉这个账号。他们用验证码。登录的时候让你点图片。确认你是真人。
微博要处理图片和视频。你拍一张照片。照片很大。直接传很慢。系统会压缩图片。图片变小。质量还能接受。上传就快了。他们存很多份图片。放在不同的地方。你从北京访问。系统给你北京的服务器。你从上海访问。系统给你上海的服务器。你看图片就很快。这叫内容分发网络。
系统一直在运行。系统不能停。但电脑会坏。硬盘会坏。网络会出问题。他们要有备份。一台电脑坏了。另一台电脑立刻顶上。数据丢了。从别的副本恢复。他们日夜监控系统。他们看着很多屏幕。屏幕上有很多曲线。这些曲线表示系统压力。这些曲线表示错误数量。一出问题他们就知道了。他们马上处理。
微博是一个生态系统。有大V。有普通用户。有广告商。有媒体。系统要给不同的人不同的服务。大V发微博。看的人多。系统要给更多计算资源。广告商要投广告。系统要选择合适的广告。系统要把广告放在合适的位置。不能影响用户体验。媒体要发新闻。系统要快速传播。系统要标记这是新闻。这需要一套复杂的规则。这需要智能的算法。
推荐系统很有意思。你看了很多体育新闻。系统知道了。系统就多给你推荐体育内容。你喜欢某个明星。系统就多给你推荐这个明星的消息。推荐系统看你的历史。推荐系统看你的朋友喜欢什么。推荐系统找出你可能感兴趣的东西。推荐系统让你多看微博。推荐系统增加用户停留时间。
微博也要管理内容。有人发违法信息。有人发垃圾广告。有人骂人。这些内容不好。系统要删除这些内容。全靠人工看不过来。他们用机器识别。机器先看一遍。机器觉得有问题的内容。交给人工审核。机器不断学习。机器越来越聪明。识别准确率越来越高。
开发这样一个系统不容易。工程师要写很多代码。工程师要设计系统结构。他们要开会讨论。他们要画设计图。他们要测试。测试很重要。新功能上线前要反复测试。不能影响线上的用户。他们用小流量测试。新功能先给百分之一的用户用。看看情况。没有问题再慢慢扩大。出了问题马上关掉。
微博系统还在发展。5G来了。网速更快。视频会更流行。系统要适应更多的视频流量。人工智能更强了。推荐会更准。内容管理会更智能。虚拟现实也许会出现。微博系统可能要有新的形态。技术永远在进步。系统也要一直更新。工程师要一直学习。工程师要一直解决新问题。
我们研究这个系统。我们明白背后的原理。我们学到设计的思想。我们学到解决问题的方法。这些知识很有用。这些知识可以用在其他地方。任何大系统都有类似的问题。任何大系统都需要好的设计。这就是技术的魅力。这就是我们写论文的目的。