Slavko Babić
Svi projekti

Fintech / trgovanje

Berza kriptovaluta

Sigurna, visokoperformansna berza kriptovaluta — obrada naloga, uparivanje i tokovi računa napravljeni da ostanu brzi i tačni pod naletima opterećenja, uz zaštitu korisničkih sredstava.

Pregled

Mesto za trgovanje je neoprostiva stvar za izgradnju. Mora da bude brzo, mora da bude tačno i mora da bude sigurno — a te tri stvari se povlače jedna protiv druge upravo pod uslovima koji najviše znače: nalet opterećenja kada se tržište pomeri. Ovo je bila sigurna berza kriptovaluta izgrađena sa visokim performansama i skalabilnošću kao ciljevima prvog reda, a ne kao naknadnim optimizacijama.

Problem

Na berzi su i otkaz performansi i otkaz tačnosti odmah skupi, a otkaz bezbednosti je katastrofalan — to su korisnička sredstva. Opterećenje je po prirodi i skokovito: tišina, pa skok kada se tržište pomeri, pa opet tišina. Sistem mora da zadrži svoju latenciju i tačnost tačno onda kada se svi pojave istovremeno, i mora to da radi tretirajući zaštitu korisničke imovine kao nešto o čemu se ne pregovara.

Rešenje

Berzu sam izgradio oko delova koji moraju biti i brzi i tačno ispravni: obrada naloga, mašina za uparivanje i tokovi računa. Svaki je napravljen da izdrži kako obim raste — putanja uparivanja održana tesnom i predvidljivom, operacije nad računima i saldom održane strogo tačnim, a celina projektovana tako da propusnost skalira sa potražnjom umesto da se ruši u vršnom opterećenju.

Stack ovde odražava dizajn servisa visoke propusnosti i niske latencije; navedena tehnologija je oblik za kojim bih posegao i na kojem bih gradio ovakav sistem.

Arhitektura

Definišuće ograničenje je da novac nikada ne sme biti stvoren ili uništen greškom. To gura stanje salda i naloga ka jakoj konzistentnosti i pažljivim transakcionim granicama, dok se okolne površine sa mnogo čitanja (tržišni podaci, prikazi knjige naloga) mogu opsluživati iz brzih, eventualno konzistentnih keševa. Razdvajanje ta dva sveta — knjige koja mora biti tačno ispravna od prikaza koji moraju biti tek brzi — jeste središnji arhitektonski potez.

Uparivanje je vruća putanja i dizajnira se u skladu s tim: kritičnu sekciju drži malom i determinističkom, spori posao (obaveštenja, analitika, sve što nije autoritativno) drži van nje i iza redova, a ceo servis učini horizontalno skalabilnim tako da nalet bude pitanje kapaciteta, a ne pitanje tačnosti.

Tehnički izazovi

Konkurentnost je čitava igra. Mnogo naloga koji se u istom trenutku otimaju za isti nivo cene je normalan slučaj, a ne rubni, i to mora da se razreši pravično, tačno i brzo. Zaštita korisničkih sredstava dodaje drugi skup ograničenja bezbednosnog oblika povrh toga — svaki tok računa je mesto gde se susreću zahtevi za tačnošću i za bezbednošću, i oba moraju da pobede.

Naučene lekcije

Odluči koje su invarijante svete i sagradi tvrđavu oko samo njih. Pokušaj da se sve učini jako konzistentnim i niske latencije odjednom daje ti sistem koji nije ni jedno ni drugo. Berze koje rade povlače tvrdu liniju između autoritativne knjige — male, stroge, zaštićene — i svega ostalog, kome je dozvoljeno da bude brzo i približno. Ispravno postaviti tu granicu je najveći deo posla.

Tehnologije

  • Node.js
  • TypeScript
  • PostgreSQL
  • Redis
  • Docker