新浪微博大规模基于docker的混合云应用实践 -王关胜

52

Upload: weibo-corporation

Post on 15-Apr-2017

338 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 新浪微博大规模基于Docker的混合云应用实践 -王关胜
Page 2: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

Weibo DCP

基于Docker的混合云应用实践

@王关胜 微博研发中心-运维架构师

Docker Container Platform

Twitter/FB:@wgs0120

Page 3: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

目录 CONTENT1

2

微博业务及混合云背景

4

3

混合云技术可行性

三节保障及阿里云部署5

Weibo DCP基础设施

Weibo DCP设计与实现

Page 4: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

微博业务及混合云背景

Part 1

Page 5: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

1.微博业务规模

业务量

日志:百T+RPC:万亿+接口:600亿

+

运维

Docker:80%扩缩容:5min变更:30次/w

系统

设备:万+集群:500+

业务线:100+

强大的运维平台

KPI

SLA:99.99%RT:50ms

故障分:<2/季

用户

用户:8亿DAU:1亿+MAU:2亿+

Page 6: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

2.面临的挑战l 产品功能迭代快,系统变更及代码上线次数多

l 业务上复杂的依赖关系

l 突发的热点事件

#周一见# #马航370# #刘翔摔倒# #明星丑闻#

l 大型运营活动及三节保障:红包飞

l 每日不定时段的Push(推送)n 分类:应用内Push,应用外,活动Push,运营Push

n 用户互动时间:<1h

n 下发速度:快,中,慢

n 用户模型:全量,高中低频,地区,灰度模型

Page 7: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

3 三节业务场景-春晚

• 特点:

• 瞬间峰值高

• 互动时间短

• 挑战:传统应对手段成本高

• 设备成本

• 时间成本

Page 8: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

4.1 痛点1:扩缩容流程繁琐Text in here

Step1 设备申请- 设备申请,项目评审- 入CMDB,装机

Step2 机器初始化- 设备录入资源池,初始化

Step3 服务部署- 环境部署- 监控部署- 服务部署(代码 & confs)- 流量引入

Step4 自动报修&下架- 服务自动上下线- 机器置换或下架

业务运维可控

上架装机

Title in here服务部署

新机器

初始化

Title in here

分配给业务管理员

CMDB

Title in

here流量引入

Title in here

自动报修

Title in here

过期下架

Page 9: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

4.2 痛点2:服务弹性能力不足• 闲置设备资源在现有的技术框架下未能被充分利用

冗余度

业务A集群

冗余度

业务B集群

冗余度

业务C集群

扩容成本 = 集群数 * 冗余度

业务A集群 业务B集群 业务C集群

冗余度

旧的应对手段 弹性扩容

扩容成本 = max(冗余度)

Page 10: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

4.3 痛点3:设备申请周期长• 成本因素,采购周期长,机房机架位不足

Page 11: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

5. 构建弹性的混合云

Page 12: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

混合云技术可行性

Part 2

Page 13: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

1 业界趋势

Page 14: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

2 业界案例• 12306 两地三中心 混合云架构

Page 15: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

3 微博部署架构

多机房部署

核心服务独立域名,上下行分开

七层独立部署

核心服务独立服务池

Tomcat线程保护 快速失败

服务化及独立部署

核心资源独立部署

外部依赖异步解耦

部署方案

Page 16: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

4.1 混合云部署方案一

LVS

Nginx

Web

RPC

MC/Redis

Mysql/HBase

LVS

Nginx

Web

RPC

MC/Redis

Mysql/HBase

RPC

MC/Redis

土城 永丰 阿里云

SLB

Nginx

Web

Page 17: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

4.2 混合云部署方案二

LVS

Nginx

Web

RPC

MC/Redis

Mysql/HBase

LVS

Nginx

Web

RPC

MC/Redis

Mysql/HBase

RPC

MC/Redis

土城 永丰 阿里云

Page 18: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

Weibo DCP基础设施

Part 3

Page 19: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

1.1 Docker 选型l 裸机 or VM

n 私有云采用裸机,公有云采用VM(ECS)l 网络选型

n 线上环境:Host模式n 灰度环境:Ovs Bridge模式 + L2 Switch (改造成本高)

l 参数设置n --bridge,--iptables,控制网桥和NAT,host模式下关闭n 开启2376端口

l 版本搭配

CentOS 6.6/Kernel 2.6.32

DeviceMapper-loop

Docker Daemon 1.3.2

CentOS 7.1/Kernel 3.10.0

DeviceMapper-direct-lvm

Docker Daemon 1.6.2

Mesos0.25 Swarm 1.0.0 Mesos 0.25Dispatch 1.1旧版容器调度方案 新版容器调度方案

Page 20: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

1.2 单机部署方案

Graphite

Logs1

容器调度

ScribeCadvisor

ELK 数据分析

HOST(10.75.0.2)

镜像服务

8080

APP1

8081

APP2 Logs2

容器监控 行为日志 业务日志

-v

-link

-host

-host

容器

存储卷

系统

工具

Page 21: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

2.1 Docker Registryl 构建私有Registry Hub

n docker-registry:V1 -> V2

n storage driver:Ceph

n docker-registry-frontend:Nginx

内网 阿里云

业务集群 业务集群

分布式存储

Registry RegistryRegistry 镜像缓存Mirror

Page 22: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

2.2 镜像分层服务

l 镜像服务n 分层设计,逐层复用

n 基础环境/运行时/容器/业务

n 优化大小,dockerignore

n 禁止使用latest

Page 23: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

3.1 Nginx Upsyncl 核心功能

n Fix Nginx Reload时的服务抖动n Fix Web容器的服务发现

l 开源:https://github.com/weibocom/nginx-upsync-module

Nginx

worker

worker

worker

docker-server backend-server

Consul

update-

modulecore-module

pull

pull

pull

register

Page 24: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

3.2 Nginx Upsync-Onlinel 线上部署

n 162,159:Nginx + Upsyncn 116,160:Nginx

l 分析结果n 请求量:普通reload会丢10%请求(大并发)n 平均耗时:差异不大,新模块稍有优势

Page 25: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

Weibo DCP设计与实现

Part 4

Page 26: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

1 微博DCP设计关键点

微博混合云

微博定制业务驱动

弹性伸缩 自动化

Page 27: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

2 Weibo DCP系统框架

私有机房 公有云

主机资源

Adapter

Docker Swarm Mesos Dispatch

基础设施

Java

Web RPC PROC Hadoop

PHP 数据分析

Feed

红包飞

用户

无线

通信 平台

广告 有信

主机

调度

编排

业务

专线

VPC

l 方案设计:来源于官方三驾马车(Machine + Swarm +Compose)

Page 28: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

3 Weibo DCP功能模块图OS升级自动化

Docker镜像市场主

Consul工具管理

Docker版本管理

Docker调度调度

Swarm调度 Mesos调度 Dispatch调度

策略中心 容器类型 调度监控 容量监控

主机管理 ECS管理 SLB管理 初始化

共享池管理 Buffer管理 配额管理 多租户管理

框架

功能框架 权限中心 账户体系 工单系统

包管理(Yum) DNS管理 Puppet管理 成本管理

服务管理编排

配置管理 构建管理 发布管理

扩缩容管理 4/7层管理 退库管理 监控中心

Docker工具体系

Page 29: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

3.1 DCP-主机层核心组件OS升级自动化

Docker镜像市场主

Consul工具管理

Docker版本管理

Docker调度调度

Swarm调度 Mesos调度 Dispatch调度

策略中心 容器类型 调度监控 容量监控

主机管理 ECS管理 SLB管理 初始化

共享池管理 Buffer管理 配额管理 多租户管理

框架

功能框架 权限中心 账户体系 工单系统

包管理(Yum) DNS管理 Puppet管理 成本管理

服务管理编排

配置管理 构建管理 发布管理

扩缩容管理 4/7层管理 退库管理 监控中心

Docker工具体系

Page 30: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

3.2 DCP-调度层核心组件OS升级自动化

Docker镜像市场主

Consul工具管理

Docker版本管理

Docker调度调度

Swarm调度 Mesos调度 Dispatch调度

策略中心 容器类型 调度监控 容量监控

主机管理 ECS管理 SLB管理 初始化

共享池管理 Buffer管理 配额管理 多租户管理

框架

功能框架 权限中心 账户体系 工单系统

包管理(Yum) DNS管理 Puppet管理 成本管理

服务管理编排

配置管理 构建管理 发布管理

扩缩容管理 4/7层管理 退库管理 监控中心

Docker工具体系

Page 31: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

3.3 DCP-业务层核心组件OS升级自动化

Docker镜像市场主

Consul工具管理

Docker版本管理

Docker调度调度

Swarm调度 Mesos调度 Dispatch调度

策略中心 容器类型 调度监控 容量监控

主机管理 ECS管理 SLB管理 初始化

共享池管理 Buffer管理 配额管理 多租户管理

框架

功能框架 权限中心 账户体系 工单系统

包管理(Yum) DNS管理 Puppet管理 成本管理

服务管理编排

配置管理 构建管理 发布管理

扩缩容管理 4/7层管理 退库管理 监控中心

Docker工具体系

Page 32: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

4 DCP核心设计思想l 核心思想:借鉴于银行的运作机制l 弹性方案:内网共享池 + 公有云l 服务:IP + Port

私有云:共享池

公有云:阿里云

设备BufferPool

服务池SrvPool

集群Group

层级关系

l DCP:分为多个集群

l 集群:为独立平台,对应业务线

n 集群内:自由调度(跨Pool)

n 集群外:配额调度

l 服务池:同一业务线的同构服务

l 设备:共享池 + buffer池 + ECS

Page 33: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

1

5 DCP管理员视角

超级管理员

集群管理员

服务池管理员

l 内网共享池管理

l 阿里云ECS管理

l 计费及账单管理

l 服务器录入/还原

l Buffer池管理

l 配额及申请管理

l 服务池扩缩容

l 代码构建及发布

l 业务监控

l 容量管理

l 超级管理员:负责阿里云ECS管

理以及内网集群间设备交换

l 集群管理员:负责产品线内设备

管理以及从共享池,阿里云筹借

机器

l 服务池管理:负责具体业务的扩

缩容以及代码变更等

管理员分工及权限

Page 34: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

6 大规模集群操作自动化

1 2 3

设备申请 初始化 服务上线

l 设备申请n 内: 共享池n 外: 阿里云

l 初始化n 包标准化n 配置管理

l 服务上线n 容器动态调度n 服务弹性扩缩容

Page 35: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

7.1 大规模集群第一步:设备l 私有云:共享池(离线集群,低负载集群,错峰)

l 公有云:阿里云(动态创建)

业务管理员视图

集群内跨池调度

缩容服务池A

集群外Buffer足

集群外Buffer不足

直接使用

向共享池发起申请

共享池进行审批

通过后划拨设备

通知申请者入buffer池

查看配额 申请配额

1

2 通过后增加配额

向共享池发起申请

。。。

1

2

配额足

配额不足

Page 36: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

7.2 主机设备生命周期

未录入状态

共享池状态

Buffer池状态

运行中状态

下线状态

未初始化 已初始化 容器启动 容器上线

运行中状态 宕机状态下线状态

Buffer池状态

Buffer池状态

报修状态

正常主机状态变迁

异常

Page 37: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

7.3 共享池使用方式案例

业务A

业务B

业务C

业务D

业务E

共享池

业务C

业务C 因峰值流量申请3台服务器

接入混合云体系

共享池

归还申请的服务器

业务C

共享池

共享策略

Page 38: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

l 操作系统u 安装/升级自动化u 操作API化

l 基础软件及配置u 版本化,可配置u 安装操作模板化

l 方案选型u RPM + Puppet MasterLess

l 关联关系

8.1 大规模集群第二步:初始化

模板 软件模块1:n

主机 模板n:1

• 应用简单,迁移成本高,可维护性强• 案例:CoreOS,RancherOS,Atomic,DCOS

标准的容器操作系统

• 应用复杂,迁移成本低,可维护性一般• 案例:包管理(rpm)+配置管理(Puppet)

支持软件反安装的方案

• 应用简单,迁移成本低,可维护性极差• 案例:init.sh

自编写初始化脚本

业界实践

Page 39: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

8.2 主机初始化-流程

混合云软件安装模块

本地文件1.修改

Gitlab

通道机/Dispatch

Host1

5.命令

下发

2.提交

4.下

发任

主机初始化流程

配置修改

应用变更

线上实例

Host27.Puppet apply/report 7.Puppet apply/report

模板库

Consul集群8.录入及打标签

Page 40: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

9.1 大规模集群第三步:扩容l 扩容

n 输入:服务池名称、服务类型,容器类型、数量、镜像地址等n 输出:扩容报告

l 告警机制n 用户在使用完80%的资源时,短信和邮件提供n 用户在使用超过90%的资源时,需要审批机制

l 记账中心n 资源拥有者、使用方、型号、使用时间、日期、信用等

l 容器服务类型:按照dPxx(dockerPxx)命名

dP018核12G

dP0212核12G

dP0312核16G

dP0416核16G

Page 41: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

9.2 弹性扩容-流程

管理员

混合云平台

公有云

发起请求

Buffer池

1.资源评估

调度中心5.发起容器调度

服务6.部署服务

Consul集群7.服务注册

配额模块

2.配额评估资源不足

共享池

初始化模块

监控中心

4/7层模块

ConfigSrv

一键扩容

……

流量接入模块

服务检查

Page 42: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

9.3 弹性扩容-Swarm调度

Page 43: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

9.4 弹性扩容-Swarm调度策略Ø Swarm创建容器过程,调度分为两个阶段l 1 根据条件过滤出符合要求的节点

n Constraints(约束过滤器)n Affinity(亲和性过滤器,)n Dependency(依赖过滤器)n Health(会根据节点状态进行过滤,会去除故障节点)n Ports(会根据端口的使用情况过滤)

l 2 在过滤出的节点中根据策略选择一个最优节点n Binpack:在同等条件下,选择资源使用最多的节点n Spread:在同等条件下,选择资源使用最少的节点n Random:随机选择一个

Ø 调度颗粒度n Memory:docker run –m 1g …n CPU:docker run –c 1 …

Page 44: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

9.5 弹性扩容-服务发现LB

Nginx

Nginx Upsync

Consul Cluter

Health Check

ConsulSrvA:ip:port

Consul Agent

Host1SrvB:ip:port

Consul Agent

Host2服务check 服务check

register register

Discover

前端类:

1

2 2

1

3

4 4

Page 45: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

三节保障及阿里云部署

Part 5

Page 46: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

1 三节保障-监控

集群App log

Jvm loglogstash ELK

StatsD Mfiter

Graphite

资源依赖 Http依赖

服务依赖 RPC

依赖层

4/7层

Sina Watch

Sina Scripts Sina Atp

用户

Spark Hbase WatchMan

部署线

日志查询

报警平台

Dashboard

Trace

l 参考:http://www.slideshare.net/wgs0120/wot2015

Page 47: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

2 三节保障-阿里云部署前提

网通1

微博 阿里云

网通

网通2

电信1 电信专线日常1G春节10G

VPN/VPC网络

专线日常1G春节10G

VPC网络

Page 48: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

3 三节弹性调度解决方案l 部署模式

n 优先调度内网共享池资源

n 存储节点、主要计算节点仍部署在公司内网,以确保数据安全

n 红包飞,春晚等峰值流量应对计算节点部署在阿里云

l 对阿里云的要求

n 日常提供1000节点计算能力,可以5~10分众完成在阿里云的部署

n 春晚提供3000节点计算能力,微博信息流、红包飞均可支持

Page 49: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

4 阿里云弹性方案

W W W W W W W W

C C

D D D

前端机

缓存

存储

微博内网

W

C C

前端机

缓存

阿里云

春晚峰值应对申请一倍服务器

W W W W W W W W

C C

D D D

前端机

缓存

存储

W

C

前端机

缓存

W W W W W W W W W

C

Page 50: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

5.微博混合云DCP迁入进展l 混合云进展

u 项目上线:15年10月u 容器数:3000+

l 双十一考验u 单日10次扩缩容u 单次操作时间:<5分钟

微博平台58%

红包飞11%

手机微博23%

其他8%

主要业务方微博平台 红包飞 手机微博 其他

Page 51: 新浪微博大规模基于Docker的混合云应用实践 -王关胜

We are hiring…l 招聘职位

u 高级系统工程师u 高级运维开发工程师u 运维架构师

l 简历投递u [email protected] [email protected]

Page 52: 新浪微博大规模基于Docker的混合云应用实践 -王关胜