升龙系统介绍

升龙是yygame的程序集成运行环境,目前仅支持Java。一般来说,用户上线一个Java服务,典型的架构如下:

rise8

Java容器包括Resin、Tomcat等,一般是线程机制,不适合处理慢客户端,因此在前端用Nginx反代。Java应用后端的数据源一般包括Mysql、Redis等。

我们的应用很多,如果每个小应用上线,都需要准备Nginx服务器、Java服务器、Mysql服务器、Redis服务器,并且数量乘以2(高可用),那么服务器成本是较大压力。而如果每个应用,都要程序员/运维去手工部署,包括发布、变更、维护,那么对人力成本造成较大压力。

鉴于此,yygame研发了升龙系统,是一个综合部署、运行、运维平台。目前这边的所有项目,都基本运行在升龙上。下面简单介绍该系统。

用户如果发布一个项目,典型的过程如下:

  • 决定项目名,比如yyshow
  • 决定项目分几个模块,比如web模块(web)、后台管理模块(admin)
  • 申请服务器,包括web服务器、数据源服务器
  • 申请域名
  • 开发、测试、打包、发布

这些流程在升龙里也是如此执行。首先用户在升龙里申请一个项目,以及项目的服务器。然后,用户在项目配置里,创建需要的数据源(mysql、redis、rabbitmq),以及配置模块。每个模块都有自己的域名,以及运行服务器。配置好模块后,用户使用rise mvn(升龙提供的一个客户端)打包上传项目文件,然后就可以在升龙里执行部署了。

用户的项目申请,由运维在升龙后台进行审批,以及分配项目服务器。审批过后,用户就可以对项目进行配置,包括数据源和模块的配置。

我们看下这个测试项目的配置:

111

在测试项目“辉腾”里,分配了2个服务器(主机名和IP地址可见)。用户创建了3个数据源(1个mysql、1个redis、1个rabbitmq),配置了2个模块(前台、后台)。

这里还有个数据源密钥,是自动生成的。因为所有的数据源连接参数,在服务器上是加密存储的,需要这个密钥来解密。密钥放在Leopard开发框架的配置文件里,会自动使用上。Leopard是yygame的集成开发框架,封装了许多公司自己的服务接口。

升龙目前支持Mysql、Redis、RabbitMQ三种数据源。在载体上,采取类似于container的技术,基于实例进行分配,从而节省服务器成本。架构上,都采用HA配置。在创建一个数据源的同时,后端自动做好同步配置。例如Mysql的主从(升龙环境是主主)、Redis的主从、以及RabbitMQ的cluster。创建数据源后,返回一套连接参数,发布时以加密文本的形式存储在固定位置,用户的程序读取这些连接参数,从而访问到数据源。

再看某个具体模块的配置:

rise2

这里主要是配置域名、设置运行服务器。域名是自动解析的,解析到电信、联通双线IP。运行服务器从分配给项目的可用服务器池里选择。一般来说,我们有DS、VM两种类型服务器。DS是独立服务器,VM是虚拟服务器。它们在部署时的架构稍有不同。

(1)独立服务器部署架构

rise9

每个独立服务器都运行Nginx和Java容器,每个Nginx同时反代到所有Java,域名解析到所有DS服务器的IP。这种部署保证了热发布,在一个Java应用升级时,不中断业务。

(2)虚拟服务器部署架构

rise10

这种架构与上一种的区别在于Java容器使用外部App_router,一般是多个业务模块共用一个App_router。App_router本质是Nginx实现的反向代理。同理,这种部署也支持热发布。

考虑到服务器成本,一般项目我们都要求部署在VM架构上。而实际上,对于访问量不大的业务,2个VM做HA部署,比一个独立服务器部署,稳定性还要高些。目前我们使用了数量众多的VM,对比之下节省了数百万成本。

配置里最后要注意的是项目代号和模块代号,需跟SVN里的对应起来。升龙是根据这2个代号,跟发布包关联起来的。也就是说,程序打包时,运行rise mvn上传的文件,可以被升龙识别到。

配置了项目和模块、上传了程序版本,就可以执行部署了。如下是部署界面:

rise3

这里就是一键部署,点“开始部署”按钮就行。部署过程中有详细的交互执行消息输出。

部署完成后,开发人员需要对业务运行状况,包括服务器、数据源状态进行检查。而按照公司策略,开发人员不能直接接触生产机和数据库。因此升龙系统提供了一定能力,让他们可以在线对服务器进行维护管理。

维护界面截图:

rise4

这里的服务状态是实时监控结果。绿色表示正常,如果服务宕机,则是红色的。右边操作栏的“执行命令”按钮,可以对服务器进行维护操作,执行若干Linux命令,也可以对数据源进行查询与管理。

例如,可执行的命令包括查询Nginx访问日志:

rise5

查询Mysql:

rise6

还有其他一些系统管理命令,如uptime, free, top, netstat, iostat, vmstat, dstat等。大多数情形下开发人员使用这些命令,能有效的对系统和业务运行状况进行分析。如果有进一步需求,可以点升龙系统右上角的Ticket按钮,提交一个Ticket,运维收到后会配合进行处理。

升龙基本情况就介绍到此。使用升龙后,用户不用理会服务器配置、数据源配置、Java/Nginx设置、HA设置等。开发人员只需打包上传程序,然后执行发布。开发人员无需也不能接触生产机和数据库,甚至不知道数据库的连接密码,在一定程度上保证了安全性。

总体上,升龙解决的问题包括:

  • 一键发布程序,支持热发布、灰度发布
  • 开发和部署分离,增强安全性
  • 保证业务的高可用架构
  • 创建和管理数据源
  • 业务运行状态分析
  • 服务状态实时监控
此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。

升龙系统介绍》有2条回应

  1. cyrus说:

    在应用部署上可以节省大量人力物力,而且整体稳定性还有提高,真是赞不绝口的项目

评论已关闭。