2015-12-03 13 views
9

oto sytuację:Definiowanie niestandardowego algorytmu równoważenia obciążenia

Mam liczbę serwerów internetowych, powiedzmy 10. muszę użyć (oprogramowanie) równoważenia obciążenia, które mogą być realizowane za pomocą serwera proxy odwrotnej, jak HAProxy lub lakier. Teraz cały ruch, który serwujemy, odbywa się przez https, a nie http, więc lakierowanie nie wchodzi w grę.

Teraz chcę podzielić żądanie użytkowników na kilka kategorii, które zależą od jednego z parametrów wejściowych (POST) żądania. W zależności od tego parametru, muszę podzielić żądanie na serwery, ponieważ na tej podstawie (nawet jeśli wszystkie inne parametry wejściowe (POST) są takie same), różne serwery byłyby obsługiwane inaczej.

Potrzebuję zdefiniować niestandardowy algorytm równoważenia obciążenia, tak aby dla konkretnej wartości tego parametru podzielić obciążenie na określone 3 (powiedzmy), dla innej wartości, podzielić żądanie na konkretne 2 i dla innych wartości, aby pozostać 5.

Ponieważ nie mogę używać lakieru, ponieważ nie można go użyć do zakończenia ssl (zdefiniowanie własnego algorytmu byłoby łatwe w VCL), myślę o używaniu HA-Proxy.

Tak tu jest pytanie:

Czy ktoś może mi pomóc w jaki sposób zdefiniować niestandardową funkcję równoważenia obciążenia przy użyciu HA-proxy?

Wiele się dowiedziałem i nie mogłem znaleźć takiego dokumentu, z którym możemy. Tak więc, jeśli nie jest to możliwe z HA-Proxy, czy możesz skierować mnie do jakiejś innej usługi reverse-proxy, która może być również używana jako load balancer, tak, że spełnia oba powyższe kryteria? (zakończenie ssl i możliwość zdefiniowania niestandardowego równoważenia obciążenia).

EDIT:

To pytanie jest z rzędu z jednym z moich wcześniejszych pytań. Varnish to be used for https

+1

Byłoby [Hitch] (https://hitch-tls.org) → protokół PROXY → Lakier 4,1 być rozwiązaniem dla Ciebie? –

+1

@ CarlosAbalde, widziałem to. Nie tego szukam. Zobacz link: http: // stackoverflow.com/questions/33475154/varnish-to-be-used-for-https. Jest to również pytanie, które zadałem ... które jest powiązane. – vish4071

+1

HAProxy 1.6 - 'req.body_param' + ACL do określenia trasy do backendów - https://cbonte.github.io/haproxy-dconv/configuration-1.6.html#7.3.6-req.body_param –

Odpowiedz

2

Nie jestem pewien, jaki jest twój cel, ale proponuję, aby NOT wykonywał niestandardowe trasowanie na podstawie treści żądania HTTP w ogóle. Będzie to działać bardzo słabo i prawdopodobnie przewyższy wszelkie korzyści, które próbujesz osiągnąć.

Wszystko, co musi parsować wartości poza typowymi nagłówkami HTTP w systemie równoważenia obciążenia, spowolni proces. Pliki cookie same w sobie są generalnie złym pomysłem, jeśli można tego uniknąć.

Jeśli możesz kontrolować wartości ścieżki/trasy, co jest prawdopodobnie lepszym pomysłem niż analizowanie każdego POST dla pewnych wartości.


Prawdopodobnie można osiągnąć to, co chcesz za pomocą skryptów Lua z Nginx (platforma Kong opiera się na nich), ale nie mogę powiedzieć, jak trudne byłoby dla Ciebie ...

https://github.com/openresty/lua-nginx-module#readme

Oto artykuł z konkretnym przykładem ustawienia różnych źródeł w oparciu o dane wejściowe lua.

http://sosedoff.com/2012/06/11/dynamic-nginx-upstreams-with-lua-and-redis.html

server { 
    ...BASE CONFIG HERE... 

    port_in_redirect off; 

    location /somepath { 
    lua_need_request_body on; 

    set $upstream "default.server.hostname"; 

    rewrite_by_lua ' 
     ngx.req.read_body() -- explicitly read the req body 
     local data = ngx.req.get_body_data() 
     if data then 
     -- use data: see 
     -- https://github.com/openresty/lua-nginx-module#ngxreqget_body_data 
     ngx.var.upstream = some_deterministic_value 
     end 
    ' 

    ...OTHER PARAMS... 
    proxy_pass http://$upstream 
    } 
} 
+1

Hi @ Tracker ...Dziękuję za odpowiedź. Jest kilka rzeczy, które chcę przetestować dla UEx. Tak więc chcę inaczej "serwować" to samo żądanie różnym użytkownikom w oparciu o jeden parametr. (To jak testowanie A-B na poziomie serwera) – vish4071

+1

czy możesz używać innych parametrów oprócz postu? nie możesz zmienić ścieżki na podstawie swoich A/B params? Lub złożony skrót na podstawie IP i useragent? Ciastko? – Tracker1

+1

IP i agent użytkownika nie działałyby ... Właściwie to mój A/B param (konkretnie) to ten sam POST i nie jestem pewien czy przechowujemy te dane w ciasteczkach (w sesji) i czy nie Zmienienie tej części bazy kodowej byłoby również bólem głowy. – vish4071

Powiązane problemy