Previously the default number of retry is equal to the number of node,
but the same node will be tried again according to its weight.
Also ensure the same picker will be used in the whole request,
especially during the retry.
* optimize: Use lru to avoid resolving IP addresses repeatedly .
Cached the global rules to `ctx` .
* optimzie: used a longer time interval for etcd and flush access log.
* optimize: return upstream node directly if the count is 1 .
* optimize: avoid to cache useless variable.
feature: support dynamic upstream in plugin.
here is a mini example in `access` phase of plugin:
```lua
local up_conf = {
type = "roundrobin",
nodes = {
{host = conf.upstream.ip, port = conf.upstream.port, weight = 1},
}
}
local ok, err = upstream.check_schema(up_conf)
if not ok then
return 500, err
end
local matched_route = ctx.matched_route
upstream.set(ctx, up_conf.type .. "#route_" .. matched_route.value.id,
ctx.conf_version, up_conf, matched_route)
return
```