在上一篇文章中我们讨论了迁移到云也就是GCP(谷歌云计算平台)的原因。一旦确定了迁移,我们就开始问自己三个问题:
我会在这里详细讨论第一个问题。
单单要求开发团队迁移到云上已经很困难了,而在迁移过程中又不断要求他们重新设计原有的应用程序,这就给整个过程带来了很大的不确定性。所以当我们不能在GCP中找到适合我们基础设施的替代品时,我们会尽量避免重新设计原有架构。
即便这样,GCP上的很多功能已经很棒了,也为我们的基础设施提供了一些足够直接的转换方式,我们也觉得在迁移时进行这些切换是非常适合的。
首先,我们保留的部分:
那我们又需要改变那些部分呢?有很多,但这里将重点关注下面的三种技术:
在本地数据中心,我们很自然地选择Hadoop HDFS来保存持久数据。虽然我们的HDFS集群在迁移时仍然运行良好,但无停机或无中断的维护和升级要求让我们倍感压力。随着公司的发展,我们能够跟产品团队协调的停机时间也越来越短,直到再也无法在规定停机时间内完成升级。我们知道我们想使用GCS(谷歌云存储),只有这样才可以保持作为开发团队的灵活性。
在本地数据中心,我们使用Chef管理所有的虚拟机。我们在Chef中嵌入了很多逻辑,也尝试在云平台中使用Chef管理虚拟机,但是效果不佳。再加上Docker和Kubernetes为我们提供了非常好的使用体验,我们最终在新环境里完全放弃了Chef。
最后一点,我们认为Google的BigTable可以很好地替代我们自主研发的键值数据存储。放弃一个已经使用了这么久的工具的确令人难过,但只有这样才能让我们专注于那些新的令人兴奋的挑战。
接下来,我将着重介绍一下我们的Hadoop基础设施,包括过去和现在。我会简要介绍一下我们的基础设施,以及我们在GCP上的构建。
下面是我们本地Hadoop集群的一个高度简化视图:
为保持简洁,该图省略了Journal Nodes、ZooKeeper和Cloudera管理角色。值得一提的是,该生产环境集群能够:
毫无疑问,HDFS是最具可伸缩性的本地文件系统,但与云原生的对象存储(S3,GCS)相比仍有一些缺点。例如,数据会随着实例的销毁而丢失(除非你还保留了持久磁盘记录)。在设计云集群时,我们知道有以下需求:
所以,我们得到了如下所示的设计:
上图包含了很多内容,让我们逐个分析:
我会在另一篇文章中更详细地讨论这个问题,但重点是,临时的去数据化基础设施让我们在配置和机器类型上迭代的速度比在物理机器上快了1000倍。
这些决定为我们的迁移提供了一个起点。在下一篇文章中,我将讨论迁移的实现细节问题,重点讨论如何在吞吐量有限的情况下处理数据复制。
领取专属 10元无门槛券
私享最新 技术干货