Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

按照uid 和 iprange 两个或多个条件来分流到一个beta机器 #21

Open
zzweb3 opened this issue May 3, 2016 · 3 comments
Open

Comments

@zzweb3
Copy link

zzweb3 commented May 3, 2016

现在demo上是一个分流条件,例如:根据uid分流,根据iprange分流,根据city分流 等等,

现在我想做成 多个分流条件,例如按照uid 和 iprange 两个或多个条件来分流到一个beta机器。

还有个问题 如果upstream 分流到一个集群,而不是某台beta机器,如何做动态配置?如何处理呢 ?有相关的lua库吗?

@BG2BKK
Copy link
Contributor

BG2BKK commented May 3, 2016

现在的master分支是支持多级分流的版本,多级分流指的是,如果配置为 uid-city-ip三级分流,如果uid有对应的upstream,则直接转发到该upstream;如果没有,那么继续查询city对应的upstream;如果city有对应的upstream,则直接转发,否则继续查询ip对应的usptream。

另一种多级分流模式,比如某类uid下,某个city的分流策略,可以采用折中的办法,或者将uid-city-ip连接起来做一个key,或者在redis中想办法如何将策略存储。所以我认为如果想以比较清爽的方式实现,需要额外的数据结构支持,我正在思考怎样扩展ngx_lua的shdict,以nginx的shm为基础做一个嵌入在nginx的"数据库";也欢迎您有好的想法,我们可以交流。

现在的分流是指向upstream的,不是单个server,所以最后一个问题,我理解的对吗?

@zzweb3
Copy link
Author

zzweb3 commented May 3, 2016

我觉得第一种方法很好,具体代码实现,我稍后看下。
其实我自己开发了一个,类似你提的第二种方法,但是比较挫,主要是我们这里业务复杂度不高。

@zzweb3
Copy link
Author

zzweb3 commented May 3, 2016

第二种方法构建一个uid-city-ip 这样的key 比较难搞,我开始用json实现的,但是就无法用redis的mget接口了,可能还需要遍历。 我觉得第一种方法 真的不错, 我现在看下~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants