QCon 全球软件开发大会(北京站)门票 9 折倒计时 4 天,点击立减 ¥880 了解详情
写点什么

Netflix 的支付生态系统迁移到 AWS 的实践

2016 年 7 月 07 日

在 2016 年 1 月 4 号,Netflix 完成了它的全球化服务,同时新增加了 130 个国家。在这之前,Netflix 的支付生态系统已经 100% 迁移到 AWS 云服务。Netflix 的支付架构从 Netflix 数据中心(DC)迁移到 AWS 云服务只是 Netflix 入云之旅中的一部分。“关于具体的 Netflix 迁移到 AWS 云服务的目的和方向”可参见以前的文章

对于一家公司来说,支付是其的金融生命线。同时也折射出公司对顾客的态度。好的用户体验是 Netflix 核心价值观之一。支付的天性是直接影响会员和 Netflix 的财务关系,所以这种支付系统的迁移要尽可能优雅地完成。首要目标是建立一个安全、弹性和细粒度的迁移到云服务上的方案,而且不能影响用户体验。

本文讨论 Netflix 从数据中心(DC)迁移复杂的支付生态系统到 AWS 云服务的方法。

支付系统架构

支付架构是负责管理 Netflix 会员支付状态的。这包括跟踪打开 / 付费付费周期,会员账号信用卡数量,会员付费状态,付费初始化请求,会员付费的日期。除此之外,付费数据需要灌入金融系统来计算 Netflix 公司账户的财报和税费报告。为了完成这些工作,支付开发的工程师需要做到以下几点:

  • 批量作业生成 Netflix 全球会员的续费订单,按天聚合所有付费方式(包括,礼品卡,税收等)的数据流进入分类总账(General Ledger(GL))来计算收益。消息事件和 DVD 事件的生成都是依赖于客户的支付状态;
  • 支付 API 为用户服务平台和网站提供支付信息和礼品卡信息。除此之外,支付 API 也是处理用户行为(会员注册,撤单,地址更新,退款等)的工作流初始化的一部分;
  • 整合不同的服务,比如,会员帐户服务,付款处理,客户服务,客户消息,DVD 网站和运费。

支付原有生态系统结合 Netflix 数据中心(DC)和云服务。更高层次上来说,Netflix 预迁移的架构抽象如下:

考虑到和 Oracle 交互的代码和数据太多,Netflix 接下来的目标是分解原有基于 Oracle 的臃肿方案为微服务架构。一些 API 需要跨区域和高可用。所以 Netflix 决定把数据分割成多数据存储。用户数据迁移到 Cassandra 存储。Netflix 的付费数据处理需要支持 ACID 事物,因此所有相关的数据迁移到 MySQL。下面的架构图是迁移之后的架构:

面临的挑战

前面提到的庞大的迁移任务是非常大的挑战。

  • 理想情况下,迁移过程对用户体验是无宕机的;
  • AWS 上的新支付架构对会员的快速增长是可扩展的;
  • Netflix 从 1997 年开始的亿万行历史数据在不断的变化。这些数据在分库的 Oracle 中每分钟都在增长。为了迁移所有的数据到 AWS,Netflix 工程师需要首先迁移 2 TB RDBMS 数据到云服务并做实时同步;
  • 作为 SOX 系统,增加另外一个复杂层,所有的迁移和工具都要支持 SOX 过程;
  • Netflix 已经开启许多新国家市场,迅速迈向全球化;
  • 支付系统的迁移对其他着手全球化拓展的团队要做到无感知。

解决方案

Netflix 采用如下简单的原则来辅助定义前进的路程:

  • 化繁为简:接受固有的复杂遗留系统容易但改造起来就异常艰巨。当你畅游在大量数据和代码中,简单化变得很重要。经过几天的梳理才慢慢得以清晰理解,并进行简化;

    • 清理代码:将现有代码分解为更小、更高效的模块,率先把一些关键依赖移动到云服务上。Netflix 首先把税务方案移到 AWS;

      紧接着,从 Oracle 大表里移除会员支付历史,许多不同的代码直接访问这些表。现在仅仅迁移必要的数据到新的 Cassandra 数据库,建立新的应用来捕获支付事件,并开始在 AWS 云服务上提供全球的支付历史信息;Netflix 工程师花了大量时间开发数据迁移工具。原有会员支付属性分布在 Oracle 的多张表,迁移到简单的 Cassandra 数据结构中;

    • 清洗数据:确保只迁移每个表中真正需要的数据,其它数据留下不用处理。历史支付数据对客户服务团队价值很大。因此,积极与各相关团队沟通找到他们实际需要的历史数据,然后将相应的数据提取出来进行存储。

  • 构建工具是弹性的和一致的:迁移应用的目标是增量无宕机。Netflix 工程师通过构建代理,然后将数据管道重定向回数据中心(DC)。这会保持应用一直在读取 DC,并不会因为改变而受到影响,一直到数据迁移完再处理应用。

    构建工具需支持具备 SQX 的支付云架构。为了符合 SQX,需要规避开发者行为的异常和审核。

    云发布工具 Spinnaker 能够加强细节的捕捉,比如软件发布和管道事件的日志记录到 Chronos 以及大数据平台的审计。更进一步,Cassandra 客户端需要加强认证和审计。Netflix 使用 Atlas 开发新警报系统来监控云服务上的应用和数据。

    为了帮助数据分析团队,开发了一个比较器来排除 Cassandra 数据库存储与 Oracle 中数据的异同。使用 Netflix 大数据平台来获取发布事件,使用 sqoop 从 Oracle 数据库和 Cassandra 集群迁移数据到 Hive。写 Hive 查询和 MapReduce 作业来生成报告并做成仪表板展示。

  • 拿干净、有限的数据集先测试:Netflix 新开拓了一些国家市场,这带来了巨大的挑战,同时也为测试支付云架构提供了新的、干净的数据。所以,在云服务上搭建一套微型支付架构来测试续费批量处理,与数据中心的应用整合,完成支付工作流。一旦能够在云服务中成功处理新加入国家的数据,这将会为推广新的支付系统应用到大量原有的国家带来信心,特别是美国。

  • 尽量减少宕机或者其它迁移的影响,保证客户体验:现有的会员数据迁移到 Cassandra 数据库时需要停机,同时从 Oracle 数据库迁移订阅数据到 Cassandra,为云服务上的支付 API 模块和续费模块服务。每个构建工具要保证处理失败后能恢复,提供会员状态管理确保迁移终止时会员数据可用。通过前面的准备,Netflix 从 DC 的 Oracle 数据库中迁移成千上万行数据到 AWS 云服务的 Cassandra 中,并且对用户未产生明显的影响。

  • 数据库迁移要按计划有序进行:数据库移动要按事先的计划操作,并对最后的结果可预见,否则会出错。保证数据库架构能够解决数据的可扩展、可使用和可靠性,制定灾难性恢复计划,尽可能减小迁移停机时间。作者决定从商业的 Oracle 数据库迁移到开源的 MySQL 数据库,其运行在 Netflix 管理的亚马逊弹性计算云(EC2)实例上。

    订阅数据存储在 Cassandra 数据库。支付数据存储在 RDBMS,支持 ACID,可以处理付费事物。因为 AWS 的 RDS 有 TB 量级的限制,但 Netflix 有数据库超过 TB 限制,因此,在 Netflix 核心平台和数据库工程师的帮助下,Netflix 使用分布式块设备复制(DRBD copy)为 MySQL master 构建了一个多区域、可扩展的架构,在不同的区域可以读到合适的副本。所有的 ETL 处理都在副本进行,为了避免 Master 的资源连接。数据库云工程师开发工具监控 MySQL 实例报警,在必要时能恢复。

思考

Netflix 的支付生态系统迁移到 AWS 上可谓相当顺利,但现在回过头来再看,仍然有些事情可以做得更好。作者低估了自动测试的需要,并未很好的进行端对端的测试。在这些方面如果足够努力,可以更好的提高开发的速度。

迁移一些像支付这样大规模的、关键的遗留系统,需要做很多工作。迁移和简单化使 Netflix 获得了无数的好处。迁移之后的软件架构更加高效、更加轻便,Netflix 平台服务提供的工具、警报和监控能够完全利用云服务能力。Netflix 的应用能按需横向扩展,这能很好的匹配现在订阅者高速增长的趋势。

最后总结,支付系统的迁移是所有相关部门工程师共同的努力。使用 AWS 云服务会进一步加强 Netflix 的服务。

译者介绍:侠天,专注于大数据、机器学习和数学相关的内容,并有个人公众号:bigdata_ny 分享相关技术文章。

英文原文: Netflix Billing Migration to AWS

2016 年 7 月 07 日 19:001901
用户头像

发布了 43 篇内容, 共 24.3 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

DB-Engines 10月数据库排名:“三大王”无人能敌,PostgreSQL紧随其后

华章IT

数据库 postgresql Clickhouse MySQ

程序员的美丽假期(并不)

Learun

程序员 敏捷开发 软件设计

第四周 作业一:系统架构【未陌】

a d e

系统架构

LeetCode题解:83. 删除排序链表中的重复元素,HashMap,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

Spring Cloud 微服务实践(8) - 部署

xiaoboey

Docker zookeeper 微服务 Spring Cloud actuator

Github资源在线加速下载

xcbeyond

GitHub 工具类网站

使用 Flutter 快速实现聊天应用

LeanCloud

flutter 后端 聊天

链表反转的两种实现方法,后一种击败了100%的用户!

王磊

Java 数据结构 算法

MySQL-技术专题-mysql的联合索引

李浩宇/Alex

头条终面:写个消息中间件

yes的练级攻略

消息队列 面试技巧

伯克利:serverless是下一代计算范式

华为云开发者社区

云计算 服务

Minds Factory 2020 HUAWEI HiCar 创新活动

Jessie

物联网 创新 智能 汽车 大赛

滴滴导航若干关键功能的技术突破与实践

滴滴技术

人工智能 滴滴技术 滴滴导航

MySQL-技术专题-事务实现原理

李浩宇/Alex

对象的实例化内存布局与访问定位

朱华

Java 对象初始化

不走寻常路

滴滴技术

招聘 滴滴技术 地图与公交事业群分享月

解密360容器云平台的Harbor高可用方案

博文视点Broadview

容器 高可用 云原生 k8s Harbor

关于GO语言,这篇文章讲的很明白

华为云开发者社区

go 编程语言 语言

违规内容屡屡曝光下,企业如何自救

Geek_e670ab

中国首个“芯片大学”即将落地;生成对抗网络(GAN)的数学原理全解

京东科技开发者

技术 网络 GAN 芯片

c++笔记——类

菜鸟小sailor 🐕

c++

看这里!带你快速体验MindSpore V1.0(For ubuntu 18.04)

华为云开发者社区

华为 AI 技术

英特尔为北京2022年冬奥会打造智慧新体验

intel001

链表反转的两种实现方法,后一种击败了100%的用户

小Q

Java 程序员 数据结构 算法 开发

Java 未捕获异常处理

朱华

Java Exception

《谛听说智能》迎来圆满落幕,企业降本增效新指南

Geek_e670ab

MySQL-技术专题-解决死锁问题

李浩宇/Alex

第四周 作业二:系统架构学习总结【未陌】

a d e

系统架构 互联网架构

惊艳!阿里出产的MyCat性能笔记,带你领略什么叫细节爆炸

周老师

Java 编程 程序员 架构 面试

Java之父都需要的《Effective Java中文版(第3版)》到底有多牛

Java成神之路

Java 程序员 面试 编程语言

都别拦着我,我要删库了

MySQL从删库到跑路

Linux oracle重装 MySQL 运维 root

边缘计算隔离技术的挑战与实践

边缘计算隔离技术的挑战与实践

Netflix的支付生态系统迁移到AWS的实践-InfoQ