搜狗工程师申贤强Docker on Yarn微服务实践

QCon大会

2017/11/14 发布于 技术 分类

基于Docker on Yarn系统提供具有高效调度,弹性伸缩,优先级控制,环境隔离,自动化部署等功能的统一服务管理平台,支持简单有状态的微服务的实践,以及稳定性相关的实践经验。

文字内容
1. Docker on Yarn微服务实践 搜狗 申贤强
2. 关于我们 Ø 来自搜狗大数据平台部 Ø 基于Apache Hadoop生态,建设搜狗海量数据存储和计算平台 Ø 提供稳定高效的数据分析系统,为搜狗各类型大数据应用,提供 一站式数据处理服务 Ø 每天数十亿的数据增量,数以万计的数据计算流程,使数据的价 值得到充分利用 Ø 最前沿技术落地及推进开源技术的发展
3. 目录 I. 背 景 II. Docker的优势 III. 技术选型 IV. Docker在Sogou的应用 V. Clotho系统的功能与总体框架 a) Clotho功能与总体框架 b) 稳定性讨论 VI. Clotho微服务管理平台
4. 背景 • 依赖复杂 • 维护困难 • 机器下线 • 机器宕机 运行环境 复杂 稳定性 • 环境不敢 轻易上线 维护成本 高 扩展性 • 资源扩展 比较慢
5. Docker的优势 I. Do传c统ke方r优式势 使用Docker 开发a) b) 测试c) II. 上线 a) 搭轻建量开发环境,解决环境依赖与冲突, 重复造轮子 弹性 环搭高境建性测依能试赖环与境冲,突偶尔需要开发协助解决 建议正确使用Docker的方式 Svn /git tag -> DailyBuild -> OP部署 线修上改Se代rv码er环重境新build Image 开发者复用Docker Image,减少重复 工作 测试人员直接Pull Image 开发交付上线Image,OP直接拉取上 线 b) 总结 c) • 尽量不用docker commit 容易产生系统相关的BUG,不易追查 • 开发、测试、上线环境一致 本难地以/V定o位lume Plugin持久化数据 • 版本依赖复杂 • 应用使用的库文件,不依赖宿主操 作系统
6. 技术选型 微服务设计原则 小 • 按照业务职责设计 • 高内聚 轻 • 接口管理 • 数据协议 松 • 耦合性低
7. 技术选型 编排系统的选择 Mesos • 较为完善的长服务解决方案,包括服务发现,负载均衡,资源调度等 • 满足特定业务需要二次开发成本高 • 整套解决方案的开发语言较多 • 理念先进复杂,功能相对完善复杂 Kubernetes • 满足特定业务需要二次开发成本高 Yarn • 一定的技术积累,Hadoop集群结合支持统一集群调度 • 功能不完善,需要开发服务发现,Load Balance等基础功能
8. Docker在Sogou的应用 线上业务 • 企业搜索核心模 块,搜索相关核心, 以及前端系统,索引建库等 线下业务 • 调研流程,各类线下实验平台, GPU深度学习平台,VR展现等 Clotho • Hadoop离线任 务管理,主要涉及相关性 rank,意图识别反作弊,数据统计等 • Long Running Service,如ELK,Grafana Sensu监控报警系统,ganglia等 同时运行的Docker Container达到万级以上,每天完成近百万离线Job,托管了上 千类型的Long Running Service
9. Clotho系统的功能与总体框架 Clotho系统的总体功能 代码管理 数据管理 自动打包 自动上传 用户数据 任务部署bin lib start.sh data 定义任务的类型 DAGBu依il赖d S生er成ver Config文件管理 CloudTask工具 任务管理 1.持I久m化a用ge户版代码本管理 任务生成 2.生成D自ocke动rfil重e 试 任务统计与报警 3.自动build生成Image,发 布测试/正式镜像
10. Clotho系统的功能与总体框架 Clotho系统总体框架 代码部署 生成镜像 测试镜像 发布镜像 任务部署 长服务 定式任务 任务管理 自助检查 更新/回滚 任务监控 耗时趋势 报警策略 分 布 式 文 件 系 统 Docker Registry 服务 权 限 认 证 系 统 任务管理系统后端 Docker On Yarn
11. Clotho系统的功能与总体框架 Docker On Yarn组件 https://github.com/sogou/docker-on-yarn.git
12. Clotho系统的功能与总体框架 稳定性讨论 YARN 1. HA 2. 重试 è 99.99% 稳定性? 3. Recovery 系统稳 定性 è <33% Docker 稳定性? 1. Docker Daemon有recovery 2. Docker Container外围重试 3. Docker Registry?单点,极其脆弱 4. Docker Container 端口占用 5. Docker Daemon僵死 6. Docker Container 变成 Zombie è 33%
13. 稳定性讨论 Docker Registry改进 Ø 支持HDFS持久化存储,保证数据的多备安全性 Ø 支持分布式Harbor集群,支持LDAP权限认证 Ø Docker Registry分布式化,且支持负载均衡
14. 稳定性讨论 其他改进 Ø Docker Container随机端口管理,解决冲突问题 Ø Docker Daemon升级到1.13.1解决假死问题 Ø YARN解决机器负载/权限问题 l 对机器进行区分,保证Master机器的稳定性,开发指定机器调度 l 指定一组机器进行调度,开发指定Label的调度模型 l 解决网络传输问题,开发指定rack调度 l 解决YARN recovery/AM黑名单等问题 经过针对Docker和YARN的改进后,Clotho系统的稳定性达到99.9%
15. Clotho微服务管理平台 主要功能 Ø 服务SPEC配置管理 AppName:唯一标识 Image:实际运行的Image信息 Tag:标识服务状态 Port:发布的端口 Instances:启动的Service数目 Ø 负载均衡 多实例情况下简单随机,含地域特性 Ø 服务发现 服务定位LocateServer功能 Ø 弹性伸缩 直接修改Registry Service里 /AppName/instances,ClothoMaster根据 instances动态调整申请的资源
16. Clotho微服务管理平台 Client与Server的交互流程
17. Clotho微服务管理平台 appName:SERVICE_MASTER_NAME containers:'>containers: - image:'>image: master-example:1.0 memory:'>memory: 2g cores:'>cores: 2 command:'>command: sh bin/start.sh ports:'>ports:'>ports:'>ports: - port: CLOTHO_RANDOM_PORT hosts: master01,master02 tag:'>tag: MASTER files:'>files: - /etc/example/master.conf instances: - num:'>num: 1 appName:SERVICE_SLAVE_NAME containers:'>containers: - image:'>image: slave-example:1.0 memory:'>memory: 1g cores:'>cores: 1 command:'>command: sh bin/start.sh ports:'>ports:'>ports:'>ports: - ports:'>ports:'>ports:'>ports: 80 tag:'>tag: SLAVE instances : - num:'>num: 1 dependency: - name: SERVICE_MASTER_NAME type: RESTART_IMMEDIATELY files:'>files: - /etc/example/slave.conf
18. Clotho微服务管理平台 任务提交流程 用户中心 ClothoCenter MySQL AppMaster Master Driver Service YARN LocateServer AppMaster Slave Driver Service
19. Clotho微服务管理平台 服务容灾 用户中心 ClothoCenter MySQL AppMaster Master Driver Service YARN LocateServer AppMaster Slave Driver Service
20. 服务容灾 服务实例service异常: 1. YARN通知AppMaster Driver已经退出 2. AppMaster重新申请资源启动Driver 3. 新Driver启动后向LocateServer更新服务地址 4. 下游服务AppMaster发现依赖服务变动,依据重启策略向Driver通知重启服务 AppMaster服务异常: 1. 上游AppMaster异常退出,YARN重新调度新实例new-AppMaster 2. new-AppMaster重新托管Driver 3. new-AppMaster确认所有Driver正常后向LocateServer更新信息 4. 下游AppMaster发现上游任务变动,依据策略通知Driver是否重启
21. TODO I. 支持复杂DAG II. 支持更好的资源隔离策略 III. 与Hadoop集群结合,支持离线和在线业务
22. THANK YOU