ВЕБ-РАЗРАБОТКА:

Как масштабировать веб-сайт для обработки большого трафика

Полное решение с пошаговыми инструкциями

Краткое содержание:

Основное преимущество чтения этой статьи заключается в том, что вы узнаете, как использовать балансировщик нагрузки, несколько веб-серверов и стресс-тесты для масштабирования вашего веб-сайта для обработки не менее 10 000 одновременных подключений. Это значительно улучшит время отклика вашего сайта, число запросов в секунду и число одновременных пользователей. Однако для этого потребуется веб-сервер с выделенными процессорами для размещения вашего балансировщика нагрузки и 11 веб-серверов с общим процессором для хранения вашего веб-сайта.

  • Результат: это должно дать среднее время отклика ‹ 100 миллисекунд.
  • NodeBalancer дешевле для сайтов с ‹ 10k одновременных подключений

Мы будем использовать Linode в качестве нашего поставщика облачных услуг, потому что их продукты просты в использовании, доступны по цене, масштабируемы, а их обслуживание клиентов превосходно. Мы будем использовать Nginx в качестве нашего веб-сервера, потому что их продукт бесплатный, обрабатывает большой трафик веб-сайтов и поддерживает 60% из 100 000 лучших веб-сайтов в мире.

# How to Put a High Performance Website on the Internet:
01. How to Host a Website in the Cloud
02. How to Protect a Website From Threats
03. How to Optimize a Website to Load in 1 Second
04. How to Add a Database to a Website
05. How to Protect a Database from Threats
06. How to Backup a Database in the Cloud
07. How to Scale a Website to Handle High Traffic
08. How to Add a Node.js Application to a Website
09. How to Add a Python Application to a Website
10. How to Add a Payment Method to a Website

Оглавление:

  1. Создать балансировщик нагрузки
  2. Обновить запись DNS (не CDN)
  3. Обновить запись DNS (CDN)
  4. Настроить балансировщик нагрузки
  5. Создать учетную запись пользователя
  6. Отключить корневой вход
  7. Отключить аутентификацию по паролю
  8. Оптимизировать операционную систему
  9. Изменить первый веб-сервер
  10. Добавить первый веб-сервер в балансировщик нагрузки
  11. Проведите стресс-тест балансировщика нагрузки
  12. Создание второго веб-сервера
  13. Добавить второй веб-сервер в балансировщик нагрузки
  14. Добавить второй веб-сервер в базу данных
  15. Протестируйте балансировщик нагрузки (Linux)
  16. Протестируйте балансировщик нагрузки (Windows)
  17. Протестируйте балансировщик нагрузки (Mac)
  18. Проведите стресс-тест балансировщика нагрузки
  19. Создать другие веб-серверы
  20. Изменить веб-серверы

Создайте балансировщик нагрузки:

Балансировщик нагрузки — это программа, которая распределяет входящий сетевой трафик с вашего доменного имени на один из многих действующих веб-серверов, содержащих наш веб-сайт. В этом разделе мы создадим виртуальную машину, содержащую наш балансировщик нагрузки, создав linode с четырьмя выделенными процессорами.

# create virtual machine
1. open "linodes" page on linode
2. click "create" button
3. click "linode" menu item
# select linux distribution
1. click image dropdown menu in "choose a distribution" section
2. click "ubuntu 20.04 LTS" menu item
# select datacenter to store virtual machine
1. click region dropdown menu in "region" section
2. select same region as your virtual machine from before
# select monthly plan
1. click "dedicated cpu" tab in "plan" section
2. click "dedicated 8gb" radio button
# finish virtual machine
1. scroll down to "linode label" section
2. enter "load-balancer" into "linode label" text field
3. enter password into "root password" text field
4. scroll down to "add-ons" section
5. check "private ip" checkbox
6. click "create linode" button

Обновите запись DNS (не CDN):

Запись DNS в настоящее время перенаправляет входящий сетевой трафик с вашего доменного имени на виртуальную машину, содержащую наш веб-сайт. В этом разделе мы перенаправим тот же входящий сетевой трафик на виртуальную машину, содержащую наш балансировщик нагрузки, изменив IP-адрес, прикрепленный к нашему доменному имени и субдомену www, в наших записях a/aaaa.

# get ip address of load balancer
1. click "linodes" option in side panel
2. write down ip address of load balancer in "ip address" column
# redirect website traffic from domain to load balancer
1. open "domains" page on linode
2. click your domain name card
3. scroll down to "a/aaaa record" section
4. click "..." link for your domain name
5. click "edit" menu item
6. enter ip address from previous step in "ip address" text field
7. click "save" button
# redirect website traffic from subdomain to load balancer
1. click "..." link for www subdomain
2. click "edit" menu item
3. enter ip address from previous step in "ip address" text field
4. click "save" button
# check status of dns record
1. open "dns check" page on dnschecker
2. enter domain with www subdomain into "example.com" text field
3. click "search" button
4. verify ip address of load balancer 
5. wait up to 72 hours for changes to take effect worldwide

Обновите запись DNS (CDN):

Запись DNS в настоящее время перенаправляет входящий сетевой трафик с вашего доменного имени на виртуальную машину, содержащую наш веб-сайт. В этом разделе мы перенаправим тот же входящий сетевой трафик на виртуальную машину, содержащую наш балансировщик нагрузки, изменив IP-адрес, прикрепленный к нашему доменному имени и субдомену www, в наших записях a/aaaa.

# get ip address of load balancer
1. click "linodes" option in side panel
2. write down ip address of load balancer in "ip address" column
# redirect website traffic from domain to load balancer
1. open "dashboard" page on cloudflare
2. click your domain name card
3. click "dns" option in side panel
4. click "edit" link for your domain
5. enter ip address from previous step in "ipv4 address" text field
6. click "save" button
# redirect website traffic from subdomain to load balancer
4. click "edit" link for your subdomain
5. enter ip address from previous step in "ipv4 address" text field
6. click "save" button

Настройте балансировщик нагрузки:

Веб-сервер Nginx действует как балансировщик нагрузки TCP, который может передавать соединения непосредственно на наши веб-серверы. Это позволяет нам повторно использовать наш веб-сервер, который мы защитили от угроз и оптимизировали для загрузки за одну секунду в предыдущих статьях. В этом разделе мы установим Nginx, загрузим наш файл конфигурации и укажем максимальное количество открытых файлов и рабочих подключений.

  • Он может служить балансировщиком нагрузки HTTP, но для этого требуется гораздо больше работы.
# open console as root user on linode
1. open "linodes" page on linode
2. click "load-balancer" linode
3. click "launch lish console" link
4. press "return" key
5. enter "root" into "login" prompt
6. enter your password into "password" prompt
7. press "return" key
8. paste commands into console
# update package information
sudo apt-get update
# install nginx
sudo apt-get install --yes nginx
# download the nginx configuration file
sudo curl -o /etc/nginx/nginx.conf https://gist.githubusercontent.com/david-littlefield/b4aa97d8c872361d26cd0ca8de85a58c/raw
# store maximum number of open files
open_files=500000
# add maximum number of open files to configuration file
sudo sed "s|#open_files_placeholder#|$open_files|g" -i /etc/nginx/nginx.conf
# store number of worker connections
worker_connections=100000
# add number of worker connections to configuration file
sudo sed "s|#worker_connections_placeholder#|$worker_connections|" -i /etc/nginx/nginx.conf
# close console
exit

Создайте учетную запись пользователя:

Учетная запись пользователя — это объект, который может получать доступ к файлам и выполнять команды. Злоумышленникам будет сложнее взломать наш веб-сервер, так как им потребуется взломать наше имя пользователя еще до того, как они попытаются подобрать наш пароль. В этом разделе мы создадим учетную запись пользователя с правами администратора.

# change "placeholder" to unique username
username="placeholder"
# create new user on virtual machine
sudo adduser $username
# choose password for new user
1. enter password for user account
2. press "return"
3. re-enter password
4. press "return"
5. press "return" to enter the default value
6. enter "y" to confirm information
7. press "return"
# add admin group to sudo file
sudo groupadd admin
# grant administrative permissions to new user
sudo usermod -aG admin $username

Отключите корневой вход:

Пользователь root — это учетная запись пользователя с неограниченным доступом ко всей системе, предустановленная в каждой операционной системе на базе Linux. Это дает злоумышленникам половину информации, необходимой им для взлома нашего веб-сервера. В этом разделе мы предотвратим доступ пользователя root к нашей виртуальной машине, изменив параметр в нашем файле конфигурации SSH.

# disable root login in ssh configuration file
sudo sed "s|PermitRootLogin yes|PermitRootLogin no|g" -i /etc/ssh/sshd_config
# restart ssh
sudo service ssh restart

Отключите аутентификацию по паролю:

Пароль — это метод аутентификации, который становится угрозой, если пароль слишком слабый или используется повторно для многих разных учетных записей. Это позволяет злоумышленникам потенциально взломать пароль методом проб и ошибок. В этом разделе мы предотвратим доступ пользователей к нашей виртуальной машине с использованием аутентификации по паролю, изменив настройку в нашей конфигурации SSH.

# disable password authentication
sudo sed "s|PasswordAuthentication yes|PasswordAuthentication no|" -i /etc/ssh/sshd_config
# restart ssh
sudo service ssh restart

Оптимизируйте операционную систему:

Операционная система оптимизирована для обеспечения наилучшей общей производительности для всех за счет использования одних и тех же значений по умолчанию для веб-серверов и конечных пользователей. В этом разделе мы оптимизируем нашу операционную систему, чтобы она стала высокопроизводительным веб-сервером, увеличив лимиты на количество открытых файлов и максимальные соединения, а также используя более эффективный алгоритм управления перегрузкой TCP.

# store sysctl configurations
sysctl=$(curl https://gist.githubusercontent.com/david-littlefield/a61f9104882de9575f66a841c45060f6/raw)
# add sysctl configurations to sysctl configuration file
sudo echo -e $sysctl >> /etc/sysctl.conf
# reload sysctl configurations
sudo sysctl -p
# store open file limits
limits=$(curl https://gist.githubusercontent.com/david-littlefield/02a78bab0f37c0f759218759db77a43b/raw)
# add open file limits to limits configuration file
sudo echo -e $limits >> /etc/security/limits.conf
# store service configurations
ulimit=$(curl https://gist.githubusercontent.com/david-littlefield/01cbf5baae49bccb691830205eb7d1d4/raw)
# add service configurations to nginx service file
sudo sed "s|\[Service\]|$ulimit|g" -i /lib/systemd/system/nginx.service
# reload systemd configuration
sudo systemctl daemon-reload
# restart nginx
sudo systemctl restart nginx
# close console
exit

Измените первый веб-сервер:

Первый веб-сервер относится к виртуальной машине, содержащей наш веб-сайт, который мы разместили в облаке, защитили от угроз и оптимизировали для загрузки за одну секунду в предыдущих статьях. В этом разделе мы подготовим наш первый веб-сервер к масштабированию, отключив ограничение скорости, создав и записав его частный IP-адрес и перезапустив его, чтобы изменения вступили в силу.

# open console as non-root user on linode
1. open "linodes" page on linode
2. click "website-1" linode
3. click "launch lish console" link
4. press "return" key
5. enter your unique username into "login" prompt
6. enter your password into "password" prompt
7. press "return" key
8. paste commands into console
# disable rate limit in console
sudo sed "s|limit_req|# limit_req|g" -i /etc/nginx/nginx.conf
# close console
exit
# create private ip address
1. click "network" tab
2. click "add ip address" button
3. click "private" radio button
4. click "allocate" button
# write down private ip address of website-1
1. scroll down to "ip addresses" section
2. write down "ipv4 – private" ip address
# restart "website-1" linode
1. click "reboot" button
2. click "reboot linode" button

Добавьте первый веб-сервер в балансировщик нагрузки:

Балансировщик нагрузки пропускает входящий сетевой трафик с вашего доменного имени на веб-серверы, указанные в нашем файле конфигурации. В этом разделе мы добавим наш первый веб-сервер в наш балансировщик нагрузки, добавив частный IP-адрес в наши списки веб-серверов в нашем файле конфигурации.

# open console as non-root user on linode
1. open "linodes" page on linode
2. click "load-balancer" linode
3. click "launch lish console" link
4. press "return" key
5. enter "root" into "login" prompt
6. enter your password into "password" prompt
7. press "return" key
8. paste commands into console
# change placeholder to private ip address of website-1
website_1="placeholder"
# insecure web server
insecure_web_server="server $website_1:80;\n        #insecure_web_server_placeholder#"
# add insecure web server to configuration file
sudo sed "s|#insecure_web_server_placeholder#|$insecure_web_server|g" -i /etc/nginx/nginx.conf
# store secure web server
secure_web_server="server $website_1:443;\n        #secure_web_server_placeholder#"
# add secure web server to configuration file
sudo sed "s|#secure_web_server_placeholder#|$secure_web_server|g" -i /etc/nginx/nginx.conf
# restart nginx
sudo systemctl restart nginx

Выполните стресс-тест балансировщика нагрузки:

Loader — это служба тестирования масштабируемости, которая выполняет стресс-тесты на веб-сайте, используя тысячи одновременных подключений. Это бесплатный инструмент, который мы можем использовать на нашем веб-сайте с числом одновременных подключений до 10 000. В этом разделе мы проведем стресс-тесты нашего балансировщика нагрузки, увеличивая количество одновременных подключений в каждом тесте до тех пор, пока наш балансировщик нагрузки не выйдет из строя.

# create a loader account
1. create an account on loader
2. open "target hosts" page on loader
3. click "new host" button
4. enter your domain with www subdomain into "domain" text field
5. click "next: verify" button
6. copy the verification token
# reopen console as non-root user on linode
1. open "linodes" page on linode
2. click "website-1" linode
3. click "launch lish console" link
4. paste commands into console
# change placeholder to the verification token 
verification_token="placeholder"
# create verification token file
sudo echo -e "$verification_token" > ~/$verification_token.txt
# move verification token file to website directory
sudo mv ~/$verification_token.txt /var/www/html/$verification_token.txt
# complete loader.io verification
1. click "verify" button
2. click "new test" button
# create load balancer test
1. enter "concurrent connections" into "name" text field
2. click "test type" dropdown menu
3. click "clients per second" menu item
4. enter "1000" into "clients" text field
5. enter "20" into "duration" text field
6. click "min" menu item
7. click "sec" menu item
8. click "protocol" dropdown menu
9. click "https" menu item
# test load balancer
1. click "run test" button
2. review average, minimum, and maximum response time
3. review timeout, 400/500, and network errors
# retest load balancer with double concurrent connections
1. click "edit test" icon
2. enter "2000" into "clients" text field
3. click "run test" button
4. review average, minimum, and maximum response time
5. review timeout, 400/500, and network errors
# retest load balancer with double concurrent connections
1. click "edit test" icon
2. enter "4000" into "clients" text field
3. click "run test" button
4. review average, minimum, and maximum response time
5. review timeout, 400/500, and network errors
# retest load balancer with double concurrent connections
1. click "edit test" icon
2. enter "8000" into "clients" text field
3. click "run test" button
4. review average, minimum, and maximum response time
5. review timeout, 400/500, and network errors

Создайте второй веб-сервер:

Второй веб-сервер относится к клону нашего первого веб-сервера, который позволяет нашему балансировщику нагрузки распределять входящий сетевой трафик между обоими веб-серверами. Это позволяет нашему балансировщику нагрузки справляться с более высокими нагрузками трафика при одновременном снижении нагрузки на каждый веб-сервер. В этом разделе мы создадим наш второй веб-сервер, клонировав наш первый веб-сервер, создав и записав его частный IP-адрес и перезапустив его, чтобы изменения вступили в силу.

# create "website-2" linode
1. open "linodes" page on linode
2. click "create" button
3. click "linode" menu item
4. click "clone linode" tab
5. click "website-1" card
# select datacenter to store virtual machine
1. click region dropdown menu in "region" section
2. select same region from before
# select monthly plan
1. click "shared cpu" tab in "plan" section
2. click "nanode 1gb" radio button
# finish virtual machine
1. scroll down to "linode label" section
2. enter "website-2" into "linode label" text field
3. enter password into "root password" text field
4. click "create linode" button
5. wait until linoide finishes
6. click "power on" link
7. click "power on linode" button
# create private ip address
1. click "network" tab
2. click "add ip address" button
3. click "private" radio button
4. click "allocate" button
# write down private ip address of website-2
1. scroll down to "ip addresses" section
2. write down "ipv4 – private" ip address
# restart "website-2" linode
1. click "reboot" button
2. click "reboot linode" button
# open console as non-root user on linode
1. open "linodes" page on linode
2. click "website-2" linode
3. click "launch lish console" link
4. press "return" key
5. enter your unique username into "login" prompt
6. enter your password into "password" prompt
7. press "return" key
8. paste commands into console
# change web server number
sudo sed "s|add_header website 1|add_header website 2|g" -i /etc/nginx/nginx.conf
# restart nginx
sudo systemctl restart nginx
# close console
exit

Добавьте второй веб-сервер в балансировщик нагрузки:

Балансировщик нагрузки пропускает входящий сетевой трафик с вашего доменного имени на веб-серверы, указанные в нашем файле конфигурации. В этом разделе мы добавим наш второй веб-сервер в наш балансировщик нагрузки, добавив частный IP-адрес в списки веб-серверов в нашем файле конфигурации.

  • Он будет вручную добавлен в наш список небезопасных и безопасных веб-серверов.
# open console as non-root user on linode
1. open "linodes" page on linode
2. click "load-balancer" linode
3. click "launch lish console" link
4. press "return" key
5. enter your unique username into "login" prompt
6. enter your password into "password" prompt
7. press "return" key
8. paste commands into console
# open nginx configuration file
sudo vim /etc/nginx/nginx.conf
# add private ip address of website-2 to insecure web servers
1. press "↓" key to scroll down one-time
2. scroll down to "#insecure_web_server_placeholder#" text
3. press "i" key to enter "insert" mode
4. press "return" key to add new line
5. press "↑" key to scroll up to new line
6. press " " key to add whitespace one-time
7. add seven more whitespaces to match format
8. enter ip address using format: "server ip_address:80;"
# add private ip address of website-2 to secure web servers
1. press "↓" key to scroll down one-time
2. scroll down to "#secure_web_server_placeholder#" text
4. press "return" key to add new line
5. press "↑" key to scroll up to new line
6. press " " key to add whitespace one-time
7. add seven more whitespaces to match format
8. enter ip address using format: "server ip_address:443;"
# save changes to configuration file
1. press "esc" key
2. enter ":wq"
3. press "return" key
# restart nginx
sudo systemctl restart nginx

Добавьте второй веб-сервер в базу данных:

База данных защищена брандмауэром, который блокирует все входящие сети, которые явно не разрешены правилом брандмауэра. Это предотвращает попытки злоумышленников подключиться к нашей базе данных со своего удаленного компьютера. В этом разделе мы разрешим нашему второму веб-серверу подключаться к нашей базе данных, создав правило брандмауэра, разрешающее его IP-адрес.

# open console as non-root user
1. open "linodes" page on linode
2. click "website-2" linode
3. find ip address under "ip addresses" label
4. write down ip address
# open console as non-root user on linode
1. open "linodes" page on linode
2. click "database" linode
3. click "launch lish console" link
4. press "return" key
5. enter your unique username into "login" prompt
6. enter your password into "password" prompt
7. press "return" key
8. paste commands into console
# switch to root user
su root
# change "placeholder" to ip address of "website-2" linode
ip_address="placeholder"
# store port
port="5000"
# create firewall rule for ip address in text file
ufw allow from $ip_address to any port $port
# switch back to non-root user
exit
# close console
exit

Протестируйте балансировщик нагрузки (Linux):

Балансировщик нагрузки по умолчанию использует алгоритм циклического перебора для равномерного распределения входящего сетевого трафика между нашими веб-серверами в последовательном порядке. В этом разделе мы будем использовать инструмент командной строки curl для проверки заголовков HTTP, чтобы убедиться, что наш балансировщик нагрузки работает правильно.

# open terminal
1. click “activities” in top-left corner
2. enter “terminal” into search bar
3. click “terminal” icon
# change placeholder to your domain name
domain_name="placeholder.com"
# request headers from website
curl -IL $domain_name
# check http headers
1. request http headers from website several times
2. ensure "website" header switches between 1 and 2

Протестируйте балансировщик нагрузки (Windows):

Балансировщик нагрузки по умолчанию использует алгоритм циклического перебора для равномерного распределения входящего сетевого трафика между нашими веб-серверами в последовательном порядке. В этом разделе мы будем использовать инструмент командной строки curl для проверки заголовков HTTP, чтобы убедиться, что наш балансировщик нагрузки работает правильно.

# open powershell
1. press “⊞ windows”
2. enter “powershell” into search bar
3. click “run as administrator” menu item
# change placeholder to your domain name
$domain_name="placeholder.com"
# request headers from website
curl -method head -usebasicparsing $domain_name
# check http headers
1. request http headers from website several times
2. ensure "website" header switches between 1 and 2

Протестируйте балансировщик нагрузки (Mac):

Балансировщик нагрузки по умолчанию использует алгоритм циклического перебора для равномерного распределения входящего сетевого трафика между нашими веб-серверами в последовательном порядке. В этом разделе мы будем использовать инструмент командной строки curl для проверки заголовков HTTP, чтобы убедиться, что наш балансировщик нагрузки работает правильно.

# open terminal
1. press “command ⌘ + spacebar” keys
2. enter “terminal” into search bar
3. press “return” key
# change placeholder to your domain name
domain_name="placeholder.com"
# request headers from website
curl -IL $domain_name
# check http headers
1. request http headers from website several times
2. ensure "website" header switches between 1 and 2

Выполните стресс-тест балансировщика нагрузки:

Количество одновременных подключений представляет собой количество параллельных запросов, которые могут быть сделаны на нашем веб-сайте в любой момент времени. Он должен увеличиваться с каждым веб-сервером, который мы добавляем в наш балансировщик нагрузки. В этом разделе мы повторим те же стресс-тесты на нашем балансировщике нагрузки, чтобы убедиться, что наше время отклика меньше, а ошибки встречаются реже.

# retest load balancer with 1k concurrent connections
1. open "tests" page on loader
2. click "concurrent connections" link
3. click "edit test" icon
4. enter "1000" into "clients" text field
5. click "run test" button
6. review average, minimum, and maximum response time
7. review timeout, 400/500, and network errors
# retest load balancer with double concurrent connections
1. click "edit test" icon
2. enter "2000" into "clients" text field
3. click "run test" button
4. review average, minimum, and maximum response time
5. review timeout, 400/500, and network errors
# retest load balancer with double concurrent connections
1. click "edit test" icon
2. enter "4000" into "clients" text field
3. click "run test" button
4. review average, minimum, and maximum response time
5. review timeout, 400/500, and network errors
# retest load balancer with double concurrent connections
1. click "edit test" icon
2. enter "8000" into "clients" text field
3. click "run test" button
4. review average, minimum, and maximum response time
5. review timeout, 400/500, and network errors
# retest load balancer with 10k concurrent connections
1. click "edit test" icon
2. enter "10000" into "clients" text field
3. click "run test" button
4. review average, minimum, and maximum response time
5. review timeout, 400/500, and network errors

Создайте другие веб-серверы:

Балансировщик нагрузки может распределять входящий сетевой трафик между сотнями веб-серверов для обработки до миллионов одновременных подключений. В этом разделе мы продолжим масштабировать наш веб-сайт, повторяя шаги из последних разделов, чтобы добавить дополнительные веб-серверы в наш балансировщик нагрузки.

# add web servers to load balancer
1. repeat "create the second web server" section
2. repeat "modify the second web server" section
3. increment web server number in http headers
4. repeat "add the second web server to the load balancer" section
5. repeat "test the load balancer" section
6. repeat "evaluate the load balancer performance" section
7. repeat these steps until desired performance is achieved

Измените веб-серверы:

Ограничение скорости — это функция безопасности, которая ограничивает количество запросов, которые IP-адрес может сделать к каждому из наших веб-серверов за определенный период времени. Это может помочь замедлить атаки подбора паролей методом грубой силы и предотвратить распределенные атаки типа «отказ в обслуживании». Он был отключен на более раннем этапе для выполнения стресс-тестов нашего балансировщика нагрузки. В этом разделе мы включим ограничение скорости на каждом из веб-серверов, перечисленных в нашем балансировщике нагрузки.

# open console as non-root user on linode
1. open "linodes" page on linode
2. click "website-1" linode
3. click "launch lish console" link
4. press "return" key
5. enter your unique username into "login" prompt
6. enter your password into "password" prompt
7. press "return" key
8. paste commands into console
# enable rate limit
sudo sed "s|# limit_req|limit_req|g" -i /etc/nginx/nginx.conf
# close console
exit
# enable rate limit on all web servers
1. repeat same steps for each web server listed in load balancer

Следующие шаги:

Следующие статьи содержат жемчужину сами по себе, но вместе они являются сокровищем.

# How to Put a High Performance Website on the Internet:
01. How to Host a Website in the Cloud
02. How to Protect a Website From Threats
03. How to Optimize a Website to Load in 1 Second
04. How to Add a Database to a Website
05. How to Protect a Database from Threats
06. How to Backup a Database in the Cloud
07. How to Scale a Website to Handle High Traffic
08. How to Add a Node.js Application to a Website
09. How to Add a Python Application to a Website
10. How to Add a Payment Method to a Website