服务伸缩

服务伸缩

Rainbond平台服务有两种伸缩方式:

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

- 垂直伸缩时平台会自动调整资源后重启服务,单节点服务会中断,多节点服务不受影响。 - 水平伸缩时平台通过滚动新增或者下线节点的方式进行操作,因此操作不会影响现有服务。

垂直伸缩 CPU 与内存比例关系

申请值比例(CPU/内存) 限制值比例(CPU/内存)
0.241 1.281
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服务。显然这样使用是不行的。

那什么有状态服务可以水平伸缩呢,主要是以下两类:

  1. 可进行水平扩展集群的集群化服务,比如 Etcd, Zookeeper, 小强数据库,TiDB等
  2. 主从集群类服务,我们一般可以将从服务进行水平伸缩。比如Mysql、Redis、MongoDB等。
有状态服务集群应用的制作方式我们将在主题文档中讲解