【.com原创文章】新浪微博在2015春晚通过Docker实现了私有云平台的弹性调度能力。随着公有云技术的成熟,我们发现原来的私有云更难了。可以相对容易解决,比如突发峰值情况下的弹性资源成本,小企业快速试错等场景。2016年,微博完成了使用Docker构建混合云架构。本文将分享一些在安全、网络、资源管理、调度管理、跨云服务发现等方面的实践经验。新浪微博庞大的数据背后,是不断的技术挑战。微博数据量在国内社交媒体中名列前茅。如下图所示:百亿级PV、千亿级数据、10000多台服务器、数百个服务模块、1000多个Docker混合云集群等等,这些庞大的数据背后是不断的技术挑战。如此庞大的业务体系下,业务流量有一个明显的特点:每年春晚当天的流量都会达到当年的高峰,导致机架空间不足,库存服务器上千台,因此采购成本大,周期长,为了一个晚上的流量高峰跑了三个月。白百何出轨、李晨范冰冰在一起等热点事件,来得突然、出乎意料、措手不及,瞬间达到极致,互动周期短。.传统的业务拓展流程非常繁琐,整个过程要经历项目审核、设备申请、录入CMDB、安装上架、初始化、业务部署、报修、下架等流程。如何在十分钟内完成1000个节点的扩容那么,如何才能快速流畅的应对各种流量高峰呢?第一个解决方案是如何在十分钟内完成1000个节点的扩容。下图显示了极端峰值问题的解决方案。基于混合云的弹性调度和扩展特性,可以在成本业务快速迭代的情况下实现弹性快速的扩缩容。选择混合云是因为其安全性、可扩展性和相对较低的成本。还有Docker、Mesos等新的容器技术,使得大规模的动态调度成为可能。新浪微博DCPDocker的设计与实现在说DCP之前,我们先了解一下Docker。微博业务部署涉及Java、PHP等不同语言,存在环境差异,如依赖OS、JDK、Nginx等运行环境,以及依赖脚本、基础环境配置(启动脚本、定时任务)、目录结构等。一旦数据量来了,就必须统一部署,导致不同环境、不同语言下的整体运维和研发效率非常低。这是决定做Docker的主要原因。微博DCP技术架构的演进始于2014年,新浪微博做了单机容器化和线上Docker集群。2015年,基于Docker的思想,我们做了弹性调度、服务发现和私有云建设。2016年开始部署混合云。目前,他致力于混合云和机器学习支持。同时,混合云DCP技术开源OpenDCP:https://github.com/weibocom/opendcp。混合云DCP技术架构如下图DCP架构所示:DCP架构底层私有云基于OpenStack,公有云与阿里云合作。整个架构从上到下分为三层:编排、调度、宿主。当流量来的时候,宿主层通过私有云和公有云SDK创建宿主,然后进行初始化,达到快速上线的目的。初始化主要是运维环境和Docker环境的安装。初始化完成后,编程即可运行Docker环境。经过容器调度和服务编排后,流量会由服务发现模块自动引入上线。当然,整个大系统还是需要依赖基础设施,比如镜像中心、监控中心、容量评估等。混合云DCP技术栈如下图所示,为混合云DCP技术栈。Docker为什么要使用Host模式?因为微博的高并发,在开始验证的时候性能消耗非常大,所以选择了Host。混合云DCP的核心设计思想什么是共享池?意味着在私有云中,不同的业务方在不同的时间会有不同的资源利用率,资源利用率低。使用利用率高的服务池。DCP大规模集群扩容方式有私有云弹性扩容、公有云弹性扩容、两者弹性扩容。混合云DCP设计的核心思想是如何解决设备从哪里来的问题,如何在设备到位的情况下进行集成扩容,快速应对高峰流量。具体设备方案如下图:具体设备方案为内网共享池+公有云=BufferPool。下图是DCP资源共享的一个例子。混合云DCP扩容流程如下图所示,是整个混合云DCP扩容流程。混合云DCP整个扩容过程分为主机申请、初始化、动态调度、服务发现、下线五个步骤。综上所述,这就是混合云DCP的整个实践过程。下面将主要分享十分钟内1000个节点扩容带来的问题,主要涉及基础设施和弹性调度两个方面。微博DCP的基础设施统一资源管理如下图所示,为微博统一资源管理图。基础设施部分不仅包括内网集群、ECS集群、SLB等物理资源,还包括新建IDC资源时所依赖的yum源、镜像仓库、DNSServer等。它们都被归类为Docker层以下的基础设施。单机部署方案如下图所示,单机部署采用镜像。使用Docker统一部署,将所有代码、运维组件、监控组件等封装到容器中。这样就打通了差异化,Openstack和阿里云的机器都可以直接使用。这里遇到一个比较大的问题就是镜像仓库。假设一个镜像是1G,如果十分钟内扩容1000个单位,就意味着需要从镜像中拉取1000G。但是任何分布式存储或者镜像仓库都不能满足。微博通过镜像分层服务和优化带宽来应对。图像分层服务对图像进行分层并逐层重复使用。底层部分放入不会变化的镜像,比如阿里云、Openstack的操作系统、JDK、Tomcat镜像。这样做会大大加快环境的搭建速度,剩下的可变代码和配置部分只有300兆左右。根据DockerRegistry多次大规模扩容的经验,镜像分层后仓库仍然无法支撑,带宽是瓶颈。因此搭建了一个私有的RegistryHub,在内网和阿里云分别搭建了镜像缓存Mirror。比如阿里云用户扩容时,DockerClient可以直接拉取镜像,不需要经过内网IDC。同时,内网和阿里云的镜像缓存Mirror都支持分布式存储。下图是DockerRegistry部署架构:通过这样的架构流程,可以拉取300兆镜像,1-2分钟拉取500台服务器。SLB在DCP中的应用是在混合云中。经过实践经验,我们选择使用SLB进行负载均衡。如上图所示,是通过SLB进行负载均衡的过程,红包飞业务是通过SLB进行负载均衡。DNS智能解析如上图所示,是DNS智能解析的流程图。阿里云的所有域名解析都在阿里云上完成,不会传输到内网。这样,域名解析的性能就会提高。专线网络架构如上图所示,通过路由配置分散两条专线的压力,可以随时切换。还有一个VPN作为备份和不同业务的网段,方便监控专线带宽的使用情况。DCP弹性扩容第一步:主机申请镜像仓库、SLB、基础网络完成后,就可以进行主机申请了。步骤如下:先在内网私有云上申请,共享池(离线集群、低负载集群、错峰)不足再申请阿里云。第二步:申请初始化主机后,对其进行初始化。具体操作如下图所示:初始化的两个主要任务是运维环境的安装和Docker环境的安装。在初始化过程中,阿里云配置管理选择了Ansible,因为Ansible的并发性能较差,初始化过程需要几分钟。但是实际情况不允许,所以针对这个问题,我们优化了异步排队,高并发下水平扩展,分布式改造。微博DCP灵活调度应用宿主,初始化后,一批批Docker资源进入Docker调度池,接下来就是调度容器了。弹性调度是混合云DCP整个扩容过程中的第三步,是重中之重。新浪微博的诉求是服务池的动态跨池伸缩、容量评估、多机部署等,因此资源调度框架架构的设计目标是实现内网计算资源的快速迭代、统一管理和分配,获取公有云上的计算资源。资源,快速自动化的资源调度和应用部署。灵活调度架构的选择业界很多会议都在讨论Swarm、Mosos、K8s这三种灵活调度架构。综合考虑资源利用率和业务压力指标:初期,为了快速上手和响应应用,新浪微博选择了Docker原生的Swarm。中期阶段,随着业务的发展,Swarm调度性能、高可用、调度算法性能不足,需要进行一系列的改造才能满足当前的需求。也选择了使用Mesos进行非容器管理。后期因为Swarm的源代码改动太多,所以被废弃了。之后底层选择了OpenStack,在容器调度方面使用新浪自研的Dispatch进行任务调度。任务调度框架DispatchDispatch调度框架的主要特点是使用任务模板。主要是容器启动后,并不是简单的上线,而是需要先预热,一步步安排好整个容器再上线。具体的编程过程如下图所示:为每台机器部署一个agant。启动后进行容器编排,进行预热、健康检查、服务发现流量、引入等步骤。同时向主流程上报,在上报过程中严格分批,按照不同的理念执行。弹性扩容流程回顾整个弹性扩容流程,如下图所示:向混合云平台发出请求,进行资源评估。私有云资源不足,申请公有云。然后初始化,做容器调度,部署服务,最后注册服务。整个服务应在10分钟内完成。微博DCP的服务发现完成申请、初始化、调度后,进入第四步服务发现。这里需要做的是寻找新的扩展节点,做好流量迁移。如何快速安全地将流量切换到弹性节点?如下图所示:微博有十几个严格的服务池,这些服务池按照复杂的规则进行划分。这涉及到很多服务器的流量调动,所以需要一个服务发现系统来支持。面对reload丢失的问题,大多数开源方案都是使用Nginx的reload机制。但是从请求量来说,正常的Reload会导致吞吐量下降10%。微博的解决方案是nginx-upsync-module,如下图所示:Docker启动时,支持基于Consul的自动服务发现。同时Core-module模块会自动从配置中心拉取Docker节点进行平滑重载。这样可以减少扩容时的性能波动。为什么新浪微博要用OpenDCP?目前,一些初创公司很难使用Docker。现在和未来,微博将开源整个DCP技术体系。由于微博业务的特殊性,压力很大,流量成倍增长。如果需要在短时间内扩展到非常大的规模,就会带来很多技术问题或困难需要处理。开源希望可以把这些经验输出出去,让更多的人学习。OpenDCP地址:https://github.com/weibocom/opendcp,欢迎大家在这里一起搭建。以上内容由王雪艳小编根据符文老师在WOTA2017“容器技术实践”环节的演讲内容整理而成。新浪微博技术专家,微博混合云DCP项目技术负责人付文,利用公有云弹性计算资源平台应对爆发式峰值流量,基于容器云实现分钟级千级机器创建和服务部署Docker、Swarm等技术系统自动化运维系统。参与微博混合云、Feed混合云多机房部署改造、微博春晚安全工作、Feed性能优化、HBase改造等重量级架构改造项目,跟踪高可用架构、混合云平台建设、多机房部署、应用性能与分析、业务技术支持等方面都有深入研究。【原创稿件,合作网站转载请注明原作者和出处为.com】
