Баланс на натоварването с Docker

Когато изпълнявате уеб приложение, обикновено искате да извлечете максимума от ресурсите си, без да се налага да преобразувате софтуера си за използване на многонишкови или сложни цикли на събития. Docker обаче ви предоставя прост начин да балансирате натоварването на вашето приложение вътрешно, за да извлечете максимума от ресурсите на сървъра. Тази статия ще ви покаже как да използвате Nginx за балансиране на натоварването на вашето уеб приложение с помощта на Docker на CentOS.

Стъпка 1: Създайте просто приложение

Ще използваме ръжда, за да изградим това просто приложение. Ако приемем, че имате инсталирана ръжда, стартирайте cargo new webapp –bin. При успех ще видите директория, наречена webapp. Вътре в webapp, ще видите файл, наречен Cargo.toml. Добавете към него следните редове:

[dependencies.iron]
version = "*"

След това, вътре във src/main.rsфайла, премахнете всичко и го попълнете със следното:

extern crate iron;

use iron::prelude::*;
use iron::status;

fn main() {
    Iron::new(|_: &mut Request| {
        Ok(Response::with((status::Ok, "Hello Vultr :)")))
    }).http("0.0.0.0:3000").unwrap();
}

Забележка: Не променяйте IP адреса в приложението. Това е конфигурирано така, че Docker да може да слуша вашето приложение.

След като приключите, компилирайте приложението, като изпълните cargo build –release. В зависимост от вашия сървър, това може да отнеме няколко минути. Ако няма грешки, тествайте приложението, като следвате тези стъпки:

  • бягай target/release/webapp.
  • Навигирайте до http://0.0.0.0:3000/в браузъра си. Заменете 0.0.0.0с IP адреса на вашия сървър.

Ако всичко е работило правилно, ще видите "Hello Vultr :)" на страницата.

Стъпка 2: Създайте Docker контейнери

Създайте Dockerfileи го попълнете със следното:

FROM centos:latest
MAINTAINER User <user@localhost>
RUN yum update -y
COPY ./webapp/target/release/webapp /opt/
EXPOSE 3000
WORKDIR /opt
CMD ./webapp

Запазете файла. След това създайте файл, наречен deploy.shи го попълнете със следното:

DEFAULT_PORT=45710
APP_PORT=3000
DEPLOY=5
NAME="webapp"
docker build -t webapp:example . 

for ((i=0; i<DEPLOY; i++)); do
        docker kill $NAME$i ; docker rm $NAME$i
        docker run --name $NAME$i -p 127.0.0.1:$(((i * 1000) + DEFAULT_PORT)):$APP_PORT -d webapp:example
done

Когато стартирате този скрипт, той ще изгради изображението и ще разположи контейнера въз основа на количеството, което сте задали (по подразбиране е 5). Ако контейнерът съществува, той ще го убие и премахне от регистъра, преди да бъде разгърнат отново.

Стъпка 3: Конфигурирайте Nginx

Сега създайте конфигурационен файл на Nginx и го попълнете със следното:

upstream application {
    server localhost:45710;
    server localhost:46710;
    server localhost:47710;
    server localhost:48710;
    server localhost:49710;
}

server {
    listen 0.0.0.0:80;    
    location / {
    expires 1w;
        proxy_pass http://application;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Заменете 0.0.0.0с IP адреса на вашия сървър.

Рестартирайте Nginx, като направите systemctl restart nginx. Отстранете всички грешки, след което преминете към следващата стъпка.

Стъпка 4: Разгръщане на приложението

Разположете приложението, като стартирате bash ./deploy.sh.

Можете да проверите състоянието на вашето приложение с docker ps- ще бъдат създадени 5 изображения, които започват с webapp. Сега отидете http://0.0.0.0:3000/в браузъра си, ще видите отново съобщението „Здравей, Vultr :)“.

И така, каква точно разлика има това?

Ако изпълните сравнителен тест спрямо конфигурацията на балансира натоварването, ще забележите, че се използват повече от ресурсите на сървъра ви, което бихте искали, особено ако приложението ви е изградено на езици като Node, където обикновено би било еднонишково. Ако някога се наложи да надстроите приложението си, можете да го направите и да стартирате отново, за deploy.shда изградите отново изображението и да разположите вашите контейнери.

Оставете коментар

Възходът на машините: Реални приложения на AI

Възходът на машините: Реални приложения на AI

Изкуственият интелект не е в бъдещето, тук е точно в настоящето. В този блог Прочетете как приложенията за изкуствен интелект са повлияли на различни сектори.

DDOS атаки: кратък преглед

DDOS атаки: кратък преглед

Вие също сте жертва на DDOS атаки и сте объркани относно методите за превенция? Прочетете тази статия, за да разрешите вашите запитвания.

Чудили ли сте се как хакерите печелят пари?

Чудили ли сте се как хакерите печелят пари?

Може би сте чували, че хакерите печелят много пари, но чудили ли сте се някога как печелят такива пари? нека обсъдим.

Революционни изобретения на Google, които ще улеснят живота ви.

Революционни изобретения на Google, които ще улеснят живота ви.

Искате ли да видите революционни изобретения на Google и как тези изобретения промениха живота на всяко човешко същество днес? След това прочетете в блога, за да видите изобретенията на Google.

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Концепцията за самоуправляващи се автомобили да тръгват по пътищата с помощта на изкуствен интелект е мечта, която имаме от известно време. Но въпреки няколкото обещания, те не се виждат никъде. Прочетете този блог, за да научите повече…

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Тъй като науката се развива с бързи темпове, поемайки много от нашите усилия, рискът да се подложим на необяснима сингулярност също нараства. Прочетете какво може да означава сингулярността за нас.

Функционалности на референтните архитектурни слоеве за големи данни

Функционалности на референтните архитектурни слоеве за големи данни

Прочетете блога, за да разберете различни слоеве в архитектурата на големи данни и техните функционалности по най-простия начин.

Еволюция на съхранението на данни – инфографика

Еволюция на съхранението на данни – инфографика

Методите за съхранение на данните може да се развиват от раждането на данните. Този блог обхваща развитието на съхранението на данни на базата на инфографика.

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

В този дигитално задвижван свят устройствата за интелигентен дом се превърнаха в решаваща част от живота. Ето няколко невероятни предимства на интелигентните домашни устройства за това как те правят живота ни струващ и по-опростен.

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Наскоро Apple пусна macOS Catalina 10.15.4 допълнителна актуализация за отстраняване на проблеми, но изглежда, че актуализацията причинява повече проблеми, водещи до блокиране на mac машини. Прочетете тази статия, за да научите повече