Airbnb otvorio kod sopstvenog mehanizma za radne procese
Poznata platforma učinila je svoj interni softverski alat dostupnim široj zajednici programera pod otvorenom licencom. Rešenje donosi drugačiji pristup upravljanju višestepenim zadacima unutar softverskih servisa.
Airbnb je lansirao Skipper, ugrađeni mehanizam za upravljanje radnim procesima, omogućavajući programerima da izvršavaju dugotrajne zadatke direktno unutar svojih aplikacija bez potrebe za spoljnim orkestratorima.
Izaberi iznos ili skeniraj kod bez iznosa pa ga upiši u banci. Novac ide direktno na račun autora (GoSimple), Trek ne uzima ništa i nije posrednik u plaćanju.
Na telefonu: preuzmi kod, pa ga u aplikaciji banke učitaj iz galerije.
Arhitektura bez centralnog koordinatora
Savremeni softverski sistemi često zahtevaju izvršavanje procesa koji se sastoje od više koraka, uključuju čekanje na spoljni unos podataka ili kombinuju sinkrone i asinkrone operacije. Takvi zadaci zahtevaju trajno skladištenje podataka kako bi sistem znao šta je već obavljeno, koji koraci zahtevaju ponavljanje i koje radnje još uvek čekaju na obradu. Tradicionalni pristupi se obično oslanjaju na centralni servis za orkestraciju koji upravlja izvršavanjem i pruža jedinstvenu platformu za nadzor iz jedne tačke.
Inženjerski tim kompanije odlučio se za radikalno drugačiji koncept unutar sopstvenog ekosistema. Umesto zavisnosti od spoljnog servisa koji koordiniše koracima, razvijeno je rešenje gde svaki pojedinačni servis samostalno upravlja sopstvenim radnim procesima. Replicirane instance istog servisa pokreću i mehanizam za izvršavanje i planiranje zadataka, oslanjajući se na zajedničku bazu podataka koja čuva trenutno stanje procesa.
Ovakav pristup smanjuje broj slojeva unutar IT infrastrukture i prebacuje odgovornost za izvršavanje i oporavak direktno na tim koji razvija konkretni servis. Iako to nameće dodatne operativne obaveze, eliminiše se potreba za održavanjem zasebnog sistema za koordinaciju. Rešenje je prilagođeno razvoju u okruženjima koja već poseduju stabilnu operativnu infrastrukturu i žele veću autonomiju u radu.
Tehnička zajednica sada može slobodno da preuzme kod pod Apache 2.0 licencom putem platforme GitHub. Objavljeni paket obuhvata osnovni softverski mehanizam, adaptere za baze podataka, administrativni korisnički interfejs i alate za testiranje. Takav korak omogućava timovima van kompanije da primene ista proverena rešenja u sopstvenim proizvodnim okruženjima.
Programski model i definisanje zadataka
Osnovna ideja iza ovog softvera jeste da se višestepeni poslovni procesi mogu jednostavno izraziti kroz standardne programske klase. Programeri koriste programske jezike poput Jave ili Kotlina za definisanje pravila, redosleda koraka i uslova čekanja. Svaki radni proces funkcioniše kao klasa u kojoj se akcije izvršavaju uz mogućnost praćenja nuspojava kao što su pozivanje spoljnih interfejsa ili upisivanje podataka u bazu.
Posebna prednost ovakvog modela ogleda se u mogućnosti pauziranja procesa bez nepotrebnog trošenja sistemskih resursa. Kada je radni proces primoran da čeka ljudsku potvrdu ili spoljni signal, on se privremeno uspavljuje i ne opterećuje radnu memoriju. Dolazak traženog signala nastavlja izvršavanje tačno sa mesta gde je proces stao, čime se obezbeđuje visoka otpornost na prekide i padove sistema.
Testiranje ovakvih komponenti obično predstavlja izazov u softverskom inženjerstvu zbog vremenskih zavisnosti i spoljnih saradnika. Priloženi alati donose izolovano okruženje unutar radne memorije sa kontrolisanim protokom vremena. To omogućava autorima koda da detaljno provere ponašanje sistema u situacijama čekanja, slanja signala i ponovnih pokušaja izvršavanja pre puštanja softvera u rad.
Pored klasičnog sekvencijalnog modela, softver podržava i specifične koncepte za upravljanje stanjima kroz namensku sintaksu. To olakšava modelovanje složenih procesa koji se prirodnije opisuju kroz prelete između različitih stanja i događaja. Dokumentacija pokriva sve ove aspekte i nudi primere za popularne radne okvire poput Spring Boot sistema.
Oporavak sistema kroz kontrolne tačke
Stabilnost u distribuiranim sistemima zahteva pouzdane mehanizme za oporavak nakon neočekivanih ispada. Kada sistem naiđe na prekid i ponovo pokrene radni proces, izvršavanje počinje od vrha, ali se ranije sačuvani rezultati uspešno obavljenih akcija automatski preuzimaju iz baze podataka. Na taj način se preskaču već izvršeni koraci i nastavlja se rad na preostalom delu zadatka.
Da bi ovakav mehanizam funkcionisao bez grešaka, kod koji definiše radni proces mora biti deterministički. Operacije poput čitanja trenutnog vremena, generisanja slučajnih brojeva ili direktnog mrežnog unosa moraju se izmestiti u posebne akcije ili eksplicitne kontrolne tačke. Time se obezbeđuje da svako ponovno pokretanje daje potpuno identičan ishod i sprečava nastanak neočekivanih programskih grešaka.
Optimizacija upisa podataka u bazu predstavlja važan deo performansi sistema. Umesto da se svaka pojedinačna akcija odmah beleži, mehanizam može da grupiše kontrolne tačke dok se proces ne završi ili ne pauzira. Iako to štedi resurse baze, postoji mali vremenski prozor u kojem pad sistema može zahtevati ponovno izvršavanje nekoliko već završenih koraka, mada programeri mogu podesiti trenutno čuvanje za kritične operacije.
Upravljanje greškama i politikom ponavljanja ugrađeno je u samu srž arhitekture. Razvojni timovi precizno definišu koje greške dozvoljavaju automatski pokušaj oporavka, a koje predstavljaju trajni otkaz procesa. Za složene situacije koje zahtevaju poništavanje već obavljenih koraka, sistem podržava obrasce kompenzacije slične tradicionalnim transakcionim mehanizmima.
Mesto u širem ekosistemu tehnologija
Tržište softverskih alata nudi brojna rešenja za upravljanje radnim procesima, uglavnom zasnovana na centralizovanim servisima. Takvi sistemi odgovaraju organizacijama koje traže jedinstvenu tačku kontrole za stotine različitih timova i aplikacija. Centralizacija olakšava centralne operacije, ali istovremeno uvodi dodatnu tačku kvara i složenost u mrežnu komunikaciju između servisa.
Predstavljeni alat zauzima drugačiju nišu i namenjen je inženjerskim timovima koji žele potpunu kontrolu unutar sopstvenog koda. Umesto oslanjanja na spoljni klaster za orkestraciju, programeri zadržavaju celokupnu logiku unutar domena svog servisa. To se posebno pokazalo korisnim za timove koji su ranije morali ručno da grade prilagođene tabele stanja, petlje za proveru i poslove ponavljanja za svaki novi poslovni proces.
Iskustvo iz prakse pokazuje da je tehnologija već pronašla široku primenu u različitim internim sektorima unutar kompanije koja ju je razvili. Raspon upotrebe se kreće od obrade finansijskih transakcija do složenih korisničkih verifikacija koje traju danima. Integracija u postojeće Java i Kotlin servise izvedena je uz minimalne izmene u arhitekturi postojecih aplikacija.
Planovi za dalji razvoj otvorene platforme uključuju dodavanje novih adaptera za skladištenje podataka poput PostgreSQL i DynamoDB sistema. Pored toga, planira se unapređenje alata za otklanjanje grešaka tokom ponovnog puštanja koda i razvoj rešenja za automatsku proveru kompatibilnosti verzija. Doprinosi šire zajednice programera biće ključni za rešavanje uobičajenih izazova koji prate sisteme zasnovane na ponovnom izvršavanju koda.
Perspektiva za razvoj softvera
Prelazak složenih internih alata u domen otvorenog koda često menja način na koji industrija razmišlja o rešavanju standardnih problema. Umesto ponovnog izmišljanja točka za svaku novu aplikaciju, inženjeri dobijaju priliku da koriste proverene biblioteke koje su prošle godine testiranja u produkcijskim okruženjima sa velikim prometom. Takav pristup podiže opšti kvalitet softverskih rešenja i smanjuje vreme potrebno za plasiranje proizvoda na tržište.
Usvajanje ovakvih tehnologija ipak zahteva zrelost razvojnog tima i dobro poznavanje principa distribuiranih sistema. Upravljanje trajnim stanjem i razumevanje granica autonomnih servisa predstavljaju veštine koje prevazilaze obično pisanje poslovne logike. Organizacije moraju pažljivo da vagaju između jednostavnosti centralizovanih rešenja i fleksibilnosti koju donosi ugrađena arhitektura.
Dugoročni uspeh projekata otvorenog koda umnogome zavisi od angažovanja zajednice i kvaliteta prateće dokumentacije. Činjenica da su objavljeni i primeri koda i alati za administrativni nadzor sugeriše ozbiljnu nameru da se projektima pruži široka baza korisnika. Vreme će pokazati u kojoj meri će industrija prihvatiti ovaj model upravljanja procesima umesto standardnih posredničkih servisa.
Na kraju, svaka tehnološka odluka predstavlja kompromis između operativne složenosti i poslovnih potreba. Kompanije koje se odluče za implementaciju ovakvog pristupa dobiće moćan alat za kontrolu dugotrajnih procesa, ali i odgovornost za održavanje pouzdanosti sopstvene infrastrukture na najvišem nivou.
Izvor: Airbnb Engineering