所有有够见过分布式系统的人都知道在系统整个生命周期中,写代码是最简单的。运维是最困难的,通常需要很多工具,指标和大量的测试来确保运行正常。我们做了这些,并且实现能够主动发现问题并解决。这帮助我们能实现在短期内上线高质量的软件。
我们孵化并开源了Simoorg项目,一个分布式异常检测系统,用来检测集群中的任意错误。我们想测试机群不断推送流量,并且在注入类似于java GC暂停,磁盘错误,节点挂掉和网络断开错误的同时检测系统的准确性。我们能发现主要Bug并主动修复。如果我们没有投入这么一个框架,那我们就得在生产环境中发现这些问题了。我们很高兴的告诉大家,LinkedIn开源的另一个流行的项目-KafKa,也在LinkedIn中利用了这个框架。
这是另一个许多系统没有保证的地方。这在新版本部署在一部分机器(非全部)上试运行非常有帮助。准确性测试保证所有的API在所有的输入情况下,结果都是准确的。这帮助我们在新版本试运行阶段就能主动发现问题,防止被动通过客户端反馈出问题,造成严重结果。
大部分分布式系统很难管理,有一套好的管理工具来管理集群很重要。在项目开始时,我们就投入了很多时间来确认我们需要的管理工具以确保集群管理非常非常简单。其中一些管理工具包括:给系统增加更多的分片和备份,将数据反序列化出来的取数据工具和将某一资源设置为不用的工具。
之前说过,每个存储节点在新对象写入磁盘时会产生一个备份事件。这个事件包括这个对象和事件源。现在这些事件都被保存在Hadoop中。这样就可以检查这些对象是否写入了所有的备份中。然而,由于使用了Hadoop,这些目前不是实时的操作。我们计划建立实时审查系统,原理是消费这些事件,并报告没有成功复制的对象。这将使我们对于一个对象备份的状态有更清晰的认知。
每个系统都需要有相关的指标和报警用来鉴别系统行为异常。这非常明显但是很少能做对。正确的指标很重要,指标的数目不要太多,并且需要选择正确的报警阈值。没有严谨的记录和测量方式,这些指标还有阈值都是没有意义的。我们在这方面投入很多,这使我们坚信我们得出的这些指标还有阈值将会帮助我们更快地稳定系统。
我们在不停机的情况下将所有的多媒体内容从原有系统中迁移到了Ambry中。另外,我们需要面对一些比较棘手的截止时间限制。
阻塞请求阻塞线程直到请求完成并且不支持流式操作。为了实现高吞吐量,避免对于大对象的资源饥饿,我们需要将前端和路由模块做成完全非阻塞。前端实现已经完成并正在测试,路由模块库也将很快完成。
现代数据中心都有单顶机架式交换机(是一种插槽式的交换机,这种交换机扩展性较好,可支持不同的网络类型,如以太网、快速以太网、千兆以太网、ATM、令牌环及FDDI等,但价格较贵,高端交换机有不少采用机架式结构)。 这意味着软件需要足够智能,能承受交换失败。我们正在建设让Ambry对于跨机房分片实现机架感知。这个仍在进行中。
目前,Ambry不支持命名域(即只有ID获取对象,没有明明与前缀)。我们想实现命名域来定义用户组,权限控制还有配额分配,这比在对象级别实现要简单得多。
Ambry目前支持数据节点间的加密。也实现了前端和数据节点通信加密。然而,我们想更进一步。我们想在REST接口级别支持授权鉴权以及加密。在实现命名域之后我们会着手实现这些。