系统需要支持实时传输,如果出现不可用的话会显著的影响系统。这意味着系统需要高可用。我们的目标是每个月正常运行的时间在99.95%以上,相当于每个月中最多只有20分钟系统不可用。 另一个痛点是,我们希望新系统集群扩容时越无缝越好。在很多的分布式系统中,扩容真的很难,主要因为有太多部分需要移动,而且网络拓扑很复杂。我们希望扩容简单,而且每次扩容步骤都是一样的。
分布式系统很难管理。集群操作自动化非常重要,这样系统就不会成为运维的瓶颈。然而,复杂系统使得自动化变得很困难,这就是为什么我们需要设计个简单的,优雅的并且自动化的系统。
故障在分布式系统中难以避免,软件还有硬件时常会因为未知原因挂掉。好的测试会减少一些此类现象,但并不能完全避免。所以,更重要的是,我们能快速解决问题,并且有备用的在运行。这需要系统满足设计简单,没有单点问题而且重启基本没有需要改变和移动的部分。我们需要设计这样一个系统来减少MTTR
LinkedIn在全球有多个机房,而且不断的在全球扩展。这意味着我们所有的系统都需要支持多活配置。多活配置就是指,多个机房都可以对同一个对象进行更新操作。
通常来说,对于同时包含小对象还有大对象操作的系统很难设计。这种系统需要支持数万亿的小对象和数十亿的大对象。大量的小对象有相对很大的元数据,会造成很多磁盘碎片还有随机读写。大对象需要很好的内存管理,端到端流和有限的资源使用管理。我们需要一个在这两种情况下都表现良好的系统。
最后,多媒体还是受限于存储,这些对象由于他们本身的特性(数量多,占用空间相对较大)很快会占用很大的空间。另一特性就是,旧数据很容易变冷(不怎么访问)。有很多节约成本的技术,比如: