背后那双手 - Evernote服务迁移到GCP的技术支持和方法论

编辑手记:Evernote在70天的时间里完成了3PB数据迁移至云端,整个过程竟然实现用户零感知。那么迁移过程到底使用了什么样的技术,我们一起来学习。

回顾用户零感知到达云端: Evernote顺利完成向 Google 云平台的迁移

自2008年开始服务以来,Evernote已拥有自主配置和维护的服务器和网络。 我们能够用我们自己的方式,构建我们想要的服务。 当然自我管理也有一些限制,比如难以扩大规模、升级缓慢、维护昂贵。 虽然我们的基础设施在当时非常适合支持Evernote,但就现在来看,随着各方面的发展,基础设施在速度和灵活性上不能满足我们今后的需求。

对于每一个使用Evernote的人来说,迁移到公有云,这只是一个简单的商业策略,但让我们都感到兴奋,自从我们发布第一篇公告以来,我们就着手在后台实施整个迁移过程,将数据从物理的数据中心迁移至google云平台的新家上。整个过程完成很快,好像一眨眼之间我们就完成了迁移,用时仅为70天。

也许有人对于我们如何实现迁移以及迁移的整个过程的实现很感兴趣,我们接下来将会深入阐释为什么能够这么快的实现。当然并不是迁移方案,不会包含所有细节,但是在过程中一些重要的点和遇到的关键性的问题,我们都会详细说明。

为了大家更好的理解,我觉得有必要以简要介绍Evernote的服务开始讲起。

Evernote的服务介绍包含以下几个模块。

  • The Shard (NoteStore)

分片是Evernote上最核心的功能或者服务,通过创建块来存储用户的笔记。每一个分区能包含高达300000个Evernote的用户。每一个分区包含以下内容:

  • Evernote的客户端可以连接到前端的网页服务端,这是基于Tomcat实现的
  • 数据存储层 - 实用Mysql数据库存储用户的笔记
  • 检索索引 - 服务器端Lucene搜索用户内容的索引。

总共有762个分片,或者称为NoteStores,它们总共管理2亿个用户帐户并存储大约50亿个用户笔记。

  • The UserStore

基于MySQL的中心用户和首选项数据库,存储有关用户的所有集中信息,并管理用户认证。 由于此数据库管理并服务于所有用户状态和身份验证,因此它是服务中最关键和最复杂的部分,我们对其任何操作始终非常小心。

  • User Attachment Storage (Resources)

我们有一个单独的文件存储层,用于存储50亿用户文件(我们称之为资源)。 这包括206个自包含的WebDav服务器。 当用户将附件上传到Evernote时,Shard会将附件保存到本地的两个不同的WebDavs。 一个副本发送到位于远程灾难恢复数据中心的非现场WebDavs。

  • Front-end load balancing

我们运行高可用性负载平衡集群,它能够加速和终止TLS,并负责将用户的请求路由到他们的笔记数据所在的适当的后端分片。

  • Supporting services

最后,我们还有约200台Linux服务器执行缓存和批处理功能,如手写和文本识别。

关于迁移的选择

随着Evernote服务规模的扩大,架构迁移到云端将是一个复杂的工作,需要进行多个相关决策。我们希望能够快速移动和复制,所以我们采取了基于键值的战略决策建立一个稻草人的做法。然后,在可能的情况中,我们测试以查看是否稻草人是一个可行的方案。 这使我们能够快速迭代我们的计划。

我们从理解需要改变的地方开始,认识到有一些组件将不会简单地(或直接地)转化到我们的新的云平台。 于是迁移之初,我们将环境的组件分为两类:

  • Lift and Shift –- 这些系统在Google的云服务平台上跟物理的数据中心大致上是相同的,Shards,UserStore和大多数支持服务都在这个组。 他们在我们的物理数据中心基于Linux,并将迁移到云中类似的Linux虚拟机。
  • Transform – - 用户附件存储,我们的负载平衡层和识别服务(Reco)需要在迁移过程中经历重大变革。 在云上并没有类似的服务,或者更有效的实现方式。

迁移方法论

最重要的,是要选择合适的迁移方法。 对于Evernote,有以下两种方法可选:

  • Big Bang - 在迁移过程中寻找合适的时间点,当一切准备就绪,通过这个点从旧的平台完全切换到新平台。 这是比较常见的一种做法(可能是因为它是通常唯一的选择),因为大部分情况下,数据中心和应用程序体系是一个整体,很难分开进行搬迁。 但这种策略通常会存在较大风险,一次性的搬迁,出现故障将会是致命的。
  • Phased cutover – 这是一种分而治之的方法,可以按阶段或波形迁移服务,按服务或用户分组。 这样的模型还经常允许你在提交整个移动之前“测试”或验证迁移的部分

考虑我们的具体情况,很显然,Big bang并不是一个合适的选择。 即使有最好的规划,我们也会承担太多的风险。但同时,在多个数据中心或者物理站点分开实施搬迁也不适合,因没有对应的应用程序来支持。尽管有迹象表明我们可能已经在一段时间内创建了一个“拆分”的环境。

所以我们需要在两个极端之间找到一个折中的方法。 我们希望,如果可能的话,计划我们所谓的“阶段性加速切换”。 整个服务迁移将在20天以下的短暂时期快速实施,作为迁移窗口。然后对于其他后续阶段进行严密的部署和规划,以最小化每个步骤的风险。 同时我们期望允许回滚点,如果某一阶段没有达到预期的结果,可以快速回滚重新来过。

第二部分我们将会讲述Google 云平台的用户数据保护。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏顶级程序员

程序员必须遵守的8大准则

再确认测试代码前,先找别人帮你检查下是否无误。在别人做之前尽量检查出bug并且将其处理好。代码审查最重要规则是对即将提交的代码中查找问题——你需要做的就是确认代...

1004
来自专栏恰同学骚年

操作系统核心原理-7.设备管理:I/O原理

  前面阐述了操作系统具有进程管理、内存管理、外存管理三大核心功能,但是计算机归根是为人类服务的,这就要求计算机必须提供某种机制使得人们可以向计算机发出命令或操...

705
来自专栏云计算D1net

openstack云功能或将激发厂商大力支持

openstack是开源云选择方案群的领头羊,而许多服务供应商前仆后继的加入支持的行列。openstack除了开源的本质外到底有什么优势呢? 开源云计算现正是i...

25412
来自专栏GA小站

GA数据解读13—Ad关联GA后,有点击数但users为0?

今天的问题是:Adwords跟GA关联后,在ADwords报告里面只有部分指标有数据的,如点击和费用是有的,但是用户数没有,这个是什么原因呢?

783
来自专栏纯洁的微笑

一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事

814
来自专栏钱塘大数据

【推荐阅读】顶尖数据工程师的五种思维模式

《THe Effective Engineer》的作者Edmond Lau采访了很多硅谷顶级科技公司的顶尖软件工程师。他发现这些给世界带来巨大影响的的工程师们至...

3277
来自专栏IT技术精选文摘

微服务中 Dubbo 和 Spring Cloud 架构技术路线对比

753
来自专栏皮振伟的专栏

超融合架构设计之概述

背景: 相比于传统的私有云IaaS产品(例如vmware、华为),nutanix引领了一个新的技术方向---超融合。 nutanix本身是存储起家,分布式存储上...

3647
来自专栏Danny的专栏

大神级程序员和普通程序员的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

712
来自专栏北京马哥教育

原创投稿 | 如何选择虚拟化方案与软件?

乐乐快跑,马哥门徒,马哥教育原创作者联盟成员,专注于运维领域知识分享,强于知识体系构建。 各位朋友大家好,今天我给大家说说实现虚拟化的方案与软件以及怎么选择哪...

2585

扫描关注云+社区