Késleltetési tesztek Budapest és AWS, Frankfurt között

Posted 2023-09-30 16:30:00 by sanyi ‐ 6 min read

Kipróbáltam néhány alternatívát a két helyszín közötti kapcsolat felépítésére

Az előző cikkemben arról írtam hogyan lehet a Direct Connect segítségével közvetlenül kapcsolódni az AWS hálózatához. Utána kíváncsi lettem vajon milyen igények esetén lehet valóban szükség a Direct Connect-re, mikor nem elég a publikus internet által adott sávszélesség és késleltetés.

A teszteléshez használt on-premise környezet a Budapesten, a BIX VH node-dal közös épületben található.

Ha egy AWS-en létrehozott VPC-hez, illetve a VPC-ben futó EC2 virtuális géphez akarunk kapcsolódni, akkor nagyjából az alábbi lehetőségeink vannak:

  • közvetlenül az EC2 virtuális gép publikus IP címére (ha van neki)
  • AWS Virtual Private Gateway-en keresztül IPsec kapcsolat segítségével
  • saját szofveres VPN megoldással (én most a teszt kedvéért WireGuard-ot használtam)
  • Global Accelerator-on keresztül közvetlenül a gép valamelyik nyitott TCP/UDP portjára
  • Global Accelerator-on keresztül felépített saját VPN megoldással
  • Direct Connect segítségével

A Direct Connect ezek közül a legdrágább megoldás, cserébe garantált sávszélességet és késleltetést biztosít. Az elérhető sávszélesség itt a legmagasabb, akár több száz Gbit/s is lehet.

A Global Accelerator használata azt jelenti hogy a forgalmunk nem a publikus interneten keresztül utazik Frankfurtig, hanem már a budapesti edge helyszínen felmegy az AWS Global Backbone-ra, ami elméletben alacsonyabb késleltetést biztosíthat.

Az AWS Virtual Private Gateway-nek van egy olyan korlátozása hogy egy kapcsolat maximum 1.25 Gbit/s sávszélességet tud biztosítani és egy Customer Gateway felé maximum két kapcsolat hozható létre aktív-passzív felállásban. Egy Transit Gateway közbeiktatásával ezen annyit lehet javítani hogy két linken aktív-aktív felállásban equal cost multipath routing alakítható ki. Egy-egy TCP kapcsolat még így is 1.25 Gbit/s -re korlátozódik, de több párhuzamos kapcsolat már ki tudja használni a teljes 2.5 Gbit/s sávszélességet.

Ha az on-premise környezet csak 1 Gbit/s linken kapcsolódik az internetre, akkor ez persze nem probléma, ha viszont 10 Gbit/s vagy nagyobb sebességgel szeretnénk kapcsolódni akkor ez az út nem járható.

Saját, szoftveres VPN megoldásokkal ez a limit megkerülhető, csak a végpontunkat futtató EC2 virtuális gép számára elérhető sávszélesség és annak CPU teljesítménye lehet korlátozó tényező. Én a teszteléshez a WireGuard-ot használtam, egyrészt azért mert egyszerű bekonfigurálni, másrészt azért mert kifejezetten jó a teljesítménye.

Ilyen feladatra célszerű network optimized instance típust választani. Ha a létrehozott virtuális gép legalább 32 vCPU-t kapott akkor az instance típus elvi max. sávszélességének felét (pl. egy c6in.8xlarge esetén 25 Gbit/s-et) is elérhetjük, kisebb instance típusoknál 5 Gbit/s a maximum. Fontos, hogy egy stream-en (azonos source-dest ip cím, port és protokol) csak 5 Gbit/s tud kimenni, ami egy wireguard link sávszélességét is 5 Gbit/s-re korlátozza. Ha ennél nagyobb sebesség kell akkor pl. wireguard esetén több különböző tunnel-t kell létrehozni párhuzamosan majd azok fölött equal-cost multipath routing-ot kell megvalósítani.

Mivel az on-premise környezetünk 1 Gbit/s sávszélességet használ, a teszteléshez egy kisebb, c6in.large instance típust választottam, amit a frankfurti AWS régióban hoztam létre.

A virtuális gépre telepítettem egy nginx webszervert is hogy egy egyszerű html oldal letöltését tudjam tesztelni.

Elsőként azt néztem meg mekkora a ping válaszidő Budapestről Frankfurt felé közvetlenül az EC2 virtuális gép publikus IP címét használva. Ez nagyjából 16 ms volt.

Utána megnéztem mennyi idő alatt töltődik le a statikus oldal:

$ curl -o /dev/null -s -w 'Total: %{time_total}s\n' http://18.156.2.6

Eredményül több próbálkozásból nagyjából 31-32 ms adódott.

Következő lépésként felépítettem a wireguard kapcsolatot a két gép között, majd azon keresztül futtattam a ping-et, így is 16 ms válaszidőt kaptam, a wireguard okozta késleltetés tehát elhanyagolható.

A curl letöltés a wireguard linken keresztül 32-33 ms körül volt, ebben sem volt lényeges eltérés.

Kíváncsiságból megnéztem az elérhető sávszélességet is iperf3 segítségével, kb. 650-750 Mbit/s körüli értékek adódtak az 1 Gbit/s link fölött (de ennek ne tulajdonítsatok nagy jelentőséget, az éppen elérhető sávszélesség ebben a viszonylatban elég sok tényezőtől függ).

Az iperf teszt közben ránéztem a CPU terhelésre, de az alig néhány százalék volt a 2 vCPU gépen, tehát ez a kis c6in.large instance simán ki tudná használni a rendelkezésére álló 5 Gbit/s -et, a nagyobbakkal pedig nem lehet probléma a 10-20 Gbit/s sem.

Következő lépésben bekonfiguráltam egy Global Accelerator példányt az AWS oldalán és mind a HTTP (TCP port 80) mind a WireGuard (UDP port 1820) forgalmat ezen keresztül irányítottam.

A statikus oldal letöltése curl segítségével nagyon hasonló válaszidőt adott ebben az esetben is mint a Global Acceletor nélkül: 32-34 ms körül.

A wireguard tunnel fölött a ping válaszidő ebben az esetben is 16 ms lett.

Próbaképpen futtattam egy ping-et a Global Accelerator által meghirdetett anycast IP címre is, ez 0.57 ms lett, vagyis erősen valószínű hogy a budapesti edge helyszínt használta a routing (a fény ennyi idő alatt máshova nehezen jutna el).

Tanulságok?

Általános igényekre, 1 Gbit/s sávszélességig a legegyszerűbb az AWS saját Virtual Private Gateway megoldását használni, ott nem kell bajlódni a saját VPN endpoint és router virtuális gépek menedzselésével.

Ha 1.25 - 2.5 GBit/s -nél nagyobb sávszélességre van szükség vagy olyan egyedi igények vannak amit a Virtual Private Gateway segítségével nem lehet megoldani, akkor jó opció lehet az EC2 virtuális gépen futtatott WireGuard, nagyon alacsony késleltetéssel és CPU terheléssel el tud futni.

Ha a hosting szolgáltatódnak jó nemzetközi kapcsolatai vannak, akkor a Global Accelerator használata ebben az irányban nem javít a késleltetésen. Mondjuk túl sokat nem is javíthatna. A fény terjedési ideje optikai kábelen ekkora távolságon (kb. 1000 km) úgy 4-5 ms körül van, oda-vissza 8-10 ms, ehhez képest a 16 ms ping round-trip válaszidő kifejezetten szép érték.

Ha viszont a szolgáltatódnak belföld felé megfelelő a sávszélessége, de a külföldi sávszélességgel, késleltetéssel problémák vannak, akkor megérhet egy próbát a Global Accelerator használata.

Végül visszatérve a Direct Connect-re: mikor lehet létjogosultsága? Hát, ha a hosting szolgáltatódnak jó a sávszélessége és a késleltetése, akkor csak igen speciális esetekben. A fent tapasztalt 16 ms átlagos válaszidőnél sokkal jobbat nem lehet elérni. A kulcsszó a "garantált": ha valamilyen speciális felhasználási terület miatt garantálnunk kellene egy fix, alacsony válaszidőt, azt csak úgy lehetne megbízhatóan teljesíteni ha a szolgáltatás alapját adó kapcsolat is garantált sávszélességet és késleltetést biztosít, ezt pedig csak a Direct Connect tudja. Szintén a Direct Connect mellett szólhat, ha olyan nagy sávszélességre van szükség (50-100 Gbit/s nagyságrendtől) ahol a fenti WireGuard-os EC2 instance már nem opció.

Címkék:
cloud aws amazon network latency