Balanslaşdırma NodeJs tətbiqlərini Nginx ilə necə yükləyə bilərəm?

Bu məqalədə Balanslaşdırma NodeJs tətbiqetmələrinin Nginx ilə necə yüklənəcəyi göstərilir.

Nginx ilə tanış deyilsinizsə, əvvəl Nginx'in nə olduğunu anlamaq üçün aşağıdakı linkdəki məqaləni oxuyun.

MƏSƏLƏ

Tətbiqinizin çox ehtiyacı yoxdursa, yük balanslaşdırma istifadə etməyinizə ehtiyac yoxdur, ancaq tətbiqiniz məşhur və populyar olarsa :) çox trafikə sahib ola bilər. Buna görə fərdi NodeJ-lərin quraşdırılması çevik deyil.

Bu şəkildə Nginx tərs proxy ilə tək bir NodeJs quraşdırmasının necə işlədiyini görə bilərsiniz.

Tərs proxy ilə tək Nodejs quraşdırma

HƏLL

Məşğul tətbiqlərdə istəkləri bu diaqramdakı kimi bir çox HTTP serverində paylamalıyıq

Nümunəmizdə, fərqli portlarda qəbul etməyə hazır olan bir Node.js tətbiqinin 4 nümunəsi var. Nümunələrinizi fərqli IP adresləri olan digər serverlərdə də işləyə bilərsiniz.

Bu sadə bir Nodejs tətbiqidir.

const http = tələb ('http');
const hostname = '127.0.0.1';
const port = process.argv [2] || 3000;
const server = http.createServer ((req, res) => {
res.statusCode = 200;
res.setHeader ('Məzmun növü', 'mətn / düz');
res.end ('Salam dünya \ n');
});
server.listen (port, hostname, () => {
console.log (`Server http: // $ {hostname}: $ {port} /` ünvanında işləyir);
});

NodeJs tətbiqlərimizi arxa planda çalışdırmaq üçün bir NodeJs proses menecerinə ehtiyacımız var. Buna görə pm2 proses menecerindən istifadə edirik.

Tətbiqi 4 fərqli portda aşağıdakı kimi çalıştırın:

pm2 start server.js -f - 444 pm2 start server.js -f - 445 pm2 start server.js -f - 446 pm2 server.js -f - 447

İndi sadə NodeJs tətbiqetməmizin 4 nümunəsi var.

/Etc/nginx/conf.d/ saytında your-domain.com.conf adlı yeni bir fayl yaradın və yapışdırın:

Əgər varsa, açın və redaktə edin.

Yuxarıdakı my_http_servers {server 127.0.0.1:444; # httpServer1 port 444 server 127.0.0.1:445-də dinləyir; # httpServer2 port 445 server 127.0.0.1:446 dinləyir; # httpServer3 port 446 server 127.0.0.1:447 dinləyir; # httpServer4 447 limanında dinləyir}
Server {qulaq asın 80; Server adınız alan adınız www.www.domain.com; Yer / {proxy_set_header X-Real-IP $ remote_addr; proxy_set_header host $ http_host; proxy_pass http: // my_http_servers; }}

Nginx-də yuxarı hissədə bir qrup server təyin olunur. Serverlər müxtəlif portları izləyə bilər. Bundan əlavə, TCP və UNIX domen yuvalarını izləyən serverlər qarışdırıla bilər.

Yük balanslaşdırma metodunun seçilməsi

Nginx-də yük balansının bir neçə metodu var:

1 - dəyirmi robin

Bu metod, istəkləri serverlər arasında bərabər şəkildə paylayır və server ağırlığını nəzərə alır. Bu metod varsayılan olaraq istifadə olunur (onu təmin etmək üçün heç bir təlimat yoxdur).

Bizim nümunəmizdə:

Yuxarıdakı my_http_servers {server 127.0.0.1:444; # httpServer1 port 444 server 127.0.0.1:445-də dinləyir; # httpServer2 port 445 server 127.0.0.1:446 dinləyir; # httpServer3 port 446 server 127.0.0.1:447 dinləyir; # httpServer4 447 limanında dinləyir}

2 - minimum_conn

Serverin çəkisi nəzərə alınmaqla, ən az aktiv əlaqə sayı olan serverə sorğu göndərilir:

Bizim nümunəmizdə:

Yuxarıdakı my_http_servers {minimum_conn; Server 127.0.0.1:444; # httpServer1 port 444 server 127.0.0.1:445-də dinləyir; # httpServer2 port 445 server 127.0.0.1:446 dinləyir; # httpServer3 port 446 server 127.0.0.1:447 dinləyir; # httpServer4 447 limanında dinləyir}

3 - ip_hash

Bir sorğunun göndərildiyi server, müştəri IP ünvanına əsasən müəyyən edilir. Bu vəziyyətdə, hash dəyərini hesablamaq üçün ya IPv4 adresinin ilk üç səkkizliyindən, ya da bütün IPv6 adresindən istifadə olunur. Metod, eyni ünvandan olan müraciətlərin mövcud olmadığı təqdirdə eyni serverə göndərilməsinə zəmanət verir.

Socket.io istifadə edirsinizsə, ip_hash direktivini istifadə etməlisiniz. Çox vacibdir, əks halda tətbiqinizdən bu "Yanlış İstək" səhvlərini alacaqsınız.

Yük balanslaşdırma üsulları haqqında daha çox məlumat üçün Nginx rəsmi veb saytına müraciət edin.

Tamam, en az_conn seçək.

Bu, son konfiqurasiya sənədimizdir.

Yuxarıdakı my_http_servers {minimum_conn; Server 127.0.0.1:444; # httpServer1 port 444 server 127.0.0.1:445-də dinləyir; # httpServer2 port 445 server 127.0.0.1:446 dinləyir; # httpServer3 port 446 server 127.0.0.1:447 dinləyir; # httpServer4 447 limanında dinləyir}
Server {qulaq asın 80; Server adınız alan adınız www.www.domain.com; Yer / {proxy_set_header X-Real-IP $ remote_addr; proxy_set_header host $ http_host; proxy_pass http: // my_http_servers; }}

Və nəhayət Nginx xidmətini yenidən başladın.

sudo xidməti nginx yenidən başladın

Nəticə

Bu yazıda sadə bir NodeJs tətbiqi qurduq və istəkləri bir çox instansiyada bölüşdürdük.

Başqa bir məqalədə NodeJ-nin istehsaldakı tətbiqləri haqqında daha çox yazacağam.

Yük balanslaşdırma NodeJs tətbiqetmələri ilə bağlı hər hansı bir fikriniz və ya təcrübəniz varsa, şərhlərdə mənə bildirin və onları məqaləyə əlavə edəcəyəm.