SaaS服务架构,实现服务版本管理、动态的二级域
例如:
客户A使用 https://a.domain.com ,
客户B使用 https://b.domain.com ,
... ,
客户N使用 https://n.domain.com 服务端为客户A和客户B(客户N)提供完全相互独立,物理隔离的应用 基于上面一点,特殊定制某个客户的需求,并不影响其他客户 迭代升级可以灰度升级 升级和回退版本都直观安全 监控每个客户系统资源状况 新增或者修改客户二级域名代理时,不会中断对外服务(不重启Nginx) 简单讲每个二级域名请求可被直接代理到内网服务器集群中的指定容器和端口上 架构拓扑图如下所示
Step1 -- 搭建 Ceryx 服务
git clone https://github.com/fjb040911/Comb.git
cd Comb
docker-compose up -d
此时会在 Comb Server 服务器上启动一个由 Nginx+lua+redis 组成的高性能动态域名代理服务。
Step2 -- 搭建动态域名代理管理和服务节点容器管理的API服务
cd Comb/server
npm install
npm start
or
npm run dev
注: Comb/client 是一个简单直观的Demo
Step3 -- 内网集群中的节点机器上部署容器管理服务
git clone https://github.com/fjb040911/serviceNode.git
cd serviceNode
npm install
npm start
访问内网的节点机器的7777端口API,可以管理这台机器上面的服务容器。包括:获取服务版本,创建服务容器,升级、停止、继续运行、删除某个容器等操作
Step4 -- release你的软件版本 在节点机器上
docker build -t gs:version
Comb Server管理API
新增一个服务器节点
POST /api/server/add
data = {
ip, // 集群内网ip,必填
name, // 机器名称,选填
describe, // 对机器的描述
}
查询所有的服务节点
GET /api/server/list
删除一台服务节点
GET /api/server/:id/delete
查询客户列表(集群内部的容器列表)
POST /api/cust/list
新增客户。会在指定的服务器上创建客户信息,并且生成外网的动态代理
POST /api/cust/add
data = {
name, // 客户名称
describe, // 客户描述信息
domain, // 要访问客户的服务容器时候的二级域名。例如:打算用 https://abc.domain.com 访问到该用户的服务,这个值就填 abc
serverVersion, // 客户的服务使用的版本的id
versionName, // 客户的服务使用的版本的tag名称
}
启停客户的服务容器
GET /api/cust/:custId/server/:action
custId: 客户信息的_id
action: 要对容器执行的动作,stop 暂停, start 开始运行
升级服务器
例如release了新版本,现在要把其中某些客户的服务版本升级。内部是生成一个新版本的容器,再把Nginx的动态代理修改到新容器上,停止删除旧容器。 所以升级的过程中服务并不会中断,客户的体验是平滑无缝切换到新版本
POST /api/cust/:custId/server/upgrade
custId: 客户信息的_id
data = {
serverVersion,
versionName
}
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。