服务伸缩
服务伸缩
Rainbond平台服务有两种伸缩方式:
- 垂直伸缩:增加或减少服务的内存(目前服务 CPU 与内存是联动的,按照一定的
比例调整
)
- 水平伸缩:增加或减少服务的实例数,适用于无状态服务和有状态水平集群服务

- 垂直伸缩时平台会自动调整资源后重启服务,单节点服务会中断,多节点服务不受影响。
- 水平伸缩时平台通过滚动新增或者下线节点的方式进行操作,因此操作不会影响现有服务。
垂直伸缩 CPU 与内存比例关系
申请值比例(CPU/内存) |
限制值比例(CPU/内存) |
0.24⁄1 |
1.28⁄1 |
Kubernetes 针对 CPU 和内存分为申请值与限制值,详情参见: [管理容器的计算资源](https://kubernetes.io/cn/docs/concepts/configuration/manage-compute-resources-container/) 平台目前调整的 CPU 与内存占比是经过生产环境验证过符合大多数服务类型。如果对某些CPU密集型服务自定义分配CPU,可以配置环境变量:ES_CPULIMIT : CPU限制值 ES_CPUREQUEST:CPU请求值
水平伸缩
服务进行水平伸缩的条件
我们一般称无需自己保存运行状态的服务为无状态服务,比如Web类服务。通常情况下只要将缓存系统使用第三方的服务比如Redis,Web类服务即可认为是无状态服务可进行水平伸缩。
那么有人要问,我的Web服务需要存取文件怎么办,Rainbond将处理服务直接的持久化存储同步。即每个服务实例使用的持久化存储为同一个文件系统,这就是计算与数据分离的实践。
有状态服务的水平伸缩条件将比较复杂,要支持有状态伸缩,首先得应用支持集群化水平扩展。
比如我们部署了一个Mysql服务,我们直接将其水平扩到两个实例,会出现什么现象呢? 两个实例都可以正常工作,但是它们之间无任何关系,也就是说是两个Mysql服务。显然这样使用是不行的。
那什么有状态服务可以水平伸缩呢,主要是以下两类:
- 可进行水平扩展集群的集群化服务,比如 Etcd, Zookeeper, 小强数据库,TiDB等
- 主从集群类服务,我们一般可以将从服务进行水平伸缩。比如Mysql、Redis、MongoDB等。
有状态服务集群应用的制作方式我们将在主题文档中讲解