Merge pull request #6010 from qzhuyan/perf/William/pool-worker-pickup
During the benchmark test of ehttpc, we found the gproc's random pool or round-robin pool doesn't scale well. This PR makes emqx prefer to use the hash pool. changed: retainer pool: from random to hash connector : from random to hash (default) bridge : from random to hash (default) authn_http : from random to hash (example) unchanged: worker pool type: hash broker pool type: hash resource type: hash exproto type: hash dashboard type: hash
This commit is contained in:
commit
2c69c00906
|
@ -133,7 +133,7 @@ create(#{ method := Method
|
|||
case emqx_resource:create_local(Unique,
|
||||
emqx_connector_http,
|
||||
Config#{base_url => maps:remove(query, URIMap),
|
||||
pool_type => random}) of
|
||||
pool_type => hash}) of
|
||||
{ok, already_created} ->
|
||||
{ok, State};
|
||||
{ok, _} ->
|
||||
|
|
|
@ -86,7 +86,7 @@ definitions() ->
|
|||
pool_type => #{
|
||||
type => string,
|
||||
enum => [<<"random">>, <<"hash">>],
|
||||
example => <<"random">>
|
||||
example => <<"hash">>
|
||||
},
|
||||
pool_size => #{type => integer},
|
||||
enable_pipelining => #{type => boolean},
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
# connect_timeout: "30s"
|
||||
# max_retries: 3
|
||||
# retry_interval = "10s"
|
||||
# pool_type = "random"
|
||||
# pool_type = "hash"
|
||||
# pool_size = 4
|
||||
# enable_pipelining = true
|
||||
# ssl {
|
||||
|
|
|
@ -105,7 +105,7 @@ retry_interval(default) -> <<"1s">>;
|
|||
retry_interval(_) -> undefined.
|
||||
|
||||
pool_type(type) -> pool_type();
|
||||
pool_type(default) -> random;
|
||||
pool_type(default) -> hash;
|
||||
pool_type(_) -> undefined.
|
||||
|
||||
pool_size(type) -> non_neg_integer();
|
||||
|
|
|
@ -172,7 +172,7 @@ cast(Msg) ->
|
|||
|
||||
%% @private
|
||||
worker() ->
|
||||
gproc_pool:pick_worker(?POOL).
|
||||
gproc_pool:pick_worker(?POOL, self()).
|
||||
|
||||
run({M, F, A}) ->
|
||||
erlang:apply(M, F, A);
|
||||
|
|
|
@ -26,7 +26,7 @@ start_link() ->
|
|||
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
|
||||
|
||||
init([]) ->
|
||||
PoolSpec = emqx_pool_sup:spec([emqx_retainer_pool, random, emqx_vm:schedulers(),
|
||||
PoolSpec = emqx_pool_sup:spec([emqx_retainer_pool, hash, emqx_vm:schedulers(),
|
||||
{emqx_retainer_pool, start_link, []}]),
|
||||
{ok, {{one_for_one, 10, 3600},
|
||||
[#{id => retainer,
|
||||
|
|
Loading…
Reference in New Issue