MLSQL Cluster 多Engine管理设计

2019-04-01 10:56:35 浏览数 (1)

前言

我之前写了篇很简单的去描述了MLSQL Cluster 路由策略。有朋友就问,有没有一个更清晰一点的设计说明。这篇内容就是为这个目标而写的。

场景

脱离场景说设计就是扯淡。所以,MLSQL Cluster适用的场景是是什么呢?

  1. 不同业务线需要不同的MLSQL Engine.
  2. 同一个业务线也可能需要多个MLSQL Engine
  3. 同一个业务可能需要多个MLSQL Engine 做负载均衡或者高可用

这就意味着,企业必然存在着部署多个MLSQL Engine的实例的诉求,并且根据需要,提供不同的组合方式。

设计

要管理多个MLSQL Engine,首先需要把MLSQL Engine信息注册到MLSQL Cluster。

一般而言可以让MLSQL Engine启动时注册自己,然后MLSQL Cluster 可以读取这些MLSQL Engine注册的信息。目前MLSQL Engine支持注册到ZK, 可以在启动时通过参数:

代码语言:javascript复制
-streaming.zk.conf_root_dir [zk path]
-streaming.zk.servers  [your zk address]

不过目前MLSQL CLuster 还没有实现去读取ZK。 MLSQL 初期采用了一个侵入式更小更灵活的办法,就是用户自己填写MLSQL Engine信息。

MLSQL Cluster 提供了一套接口管理MLSQL Engine信息。大家可以通过http://127.0.0.1:8080/openapi/ui/spec/ 查看该接口信息。

前面我们讲到的是如何注册MLSQL Engine到MLSQL Cluster,现在,我们假设有A,B 两个业务。A 需要 Engine1,Engine2,Engine3 三个MLSQL Engine, B则需要Engine4,Engine5。 这时候可以使用MLSQL Cluster 接口手动添加这些Engine 实例。然后我们给Engine1-3 打上标签a, 给Egnine4-5 打上标签b.

打开http://127.0.0.1:8080/openapi/ui/spec/,然后查找 /backend/add 接口:

image.png

看到有三个参数,所以比如添加Engine1的时候,可以这么做:

代码语言:javascript复制
curl -XPOST "http://127.0.0.1:8080/backend/add" -d '
 url=127....9002 
 &name=Engine1
 &tag=a
'

其他类似。

接着A业务就可以的接口就可以调用Cluster了。怎么调用呢? 我们查找下 /run/script

image.png

该接口参数特别多,但是关键的其实就是sql和tags和proxyStrategy。 当业务A请求时,tags需要设置为a,这样MLSQL Cluster 就会按默认的proxyStrategy 策略对Engine1-3进行负载均衡,而不会去使用Engine4-5。

MLSQL Console 是如何对接MLSQL Cluster?

在 team/cluster 页面,我们看MSLQL Console 是如何添加Backend的:

image.png

在MLSQL Console里,tag会被自动生成,生成规则为 teamName_roleName。 也就是说,你添加一个backend的时候,必须选择将这个backend添加到一个Team里,然后一个或者多个Role下。

接着在你使用的时候,系统必须确定当前你是在什么team的什么role,这样MLSQL Cluster才能判断该使用哪些Engine.

image.png

0 人点赞