my last email image should be: https://sh-ht.oss-cn-shanghai.aliyuncs.com/cimg/sh-ht/web_20191223/900866_a74e7cb48163ab29b21cfd6486f89867.png
李凌 <[email protected]> 于2019年12月23日周一 下午10:56写道: > > I do think we can learn this part from OpenResty Edge, > also I like the idea that take a Chash key from Header ,which is pretty > meaningful for us. > > > > > Ming Wen <[email protected]> 于2019年12月23日周一 下午9:04写道: >> >> yuansheng, what do you think? >> >> Thanks, >> Ming Wen, Apache APISIX >> Twitter: _WenMing >> >> >> Ming Wen <[email protected]> 于2019年12月23日周一 下午9:03写道: >> >> > hi, codjust, >> > I prefer your design than the existing one[1]. >> > >> > These categories "vars", "header", "cookie", "consumer" are friendly for >> > developer. >> > >> > [1] >> > https://github.com/apache/incubator-apisix/blob/master/lua/apisix/schema_def.lua#L261 >> > >> > Thanks, >> > Ming Wen, Apache APISIX >> > Twitter: _WenMing >> > >> > >> > codjust <[email protected]> 于2019年12月23日周一 下午8:58写道: >> > >> >> Now chash key only support fetch from nginx variable. We need to be more >> >> flexible approach, >> >> eg: cookie, custom header and so on. >> >> Here is an example to achieve: >> >> upstream json schema: >> >> hash_on = { >> >> type = "string", >> >> default = "vars", >> >> enum = { >> >> "vars", >> >> "header", >> >> "cookie", >> >> "consumer" >> >> }, >> >> }, >> >> key = { >> >> description = "the key of chash >> >> for dynamic load balancing", >> >> type = "string" >> >> }, >> >> >> >> >> >> eg: >> >> local function create_chash_hash_key(ctx, upstream) >> >> local key = upstream.key >> >> local hash_on = upstream.hash_on >> >> local chash_key >> >> -- from nginx variable >> >> if hash_on == "vars" then >> >> chash_key = ctx.var[key] >> >> elseif hash_on == "header" then >> >> chash_key = ngx.req.get_headers()[key] >> >> elseif hash_on == "cookie" then >> >> chash_key = ctx.var["cookie_" .. key] >> >> -- TODO chash_key doesn't exist, set-cookie >> >> end >> >> if not chash_key then >> >> chash_key = ctx.var["remote_addr"] >> >> end >> >> return chash_key >> >> end >> >> >> >> >> >> hash_on type desc: >> >> 1 vars: fetchs nginx variable >> >> 2 header: custom headers or standard http headers >> >> 3 cookie: fetch chash key from cookie. It can be used to sticky session >> >> 4 consumer: hash by consumer_id >> >> If the specified chash key is not present, use default key: >> >> remote_addr(it can also provide default settings). >> >> >> >> >> >> everybody have a better idea? >> >> >> >> github issue: >> >> https://github.com/apache/incubator-apisix/issues/992 >> > >> >
