Сохтан ва танзим кардани CDN-и худ

Шабакаҳои интиқоли мундариҷа (CDNs) дар вебсайтҳо ва барномаҳо асосан барои суръат бахшидан ба боркунии унсурҳои статикӣ истифода мешаванд. Ин аз сабаби кэшкунии файлҳо дар серверҳои CDN, ки дар минтақаҳои гуногуни ҷуғрофӣ ҷойгиранд, рӯй медиҳад. Бо дархост кардани маълумот тавассути CDN, корбар онро аз сервери наздиктарин қабул мекунад.

Принсипи кор ва фаъолияти ҳамаи шабакаҳои интиқоли мундариҷа тақрибан якхела аст. Пас аз гирифтани дархост барои зеркашии файл, сервери CDN онро як маротиба аз сервери аслӣ гирифта ба корбар медиҳад ва ҳамзамон онро дар муддати муайян кэш мекунад. Ҳама дархостҳои минбаъда аз кэш ҷавоб дода мешаванд. Ҳама CDNҳо имконоти пешакии файлҳо, тоза кардани кэш, муқаррар кардани мӯҳлати истифода ва ғайра доранд.

Чунин мешавад, ки бо ин ё он сабаб, шумо бояд шабакаи интиқоли мундариҷаи худро ташкил кунед ва сипас - бигзор дастур оид ба васл кардани велосипеди навбатӣ ба мо кӯмак кунад.

Сохтан ва танзим кардани CDN-и худ
Манбаъ: Вектори инфографикӣ аз ҷониби pikisuperstar - www.freepik.com сохта шудааст

Вақте ки шумо ба CDN-и худ ниёз доред

Ҳолатҳоеро баррасӣ кунед, ки дар он ҷо кор кардани CDN-и худ маъно дорад:

  • вақте ки хоҳиши сарфа кардани пул вуҷуд дорад ва хароҷоти ҷорӣ ҳатто ҳангоми истифодаи CDN-ҳои арзон ба монанди BunnyCDN дар як моҳ ба чандсад доллар мерасад
  • агар мо хоҳем, ки кэши доимӣ ё кэшро бидуни ҳамсояҳои сервер ва канал ба даст орем
  • Хидматҳои CDN дар минтақае, ки ба шумо лозим аст, нуқтаҳои ҳузур надоранд
  • ҳама гуна танзимоти махсуси интиқоли мундариҷа талаб карда мешавад
  • мо мехоҳем интиқоли мундариҷаи динамикиро тавассути ҷойгир кардани сервери истеҳсолӣ ба корбарон наздиктар кунем
  • нигаронӣ вуҷуд дорад, ки хидмати CDN-и тарафи сеюм метавонад ба таври ғайриқонунӣ маълумот дар бораи рафтори корбарон ҷамъоварӣ ё истифода барад (салом хидматҳои ба GDPR мувофиқат намекунад) ё ба дигар фаъолиятҳои ғайриқонунӣ машғул шавад.

Дар аксари мавридҳои дигар, истифодаи ҳалли омодаи мавҷуда мувофиқтар аст.

Ба шумо чӣ лозим аст, ки оғоз кунед

Ин хеле аҷиб аст, агар шумо Системаи Мухтори худ (AS) дошта бошед. Бо он, шумо метавонед як IP-ро ба якчанд серверҳо таъин кунед ва мувофиқи ин дастур дар сатҳи шабака корбаронро ба наздиктарин равона кунед. Бояд гуфт, ки ҳатто бо блоки суроғаи /24, шабакаи интиқоли мундариҷаро сохтан мумкин аст. Баъзе провайдерҳои сервер ба шумо имкон медиҳанд, ки барои истифода дар ҳама минтақаҳои ба онҳо дастрас эълон кунед.

Агар шумо соҳиби хушбахтии блоки суроғаҳои IP набошед, пас барои иҷро кардани CDN оддӣ ба шумо лозим меояд:

  • номи домен ё зердомен
  • ҳадди аққал ду сервер дар минтақаҳои гуногун. Сервер метавонад бахшидашуда ё виртуалӣ бошад
  • асбоби geoDNS. Бо он, корбар, ки ба домен муроҷиат карда, ба сервери наздиктарин равона карда мешавад

Доменро ба қайд гиред ва серверҳоро фармоиш диҳед

Ҳангоми бақайдгирии домен ҳама чиз оддӣ аст - мо дар ҳама минтақа бо ягон бақайдгиранда сабти ном мекунем. Шумо инчунин метавонед зердоменро барои CDN истифода баред, масалан чизе монанди cdn.domainname.com. Дар асл, дар мисоли мо, мо маҳз ҳамин тавр мекунем.

Дар мавриди фармоиш додани серверҳо, онҳо бояд дар минтақаҳо ва кишварҳое, ки аудиторияи корбари шумо ҷойгиранд, ба иҷора гирифта шаванд. Агар лоиҳа байниконтиненталӣ бошад, пас интихоби провайдерҳои хостинг, ки серверҳоро дар тамоми ҷаҳон якбора пешниҳод мекунанд, қулай аст. Мисолҳо: ОВО, Иҷораи веб и 100Тб - барои серверҳои махсус, Vultr и DigitalOcean — барои абри маҷозӣ*.

Барои CDN-и хусусии мо, мо 3 сервери виртуалиро дар қитъаҳои гуногун фармоиш медиҳем. Дар Vultr дар сервер барои $5/моҳа мегирем 25GB SSD ҷойҳо ва 1TB трафик. Ҳангоми насб, Debian-и навтаринро интихоб кунед. Серверҳои мо:

Сохтан ва танзим кардани CDN-и худ Франкфурт, ip: 199.247.18.199

Сохтан ва танзим кардани CDN-и худ Чикаго, ip: 149.28.121.123

Сохтан ва танзим кардани CDN-и худ Сингапур, ip: 157.230.240.216

*Vultr ва DigitalOcean ба корбароне, ки дарҳол пас аз илова кардани усули пардохт тавассути истинодҳои мақола сабти ном мешаванд, 100 доллар қарз ваъда медиҳанд. Муаллиф аз ин хам таърифи хурде мегирад, ки холо барои у хеле мухим аст. Лутфан фаҳмо бошед.

Танзими geoDNS

Барои он ки корбар ҳангоми дастрасӣ ба домен ё зердомени CDN ба сервери дилхоҳ (наздиктарин) равона шавад, ба мо сервери DNS бо функсияи geoDNS лозим аст.

Принсип ва кори geoDNS чунин аст:

  1. IP-и муштарӣ, ки дархости DNS-ро фиристодааст, ё IP-и сервери рекурсивии DNS, ки ҳангоми коркарди дархости муштарӣ истифода мешавад, муайян мекунад. Чунин серверҳои рекурсивӣ одатан DNS-и провайдерҳо мебошанд.
  2. IP-и муштарӣ кишвар ё минтақаи ӯро эътироф мекунад. Барои ин, пойгоҳи додаҳои GeoIP истифода мешаванд, ки имрӯз шумораи зиёди онҳо мавҷуданд. Хуб ҳастанд имконоти ройгон.
  3. Вобаста аз ҷойгиршавии муштарӣ, ба ӯ суроғаи IP-и сервери наздиктарин CDN медиҳад.

Сервери DNS бо функсияи geoDNS метавонад бошад худатон ҷамъ кунед, аммо беҳтар аст, ки ҳалли тайёрро бо шабакаи серверҳои DNS дар саросари ҷаҳон истифода баред ва Anycast аз қуттӣ:

  • CloudDNS аз он $9.95/моҳа, тарофаи GeoDNS, ба таври нобаёнӣ як DNS Failover вуҷуд дорад
  • Зилор аз он $25/моҳа, DNS Failover фаъол аст
  • Роҳи Amazon 53 аз он $35/моҳа барои гео-дархостҳои холис 50M. DNS Failover алоҳида ҳисоб карда мешавад
  • DNS осон шудааст аз он $125/моҳа, 10 Failovers DNS вуҷуд дорад
  • Cloudflare, Хусусияти "Geo Steering" дар нақшаҳои Enterprise дастрас аст

Ҳангоми фармоиш додани geoDNS, шумо бояд ба шумораи дархостҳои ба тарофа дохилшуда диққат диҳед ва дар хотир доред, ки шумораи воқеии дархостҳо ба домен метавонад аз интизориҳо якчанд маротиба зиёдтар бошад. Миллионҳо тортанакҳо, сканерҳо, спамерҳо ва дигар рӯҳҳои бад беист кор мекунанд.

Қариб ҳамаи хидматҳои DNS дорои хидмати ҳатмӣ барои сохтани CDN - DNS Failover мебошанд. Бо кӯмаки он, шумо метавонед мониторинги кори серверҳои худро танзим кунед ва дар сурати мавҷуд набудани аломатҳои ҳаёт, суроғаи сервери корношоямро ба таври худкор бо суроғаи эҳтиётӣ дар посухҳои DNS иваз кунед.

Барои сохтани CDN-и худ, мо истифода хоҳем кард CloudDNS, тарифи GeoDNS.

Биёед дар ҳисоби шахсии шумо як минтақаи нави DNS илова кунем, ки домени худро муайян мекунад. Агар мо CDN-ро дар зердомен бунёд кунем ва домени асосӣ аллакай истифода шуда бошад, пас фавран пас аз илова кардани минтақа, илова кардани сабтҳои мавҷудаи DNS-ро фаромӯш накунед. Қадами навбатӣ эҷоди якчанд сабтҳои A барои домени CDN / зердомен мебошад, ки ҳар кадоми онҳо ба минтақае, ки мо нишон додем татбиқ карда мешаванд. Шумо метавонед қитъаҳо ё кишварҳоро ҳамчун минтақаҳо муайян кунед, зерминтақаҳо барои ИМА ва Канада дастрасанд.

Дар ҳолати мо, CDN дар зердомен баланд карда мешавад cdn.sayt.in. Бо илова кардани минтақа sayt.in, аввалин сабти A-ро барои зердомен эҷод кунед ва тамоми Амрикои Шимолиро ба сервер дар Чикаго нишон диҳед:

Сохтан ва танзим кардани CDN-и худ
Биёед амалро барои минтақаҳои дигар такрор кунем ва дар хотир дорем, ки барои минтақаҳои пешфарз як вуруд эҷод кунем. Ин аст он чизе ки дар охир рӯй медиҳад:

Сохтан ва танзим кардани CDN-и худ

Воридоти охирини пешфарз дар скриншот маънои онро дорад, ки ҳама минтақаҳои номаълум (ва инҳо Аврупо, Африқо, корбарони интернети моҳвораӣ ва ғайра мебошанд) ба сервери Франкфурт фиристода мешаванд.

Ин танзимоти асосии DNS-ро ба анҷом мерасонад. Он боқӣ мемонад, ки ба вебсайти бақайдгирии доменҳо гузаред ва NS-ҳои домени ҷорӣро бо онҳое, ки аз ҷониби ClouDNS дода шудаанд, иваз кунед. Ва дар ҳоле ки NS навсозӣ мешавад, мо серверҳоро омода мекунем.

Насби сертификатҳои SSL

CDN-и мо тавассути HTTPS кор хоҳад кард, бинобар ин, агар шумо аллакай сертификатҳои SSL барои домен ё зердомен дошта бошед, онҳоро ба ҳама серверҳо, масалан, ба директория бор кунед. /etc/ssl/domain/

Агар ягон сертификат мавҷуд набошад, шумо метавонед аз Let's Encrypt сертификати ройгон гиред. Барои ин комил ACME Shellscript. Муштарӣ барои насб кардан қулай ва осон аст ва муҳимтар аз ҳама, он ба шумо имкон медиҳад, ки домен/ зердоменро тавассути DNS тавассути ClouDNS API тасдиқ кунед.

Мо acme.sh -ро танҳо дар яке аз серверҳо насб мекунем - European 199.247.18.199, ки аз он сертификатҳо ба ҳамаи дигарон нусхабардорӣ карда мешаванд. Барои насб кардан, иҷро кунед:

root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrc

Ҳангоми насб кардани скрипт, кори CRON барои тамдиди минбаъдаи сертификатҳо бидуни иштироки мо таъсис дода мешавад.

Ҳангоми додани сертификат, домен бо истифода аз DNS бо истифода аз API тафтиш карда мешавад, аз ин рӯ дар ҳисоби шахсии ClouDNS дар менюи Reseller API шумо бояд API-и нави корбар эҷод кунед ва барои он парол таъин кунед. ID-и натиҷавӣ бо парол дар файл навишта мешавад ~/.acme.sh/dnsapi/dns_cloudns.sh (бо файл омехта нашавад dns_clouddns.sh). Инҳо сатрҳое ҳастанд, ки бояд шарҳ ва таҳрир карда шаванд:

CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<пароль>"

Ҳоло мо барои сертификати SSL дархост хоҳем кард cdn.sayt.in

root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"

Дар вариантҳо, барои оянда, мо фармонеро муайян кардем, ки конфигуратсияи веб-серверро ба таври худкор аз нав бор кардан пас аз ҳар як тамдиди мӯҳлати эътибори сертификат дар оянда.

Тамоми раванди гирифтани сертификат метавонад то 2 дақиқа тӯл кашад, ба он халал нарасонед. Агар хатои тасдиқи домен рух диҳад, кӯшиш кунед, ки фармонро дубора иҷро кунед. Дар охир мо мебинем, ки сертификатҳо дар куҷо бор карда шудаанд:

Сохтан ва танзим кардани CDN-и худ

Ин роҳҳоро дар хотир нигоҳ доред, онҳо бояд ҳангоми нусхабардории сертификат ба серверҳои дигар ва инчунин дар танзимоти веб-сервер муайян карда шаванд. Мо ба хатогии аз нав боркунии конфигуратсияҳои Nginx аҳамият намедиҳем - ҳангоми навсозии сертификатҳо он дар сервери пурра танзимшуда нахоҳад буд.

Ҳама чизе, ки мо барои SSL мондаем, нусхабардории сертификати гирифташуда ба ду сервери дигар ҳангоми нигоҳ доштани роҳ ба файлҳо мебошад. Биёед дар ҳар яки онҳо ҳамон директорияҳоро эҷод кунем ва нусхабардорӣ кунем:

root@cdn:~# mkdir -p /root/.acme.sh/cdn.sayt.in/
root@cdn:~# scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/

Барои мунтазам нав кардани сертификатҳо, дар ҳарду сервер бо фармони зерин кори ҳаррӯзаи CRON эҷод кунед:

scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload

Дар ин ҳолат, дастрасӣ ба сервери манбаи дурдаст бояд танзим карда шавад бо калид, яъне. бе ворид кардани парол. Ин корро фаромӯш накунед.

Насб ва конфигуратсияи Nginx

Барои хидматрасонии мундариҷаи статикӣ, мо Nginx-ро истифода хоҳем кард, ки ҳамчун сервери прокси кэш танзим шудааст. Рӯйхати бастаҳоро навсозӣ кунед ва онро дар ҳар се сервер насб кунед:

root@cdn:~# apt update
root@cdn:~# apt install nginx

Ба ҷои пешфарз, мо конфигуратсияро аз спойлер дар зер истифода мебарем:
nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 4096;
    multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log off;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_vary on;
    gzip_types text/plain application/javascript text/javascript text/css application/json application/xml text/xml application/rss+xml;
    gunzip on;            

    proxy_temp_path    /var/cache/tmp;
    proxy_cache_path   /var/cache/cdn levels=1:2 keys_zone=cdn:64m max_size=20g inactive=7d;
    proxy_cache_bypass $http_x_update;

server {
  listen 443 ssl;
  server_name cdn.sayt.in;

  ssl_certificate /root/.acme.sh/cdn.sayt.in/cdn.sayt.in.cer;
  ssl_certificate_key /root/.acme.sh/cdn.sayt.in/cdn.sayt.in.key;

  location / {
    proxy_cache cdn;
    proxy_cache_key $uri$is_args$args;
    proxy_cache_valid 90d;
    proxy_pass https://sayt.in;
    }
  }
}

Дар конфигуратсия таҳрир кунед:

  • ҳадди_андоза — андозаи кэш, на бештар аз фазои мавҷудаи диск
  • ғайрифаъол - вақти нигоҳдории маълумоти кэшшуда, ки ҳеҷ кас ба он дастрасӣ надошт
  • ssl_certificate и ssl_certificate_key — роҳҳо ба сертификати SSL ва файлҳои калидӣ
  • proxy_cache_valid - вақти нигоҳдории маълумоти кэшшуда
  • proxy_pass — суроғаи сервери аслӣ, ки аз он CDN файлҳоро барои кэш дархост мекунад. Дар мисоли мо ин sayt.in

Тавре ки шумо мебинед, ҳама чиз оддӣ аст. Мушкилот танҳо ҳангоми муқаррар кардани вақти кэш аз сабаби шабоҳати дастурҳо ба миён меояд ғайрифаъол и proxy_cache_valid. Биёед онҳоро бо мисоли худ таҳлил кунем. Ин аст он чизе ки вақте рӯй медиҳад ғайрифаъол = 7г и proxy_cache_valid 90d:

  • агар дархост дар давоми 7 рӯз такрор нашавад, пас аз ин муддат маълумот аз кэш нест карда мешавад
  • агар дархост ҳадди аққал як маротиба дар 7 рӯз такрор шавад, пас маълумот дар кэш пас аз 90 рӯз кӯҳна ҳисобида мешавад ва Nginx онро бо дархости навбатӣ навсозӣ мекунад ва онро аз сервери аслӣ мегирад

Таҳрир кардан анҷом ёфт nginx.conf, конфигуратсияро аз нав бор кунед:

root@cdn:~# service nginx reload

CDN-и мо омода аст. Барои $ 15 / моҳ. мо нуқтаҳои ҳузур дар се қитъа ва 3 TB трафик гирифтем: 1 TB дар ҳар як макон.

Санҷиши кори CDN

Биёед ба пингҳо ба CDN-и худ аз маконҳои гуногуни ҷуғрофӣ назар кунем. Ҳар як хидмати пинг барои ин кор хоҳад кард.

Нуқтаи оғозёбӣ
Идоракунанда
IP
Вақти миёна, мс

Олмон Берлин
cdn.sayt.in
199.247.18.199
9.6

Нидерландия, Амстердам
cdn.sayt.in
199.247.18.199
10.1

Фаронса Париж
cdn.sayt.in
199.247.18.199
16.3

Британияи Кабир, Лондон
cdn.sayt.in
199.247.18.199
14.9

Канада, Торонто
cdn.sayt.in
149.28.121.123
16.2

ИМА, Сан-Франсиско
cdn.sayt.in
149.28.121.123
52.7

ИМА, Даллас
cdn.sayt.in
149.28.121.123
23.1

ИМА, Чикаго
cdn.sayt.in
149.28.121.123
2.6

ИМА, Ню Йорк
cdn.sayt.in
149.28.121.123
19.8

Сингапур
cdn.sayt.in
157.230.240.216
1.7

Ҷопон Токио
cdn.sayt.in
157.230.240.216
74.8

Австралия, Сидней
cdn.sayt.in
157.230.240.216
95.9

Натичахо хубанд. Ҳоло мо тасвири санҷиширо дар решаи сайти асосӣ ҷойгир мекунем test.jpg ва суръати зеркашии онро тавассути CDN санҷед. Гуфта мешавад - сохта. Мундариҷа зуд интиқол дода мешавад.

Биёед як скрипти хурдро нависед, агар мо хоҳем, ки кэшро дар нуқтаи CDN тоза кунем.
purge.sh

#!/bin/bash
if [ -z "$1" ]
then
    echo "Purging all cache"
    rm -rf /var/cache/cdn/*
else
    echo "Purging $1"
    FILE=`echo -n "$1" | md5sum | awk '{print $1}'`
    FULLPATH=/var/cache/cdn/${FILE:31:1}/${FILE:29:2}/${FILE}
    rm -f "${FULLPATH}"
fi

Барои нест кардани тамоми кэш, танҳо онро иҷро кунед, файли алоҳидаро метавон чунин тоза кард:

root@cdn:~# ./purge.sh /test.jpg

Ба ҷои ба хулоса омадан

Ниҳоят, ман мехоҳам чанд маслиҳати муфид диҳам, то дарҳол аз болои раке қадам занам, ки он вақт сарамро дард мекард:

  • Барои баланд бардоштани таҳаммулпазирии хатогиҳои CDN, тавсия дода мешавад, ки DNS Failover-ро танзим кунед, ки барои зуд тағир додани сабти A дар ҳолати вайрон шудани сервер кӯмак мекунад. Ин дар панели идоракунии сабтҳои DNS домен анҷом дода мешавад.
  • Сайтҳое, ки фарогирии васеи ҷуғрофӣ доранд, бешубҳа шумораи зиёди CDN-ро талаб мекунанд, аммо биёед фанатик набошем. Агар шумо серверҳоро дар 6-7 макон ҷойгир кунед: Аврупо, Амрикои Шимолӣ (шарқ), Амрикои Шимолӣ (ғарб), Сингапур, Австралия, Ҳонконг ё Ҷопон эҳтимоли корбар дар муқоиса бо CDN-и пулакӣ фарқияти ҷиддиро мушоҳида намекунад.
  • Баъзан hosters истифодаи серверҳои иҷораро барои мақсадҳои CDN иҷозат намедиҳад. Аз ин рӯ, агар шумо ногаҳон тасмим гиред, ки шабакаи интиқоли мундариҷаро ҳамчун хидмат ҷойгир кунед, пешакӣ хондани қоидаҳои як провайдери хостингро фаромӯш накунед.
  • Омӯхтан харитаи алокаи зериобйки континентхо чи тавр ба хам пайвастанд ва инро хангоми сохтани шабакаи тахвили мундариҷа ба назар гиранд
  • Кӯшиш кунед, ки тафтиш кунед пингҳо аз ҷойҳои гуногун ба серверҳои шумо. Бо ин роҳ шумо метавонед минтақаҳои наздиктаринро ба нуқтаҳои CDN бубинед ва GeoDNS-ро дурусттар танзим кунед
  • Вобаста аз вазифаҳо, танзим кардани Nginx барои талаботи мушаххаси кэш ва бо назардошти сарбории сервер муфид хоҳад буд. Мақолаҳо дар бораи кэши Nginx ба ман дар ин кор кӯмак карданд - дар ин ҷо ва тезонидани кор дар зери бори вазнин: дар ин ҷо и дар ин ҷо

Манбаъ: will.com