大厂容器云实践之路(四)

news2024/12/24 8:49:10

7-爱奇艺基于 Docker 的 App Engine 实践

背景

业务上

虚机承载的业务:

后台服务:25%

worker:20%

其他:55%

技术上

2014年第三季度

img

 出发点

img

 目标

img

 道路曲折

img

 用户受益

• 资源到位快 
• 部署快(上线、升级) 
• 扩容快 
• 自动故障转移,免运维 
• 完善的监控预警
• 持续集成、发布

iQIYI App Engine 设计与实现

iQIYI App Engine (QAE)

img

QAE — 监控和预警

img

QAE — 自动扩展(Auto Scaling)

239598336196182.png

QAE — 事件总线

296249336196124.png

QAE — 服务发现

195389336196153.png

QAE — 日志

140571436196144.png

QAE — CI/CD

331222436196153.png

 一些经验(坑)

容器监控 — Zabbix

• 优势 
  • 已有 Zabbix 基础服务 
  • Auto Discovery 能发现容器启动/消失事件 
• 劣势 
  • 需要在容器内部安装 zabbix, overhead 太大 
  • 不是很稳定 
  • 数据统计比较复杂

容器监控 — cAdvisor

• 优势 
  • 背靠 Google 且开源 
  • 监控数据详尽 
• 劣势 
  • 集群化开发成本较高,Kubernetes heapster 实现 
  • influxDB 而非 graphite(当时有基础服务)

容器监控 — dAdvisor

• Docker Advisor 
• 采集:CPU, 内存,磁盘,网络 
• 集成现有 Graphite 
• 统计数据方便(Graphite 内置一些操作符) 
• 呈现方便(Graphite Render URL API) 
• 开发量不大

Time Series Database — Graphite

• 优势 
  • 老牌(Since 1999),已有服务,经过验证 
  • 简单、内置 aggregator,Render URL API 
• 劣势 
  • 项目及社区已经几乎停滞 
  • 集群化配置复杂,需要详细规划 
  • 缺乏多用户认证,授权机制,黑白名单太单薄 
  • 数据删除缺少 API

服务发现(Service Discovery)

• 负载均衡/反向代理方案 
  • HAProxy:Marathon 支持,用户少 
  • Nginx:大量用户 
• 服务发现 
  • Flask 推送,SSH,不可靠,不安全 
  • Ansible 推送,SSH,不可靠,不安全 
  • event bus + guardro-template

日志

• ELK (Elasticsearch + Logstash + Kibana) 
  • 延时较高(分钟级) 
  • 只支持格式化后的日志(for machine) 
• 用户诉求 
  • 低延时(秒级),准实时 
  • 裸日志(for real person) 
  • 备份日志(Apache Flume)

现状与展望

现状

• 处于活跃开发状态 
• 接入了几十个业务 
• 主要业务类型:服务型,RPC,Worker 
• 服务型业务 QPS 大于 10 万 
• 4 个数据中心

展望

• 支持短任务 
• Quota 和计费 
• Web Console 
• 内置典型服务(如:Tomcat)数据统计 
• Docker 持久化卷和跨主机通信 
• 支持更多类型服务:Cache, DB, MQ 等

8-蘑菇街基于Docker的私有云实践

做私有云的原因

1、越来越多的机器,集群管理,基础平台的建设
2、提高资源的利用率
3、服务化,平台化,可视化
4、提升发布和部署的效率
5、实现业务的弹性,水平扩展

Docker的优势

1、轻量,秒级的启动速度
2、简单,易用,活跃的社区
3、标准统一的打包/部署/运行方案
4、镜像支持增量分发,易于部署
5、易于构建,良好的REST API,也很适合自动化测试和持续集成
6、性能,尤其是内存和IO的开销

简单易用

docker run -d 
 --net=none 
 --name=$name 
 -h $name 
 -v /var -v $tmpdir/resolv.conf:/etc/resolv.conf -v $tmpdir/hosts:/etc/
hosts 
 --cpuset="$cpuset" 
 -m ${mem}m 
 --privileged=true 
 $image

劣势

1、资源调度/集群管理还在春秋战国时期
2、隔离性-仅用cgroup/namespace够吗
3、网络/存储支持完善吗
4、不支持热迁移-CRIU
5、各种坑

Docker@蘑菇街

1、2014年圣诞节期间上线,OpenStack IceHouse + Docker1.3.2。经历过5次+大促,包括双11/双12,线上运行稳定。
2、Machine Container或“胖容器”,用supervisord管理容器中的多进程。
3、每个机房一个OpenStack集群,一个Docker Registry。每个集群可以同时管理KVM,Docker。
4、支持OpenvSwitch VLAN和Linux Bridge两种网络模式,不用Docker原生的NAT网络模式,other_args="--bridge=none"。
5、自研了基于OpenStack的PaaS平台,虚拟化交付系统,虚拟化管理控制台。

为什么都把Docker当成虚拟机

185895736196184.png

538816736196189.png

 只有Docker是不够的

809636736196138.png

 集群管理

468656736196185.png

 逻辑架构图

204886736196131.png

650127736196140.png

 nova-docker

• spawn: create -> start -> post_start docker 
• 容器启动前做的事情:
  • 根据ip段的规则来生成容器的hostname
  • 动态添加ip:hostname映射到/etc/hosts
  • 启动docker实例时指定CPU set/weight 
  • 自定义需要mount的folder/file volume 
  • 扩展OpenStack API,通过cgroup限制磁盘IO和网络IO 
  • 和Linux bridge/Openvswitch对接网络
  • 实现快照方式的冷迁移
https://github.com/openstack/nova-docker/

监控

和已有监控系统的深度集成
实时监控和阈值报警:节点存活性/语义监控,关键进程,内核日志,实时pid数量,网络连接跟踪数,容器oom报警
阈值报警:短信报警,IM报警等多种形式
健康检查:部署环境/配置的一致性检查
container-tools:
  参考内核算法实现容器内load值的计算
  替换了uptime,top,free,df,类似docker stats。

223857736196124.png

 Container-tools

• mount /cgroup 到容器内
• 容器启动时用docker exec创建一个文件记录每个容器使用的cpuset,实例uuid等信息
• 修改uptime,top,free,df,tsar等源码,读取 /cgroup下的cpu/memory/IO值信息
• 曾经尝试过lxcfs,但问题很多,限制也很多。

356087736196195.png

 实时监控和报警

446318736196111.png

 网络

• NAT-20% performance lost 
• Host mode? No network isolation
• Linux bridge without iptables 
• OVS VLAN without iptables 
• other_args="—bridge=none"

容灾

• 离线恢复docker容器中的数据的能力
• Docker实例跨物理机的冷迁移:docker commit,docker push。
• 动态的CPUٖ内存扩容:cgroup。
• 网络IO/磁盘IO的限速: cgroup/tc。
http://mogu.io/127-127

PaaS

191348736196119.png

 • 目标
  • 快速的系统构建
  • 业务的平滑部署升级
  • 自动的运维管理
• 自研的轻量PaaS,实现编排能力
• 支持基于容器的持续集成:Jenkins+Docker,从编译到构建全自动化
• 概念
  • App:一个应用包含一个或多个Stack 
  • Stack:相同的Docker实例,一个Stack中的不同实例尽量部署在不同的物理机上

910968736196174.png

 Docker Registry

140988736196130.png

 基于Docker的持续集成

721619736196171.png

 

基于PaaS的业务平台

706439736196179.png

 遇到的坑

• devicemapper中thin-provisioning的discard功能引起的kernel crash

256459736196146.png

DOCKER_STORAGE_OPTIONS="--storage-opt dm.mountopt=nodiscard --storage-opt dm.blkdiscard=false" 
http://mogu.io/docker_crash-79

隔离
• 物理机上无法执行命令操作。“bash: fork: Cannot allocate memory” 
• 容器内如果创建大量的进程,并且不回收,是会导致系统内核的pid_max达到上限
• ٖ内核中的pid_max(/proc/sys/kernel/pid_max)是全局共享的
• Process Number Controller: 
  • 仅最新的4.3-rc1支持,pid-max per containers̶
  • https://www.kernel.org/doc/Documentation/cgroups/pids.txt

• 容器内的内存值计算不准确,比实际低一个量级
• /cgroup/memory/docker/id/memory.usage_in_bytes

Docker目前的局限

• 系统/内核层面的隔离性
• 缺乏成熟的集群管理(K8S/Swarm/Mesos)
• 业务无感知的升级,Docker daemon live upgrade

未来的畅想

• PaaS + App Container + CI/CD
• Kubernetes/Swarm/Mesos
• 更高效更便捷的运维
• 统一的部署方式,弹性的资源交付
• 公有云平台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/857451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神码ai伪原创文章生成器软件【php源码】

大家好,本文将围绕python二级用哪个版本的软件展开说明,二级python 值不值得考是一个很多人都想弄明白的事情,想搞清楚python二级用什么软件需要先了解以下几个事情。 火车头采集ai伪原创插件截图: 问题一:安装python…

小红书攻略:爆款引流,如何在激烈竞争中脱颖而出?

小红书(RED)作为国内最具影响力的社交电商平台之一,是很多品牌运营者的首选之一。然而,在小红书的激烈竞争中,如何快速引流、吸引关注,成为了品牌运营者面临的挑战。本篇文章一秒推小编将为您介绍小红书运营…

【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统

👨‍💻博主主页:小尘要自信 在现代的软件开发中,微服务架构已经成为了一个热门的话题。微服务架构的一个关键组成部分就是服务发现。而在服务发现领域,Eureka无疑是一个备受推崇的解决方案。本篇博客将为您介绍什么是E…

MATLAB|信号处理的Simulink搭建与研究

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

[保研/考研机试] KY235 进制转换2 清华大学复试上机题 C++实现

题目链接&#xff1a; KY235 进制转换2 https://www.nowcoder.com/questionTerminal/ae4b3c4a968745618d65b866002bbd32 描述 将M进制的数X转换为N进制的数输出。 输入描述&#xff1a; 输入的第一行包括两个整数&#xff1a;M和N(2<M,N<36)。 下面的一行输入一个数…

【分布式技术专题】「数据一致性体系」带你一同建立采用消息队列实现的数据一致性框架技术体系方案

带你一同建立采用消息队列实现的数据一致性框架技术体系方案 分布式服务数据一致性问题采用分布式事务3PC模式3PC模式阶段分析 采用分布式锁采用数据同步机制采用数据分片机制针对常规方案所具有的问题预发送消息阶段切换为可发送状态定时补偿更新为可发送状态定时补偿发送数据…

免费ai写作生成器帮你释放创作天赋

喂&#xff01;听说你想提升写作功力&#xff1f;那么恭喜你&#xff0c;现在流行的ai写作软件将成为你提升写作效率的秘密武器。这是一款革命性的应用&#xff0c;就像你的个人写作导师&#xff0c;会帮助你通过简单的几步&#xff0c;创造出令人瞠目结舌的文字作品&#xff0…

QPainter - 使用一个时钟项目从头开始看QPainter

文章目录 QPainter - 使用一个时钟项目从头开始看QPainter绘制的原理绘制时分秒指针绘制背景绘制刻度线完整代码 QPainter - 使用一个时钟项目从头开始看QPainter 之前一直在说绘制&#xff0c;但是没有从头详细的去了解绘制这块的写法&#xff0c;因此我们来使用一个时钟的项…

3.正则表达式

3.1什么是正则表达式 ●正则表达式( Regular Expression) 是用于匹配字符串中字符组合的模式。在JavaScript中&#xff0c; 正则表达式也是对象 ●通常用来查找、替换那些符合正则表达式的文本&#xff0c;许多语言都支持正则表达式 ●正则表达式在JavaScript中的使用场景: ➢…

平板触控笔买哪种好?便宜又好用的电容笔推荐

或许很多人会觉得&#xff0c;苹果原装的电容笔性能强悍&#xff0c;是无可替代的&#xff0c;但我觉得&#xff0c;还是要看我们的预算。苹果Pencil对绘画要求不高的用户来说&#xff0c;价格太高了&#xff0c;如果我们只是用来写东西的话&#xff0c;我们甚至可以选择平替电…

Windows MYSQL社区版8.1下载安装(MSI)

一、下载 官网链接&#xff08;MySQL :: Download MySQL Community Server&#xff09; 选择版本&#xff1a; 直接下载&#xff1a; 二、安装配置 双击下载好的mysql-8.1.0-winx64.msi&#xff1b;打开安装向导&#xff1b;进入安装页面后选择Custom自定义安装&#xff0c;点…

清除浮动(clearfix)是什么,如何实现?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 清除浮动是什么&#xff1f;⭐ 清除浮动的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些…

【C++】职工管理系统

1.需求分析以及案例展示 2.创建项目 3.创建管理类 4.菜单功能 5.退出功能 6.创建职工类 #pragma once #include <iostream> #include <string> using namespace std;//职工抽象基类 class Worker { public://显示个人信息virtual void showInfo() 0;//获取岗位名称…

揭秘浏览器键入URI到页面显示的过程: 浏览器键入URI,到页面显示,中间发生什么?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

差分升级在物联网水表上的实现与应用(学习)

摘要 当越来越多的物联网水表加入抄表系统后&#xff0c;实现了水表数据的信息化&#xff0c;并且当水表终端需要技术更新时&#xff0c;通过网络方式来升级产品可以高效修复设备面临的问题&#xff0c;减少用户损失&#xff0c;降低维护成本&#xff0c;但同时也对有限的网络…

IDEA 设置字体大小无效

设置字体大小&#xff0c;一般都是从file>settings>editor>font>Size里设置&#xff0c;一般都有效。 但是&#xff0c;如果是更换了主体&#xff0c;则需要从主体颜色菜单那里这是&#xff0c;你看这个页面&#xff0c;上面黄色三角也提示你了&#xff0c;要去颜色…

这所211热度很高!连续3年分数上涨!

一、学校及专业介绍 中国地质大学&#xff08;武汉&#xff09;&#xff08;China University of Geosciences, Wuhan&#xff09;&#xff0c;简称地大。位于武汉市&#xff0c;是中华人民共和国教育部直属的全国重点大学&#xff0c;由教育部和湖北省人民政府共建&#xff0…

告别if else!试试这款轻量级流程引擎吧,跟SpringBoot绝配!

之前同事用了一款轻量级的规则引擎脚本AviatorScript&#xff0c;我也跟着用了起来&#xff0c;真的挺香&#xff0c;能少写很多代码。这期就给大家介绍一下这款规则引擎。 简介 AviatorScript是一门高性能、轻量级寄宿于 JVM &#xff08;包括 Android 平台&#xff09;之上的…

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver的解决办法

springcloudAlibaba项目连接mysql时&#xff08;mysql版本8.0.31&#xff0c;Springboot2.2.2,spring cloud Hoxton.SR1,spring cloud alibaba 2.1.0.RELEASE&#xff09;&#xff0c;驱动名称报红&#xff0c;配置如下&#xff1a; 原因&#xff1a;引入的jdbc驱动包和使用的m…

uniapp实现自定义上传图片

目录 1、布局样式2、使用uniappAPI&#xff08;uni.chooseImage&#xff09;3、解决bug和添加功能3.1 bug13.2 bug23.3 bug33.4 点击图片进行预览3.5 删除图片 4、云函数上传到云存储 1、布局样式 在正式自定义上传前我们先将静态页面搭建好。 样式代码&#xff1a; <temp…