生产部署参考指南

1 介绍

  1. Linkis已经在微众银行大数据生产平台稳定运行两年有余,开发运维人员总结出了一套Linkis生产部署的指南,以让Linkis在稳定运行的基础上发挥出它最大的性能,同时也能够节约服务器资源,降低使用成本。指南包括部署方式的选择和参数配置两大类,最后Linkis在测试环境中也久经压测考验,我们会将我们压测的实践和经验在第四章中给出。

2 部署方案选择

  1. Linkis的单机部署方式简单,但是不能用于生产环境,因为过多的进程在同一个服务器上会让服务器压力过大。
  2. 部署方案的选择,和公司的用户规模、用户使用习惯、集群同时使用人数都有关,一般来说,我们会以使用Linkis的同时使用人数和用户对执行引擎的偏好来做依据进行部署方式的选择。
  3. 下面以同时使用人数进行分段来进行详细阐述,假设用户偏好spark最多,hive其次,推荐服务器主机内存64G或以上。
  4. **在安装EngineManager的机器上,由于会启动用户的引擎进程,机器的内存负载会比较高,其他类型的微服务对机器的负载则相对不会很高。**
  5. **我们一般建议在安装EM的服务器上预留20G左右给Linux系统、EM自身进程以及其他进程进行使用,例如128G内存的服务器,除去20G内存之后,还有100G内存可以用于启动引擎进程。举个例子,如果一个SparkDriver4G内存,那么该服务器就可以最多启动25spark引擎。**

总使用资源计算公式: Linkis使用总资源 = 总内存 + 总核数 =

同时在线人数 * (Driver 或 Hive client内存) + 同时在线人数 * (Driver或Hive client 核数)

例如,同时使用人数50人,Spark的Driver内存2G,Hive Client内存2G,每个引擎都使用两个核,那么就是 50 * 2G + 50 * 2核 = 100G 内存 + 100 CPU核数

参数配置前的约定(必看):

1.参数一般是在微服务安装目录中的conf目录的linkis.properties进行配置,采用key=value 的形式进行配置,如 wds.linkis.enginemanager.cores.max=20。唯一例外的是engine微服务的配置需要在linkis-engine.properties进行配置。

2.参数配置之后,需要重启微服务才能生效。engine的参数配置之后,在页面的引擎管理器进行kill之后,再次启动引擎就可以生效

下面提供一份参考部署方案。

2.1 同时使用人数10-50

1).服务器配置最优推荐:4台服务器,分别命名为S1,S2,S3,S4

服务名部署选择说明
SparkEngineMangerS1SparkEM需要独占一台服务器,因为假定用户最偏好spark(如果是偏好hive,可以进行修改)
SparkEntranceS2
HiveEngineManagerS3
HiveEntranceS2
PythonEngineManagerS3
PythonEntranceS2
其他(Eureka,gateway等)S4如果这台机器压力过大,可以再加一台服务器,将服务进行分开部署

2). 服务器配置最低配置:2台服务器

3). 参数配置

如果需要进行,需要在微服务安装目录下的conf目录中的linkis.properties和linkis-engine.properties中进行配置。参数配置一般分为Entrance和EngineManager两种参数类型。

a)Entrance微服务

参数名称参数作用建议参数值
wds.linkis.rpc.receiver.asyn.queue.size.max指定entrance微服务接收到的RPC消息的队列大小2000
wds.linkis.rpc.receiver.asyn.consumer.thread.max指定Entrance微服务RPC消费线程池大小100

b)EngineManager微服务

注:其中Linkis定义了保护资源的概念,保护资源的目的在于预留出一定的资源,EM不会将最大资源用尽,启动保护机器的作用。

参数名称参数作用建议参数值
wds.linkis.enginemanager.memory.max用于指定该EM进程启动的所有引擎的总内存40G(64)或100G(128)
wds.linkis.enginemanager.cores.max用于指定该EM进程启动的所有引擎的总核数20
wds.linkis.enginemanager.engine.instances.max用于指定该EM进程启动的所有引擎的总个数20
wds.linkis.enginemanager.protected.memory用于指定该EM进程用于保护的内存2G(意味着最多可以使用38(40-2)G内存)
wds.linkis.enginemanager.protected.cores.max用于指定该EM进程用于保护的核数2(意味着最多可以使用18(20-2)核数)
wds.linkis.enginemanager.protected.engine.instances用于指定该EM进程用于保护的引擎个数1(意味着最多可以启动19(20-1)个引擎)

2.2 同时使用人数 50-100

1).服务器配置推荐:7台服务器,分别命名为S1,S2..S7

服务名部署选择说明
SparkEngineMangerS1,S2
SparkEntranceS5
HiveEngineManagerS3,S4
HiveEntranceS5
PythonEngineManagerS4
PythonEntranceS4
Eureka,Gateway,RMS6Eureka和RM需要高可用部署
PublicService,RM,Datasource,EurekaS7Eureka和RM需要高可用部署

2). 服务器配置最低配置:4台服务器

3). 参数配置

a)Entrance微服务

参数名称参数作用建议参数值
wds.linkis.rpc.receiver.asyn.queue.size.max指定entrance微服务接收到的RPC消息的队列大小3000
wds.linkis.rpc.receiver.asyn.consumer.thread.max指定Entrance微服务RPC消费线程池大小120

b)EngineManager微服务

参数名称参数作用建议参数值
wds.linkis.enginemanager.memory.max用于指定该EM进程启动的所有引擎的总内存40G(64)或100G(128)
wds.linkis.enginemanager.cores.max用于指定该EM进程启动的所有引擎的总核数20
wds.linkis.enginemanager.engine.instances.max用于指定该EM进程启动的所有引擎的总个数20
wds.linkis.enginemanager.protected.memory用于指定该EM进程用于保护的内存2G(意味着最多可以使用38(40-2)G内存)
wds.linkis.enginemanager.protected.cores.max用于指定该EM进程用于保护的核数2(意味着最多可以使用18(20-2)核数)
wds.linkis.enginemanager.protected.engine.instances用于指定该EM进程用于保护的引擎个数1(意味着最多可以启动19(20-1)个引擎)

2.3 同时使用人数 100-300

1).服务器配置推荐:11台服务器,分别命名为S1,S2..S11

服务名部署选择说明
SparkEngineMangerS1,S2,S3,S4
SparkEntranceS8
HiveEngineManagerS5,S6,S7
HiveEntranceS8
PythonEngineManagerS9
PythonEntranceS9
Eureka,Gateway,RMS10Eureka和RM需要高可用部署
PublicService,RM,Datasource,Eurekas11Eureka和RM需要高可用部署

2). 服务器配置最低配置:6台服务器

3). 参数配置

a)Entrance微服务

参数名称参数作用建议参数值
wds.linkis.rpc.receiver.asyn.queue.size.max指定entrance微服务接收到的RPC消息的队列大小4000
wds.linkis.rpc.receiver.asyn.consumer.thread.max指定Entrance微服务RPC消费线程池大小150

b)EngineManager微服务

参数名称参数作用建议参数值
wds.linkis.enginemanager.memory.max用于指定该EM进程启动的所有引擎的总内存40G(64)或100G(128)
wds.linkis.enginemanager.cores.max用于指定该EM进程启动的所有引擎的总核数20
wds.linkis.enginemanager.engine.instances.max用于指定该EM进程启动的所有引擎的总个数20
wds.linkis.enginemanager.protected.memory用于指定该EM进程用于保护的内存2G(意味着最多可以使用38(40-2)G内存)
wds.linkis.enginemanager.protected.cores.max用于指定该EM进程用于保护的核数2(意味着最多可以使用18(20-2)核数)
wds.linkis.enginemanager.protected.engine.instances用于指定该EM进程用于保护的引擎个数1(意味着最多可以启动19(20-1)个引擎)

2.4 同时使用人数 300-500

1).服务器配置推荐15台服务器,分别命名为S1,S2,S3,S4

服务名部署选择说明
SparkEngineMangerS1,S2,S3,S4,S5,S6,S7
SparkEntranceS12
HiveEngineManagerS8,S9,S10,S11
HiveEntranceS12
PythonEngineManagerS13
PythonEntranceS13
Eureka,Gateway,RMS14Eureka和RM需要高可用部署
PublicService,RM,Datasource,Eurekas15Eureka和RM需要高可用部署

2). 服务器配置最低配置:10台服务器

3). 参数配置

a)Entrance微服务

参数名称参数作用建议参数值
wds.linkis.rpc.receiver.asyn.queue.size.max指定entrance微服务接收到的RPC消息的队列大小5000
wds.linkis.rpc.receiver.asyn.consumer.thread.max指定Entrance微服务RPC消费线程池大小150

b)EngineManager微服务

参数名称参数作用建议参数值
wds.linkis.enginemanager.memory.max用于指定该EM进程启动的所有引擎的总内存40G(64)或100G(128)
wds.linkis.enginemanager.cores.max用于指定该EM进程启动的所有引擎的总核数20
wds.linkis.enginemanager.engine.instances.max用于指定该EM进程启动的所有引擎的总个数20
wds.linkis.enginemanager.protected.memory用于指定该EM进程用于保护的内存2G(意味着最多可以使用38(40-2)G内存)
wds.linkis.enginemanager.protected.cores.max用于指定该EM进程用于保护的核数2(意味着最多可以使用18(20-2)核数)
wds.linkis.enginemanager.protected.engine.instances用于指定该EM进程用于保护的引擎个数1(意味着最多可以启动19(20-1)个引擎)

2.5 同时使用人数 500以上

1).服务器配置推荐:25台服务器,命名为S1,S2..S19,S25

服务名部署选择说明
SparkEngineMangerS1,S2,S3,S4,S5,S6,S7
S8,S9,S10
SparkEntranceS17
HiveEngineManagerS11,S12,S13,S14,S15,
S16
HiveEntranceS17
PythonEngineManagerS18,S19
PythonEntranceS20
Eureka, RMS21Eureka和RM需要高可用部署
RM, ,EurekaS22Eureka和RM需要高可用部署
Eureka,PublicServiceS23Eureka和RM需要高可用部署
Gateway, DatasourceS24

2). 服务器最低配置:15台服务器

3). 参数配置

a)Entrance微服务

参数名称参数作用建议参数值
wds.linkis.rpc.receiver.asyn.queue.size.max指定entrance微服务接收到的RPC消息的队列大小5000
wds.linkis.rpc.receiver.asyn.consumer.thread.max指定Entrance微服务RPC消费线程池大小200

b)EngineManager微服务

参数名称参数作用建议参数值
wds.linkis.enginemanager.memory.max用于指定该EM进程启动的所有引擎的总内存40G(64)或100G(128)
wds.linkis.enginemanager.cores.max用于指定该EM进程启动的所有引擎的总核数20
wds.linkis.enginemanager.engine.instances.max用于指定该EM进程启动的所有引擎的总个数20
wds.linkis.enginemanager.protected.memory用于指定该EM进程用于保护的内存2G(意味着最多可以使用38(40-2)G内存)
wds.linkis.enginemanager.protected.cores.max用于指定该EM进程用于保护的核数2(意味着最多可以使用18(20-2)核数)
wds.linkis.enginemanager.protected.engine.instances用于指定该EM进程用于保护的引擎个数1(意味着最多可以启动19(20-1)个引擎)

3 其他通用参数配置

Linkis除了Entrance和EngineManager两类微服务外,还有其他的微服务也有自身的参数进行配置。

3.1 PublicService自定义配置

publicService微服务承载了Linkis运行的各类辅助性功能,包括文件编辑保存,结果集读取等内容。

参数名称参数作用建议参数值
wds.linkis.workspace.filesystem.get.timeout用于指定获取文件系统的超时时间10000(单位是ms)
wds.linkis.workspace.resultset.download.maxsize用于指定下载结果集的最多行数5000(最多下载5000)或-1(全量下载)

3.2 Engine类微服务

引擎类的微服务是随时启随时用的,包括spark、hive以及python引擎,引擎类的微服务的配置参数需要在EngineManager的安装目录中的conf下面的linkis-engine.properties中进行修改。

参数名称参数作用建议参数值
wds.linkis.engine.max.free.time用于指定一个引擎如果空闲多久会被kill3h(意味着一个引擎没有执行任务三小时后,就会被自动kill)

4 总结

Linkis的部署方案和使用方式息息相关,同时使用人数是最大的影响因素,为了能够让使用者能够舒适地使用,同时降低集群服务器成本,需要运维开发人员进行尝试,听取用户反馈,如果已经部署的方案不合适,需要适时恰当地进行部署方案的更改。