生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

Docker 在蚂蚁金融云平台中的探索与实践

  • 2015-09-17
  • 本文字数:3013 字

    阅读完需:约 10 分钟

蚂蚁金融云是蚂蚁金服推出的针对金融行业的云计算服务,旨在将蚂蚁金服的大型分布式交易系统中间件技术以PaaS 的方式提供给相应客户。在整个的PaaS 产品中,蚂蚁金服通过基于Docker 的CaaS 层来为上层提供计算存储网络资源,以提高资源的利用率与交付速度,并用来隔离底层IaaS 的不同,IaaS、CaaS 与PaaS 三层相互借力,互相配合。为了进一步了解蚂蚁金融云的整个体系架构,InfoQ 采访了蚂蚁金服基础技术部系统组leader 吴峥涛。另外,吴峥涛也是QCon 上海《容器与云计算》专题的讲师,他在大会上将分享题为《蚂蚁金服金融云PaaS Docker 实践》的演讲。

InfoQ:能否介绍下蚂蚁金服的金融云 PaaS 平台?

吴峥涛:金融云 PaaS 是从 2014 年中开始研发的,目前已经承载了网商银行以及另外两个核心业务,后续会以公有云和专有云两种模式对外提供。之所以会有金融云 PaaS 这个项目,是因为蚂蚁这些年来在大型分布式系统领域涉及的 SOA、消息通讯、水平扩展、分库切片、数据一致、监控、安全等技术方向积累了大量的中间件以及与之完整配套的监控运维研发流程体系,这一切在性能和稳定性以及扩展性上做的都不错,能够有效的支撑蚂蚁的业务发展,并应对『双 11』这样的高负荷挑战。很多金融客户与伙伴都对此非常感兴趣,所以我们希望能够把这一整套的技术上云并产品化,以 PaaS 的方式整体对外输出,帮助金融行业的客户使用云计算技术去 IOE,帮助他们解决我们已经解决的技术问题,让他们能专注于业务逻辑。上帝的归上帝,凯撒的归凯撒。

InfoQ:蚂蚁金服想把自己的中间件技术以 PaaS 产品的形式对外输出,这中间碰到了哪些问题?为什么会想到通过 Docker 这样的技术来解决?

吴峥涛:遇到的问题有很多,最主要的问题包括:

  1. 金融云 PaaS 是承载在阿里云 IaaS 上的,最初的方案是,用户部署应用的时候,根据所属技术栈,由系统解析软件包(例如 sofa4 依赖 CloudEngine、Tengine、cronolog、JDK 等等),下载安装配置并启动。这样的资源交付、应用部署周期比较长,客户体验不太好。
  2. 蚂蚁的应用架构采用的是基于服务发现、消息总线的 SOA 方案,模块间通过服务接口调用;服务可以是本地接口也可以是远程接口,对于调用者是解耦合的。在实际部署的时候,我们会
    根据业务纬度切分大量的服务模块出来,以金融云 PaaS 中枢为例,目前已经有几十种服务模块。这样的话,我们希望资源粒度越小越好,原有以 VM 为粒度的资源分配方式已经不能满足我们的需求。同时资源交付速度慢导致扩容缩容慢,影响资源利用率。
  3. 金融云 PaaS 如果对外输出,可能使用非阿里云的 IaaS,所以需要一个中间层屏蔽多种 IAAS 的区别。
  4. 镜像管理比较麻烦,无法自动化,也不是白盒。

而遇到的这些问题,都可以通过 Docker 来解决。

InfoQ:能否介绍下你们整个平台的系统架构?Docker 在整个架构中扮演怎么样的位置?

吴峥涛:我们在 PaaS 和 IaaS 之间插了一个 AntCaaS 层,这是一个基于 Docker 的管控平台,他的职责是:

  1. 以微容器(Docker)为载体,为用户(PaaS、SaaS)按需提供计算存储网络资源,提高资源的利用率与交付速度。
  2. 对 PaaS、SaaS 屏蔽 IaaS 实现细节。
  3. 实现容器、集群级别的标准化与可复制、可迁移。

AntCaaS 提供 container、app、cluster 三层接口,可以把他当作一个轻量级的 IaaS,区别仅仅是提供 Container 而不是 VM,然后也提供 PaaS 层的接口。

一个比较有特色的功能是,通过『镜像中心 + 集群 template+ 环境相关参数列表』,我们实现了集群的快速复制,目的是为了应付突发的负载高峰。

InfoQ:在 PaaS 层面,你们是如何屏蔽底层不同 IaaS 的区别的?

吴峥涛:目前 AntCaaS 可以直接运行在物理机上也可以运行在经典网络的 ECS VM 集群中,VPC、ECS 支持还在开发过程中。在 AntCaaS 中,我们采用三层架构,通过创建不同 pool 来兼容不同的 IaaS。pool 包含了:

  1. 多个 node(container 的载体)。
  2. ZK 用以监控 node 和 container。
  3. scheduler 调度器,负载 container 的创建调度。
  4. manager,对 master 提供管控的 HTTP Rest 接口。
  5. registry-proxy 保证网络联通性以及 cache 镜像数据,加速镜像下载。
  6. 在 node 内起 cadvisor 监控 container。

Docker 默认的 bridge/host 网络模式不能满足我们的需要,根据 IaaS 提供的网络功能不同,我们扩展了 vlan/vxlan 两种网络 driver,第三者 vpc driver 还在开发中。

  1. vlan 模式,事先为 container 分配一个与 node 不一样的网段,

(点击放大图像)


2. vxlan 模式,首先通过 ovs 实现跨 node 的私有网络,然后通过 zk 缓存同步 vpcid、vpc ip、node ip 的映射关系,极端情况下,如果一个 vpc 有 1000 个 container 分布在 1000 个 node 上,那么新建一个 container 加入这个 vpc 时,需要通知所有的 node。

(点击放大图像)

另外在 VPC 内,我们提供轻量级的 DNS,用于内部域名解析;轻量级的 LB,用于内部的负载均衡。

(点击放大图像)

下图是可扩展的容器创建流程。

(点击放大图像)

InfoQ:容器的安全问题是怎么解决的?

吴峥涛:基于 pool-node-container 的三层解决方案。用户和 pool 是 1 对多的关系,所以 pool 的 node 必然都属于同一个用户,同一个 node 上的 container 属于同一个用户。pool 和 pool 之间根据 IaaS 不同采用不同的隔离方案,经典网络的 ECS 使用安全组隔离,vpc ecs 使用 vpc 隔离。

InfoQ:社区中有反馈说 Docker 会经常无故挂掉,你们有遇到过吗?有做过深入跟进吗?

吴峥涛:碰到过,我们的架构设计允许 Docker Daemon 和 Container 挂掉。使用了集团的一个 Docker Patch ,在 Docker Daemon 挂掉后,不影响 container 运行。出现比较多的场景是 docker pull 时候。

InfoQ:你们是如何将基于 Docker 的系统与原有系统对接的?

吴峥涛:为了与现有的运维流程管控 SCM 系统对接,帮助现有系统迁移,以及帮助开发同学转换开发模式,我们做了不少妥协方案。作为 Docker fans,理想的开发模式是下面这样。

(点击放大图像)

但是实际上蚂蚁目前已经有 1000 多个应用,几千的开发人员,很难让他们一下都切换到 Docker 这种以镜像为中心的研发模式上;但是如果一个团队一个团队的推广,那么耗时不可控。并且蚂蚁原有的运维、监控、SCM 等系统都是以 VM 为纬度的,基于 Docker 的运维发布系统需要与原有系统对接集成难度比较大。

所以我们的第一个策略是,首先解决线上环境的 Docker 化部署问题,开发者的本地开发环境 Docker 化问题暂且不管,希望通过线上环境 Docker 化来吸引开发人员学习使用 Docker。

接下来的问题是,谁来写 Dockerfile,首先各个研发团队的人不关心是否使用 Docker 部署,所以不可能写 Dockerfile,由 Docker 团队或者运维同学负责,没有应用代码的编辑权限,同时工作量太大并且不了解应用容易出问题。所幸蚂蚁的业务应用大多数都是基于 sofa3 或 sofa4 框架的 Java 应用,所以我们做了 sofa3/4 的基础镜像以及提供一个辅助工具,使用 sofa3/4 镜像启动一个 container,然后使用原有的发布工具将应用的 tgz 包(类似 war)发布到 container 中。这样就不需要写 Dockerfile,同时原有运维系统也能把 container 当作 VM,无缝对接。

InfoQ:聊聊你们异地多机房的统一镜像中心解决方案?

吴峥涛:关于跨机房镜像中心的解决方案要点:

  1. 将镜像数据存在 OSS 写三份,保证数据安全性;
  2. Registry 本地不保存数据,是无状态的服务,可以水平扩展;
  3. Registry 上跑一个 Nginx,提高镜像数据访问速度;
  4. 在每个 pool 中部署一套 Nginx,开启文件缓存,对常见镜像进行预热,构建缓存;
2015-09-17 13:307626
用户头像

发布了 219 篇内容, 共 134.7 次阅读, 收获喜欢 190 次。

关注

评论

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

react组件深度解读

xiaofeng

React

React组件通信

xiaofeng

React

CSS 如何实现五彩斑斓的“呼吸字”?速度拿去装杯!

掘金安东尼

CSS 11月月更

HummerRisk 快速入门教程

HummerCloud

云安全 云原生安全 11月月更 HummerRisk

应用现代化产业联盟,正式成立

华为云开发者联盟

云计算 华为云 企业号十月 PK 榜

豆瓣评分8.0!深入理解Java虚拟机,把GC算法与实现讲得明明白白!

Java永远的神

程序员 面试 JVM GC Java虚拟机

链表只有面试有用?Redis 之父说:我不同意!

图灵社区

算法 链表 Redis 数据结构

为什么电脑主板晶振多采用14.318MHz和32.768KHz ?

元器件秋姐

晶振 元器件 元器件电商平台 元器件采购

阿里这份Java程序性能优化指南,让你的程序快上200%

小小怪下士

Java 程序员 性能优化

大咖圆桌|研发想要降本增效?来听听专家们的前沿洞见

万事ONES

MindStudio模型训练场景精度比对全流程和结果分析

华为云开发者联盟

人工智能 华为云 企业号十月 PK 榜

数据可视化分析之新技能——魔数图

葡萄城技术团队

数据分析 前端 可视化 商业智能

链表只有面试有用?Redis 之父说:我不同意!

图灵教育

算法 链表 Redis 数据结构

React高级特性之Context

夏天的味道123

React

线上kafka消息堆积,consumer掉线,怎么办?

Java永远的神

Java kafka 程序员 程序人生 消息中间件

「Go工具箱」web中想做到cookie值安全?securecookie库的使用和实现原理

Go学堂

golang 开源 程序员 Cookie WEB安全

Git本地提交代码推送远程并未统计贡献量问题分析

Andy

LED显示屏设计和安装比例有什么联系

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

融云「百幄」之视频会议和直播,让办公桌无限延伸

融云 RongCloud

直播 视频会议 通讯

双十一剁手快,ERP系统不能慢

力软低代码开发平台

重磅发布.NET 7!更快、更强、更统一

Azure云科技

.NET 7

双11niubility的数据恢复软件,获得更专业的数据恢复服务

淋雨

数据恢复 文件恢复

react进阶用法完全指南

xiaofeng

React

火山引擎钜惠双11开启,云服务器0.71折起

Geek_2d6073

华为云发布三大生态举措,携手伙伴及开发者共创新价值

华为云开发者联盟

云计算 华为云 企业号十月 PK 榜

开源密码管理器更安全吗?(2)

神锁离线版

开源 网络安全 信息安全 数据安全 密码管理器

云BI,如何成为了企业的“贴身管家”?

夏日星河

开源遇上华为云——DataX for HuaweiCloud OBS

华为云开发者联盟

开源 后端 华为云 企业号十月 PK 榜

Databend 在 MinIO 环境使用copy 命令 | 新手篇(3)

Databend

用火山引擎DataTester,这家企业开始了“数据驱动增长”

字节跳动数据平台

内存数据库如何发挥内存优势?

C++后台开发

算法 内存数据库 后端开发 linux开发 C++开发

Docker在蚂蚁金融云平台中的探索与实践_最佳实践_小盖_InfoQ精选文章