新升龙系统背后的秘密

我在之前的博客里介绍过升龙系统,主要为我们的web类自动部署服务。当前它不止是一个部署系统,已成为一个高性能、高可用的弹性服务平台。在新升龙系统里,重点引进了动态部署、弹性扩展的能力,关于它们的功能和实现下面予以介绍。

(一)动态部署

在旧升龙里,用户的程序部署,需要做好2个事:

  • 运维事先分配服务器
  • 升龙里打包生成发布版本后,手工执行部署

在新升龙里,这2点都不需要了。在动态部署模式下,服务器是自动分配的。具体分配多少台,由2个参数决定:

  • 最小实例数
  • 是否autoscaling

这2个参数,在模块的调度规则里可配置,如图:

rise_conf1

最小实例数,决定本模块运行需要的最小服务器个数。autoscaling如果选上,那么服务在运行中,会根据配置的弹性规则,动态增加或减少服务器数量。比如,某个模块的最小实例是3个,在访问高峰期,服务器的Load、IO、网络都消耗比较大,那么在升龙调度下,实例可以自动扩展到6个。一旦高峰回落,实例又自动降回3个。

除了服务器自动分配外,用户在修改模块的配置后,无需去手工执行部署以使生效。新升龙系统会判断,后台是否需要执行部署。如果需要执行部署,系统会自动执行。如下是新升龙里关于模块的几个较重要配置参数。

1. 选择部署方式:

rise_conf2

部署方式有手工、动态、web专区动态三种模式。手工模式是兼容旧升龙的部署方式。动态模式是新升龙重点引进的功能,如本节介绍。web专区动态模式,是兼容公司的web专区部署。web专区在全国有几大核心机房,采用OSPF->LVS->Nginx的多层容灾架构,并使用GSLB全国范围内就近接入。

2. 选择主机类型:

rise_conf3

模块运行的服务器配置,用户可自行决定,并且可以随时切换。既支持不同型号的虚拟机(VM),又支持物理机(C2)。

3. 选择机房:

rise_conf4

用户的程序运行环境,可以在几个不同的机房之间选择。

4. 设置域名,选择待发布的版本,这个与旧升龙基本一致:

rise_conf5

用户在修改上述配置后,系统会自己决定是否需要部署。如果需要部署,系统会自动执行。用户如果对结果在意,可以去日志栏里查看详情。

(二)弹性扩展

如上节介绍,在模块的调度规则配置里,勾上autoscaling,那么本模块对应的服务在运行时,会根据预先配置的弹性伸缩规则,对服务器的数量进行动态增减。

弹性扩展有几方面好处:

  • 高性能:在业务访问规模上去时,服务器自动增加,保证性能
  • 经济性:在业务规模降低时,自动收缩服务器,节省成本
  • 高可用:如果有服务器宕机,自动进行故障隔离
  • 平滑部署:实现热部署,不影响现有业务运行

弹性扩展示意图:

rise_conf6

(三)背后的秘密

支持新升龙动态部署、弹性扩展背后的技术秘密,是引进了资源池、CloudRouter这两个关键组件。

1. 资源池

资源池是基于预创建的可用资源的缓冲池。当前我们资源池支持VM、Cloud Mysql、Cloud Redis的自动管理。对每种型号的资源,在池里预先维持一定的可用数量。一旦服务需要新资源,可立刻从池里获取。对VM的管理是基于OpenstackCloud Mysql、Cloud Redis是我们自己开发的云产品。

2. CloudRouter

CloudRouter是资源的调度器。它在用户的任务、与资源的分配之间,起到核心的协调作用。它的能力包括:

  • 资源统一管理
  • 动态伸缩
  • 高可用
  • 热部署
  • 跨机房部署
  • 故障隔离
  • 跨机房灾备

CloudRouter的引入是新升龙功能得以实现的关键组件。

CloudRouter示意图:

rise_conf8

新升龙还引入了其他的实用功能,比如插件平台(类似于Heroku的Addons系统)、自定义监控、QA平台整合等。对用户的项目而言,本文谈及的两大核心功能:动态部署、弹性扩展,无疑会真正改善程序的运行环境,提升项目运行质量。感谢开发、运维、测试的每一位童鞋,精益求精是我们一贯追求的目标。也祝愿新升龙越来越好的服务咱们的用户!

此条目发表在Common分类目录,贴了标签。将固定链接加入收藏夹。