升龙开发平台介绍
升龙开发平台是项目的集成运行环境,目前仅支持java项目,用户上线一个java项目。典型的架构如下
Java容器包括Resin、Tomcat等,为了高可用负载均衡需nginx做反代。Java应用后端的数据源一般包括Mysql、Redis等。
我们的应用很多,如果每个应用上线,都需要准备Nginx服务器、Java服务器、Mysql服务器、Redis服务器,并且数量乘以2(高可用),那么服务器成本是较大压力。而如果每个应用,都要程序员/运维去手工部署,包括发布、变更、维护,那么对人力成本造成较大压力。
鉴于此,我们研发了升龙开发平台,是一个集项目管理、代码托管、打包、部署、监控的Pass平台。目前这边的所有java项目,都基本运行在升龙上。升龙主要包括如下功能
1:项目管理
2:代码托管
3一键打包
4:一键部署
5:热发布 (发布新版本不中断服务)
6:一键更换配置 (更换模块域名、机房、服务器硬件配置、jdk配置、nginx配置等)
7:多机房选择
7:故障隔离 ( 自动替换有问题的服务器)
8:弹性调度 (会根据服务器的负载情况动态增加服务器和减少服务器)
9:自定义调度规则
10:自定义监控、监控告警、监控数据图表展示
内部概念说明 这里先说一个对我们系统来说非常重要的几个概念: 持续部署平台的角色有:人, 项目,模块 人即项目管理员,一个人可以管理多个项目,一个项目也可能是多个人管理。 项目对应的是一个业务,一个业务又分多个模块,每个模块就是一个独立的部署单元;模块一般是按功能进行划分,比如最常见,一个项目由 admin 模块,user 模块。我们的部署系统的部署操作最小单元是项目的模块。
下面对上面提到的几个功能看看我们的系统截图
创建项目
项目管理
一键打包
平台对接了 svn,一个项目一个 svn 地址库,开发只需填写一个 svn 地址,按照我们约定的pom.xml 规范,可以自动打包及创建对应的项目模块。如果是新项目,创建项目的时候自动创建 svn 版本库
打包时可以选择不同的java版本。
一键发布
打包好后,需要进行发布前配置,包括数据源的申请和配置,以及 Nginx ,JDK 版本,JVM 参数定制,域名设置等
配置好后,就可以进行发布了。
版本回滚
若需要回滚,则选择相应版本进行回滚
IAAS
平台集成了 IAAS 的基础服务,在部署平台上可以一键创建相关资源。
云数据库: API 化,基于 mysql ,提供一套远程数据库服务(社区版 mysql5.5);提供各类套餐;
云 redis/memcached:API化,提供一套远程缓存服务(源生的 redis和 memcached);提供各类套餐
消息队列:API 化,基于 RabbitMQ 集群的消息队列服务
云存储:API化
云 cdn:API 化,一键对接第三方CDN 服务
虚拟主机:基于kvm计算虚拟化
AppRouter
AppRouter(应用路由器):实际上是一个 Nginx 服务器,AppRouter支持 API 操作配置 upstream 代理到后端的多个应用服务器;支持 server 内自定义 location 规则。简单架构如下(RS 即运行 java 容器的 vm):
如何下架构示意图:
自助式运维
自助式运维支持对 vm 管理,支持对数据源的操作,比如查询 redis 数据,查询 mysql 数据,以及导出相关数据。