构建 高效私有云平台 今 日头条私有云平台架构设计夏绪宏
关于我 夏绪宏 @reeze 今 日头条研发架构负责 人 基础设施平台 PHP Committer\LAMP
大纲 01. 私有云 公有云在头条 02. 头条私有云平台架构设计 03. 遇到问题以及未来的规划
01. 私有云 公有云在头条
关于今 日头条 6 亿 用户 6600W DAU 76 分钟 日使 用时 长 7000w 5250w 3500w 1750w DAU 迭代部署 : 670+ 次 / 天 0w 2014-04 2015-04 2016-10
今 日头条 & 云 IaaS 公有云 : 应对突发和计算资源需求 推送场景, 峰值效应, 带宽占 用 大 国际化服务 SaaS 服务 服务质量量监控 : 云监控服务 第三 方统计服务 CDN 网络 etc
云计算设施 http://nordicapis.com/living-in-the-cloud-stack-understanding-saas-paas-and-iaas-apis/
公有云, 私有云 公司规模规模 小规模 大 公有云私有云公有云私有云 弹性好差好好 可控性弱强弱好 成本低 高 高低
02. 头条私有云平台架构设计
平台设计 目标 目标 : 高效的在线服务研发 PaaS 平台 思路路 : 松耦合, 支持不不同类型业务 理理解微服务 构建完善周边 SaaS 服务 足够的弹性, 混合云 支持
目前的进展 TCE: Toutiao Compute Engine 进展 : 2016-05 启动 2016-10 上线 120+ 服务迁移, 继续迁移中 扩容效率 :10 倍提升,< 1 分钟
总体架构 TCE WebUI API SaaS PaaS DevOps Services Manager Redis MC NSQ/ MySQL Resource Framework IaaS { Load Balancer (HTTP) Cron/script manager GoApp1 GoApp2 Python App Nodejs App Stateful app AppEngine Kubernetes vhost1 vhost2 container container container cluster1 container container cluster2 container IDC2
TCE 平台 技术 方案 技术选型 网络模型 服务发现 日志收集 容器器的使 用 弹性调度 etc... DevOps 研发基础设施 开发测试 部署上线 微服务的 支持
技术选型 PaaS 定制需求多 没有合适的开源 方案, 自研 IaaS Kubernetes Mesos
技术选型 Kubernetes Mesos 编排能 力力强 一般 集群规模千级别 massive 有状态服务不不太好 比较好 弹性好好 自愈能 力力 支持 支持
技术选型 IaaS 层设计 基础设施中 立 不不强绑定底层 IaaS 设施 通 用计算服务
Kubernetes
Kubernetes
Kubernetes 网络模型
Flannel
我们的 方案 使 用 Flannel 不不直接使 用虚拟 子 网 为每个实例例 expose 随机端 口
服务发现 Kubernetes Service: Cluster IP DNS 使 用Consul 自 己做服务发现 跨集群问题, 虚拟 网络和已有 网络的互通问题 性能问题 减少层次, 问题定位效率 我们 一直在 用Consul
服务发现 Container App PSM: toutiao.xx.api Port: 30000 Cluster: abc Env: prod Weight: 50 HTTP App Watcher Nginx LB App (server) Consul TCP App App Watcher
弹性调度 提升应对突发流量量的能 力力 资源利利 用率提升 基于 CPU metrics 后续根据业务指标扩容
容器器的使 用 方式 使 用init 进程守护 (systemd) 好处 : panic 之类的问题的可以更更快的重启 和物理理机的守护 方式 一致 支持容器器内应 用重启或临时更更新操作 坏处 : 服务 一直异常可能会影响服务 (LB 和 RPC 框架会屏蔽 )
容器器的使 用 方式 不不完全 自包含 基础服务在容器器外运 行行 : 各种 agent 日志持久化 公共 Library 共享 一种折衷和过渡
容器器的使 用 方式 Host metrics-server Container Shared Service /tmp /tmp Shared Python Library ss_lib mount /opt/tiger/ss_lib Platform tools tools /opt/tiger/tce_tools
日志收集 Host Consumer A Container Consumer B databus-collector App Log lib Stream processing Consumer C databus /tmp/databus_collector.sock /tmp/databus_collector.sock /opt/tiger/toutiao/log
监控
监控
02-1. DevOps 微服务
DevOps
平台眼 里里的服务 (App) 理理解服务化 全局唯 一标示 :P.S.M {$PRODUCT}.{$SUBSYS}.{$MODULE} 贯穿 自动化测试, 服务授权, 监控, 日志等 方 面 分集群 : 区别对待不不同的 用户, cluster,env, 框架 一起理理解 基本的元信息 依赖的程序 /lib 包信息
平台眼 里里的服务 (App) P.S.M IDC1 IDC2 1 2 3 Canary Prod Prod cluster1 cluster1 1 2 3 Canary Prod Prod cluster2 cluster2
平台眼 里里的服务 (App) Host Kubernetes Container Label: - cluster: default Env: - PSM: toutiao.xxx.api - Cluster: default - Env: canary mtest-subsys.mod
服务信息 toutiao.xx.xx cluster1 cluster2
服务信息 toutiao.xx.xx dev1 toutiao
开发镜像 (WIP) 按服务创建 快速创建 销毁环境 WebShell User Data Ceph Storage Dev Tools App modules App modules Base Image Base Image Production Image Dev Image
构建流程 & Deploy Info PSM: toutiao.xxsubsy.api Base Image: base Items: - module: toutiao/xxsub/api v1.0.1 - path: /opt/tiger/toutiao/app etc SCM& DockerHub Ceph
部署流程 1 2 3 API Diff Metrics 4
03. 遇到的问题以及未来的规划
遇到的问题 Kubernetes 集群规模问题 : 千级别的节点 IaaS 层封装, 底层分集群 多集群, 快速弹性调度只能在集群内
遇到的问题 网络相关问题 : 端 口分配问题 : 可能和临时端 口冲突, 修改 range systemd 守护的进程只能使 用 root 账号, 导致 日志权限为 root 环境变量量 无法从 docker 继承的问题
遇到的问题 小容器器资源变 小 Python 类服务多进程模型服务启动 CPU 过 高的问 题 开发框架适配 Docker 环境,worker 数的适配等
遇到的问题 数据库访问授权 容器器化后, 所在的物理理机 IP 会经常变动, 连接信 息隔离 利利 用应 用层 MySQL 新功能 或者在 SQL 层次带 上更更多的认证信息, 改造成本 大 重要服务物理理级别隔离
遇到的问题 : 历史包袱 脚本类服务的基础库统 一更更新问题 统 一更更新, 容易易出事故 不不统 一更更新, 基础库版本不不 一致 选择和微服务及容器器化 一致的理理念 : 自包含 版本发布进 行行标注, 强制应 用下次升级更更新解决 一致性问题
未来的规划 IaaS 层抽象和改造 调度器器的优化 : 不不同类型的业务, 提升利利 用率 支持有状态服务 多地域的 支持 : 国际化, 周边设施的完善 混合云 : 接 入IaaS 公有云提供更更好的伸缩能 力力 PaaS 服务和 SaaS 服务的深度整合
Thanks