Adeiladu a ffurfweddu eich CDN

Defnyddir Rhwydweithiau Cyflenwi Cynnwys (CDNs) mewn gwefannau a chymwysiadau yn bennaf i gyflymu llwytho elfennau statig. Mae hyn yn digwydd oherwydd bod ffeiliau'n cael eu storio ar weinyddion CDN sydd wedi'u lleoli mewn gwahanol ranbarthau daearyddol. Trwy ofyn am ddata trwy CDN, mae'r defnyddiwr yn ei dderbyn gan y gweinydd agosaf.

Mae egwyddor gweithrediad ac ymarferoldeb pob rhwydwaith darparu cynnwys fwy neu lai yr un peth. Ar Γ΄l derbyn cais i lawrlwytho ffeil, mae'r gweinydd CDN yn ei gymryd un-amser o'r gweinydd gwreiddiol ac yn ei roi i'r defnyddiwr, gan ei gadw ar yr un pryd am gyfnod penodol o amser. Mae pob cais dilynol yn cael ei ateb o'r storfa. Mae gan bob CDN opsiynau i raglwytho ffeiliau, clirio'r storfa, gosod y dyddiad dod i ben, a mwy.

Mae'n digwydd bod angen i chi, am ryw reswm neu'i gilydd, drefnu eich rhwydwaith cyflwyno cynnwys eich hun, ac yna - gadewch i'r cyfarwyddiadau ar gyfer gosod y beic nesaf fod o gymorth i ni.

Adeiladu a ffurfweddu eich CDN
Ffynhonnell: Fector infograffig wedi'i greu gan pikisuperstar - www.freepik.com

Pan fyddwch angen eich CDN eich hun

Ystyriwch yr achosion lle mae rhedeg eich CDN eich hun yn gwneud synnwyr:

  • pan fo awydd i arbed arian, a chostau rhedeg hyd yn oed wrth ddefnyddio CDN rhad fel BunnyCDN swm i rai cannoedd o ddoleri y mis
  • os ydym am gael storfa barhaol neu storfa heb weinydd a chymdogion sianel
  • Nid oes gan wasanaethau CDN bwyntiau presenoldeb yn y rhanbarth sydd ei angen arnoch
  • unrhyw osodiadau cyflwyno cynnwys arbennig sydd eu hangen
  • rydym am gyflymu'r broses o ddarparu cynnwys deinamig trwy osod y gweinydd cynhyrchu yn agosach at ddefnyddwyr
  • mae pryder y gallai gwasanaeth CDN trydydd parti gasglu neu ddefnyddio gwybodaeth yn anghyfreithlon am ymddygiad defnyddwyr (helo gwasanaethau nad ydynt yn cydymffurfio Γ’ GDPR) neu gymryd rhan mewn gweithgareddau anghyfreithlon eraill

Yn y rhan fwyaf o achosion eraill, mae'n fwy priodol defnyddio datrysiadau parod presennol.

Beth sydd angen i chi ddechrau

Mae'n wych os oes gennych chi'ch System Ymreolaethol (AS) eich hun. Ag ef, gallwch chi aseinio'r un IP i sawl gweinydd a yn ol y cyfarwyddyd hwn ar lefel y rhwydwaith, cyfeiriwch ddefnyddwyr at yr un agosaf. Mae'n werth dweud, hyd yn oed gyda'r bloc cyfeiriad /24, mae'n bosibl adeiladu rhwydwaith darparu cynnwys. Mae rhai darparwyr gweinyddwyr yn caniatΓ‘u ichi wneud cyhoeddiad i'w ddefnyddio ym mhob rhanbarth sydd ar gael iddynt.

Os nad ydych yn berchennog hapus ar floc o gyfeiriadau IP, yna i redeg CDN syml bydd angen:

  • enw parth neu is-barth
  • o leiaf dau weinydd mewn gwahanol ranbarthau. Gall y gweinydd fod naill ai'n ymroddedig neu'n rhithwir
  • teclyn geoDNS. Ag ef, bydd y defnyddiwr, ar Γ΄l mynd i'r afael Γ’'r parth, yn cael ei gyfeirio at y gweinydd agosaf

Cofrestru parth ac archebu gweinyddwyr

Gyda chofrestru parth, mae popeth yn syml - rydym yn cofrestru mewn unrhyw barth gydag unrhyw gofrestrydd. Gallwch hefyd ddefnyddio is-barth ar gyfer CDN, er enghraifft rhywbeth tebyg cdn.domainname.com. A dweud y gwir, yn ein hesiampl ni, fe wnawn ni'n union hynny.

O ran archebu gweinyddwyr, dylid eu rhentu yn y rhanbarthau a'r gwledydd lle mae'ch cynulleidfa ddefnyddwyr wedi'i lleoli. Os yw'r prosiect yn rhyng-gyfandirol, yna mae'n gyfleus dewis darparwyr cynnal sy'n cynnig gweinyddwyr ledled y byd ar unwaith. Enghreifftiau: OVH, gwe les ΠΈ 100TB - ar gyfer gweinyddwyr pwrpasol, Vultr ΠΈ Ocean digidol β€” ar gyfer cwmwl rhithwir*.

Ar gyfer ein CDN preifat, byddwn yn archebu 3 gweinydd rhithwir ar wahanol gyfandiroedd. Yn Vultr ar y gweinydd ar gyfer $5 y mis byddwn yn cael 25GB AGC lleoedd a 1TB o draffig. Wrth osod, dewiswch y Debian diweddaraf. Ein gweinyddion:

Adeiladu a ffurfweddu eich CDN Frankfurt, ip: 199.247.18.199

Adeiladu a ffurfweddu eich CDN Chicago, ip: 149.28.121.123

Adeiladu a ffurfweddu eich CDN Singapore, ip: 157.230.240.216

* Mae Vultr a DigitalOcean yn addo credyd o $100 i ddefnyddwyr sy'n cofrestru trwy'r dolenni yn yr erthygl yn syth ar Γ΄l ychwanegu dull talu. Derbynia yr awdwr hefyd ganmoliaeth fechan oddiwrth hyn, yr hyn sydd arwyddocaol iawn iddo yn awr. Byddwch yn ddeallus os gwelwch yn dda.

Sefydlu geoDNS

Er mwyn i'r defnyddiwr gael ei gyfeirio at y gweinydd dymunol (agosaf) wrth gyrchu parth neu is-barth CDN, mae angen gweinydd DNS arnom gyda'r swyddogaeth geoDNS.

Mae egwyddor a gweithrediad geoDNS fel a ganlyn:

  1. Yn nodi IP y cleient a anfonodd y cais DNS, neu IP y gweinydd DNS ailadroddus a ddefnyddir wrth brosesu cais y cleient. Mae gweinyddwyr ailadroddus o'r fath fel arfer yn DNS-s o ddarparwyr.
  2. Mae IP y cleient yn cydnabod ei wlad neu ranbarth. Ar gyfer hyn, defnyddir cronfeydd data GeoIP, y mae llawer iawn ohonynt heddiw. Mae da opsiynau am ddim.
  3. Yn dibynnu ar leoliad y cleient, yn rhoi cyfeiriad IP y gweinydd CDN agosaf iddo.

Gall gweinydd DNS gyda swyddogaeth geoDNS fod ymgynnull ar eich pen eich hun, ond mae'n well defnyddio atebion parod gyda rhwydwaith o weinyddion DNS ledled y byd a Anycast o'r bocs:

  • CloudDNS o $9.95 y mis, tariff GeoDNS, yn ddiofyn mae un Methiant DNS
  • Zilore o $25 y mis, DNS Failover wedi'i alluogi
  • Llwybr Amazon 53 o $35 y mis am geo-geisiadau net o 50M. Mae DNS Failover yn cael ei bilio ar wahΓ’n
  • DNS Wedi'i Wneud yn Hawdd o $125 y mis, mae yna 10 Methiant DNS
  • Cloudflare, Mae nodwedd "Geo Steering" ar gael mewn cynlluniau Menter

Wrth archebu geoDNS, dylech dalu sylw i nifer y ceisiadau sydd wedi'u cynnwys yn y tariff a chadw mewn cof y gall nifer gwirioneddol y ceisiadau i'r parth fod yn fwy na'r disgwyliadau sawl gwaith. Mae miliynau o bryfed cop, sganwyr, sbamwyr ac ysbrydion drwg eraill yn gweithio'n ddiflino.

Mae bron pob gwasanaeth DNS yn cynnwys gwasanaeth anhepgor ar gyfer adeiladu CDN - Methiant DNS. Gyda'i help, gallwch sefydlu monitro gweithrediad eich gweinyddwyr ac, yn absenoldeb arwyddion o fywyd, yn awtomatig disodli cyfeiriad gweinydd nad yw'n gweithio gydag un wrth gefn mewn ymatebion DNS.

I adeiladu ein CDN, byddwn yn defnyddio CloudDNS, tariff GeoDNS.

Gadewch i ni ychwanegu parth DNS newydd yn eich cyfrif personol, gan nodi'ch parth. Os ydym yn adeiladu CDN ar is-barth, a bod y prif barth eisoes yn cael ei ddefnyddio, yna yn syth ar Γ΄l ychwanegu'r parth, peidiwch ag anghofio ychwanegu'r cofnodion DNS gweithio presennol. Y cam nesaf yw creu sawl cofnod A ar gyfer y parth / is-barth CDN, a bydd pob un ohonynt yn cael ei gymhwyso i'r rhanbarth a nodwyd gennym. Gallwch nodi cyfandiroedd neu wledydd fel rhanbarthau, mae isranbarthau ar gael ar gyfer UDA a Chanada.

Yn ein hachos ni, bydd y CDN yn cael ei godi ar is-barth cdn.sayt.in. Trwy ychwanegu parth sayt.in, creu'r cofnod A cyntaf ar gyfer yr is-barth a phwyntio Gogledd America i gyd at y gweinydd yn Chicago:

Adeiladu a ffurfweddu eich CDN
Gadewch i ni ailadrodd y camau gweithredu ar gyfer rhanbarthau eraill, gan gofio creu un cofnod ar gyfer y rhanbarthau diofyn. Dyma beth sy'n digwydd yn y diwedd:

Adeiladu a ffurfweddu eich CDN

Mae'r cofnod rhagosodedig olaf yn y sgrin yn golygu y bydd yr holl ranbarthau amhenodol (a'r rhain yw Ewrop, Affrica, defnyddwyr Rhyngrwyd lloeren, ac ati) yn cael eu hanfon at y gweinydd yn Frankfurt.

Mae hyn yn cwblhau'r gosodiad DNS sylfaenol. Mae'n aros i fynd i wefan y cofrestrydd parth a disodli'r NSs parth cyfredol gyda'r rhai a gyhoeddir gan CloudDNS. Ac er y bydd yr NSs yn cael eu diweddaru, byddwn yn paratoi'r gweinyddwyr.

Gosod tystysgrifau SSL

Bydd ein CDN yn gweithio dros HTTPS, felly os oes gennych eisoes dystysgrifau SSL ar gyfer parth neu is-barth, uwchlwythwch nhw i bob gweinydd, er enghraifft, i'r cyfeiriadur /etc/ssl/eich parth/

Os nad oes tystysgrifau, gallwch gael un am ddim gan Let's Encrypt. Perffaith ar gyfer hyn Sgript Cregyn ACME. Mae'r cleient yn gyfleus ac yn hawdd i'w sefydlu, ac yn bwysicaf oll, mae'n caniatΓ‘u ichi ddilysu parth / is-barth gan DNS trwy API ClouDNS.

Byddwn yn gosod acme.sh ar un o'r gweinyddwyr yn unig - 199.247.18.199 Ewropeaidd, y bydd tystysgrifau'n cael eu copΓ―o ohono i'r holl weinyddion eraill. I osod, rhedeg:

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

Yn ystod gosod y sgript, bydd swydd CRON yn cael ei chreu ar gyfer adnewyddu tystysgrifau ymhellach heb ein cyfranogiad.

Wrth gyhoeddi tystysgrif, bydd y parth yn cael ei wirio gan ddefnyddio DNS gan ddefnyddio'r API, felly yn y cyfrif personol ClouDNS yn newislen Reseller API, mae angen i chi greu API defnyddiwr newydd a gosod cyfrinair ar ei gyfer. Bydd yr auth-id canlyniadol gyda chyfrinair yn cael ei ysgrifennu yn y ffeil ~/.acme.sh/dnsapi/dns_cloudns.sh (peidio Γ’ chael ei gymysgu Γ’ ffeil dns_clouddns.sh). Dyma'r llinellau sydd angen eu diystyru a'u golygu:

CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<ΠΏΠ°Ρ€ΠΎΠ»ΡŒ>"

Nawr byddwn yn gofyn am dystysgrif SSL ar gyfer cdn.sayt.in

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

Yn yr opsiynau, ar gyfer y dyfodol, rydym wedi nodi gorchymyn i ail-lwytho'r cyfluniad gweinydd gwe yn awtomatig ar Γ΄l pob adnewyddiad o gyfnod dilysrwydd y dystysgrif yn y dyfodol.

Gall y broses gyfan o gael tystysgrif gymryd hyd at 2 funud, peidiwch Γ’ thorri ar ei draws. Os bydd gwall dilysu parth yn digwydd, ceisiwch redeg y gorchymyn eto. Ar y diwedd byddwn yn gweld lle mae'r tystysgrifau wedi'u llwytho i fyny:

Adeiladu a ffurfweddu eich CDN

Cofiwch y llwybrau hyn, bydd angen eu nodi wrth gopΓ―o'r dystysgrif i weinyddion eraill, yn ogystal ag yn y gosodiadau gweinydd gwe. Nid ydym yn rhoi sylw i'r gwall wrth ail-lwytho configs Nginx - ni fydd ar weinydd wedi'i ffurfweddu'n llawn wrth ddiweddaru tystysgrifau.

Y cyfan sydd gennym ar Γ΄l i SSL yw copΓ―o'r dystysgrif a dderbyniwyd i ddau weinydd arall wrth gynnal y llwybr i'r ffeiliau. Gadewch i ni greu'r un cyfeiriaduron ar bob un ohonynt a gwneud copi:

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/

I ddiweddaru tystysgrifau yn rheolaidd, crΓ«wch swydd CRON dyddiol ar y ddau weinydd gyda'r gorchymyn:

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

Yn yr achos hwn, rhaid ffurfweddu mynediad i'r gweinydd ffynhonnell bell gan allwedd, h.y. heb fynd i mewn i gyfrinair. Peidiwch ag anghofio ei wneud.

Gosod a ffurfweddu Nginx

I wasanaethu cynnwys statig, byddwn yn defnyddio Nginx wedi'i ffurfweddu fel gweinydd dirprwy caching. Diweddarwch y rhestrau pecyn a'i osod ar bob un o'r tri gweinydd:

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

Yn lle'r rhagosodiad, rydym yn defnyddio'r ffurfwedd o'r sbwyliwr isod:
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;
    }
  }
}

Golygu yn y ffurfwedd:

  • uchafswm_maint - maint y storfa, heb fod yn fwy na'r gofod disg sydd ar gael
  • anweithgar - amser storio data wedi'i storio na chafodd neb fynediad iddo
  • tystysgrif ssl_ ΠΈ ssl_certificate_key β€” llwybrau i dystysgrif SSL a ffeiliau allweddol
  • dirprwy_cache_valid - amser storio data wedi'i storio
  • dirprwy_pass β€” cyfeiriad y gweinydd gwreiddiol y bydd y CDN yn gofyn amdano i gadw ffeiliau. Yn ein hesiampl, hyn sayt.in

Fel y gwelwch, mae popeth yn syml. Dim ond oherwydd tebygrwydd y cyfarwyddebau y gall anhawster godi wrth osod yr amser caching anweithgar ΠΈ dirprwy_cache_valid. Gadewch i ni eu dadansoddi gyda'n hesiampl. Dyma beth sy'n digwydd pryd anactif=7d ΠΈ dirprwy_cache_valid 90d:

  • os na chaiff y cais ei ailadrodd o fewn 7 diwrnod, yna bydd y data'n cael ei ddileu o'r storfa ar Γ΄l y cyfnod hwn
  • os yw'r cais yn cael ei ailadrodd o leiaf unwaith bob 7 diwrnod, yna bydd y data yn y storfa yn cael ei ystyried yn ddarfodedig ar Γ΄l 90 diwrnod a bydd Nginx yn ei ddiweddaru gyda'r cais nesaf, gan ei gymryd o'r gweinydd gwreiddiol

Wedi gorffen i olygu nginx.conf, ail-lwythwch y ffurfweddiad:

root@cdn:~# service nginx reload

Mae ein CDN yn barod. Am $15 y mis. cawsom bwyntiau presenoldeb ar dri chyfandir a 3 TB o draffig: 1 TB ym mhob lleoliad.

Gwirio gwaith CDN

Gadewch i ni edrych ar y pings i'n CDN o wahanol leoliadau daearyddol. Bydd unrhyw wasanaeth ping yn gweithio ar gyfer hyn.

Man lansio
Gwesteiwr
IP
Avg amser, ms

Yr Almaen Berlin
cdn.sayt.in
199.247.18.199
9.6

Yr Iseldiroedd, Amsterdam
cdn.sayt.in
199.247.18.199
10.1

Ffrainc Paris
cdn.sayt.in
199.247.18.199
16.3

Deyrnas Unedig, Llundain
cdn.sayt.in
199.247.18.199
14.9

Canada, Toronto
cdn.sayt.in
149.28.121.123
16.2

UDA, San Francisco
cdn.sayt.in
149.28.121.123
52.7

UDA, Dallas
cdn.sayt.in
149.28.121.123
23.1

UDA, Chicago
cdn.sayt.in
149.28.121.123
2.6

UDA, Efrog Newydd
cdn.sayt.in
149.28.121.123
19.8

Singapore
cdn.sayt.in
157.230.240.216
1.7

Japan Tokyo
cdn.sayt.in
157.230.240.216
74.8

Awstralia, Sydney
cdn.sayt.in
157.230.240.216
95.9

Mae'r canlyniadau'n dda. Nawr byddwn yn gosod delwedd brawf yng ngwraidd y prif wefan prawf.jpg a gwirio ei gyflymder llwytho i lawr trwy CDN. Dywedir - wedi'i wneud. Mae cynnwys yn cael ei gyflwyno'n gyflym.

Gadewch i ni ysgrifennu sgript fach rhag ofn y byddwn am glirio'r storfa ar y pwynt 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

I ddileu'r storfa gyfan, dim ond ei redeg, gellir glanhau ffeil ar wahΓ’n fel hyn:

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

Yn lle casgliadau

Yn olaf, rwyf am roi rhai awgrymiadau defnyddiol er mwyn camu ar unwaith dros y rhaca a wnaeth i fy mhen frifo ar y pryd:

  • Er mwyn cynyddu goddefgarwch nam ar y CDN, argymhellir ffurfweddu DNS Failover, sy'n helpu i newid y cofnod A yn gyflym os bydd gweinydd yn chwalu. Gwneir hyn yng nghofnodion DNS y panel rheoli o'r parth.
  • Heb os, mae angen nifer fawr o CDNs ar safleoedd sydd Γ’ chwmpas daearyddol eang, ond gadewch i ni beidio Γ’ bod yn ffanatig. Yn fwyaf tebygol, ni fydd y defnyddiwr yn sylwi ar wahaniaeth sylweddol o'i gymharu Γ’ CDN taledig os ydych chi'n gosod gweinyddwyr mewn 6-7 lleoliad: Ewrop, Gogledd America (dwyrain), Gogledd America (gorllewin), SingapΓ΄r, Awstralia, Hong Kong neu Japan
  • Weithiau nid yw gwesteiwyr yn caniatΓ‘u defnyddio gweinyddion ar rent at ddibenion CDN. Felly, os penderfynwch yn sydyn ddefnyddio rhwydwaith darparu cynnwys fel gwasanaeth, peidiwch ag anghofio darllen rheolau darparwr cynnal penodol ymlaen llaw
  • Archwiliwch map cyfathrebu tanddwrcynrychioli sut mae'r cyfandiroedd wedi'u cysylltu ac ystyried hyn wrth adeiladu rhwydwaith darparu cynnwys
  • Ceisiwch wirio pings o wahanol leoedd i'ch gweinyddion. Fel hyn gallwch weld y rhanbarthau sydd agosaf at y pwyntiau CDN a ffurfweddu GeoDNS yn fwy cywir
  • Yn dibynnu ar y tasgau, bydd yn ddefnyddiol mireinio Nginx ar gyfer gofynion caching penodol a chan ystyried y llwyth ar y gweinydd. Roedd yr erthyglau am storfa Nginx wedi fy helpu llawer yn hyn o beth - yma a chyflymu gwaith o dan lwythi trwm: yma ΠΈ yma

Ffynhonnell: hab.com