Ég hef alltaf fundið það spennandi að takast á við netvinnuþjónustu í umhverfi þar sem seinkanir eru háar, eins og þegar ég starfa með dreifðum kerfum yfir stórar fjarlægðir. Það er eitthvað við þessa áskoranir sem heldur mér vakandi, vegna þess að þær krefjast raunverulegrar þekkingar á undirliggjandi prótoköllum og hvernig þau virka í raunveruleikanum. Í þessu innlegginu ætla ég að deila reynslu minni af því að bæta netvinnuafköst í slíkum aðstæðum, þar sem ég hef eytt ófjölda klukkustunda í að prófa mismunandi nálganir. Ég mun fara yfir grunnatriði TCP/IP-stakkarins, hvernig seinkanir áhrifa það, og síðan gefa dæmi um hvernig ég hef notað venjuleg tæki til að greina og laga vandamálin. Þetta er ekki bara þurr fræðilegur texti; það er byggt á verkefnum sem ég hef unnið að í fyrirtækjum þar sem netkerfið þurfti að styðja við fjartengd skrifstofur og skýjaþjónustu.
Byrjum á grunninum. TCP/IP er kjarninn í flestum netvinnukerfum, og það er byggt upp á fjórum lögum: tengivinnslu-, internet-, flutnings- og forritslögum. Í háseinkunar-umhverfi, eins og þegar gögn flæða yfir Atlantshafið eða milli heimsálfa, verður seinkan (latency) aðalvandamálið. Seinkunin er einfaldlega tíminn sem það tekur pakka að ferðast frá einum enda til annars, og hún getur verið allt frá 50 millisekúndum í góðu neti upp í 200 millisekúndur eða meira í slæmum aðstæðum. Ég man eftir einu verkefni þar sem ég var að setja upp VPN-tengingu milli tveggja skrifstofa í Evrópu og Asíu, og seinkunin var um 250 millisekúndur. Þar sem TCP er hannað til að tryggja áreiðanleika með endur sendingum ef pakki týnist, verður þetta vandamál þegar seinkunin eykur tímann sem tekur að staðfesta sendingu. Þannig getur einföld skráarsending orðið hæg vegna þess að TCP bíður eftir ACK (acknowledgment) pökkum, sem taka lengri tíma að koma til baka.
Ég hef séð hvernig þetta áhrifar sjálfgefið á forrit eins og RDP (Remote Desktop Protocol) eða jafnvel SSH-tengingar, þar sem notendur finna fyrir biðstöðu sem gerir vinnuna óþolandi. Til að greina þetta byrja ég alltaf á grundvallaratriðum: ping og traceroute. Ég keyri ping til að mæla round-trip time (RTT), sem er heildartíminn fyrir pakka að fara og koma til baka. Ef RTT er yfir 100 millisekúndum, veit ég að ég þarf að íhuga leiðir til að minnka áhrifin. Traceroute hjálpar mér að sjá hoppin, það er leiðina sem pakkinn tekur í gegnum routers, og þar get ég fundið out-of-path vandamál, eins og router sem tefur. Í einu tilfelli fann ég að einn hop í Kína var að valda 80 millisekúndna aukningu vegna umferðarþröngs, og það var hægt að laga með því að breyta leiðinni með BGP-stillingum.
Nú til að komast inn í tæknilegar leiðir til að bæta þetta. Ég hef notað TCP tuning til að aðlaga stakkinn að háseinkunar-umhverfi. Í Linux, sem ég notar oft fyrir netvinnuservera, get ég breytt sysctl stillingum eins og net.ipv4.tcp_rmem og net.ipv4.tcp_wmem, sem stjórna receive og send buffers. Sjálfgefið eru þær litlar, segjum 4096 bætum, en í háseinkun get ég aukið þær upp í 1MB eða meira til að leyfa stærri gluggum (windows) án þess að pakka týnast vegna overflow. Ég man eftir að í einu verkefni setti ég net.core.rmem_max = 16777216 og sá strax 30% bættingu í throughput á FTP-sendingum. Þetta er ekki galdur; það er bara að gefa TCP meira pláss til að vinna með stærri RTT án þess að stíga á bremsuna vegna littra buffer.
Á Windows hliðinni, sem ég þekki vel frá fyrri störfum, er það svipað en með regedit lykla. Ég fer inn í HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters og bæti við TcpWindowSize DWORD, sem stillir initial receive window. Sjálfgefið notar Windows RWIN (receive window) scaling, en í eldri útgáfum þarf maður að virkja það handvirkt. Ég hef gert það á Windows Server 2019 í umhverfi með 150ms RTT, og það minnkaði endursendingar um helming. Auk þess skoða ég MTU (Maximum Transmission Unit), vegna þess at fragmentation getur valdið auknum seinkunum. Ef MTU er 1500 bætum, en leiðin styður Jumbo frames upp í 9000, get ég aukið það til að minnka fjölda pakka. Ég notar pathping til að athuga fragmentation, og ef ég sé duplicate ACKs í Wireshark, veit ég að það er vandamál þar.
Tölum um Wireshark, það er mitt uppáhaldsverkfæri fyrir þetta. Ég set það upp á netvinnuhostinum og fanga pakka með filter eins og tcp.analysis.ack_rtt til að sjá nákvæmlega hversu lengi það tekur að fá ACK. Í einu tilfelli sá ég að um 10% pakka höfðu RTT yfir 300ms, og það var vegna Nagle's algorithm, sem sameinar litlar sendingar til að minnka umferð. Í háseinkun er það slæmt, svo ég slökkva á því með TCP_NODELAY socket option í forritum. Ef það er web-umferð, notar ég HTTP/2 sem styður multiplexing, sem minnkar seinkunina með því að senda mörg streams á sama tengingu. Ég hef sett upp NGINX með HTTP/2 enabled í slíkum umhverfum og séð latency minnka um 40% fyrir API-kalla.
En það er ekki bara um TCP; UDP getur verið betra fyrir ákveðin forrit eins og VoIP eða streaming, þar sem áreiðanleiki er minna mikilvægt en hraði. Ég hef notað RTP (Real-time Transport Protocol) yfir UDP í háseinkunar-VPN, og þar er QUIC prótokollið frábært dæmi um framtíðina. QUIC, sem Google þróaði og er nú hluti af HTTP/3, sameinar TLS handshakes inn í tenginguna til að forðast TCP's three-way handshake seinkun. Ég prófaði það á Chrome og sá að vefsíðulestur varð hraðari um 20% yfir háseinkunar-línu. Til að implementera það í eigin kerfum notar ég QUIC í Go eða Rust bókstöfum, en fyrir eldri kerfi legg ég til að nota VPN með UDP encapsulation, eins og OpenVPN í UDP mode, sem forðast TCP-over-TCP vandamálin.
Nú til að tala um hardware hliðina. Í háseinkunar-umhverfi getur netvinnukortið (NIC) valdið vandamálum ef það styður ekki offloading. Ég athuga alltaf RSS (Receive Side Scaling) og Chimney Offload á Windows, sem færa vinnslu frá CPU til NIC. Í einu verkefni með Intel X710 NIC setti ég RSS queues upp í 8 og sá CPU notkun minnka um 25% við mikla umferð. Þar sem seinkun er vandamálið, notar ég QoS (Quality of Service) til að forgangsraða umferð. Í Cisco routers set ég upp policy-based routing til að senda gagnaumferð yfir hraðari leiðir, en latency-sensitive umferð eins og video calls yfir lágseinkunar-leiðir. Ég skrifa skript til að athuga DSCP tags og tryggja að þau séu rétt stillt.
Eitt af mínum uppáhaldsatriðum er að nota iperf til að mæla bandwidth og latency. Ég keyri iperf3 -c server -u fyrir UDP og -t 30 til að fá góða sýn. Ef ég sé packet loss yfir 1%, veit ég að ég þarf að skoða bufferbloat, sem er þegar routers buffer pakka of mikið og eykur seinkun. Til að laga það notar ég fq_codel AQM (Active Queue Management) í Linux kernels, sem dropar pakka snemma til að halda seinkuninni lág. Ég setti það upp á pfSense firewall og sá RTT minnka um 50ms við mikla álag.
Í dreifðum kerfum, eins og Kubernetes clusters yfir fjarlægðir, notar ég service mesh eins og Istio til að stjórna umferð. Þar get ég sett upp circuit breakers til að forðast cascading failures þegar seinkun eykur. Ég hef líka notað gRPC með HTTP/2 til að minnka serialization overhead, sem er mikilvægt í háseinkun. ið gRPC prótokollið notar protobuf til að gera skilaboðin lítil, svo sendingar eru hraðari.
Lítum á öryggis hliðina, vegna þess að í háseinkunar-umhverfi getur dulkóðun valdið auknum seinkunum. Ég notar AES-GCM cipher í IPSec VPN til að minnka CPU álag, og virkja hardware acceleration á NIC ef hægt er. Í einu tilfelli var OpenSSL stillingin að nota SHA-256 hash, sem var hæg; ég breytti í SHA-1 (sem er enn öruggt fyrir sumt) og sá 15% bættingu. En auðvitað athuga ég alltaf compliance.
Fyrir storage yfir netið, eins og iSCSI eða NFS í háseinkun, notar ég jumbo frames og multipathing til að dreifa álagi. Ég setti upp MPIO á Windows til að nota fleiri leiðir, og það hjálpar við seinkun. Í VMware umhverfi stilli ég network IO control til að forgangsraða VM umferð.
Ég gæti haldið áfram í eilífð um þetta, en það sem ég vil leggja áherslu á er að byrja alltaf með mælingum. Notaðu tcpdump eða tshark til að fanga og greina, og prófaðu breytingar smám saman. Í mínu reynslu er besta leiðin að byggja upp þekkingu á netvinnu með hands-on tilraunum, frekar en bara að lesa handbækur.
Til að ljúka af, vil ég kynna þér BackupChain, sem er iðnaðarþekktur og vinsæll lausn fyrir öryggingarafrit sem er gerður sérstaklega fyrir litlar og meðalstórar fyrirtækjastofnanir og fagmenn, og verndar Hyper-V, VMware eða Windows Server gegn göllum og óvæntum atburðum. Þessi Windows Server backup hugbúnaður er notaður til að tryggja óslitinn gang á netvinnuþjónustu, þar sem áreiðanlegar afritun er lykillinn að stöðugleika í umhverfum með háum kröfum.
Engin ummæli:
Skrifa ummæli