微博 Docker 化混合云平台大剖析

简介:

8亿用户、单日活跃人数超过1亿人、每日超过600亿次的API调度、超过1兆次远端程序呼叫,甚至连Log记录档每天都爆增100TB,这是新浪微博平台维运架构师王关胜所面对的挑战,他得设计出一个有能力胜任这些考验的微博系统的新一代架构,而且高层给他的要求是,系统反应时间不得超过50ms。

王关胜表示,微博如此大规模的业务,除了面临系统快速更新的任务,各种不同系统元件间的依赖关系也相当复杂。而当国际事件、名人丑闻等高关注度的议题发生时,经常导致微博的业务量遽增,使得系统流量达到顶峰。

尤其遇到大型节日或活动时,如元旦、春晚、圣诞节还有红包飞等大型活动,同样也会为微博带来巨大的流量挑战。王关胜表示,位于三节的日子,微博的系统流量,会在3个小时内冲上顶峰,而红包飞则是带来瞬间的峰值流量,在两个小时内就达到最高点。过去面对此样的峰值事件,微博需要调度大量硬体设备。而如此做法,除了成本高外,系统在进行水平扩充时,也必须耗费更多的时间。

过长的前置作业时间为微博带来营运痛点

而繁琐扩充流程所花费的时间,为微博带来了营运痛点。过去当峰值事件出现时,首先,维运团队必须申请实体机器,将其登入组态管理资料库(CMDB),在机房安装妥当后,交予第一线作业人员进行初始化,并开始进行部署作业,如环境部署、监控部署、服务部署及流量导入等流程。

王关胜表示,过去的水平扩充的方法,也可能因为各个服务间的系统环境差异,无法充分使用硬体资源,即使有多余的伺服器也无法灵活调度。然而,在设备充足的状况下,完成正常的设备申请程序也必须花上一天,甚至可能碰上没有足够设备的状况,使得系统进行水平扩充花上更多时间。

另外,微博也有许多使用率不高、閒置在各丛集跟服务池的实体基础设施,而微博过去在应付红包飞、三节爆增流量的作法,会预先在各个业务的伺服器丛集,準备多余硬体设备,用来因应峰值突发的事件。而预先準备多余设备,则包含采购周期过长、机房空间不足所带来的高营运成本外等缺点。

而设备申请时间周期长、使用率不高的閒置设备,则对新浪微博带来庞大的成本压力。而因为面临这些挑战、痛点,「我们要建构有弹性的混合云系统。」王关胜表示,微博的新做法是,导入公有云并结合过去的私有云,集结各业务丛集多余的运算设施,构建混合云的系统架构。

他表示,混合云架构除了妥善集成内部硬体资源,解决内部的弹型需求外,当系统面临流量剧增的峰值事件,亦可以将过多的流量引导至外部公有云,减轻内部系统的压力。

王关胜分析了采用混合云作法的好处,他表示,内部私有云具备安全性高、掌握度高的特性,也可以因应内部需求,对硬体配置进行优化,适合处理固定的工作负载。而公有云的设备则具有标準化、自动化的特性,可以快速因应临时需求,在爆增流量的状况下,让企业具备水平扩充工作负载的能力。企业也可以利用公有云按照使用流量的付费机制,减低固定的营运成本,而采用混合云架构,可以兼具私有云以及公有云的优点,「可以同时拥有安全性与弹性扩充能力」,使系统工作负载可以在丛集间进行迁移,让低负载的丛集配置较少的设备,反之,负载高的丛集则必须準备足够的设备。而将Docker导入混合云的架构,也使微博服务稳定度高上许多。

透过三大关键,实现Docker混合云

微博混合云系统不单只是一般的混合云,而是导入了Docker,透过Docker Container快速部署的特性,解决爆量事件对微博系统带来的压力。过去企业在面对爆量事件,一般采取的作法是,首先评估需要多少额外设备,并向外部公有云申请机器分摊流量。然而,除了可能低估应付爆量所需的设备外,即使事先準备了足够的VM,其部署时间成本也远高于Docker,无法即时帮助企业分摊过多外部请求。

而王关胜表示,微博Docker Container平台的混合云核心设计思想,主要是借镜银行的运作机制。他表示,民众可以把钱存在银行,而需要使用金钱的时候,只需要提领一部分,剩余的存款银行可以拿去进行投资。而微博则借镜银行的这一套运作模式,在内部设立一个硬体资源共享池外,还导入了外部公有云。

而要微博实现高弹性调度资源的混合云架构,其中实现的关键则是Docker。王关胜表示,刚开始他们思考该要使用裸机还是VM架构,作为Docker Container的基础设施。后来,考量如果要采用VM,内部机房架构要进行许多改造。所以,目前微博的内部私有云使用裸机部署,而外部公有云则采用阿里云弹性计算服务(ECS)的VM架构。

王关胜也揭露微博构成Docker Container平台基础架构的3大关键,包含Docker在裸机上的部署架构、自主开发的Docker Registry以及网页伺服器Nginx Upsync模块。

第一是Docker Container的裸机部署方案,透过IP位址以及Port定义一个唯一的Container服务,而每台伺服器上则可以开启多个Container,各个具有不同的功能。

例如,每一个Container服务所产生的行为日志,会经由一个名为Scribe的Container集中收集。而集中后的数据则可进行用户行为分析。

此外,如果要进行Container的运作监控,则是透过建立Cadvisor Container,将Container运行产生的资料,传送至Elasticsearch、Logstash及Kibana这3种开源监控软体,进行分析。或是,搭配开源测量工具Graphite,监控系统的运作状况。

第二则是Docker Registry,王关胜表示,微博使用Docker官方提供的Docker Registry,构建了私有的映像档储存库Registry Hub,并且透过这个映像档储存库调度Docker Container需要的映像档。

在今年,微博开发出了第2版本的Registry Hub,将储存引擎改为使用分散式开源储存平台Ceph,并且在Docker Registry前端结合Nginx,实作负载平衡功能。王关胜表示,在升级过程中必须让系统能够兼容新旧版本的Registry Hub,而前端Nginx可以分析系统需求,辨別要从新版本或是旧版本映像档储存库下载映像档。

而外部公有云,微博则是透过映像档快取,不必像私有云一样,部署完整的映像档储存库。微博位于阿里云映像档快取架构,总共包含3层架构。包含最底层作業系统、中间层的运作环境如Java、Tomcat,及最上层的Container。而在调度Container时,透过使用dockerignore指令,减少不必要的文件、目录,借此减低映像档的容量。在映像档标签命名上,微博则禁止使用「Latest」做为映像档标签。王关胜表示,由于不同使用者对于标签的理解不一,可能会误以为是代表映像档最新的版本。

而第三则是微博开发的Nginx Upsync模块,王关胜表示,去年微博开始使用Container时,必须透过Container将Nginx掛载至前端,执行负载平衡的任务。而Nginx部署完成后,必须透过重启reload指令重启Nginx。王关胜发现,Nginx对于特別大的流量会发生运作不稳定的情形。所以微博也直接开发了Nginx Upsync模块,不需要透过reload指令重启,也可以保持系统稳定运作。而微博也针对两种模块进行比较,发现流量大时,未修改的Nginx模块会比Nginx Upsync模块多上10%的请求。

目前微博开发的Docker Container平台系统,主要包含4层架构:主机层、调度层及排程层,最上层则是包含应用程式的业务层。底层的混合云基础架构则架设了专线,打通微博内部资料中心以及阿里云。

image

当业务A多馀的运算资源导入溷合云共享池时,此时爆量的业务C,可从共享池调度业务A的运算资源,而度过峰值事件后,便可以把多馀的运算资源归还至共享池。

王关胜表示,目前微博的溷合云系统在今年10月完成,目前开启的Container数量约是3,000个。不过,王关胜表示,在今年的双11,微博也用此系统进行实地演练,也达成微博所设定每次水平扩充时间低于5分钟的目标。

本文转自d1net(转载)

相关文章
|
1月前
|
搜索推荐 测试技术 数据安全/隐私保护
【Docker项目实战】Docker环境下部署NeonLink书签平台
【2月更文挑战第17天】Docker环境下部署NeonLink书签平台
89 0
|
4月前
|
Kubernetes 监控 云计算
Docker与云计算平台集成:AWS、Azure、GCP完全指南
Docker和云计算平台的结合,如AWS(Amazon Web Services)、Azure(Microsoft Azure)和GCP(Google Cloud Platform),为现代应用的构建和部署提供了巨大的便利性。本文将深入研究如何与这些主要云计算平台集成Docker,提供更多示例代码和详细指南,帮助大家更全面地利用这些强大的工具。
|
5月前
|
Docker 容器
x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建
x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建
332 0
|
6月前
|
jenkins 持续交付 数据安全/隐私保护
企业实战(23)基于Docker平台的Jenkins凭据管理与应用(4)
企业实战(23)基于Docker平台的Jenkins凭据管理与应用(4)
|
6月前
|
Prometheus 监控 Cloud Native
【云原生】Docker容器命令监控+Prometheus监控平台
【云原生】Docker容器命令监控+Prometheus监控平台
208 0
【云原生】Docker容器命令监控+Prometheus监控平台
|
4月前
|
运维 Linux Docker
Docker多平台安装与配置指南
Docker的流行使得它成为开发者和运维人员不可或缺的工具。在本文中,将深入探讨如何在不同平台上安装和配置Docker,旨在为大家提供详尽的指南,确保他们能够顺利地使用这一强大的容器化工具。
|
6天前
|
测试技术 Linux 网络安全
【好玩的开源项目】使用Docker部署SyncTV视频同步和共享平台
【4月更文挑战第16天】使用Docker部署SyncTV视频同步和共享平台
43 1
|
14天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
21 0
|
17天前
|
测试技术 Linux 数据安全/隐私保护
【Docker项目实战】使用Docker部署PicoShare共享文件平台
【4月更文挑战第5天】使用Docker部署PicoShare共享文件平台
49 4
|
28天前
|
jenkins Java 持续交付
Docker搭建持续集成平台Jenkins最简教程
Jenkins 是一个广泛使用的开源持续集成工具,它能够自动化构建、测试和部署软件项目。在本文中,我们将使用 Docker 搭建一个基于 Jenkins 的持续集成平台。
113 2