Uvod u Amazon Fargate: što je to, zašto je sjajno (i ne) i kada ga koristiti.

Kad je Amazon najavio Fargate krajem 2017. godine na AWS re: Invent (zajedno s EKS-om), stvarno je pao ispod radara. Nitko od blogova ili influencera koje sam u to vrijeme pratio doista nije o tome govorio osim o nečemu poput:

O da, postoji i nova stvar koja će ECS korisnicima omogućiti pokretanje spremnika izravno u oblaku.

Kao programeru, to me stvarno zapanjilo. Da vidimo zašto.

Bum produktivnosti

Osjećam da je u svijetu razvoja softvera bilo pet glavnih revolucija koje su dramatično povećale produktivnost programera i sposobnost pisanja i primjene aplikacija na razini proizvodnje uz maksimalnu učinkovitost.

Svi su oni riješili i glavna pitanja. Evo moje analize revolucija i problema koje su oni riješili:

  • Pojava usluga u oblaku (IaaS)

    Troškovi i skalabilnost infrastrukture

  • Zajednica otvorenog koda, konferencije, radionice, tehnološki blogovi, preljev stacka itd

    Ograničeni pristup znanju

  • Sustavi za izradu verzija, Alati za suradnju, Alati za kontinuiranu integraciju

    Istodobna neusklađenost inženjerskih sustava i pakao integracije

  • Kontejnerizirana arhitektura

    Poteškoće u izradi aplikacija u neskladnim okruženjima

  • Računalne usluge bez poslužitelja (PaaS)

    Administriranje poslužitelja i sustava

Svaka od ovih revolucija ima jednu zajedničku osobinu: sve one daju više kontrole softverskim inženjerima. To rade potičući dobre prakse i dijeljenje koda zajedničkim tijekom rada, a smanjuju potrebu za skupim namjenskim poslužiteljima, administratorima sustava, DevOpsima, IT podršci itd.

Super , ali pričekajte - gdje je Fargate u svemu tome?

Pitanje je vaš brod

Vidite, kada je Docker donio kontejnere masama, to je brzo postalo novi standard u razvoju i široko prihvaćeno.

Ubrzo nakon i nakon uspjeha Kubernetesa , AWS je pokrenuo vlastitu (temeljniju) uslugu upravljanja spremnicima: Amazon Elastic Container Service (ECS). Uvela je koncept zadataka.

Zadatak može biti bilo koja instalacija spremnika koji rade zajedno. Od web aplikacije koja pokreće web poslužitelj, nekoliko mikro usluga, bazu podataka i obrnuti proxy, do popisa grupa skripti ljuske koje će se povremeno izvoditi.

Budući da sam rano usvojio ECS, jako mi se svidio i neko je vrijeme izvrsno funkcionirao. No s vremenom je upravljanje tim dodatnim slojevima (Zadaci i spremnici) umjesto samo instancama EC2 postajalo sve složenije.

Također mi nije bila ugodna njegova sigurnost . Što više slojeva imate u svom hrpi, to morate biti budniji. Svaki od ovih slojeva donosi veću složenost, zajedno s povećanom vjerojatnošću sigurnosnih pogrešnih konfiguracija i ranjivosti.

Zapravo, s ECS-om vaši spremnici rade u primjerima EC2 spremnika u klasteru koji ćete konfigurirati za automatsko skaliranje. Svaka instanca može ugostiti više različitih zadataka. Svaki zadatak može pokretati više spremnika.

Budući da će vaši zadaci biti raspoređeni slučajno (prema zadanim postavkama) na istoj vrsti EC2 instanci s raspoloživim resursima , suočavate se sa sljedećim problemima:

  • Jedan klaster slijedi ista pravila za automatsko skaliranje i automatski osigurava istu vrstu EC2 instanci.
  • Neki će spremnici trebati potpuno različite resurse, ali ipak moraju raditi zajedno.
  • Neki spremnici ne moraju slijediti ista pravila za automatsko skaliranje.
  • Ponekad nekoliko spremnika u istom zadatku treba vlastiti uravnoteživač tereta, a imati više uravnoteživača tereta za isti zadatak nije moguće.

Poželjni zaobilazni put prilikom suočavanja s ovim problemima bio je:

  • ručno rasporedite neke svoje instance s različitim resursima ovisno o potrebi
  • priključite ove primjerke na svoj klaster
  • pokrenite jedan spremnik prema zadatku
  • povežite svoje instance EC2 ručno zajedno
  • napisati složena ograničenja postavljanja strategije na ECS kako biste bili sigurni da je pravi zadatak na pravom stroju koji je imao odgovarajući resurs ovisno o tome što je učinio

To je puno posla, prilično je zamorno i teško ga je održavati. I to na neki način poništava svrhu rada s kontejnerima.

Netko je morao smisliti bolju ideju.

Pustite ih da plutaju

Ispostavilo se da je AWS tim imao iste probleme. Razmišljali su o tome posljednjih godinu dana i radili na rješavanju problema u nastavku:

Kako bismo mogli pokretati spremnike, a da se ne brinemo o poslužiteljima i klasterima?

A o tome se radi u AWS Fargate . Potpuno apstrahira temeljnu infrastrukturu, a svaki svoj spremnik vidite kao jedan stroj.

Samo trebate odrediti koji vam je resurs potreban za svaki kontejner i on će za vas napraviti težak posao. Više ne morate upravljati višeslojnim pravilima pristupa. Možete fino podesiti dozvole između svojih spremnika kao što biste to učinili između pojedinih instanci EC2.

Kao da vaši kontejneri postaju brodovi s vlastitim jedrom, kormilom i posadom i sami mogu doploviti do odredišta.

Kontejneri kao usluga (CaaS)

Zapravo vjerujem da su Containers as a Service (CaaS) pravi PaaS koji programeri čekaju godinama. Omogućuje programerima da svoje spremnike postave izravno u oblak, a da ne brinu o svemu između.

Naravno da već postoji puno tehnologija koje vam omogućuju neometano pokretanje koda u oblaku, a da se ne brinete o skali ili administraciji poslužitelja (poput nevjerojatnog Herokua , Lambde ili čak na svoj način Googleova aplikacija) . Ali svi imaju ograničenja.

  • Morate birati između gubitka malo fleksibilnosti
  • Morate se držati podržanih jezika
  • Ne možete koristiti podržane jezike jer vaš projekt treba izvornu biblioteku niske razine koja je dostupna samo na vrlo određenim sustavima
  • Vaš projekt koristi najmoderniju tehnologiju koja neće biti dostupna masama u sljedećih nekoliko godina
  • Neke od ovih platformi vrlo su (vrlo) skupe, pogotovo kada se povećavaju

Fargate (ili CaaS) donosi vam najbolje iz oba svijeta.

Kontejnerizirana arhitektura donosi vam fleksibilnost i kontrolu koja vam je potrebna. Omogućuje vam upotrebu bilo koje vrste tehnologije koja radi u bilo kojem sustavu koji želite. Aspekt kontejnera osigurat će vam da se ponašate na isti način na svakom računalu, bilo da se radi o razvojnom okruženju, okruženju za testiranje, postavljanje ili prod.

Smatram da je ova točka kritična za puno tehnoloških startupa. Zapravo, ponekad je jedna od vaših konkurentskih prednosti upotreba vrhunske tehnologije u čijoj ste suradnji sudjelovali ili pametna ponovna uporaba druge u potpuno novom i revolucionarnom kontekstu.

Uvođenje bez poslužitelja omogućuje vam da se usredotočite na pisanje izvrsnog koda. Bez rezerviranja, lako skaliranje.

Ograničenja

CaaS vs PaaS

Istina je da se odričete nekih cool aspekata stvarnog PaaS-a. Da, i dalje ćete morati ručno ažurirati slike spremnika, a ponekad ćete morati napisati vlastite Dockerove slike. Ovo u početku može biti borba ako ne znate osnove administracije sustava .

Ali, to također znači da možete raditi gotovo sve o čemu možete razmišljati i imati potpunu fleksibilnost i slobodu u sustavima, jezicima, alatima, knjižnicama i verzijama koje želite koristiti.

Trošak

Priznajmo, Cloud usluge (IaaS) skuplje su od vlastite infrastrukture (ako biste je mogli povećavati i smanjivati ​​na zahtjev). Iz istog razloga, nema potrebe za pružanjem, upravljanjem i skaliranjem vaših poslužitelja ima trošak. To možda još nije najbolje rješenje za neke od vaših najjednostavnijih slučajeva korištenja.

Nadajmo se da će raditi na smanjenju troškova. Koliko god proizvod bio dobar, teško je opravdati gotovo četverostruku cijenu primjerka ekvivalentnog EC2 na zahtjev (na primjer za t2.medium).

Trebam li prebaciti sve svoje ECS zadatke na Fargate?

Ne još. Kao što je gore rečeno, u nekim ćete slučajevima više nego utrostručiti troškove. Dok ne smanje troškove, možda će vam biti bolje koristiti standardne instalacije EC2.

Međutim, Fargate vam može biti korisniji u sljedećim slučajevima korištenja:

  • Ako imate problema s automatskim skaliranjem učinkovitog ECS ​​zadatka i često na kraju imate puno neiskorištenog CPU-a ili memorije . Fargateom plaćate samo resurse koje ste definirali u svojim zadacima .
  • Za vaše zadatke koji će se izvoditi na zahtjev ili prema rasporedu i ne trebaju namjenski EC2 primjerak. S Fargateom plaćate samo kad je vaš zadatak pokrenut.
  • Za vaše zadatke koji imaju najveću upotrebu memorije i / ili CPU-a . Samo zato što ćete uštedjeti vrijeme i gnjavažu oko konfiguracije i upravljanja takvim slučajevima.

Bonus

Za one koji preferiraju Kubernetes od ECS-a , Fargate će uskoro moći pokrenuti Elastic Container Service za Kubernetes.