cache为已建立的未使用链接,选socket时从cache对列中找与负载均衡选中的upstream地址匹配的socket,若未选到,则新建一个socket
free为正在使用的socket的和未建链的结构。upstream_free_keepalive_peer时若free队列满,则把cache对列尾(被使用较少)remove 一个node,并socket close掉;若free队列未满,则从free头拿出一个node;把当前已用完的socket放到node并insert到cache,供使用。
typedef struct {
ngx_uint_t max_cached;
ngx_uint_t requests;
ngx_msec_t timeout;
ngx_queue_t cache;
ngx_queue_t free;
ngx_http_upstream_init_pt original_init_upstream;
ngx_http_upstream_init_peer_pt original_init_peer;
} ngx_http_upstream_keepalive_srv_conf_t;
typedef struct {
ngx_http_upstream_keepalive_srv_conf_t *conf;
ngx_queue_t queue;
ngx_connection_t *connection;
socklen_t socklen;
ngx_sockaddr_t sockaddr;
} ngx_http_upstream_keepalive_cache_t;
参考:
http://www.voidcn.com/article/p-hyizjgix-ot.html
upstream负载均衡算法
https://blog.csdn.net/xiajun07061225/article/details/9318871