Oskrba velike uporabniške baze z zanesljivimi, doslednimi in nizkimi zakasnitvami podatkov je zelo težak izziv za vsako zaledno ekipo. Pri Ledgerju smo se strateško odločili za gostovanje naših lastnih osrednjih podatkovnih storitev verige blokov. Ker se ne zanašamo na tretje osebe, lahko sami upravljamo podatke naših strank, s čimer zagotovimo, da so osnovni procesi v skladu z našimi varnostnimi smernicami in v uspešnost usmerjenimi cilji ravni storitev (SLO).
Toda ta strategija prinaša tudi svoje izzive.
Naš prvi izziv je preseliti te ključne storitve za zagotavljanje podatkov stran od kul in sijočih orodij noSQL. V tem članku se bom poglobil v to, zakaj smo sprejeli to težko odločitev, zapletenosti, s katerimi smo se srečali, in koristi, ki smo jih izkoristili.
Cilj tega članka je prikazati tehnične vidike, zaradi katerih smo izbrali PostgreSQL kot naš novi osnovni sloj za shranjevanje podatkov blockchain.
Poglobite se v podatke o verigi blokov
Podatki verige blokov imajo več ključnih lastnosti.
Prvič, nenehno raste in se iz njega nikoli nič ne izbriše. Čeprav je v praksi večina verige blokov nespremenljiva, se lahko najmlajši del verige blokov spremeni zaradi konfliktov, ki jih je treba rešiti. Ker je veriga enakovredno omrežje, lahko začasno soobstaja več legitimnih blokov. Običajno se starejše izbriše, kar povzroči tako imenovano reorganizacijo. Skratka, podatki so razdeljeni med nespremenljiv hladni rep in redko spreminjajoče se glavno stanje.
Težava, ki jo poskušamo rešiti, je, da so verige blokov odlične za bizantinske podatke, odporne na napake, vendar so manj učinkovite za rezanje in rezanje na več osi. Pridobivanje seznama operacij, ki so vplivale na račun, je namreč zelo težko. Tudi pridobivanje stanja na računu v verigi blokov, kot je bitcoin, je izziv, če še nimate seznama transakcij.
Za premagovanje teh izzivov storitve Ledger Explorer indeksirajo celotno verigo blokov. To je velika, kritična in na zmogljivost občutljiva storitev, ki je v celoti napisana v Scali z uporabo mačji učinek visoko zmogljivo delovanje. Imamo več kot 10 vrtljajev na sekundo za bitcoin, medtem ko ohranjamo zakasnitev repa p95 pod 100 ms. Tudi zaposlujemo 😊.
Malo zgodovine
Na začetku naše zgodbe, veliko preden sem se pridružil podjetju, je podatkovno storitev Ledger obravnavala vdelana zbirka podatkov Neo4j. Vsaka strežna škatla je indeksirala svoje podatke in jih stregla lokalno, kar je povzročilo veliko težav.
Skladnost podatkov med primerki ni bila zagotovljena in sama velikost stanja, ki ga je bilo treba indeksirati, skupaj z uporabo diska neo4j in ram-a, ni bila razširljiva. Ta težava se je samo poslabšala, ko je podjetje raslo, zaradi česar je bilo ustvarjanje novih primerkov vse težje.
Cassandra je bil nato izbran kot glavno gonilo te nove nastavitve: to je gručasta, vodoravno razširljiva baza podatkov, ki je na strani AP izreka CAP. Rešuje težave, povezane z izmenjavo podatkov, in omogoča jasno ločevanje med komponento za indeksiranje, ki pozna verigo blokov, in brezglavimi strežniki API.
Toda kakšen smisel ima imeti na voljo celotno zgodovinsko stanje, če iz njega nikoli ne bomo dejansko brali?
Kar zadeva naš primer uporabe, so neobdelani zgodovinski podatki redko potrebni, ker je mogoče iz njih združiti stanje našega uporabniškega računa. To nas je vodilo k izzivu obstoječe rešitve za shranjevanje podatkov, ki temelji na porazdeljeni bazi podatkov Cassandra.
Količina podatkov, ki jih moramo shraniti na verigo blokov, čeprav v obsegu terabajtov, ni tisto, kar lahko imenujemo »veliki podatki«. Poleg tega je del če, ki bo uporabljen za odgovore na večino poizvedb (t. i. vroča pot), še manjši. Dandanes je mogoče zlahka najti standardne strežnike strojne opreme z več kot 16 TB pomnilnika NVMe SSD. Navpično skaliranje je zelo zmogljivo orodje, prav tako relacijska zbirka podatkov.
Nazadnje, glavna težava, ki smo jo imeli pri trenutni postavitvi cassandre, ni bil niti potraten model shranjevanja niti slabo prilagojen primer uporabe podatkov, temveč pomanjkanje prijaznosti do razvijalcev. Izkazalo se je, da je razvoj nove funkcije, ki temelji na podatkih, na cassandri potraten po nepotrebnem. Prizadevali smo si za implementacijo vsake nove osi, na kateri moramo zagotoviti podatke.
Glede na strokovnost naše ekipe na področju veščin modeliranja podatkov in znanja SQL, PostgreSQL je bil popoln kandidat. Ta rešitev je preizkušena v bitki, robustna, enostavna za razširitev, zaradi česar je idealna izbira.
Zakaj smo izbrali SQL namesto NoSQL:
- Bere/zapisuje stanja: primer uporabe podatkov v verigi blokov je bil močno nagnjen k branju in ne pisanju (veriga blokov zapiše zelo malo podatkov z zelo razumno hitrostjo, tudi za verigo blokov, kot je Polygon). Cassandra ima sposobnost, da absorbira zelo veliko količino pisanja - pot branja je pravzaprav več kot pot pisanja.
- Podpora za indeksiranje: Indeksi so ključna komponenta DBMS za odgovarjanje na poizvedbe in nove poslovne primere ali priložnosti. Cassandra ima omejeno podporo za indeksiranje. Indeksi so učinkoviti le, če poizvedba že določa način za omejitev particije, na kateri se bo izvajala poizvedba. Tukaj plačamo stroške, da imamo poljubno porazdeljena zbirka podatkov. Podpora PostgreSQL za indekse je učinkovita, razširljiva in na robu.
- Podpora za združevanje: Enak primer za združevanje; Ker Cassandra ne dovoljuje združevanja z več particijami in ne dopušča klavzule GROUP BY v svojem poizvedovalnem jeziku, njena podpora nekako manjka. PostgreSQL predlaga obsežno podporo za združevanje, tudi za eksotične vrste podatkov, kot so obsegi in jsonb blob.
- Modeliranje podatkov: Cassandra zelo, zelo omejuje način modeliranja podatkov. Tabelo je treba ustvariti za skoraj vsako zahtevo, na katero želite odgovoriti, in podatke je treba denormalizirati v velike vrstice (z uporabo v celoti trgovina s širokim stolpcem vidik C* in tudi dejstvo, da so pisci umazano poceni). PostgreSQL nam omogoča, da izkoristimo relacijski vidik verige blokov (klici, transakcije, bloki) in sprostimo prostor na disku, kar spodbuja ponovno uporabo podatkov.
- Ad-hoc poizvedbe in revizija: Sposobnost uporabe celotnega standarda SQL in izvajanja poljubnih poizvedb pomeni, da lahko raziskujemo in iščemo možne temeljne vzroke napak ali imamo raziskovalne podatke za prihodnje primere uporabe. Bazo podatkov lahko res uporabljamo kot interaktivno in pametno orodje, ne pa kot neumno shrambo. To počnemo na Cassandri brez obsežne in drage analitične računalniške gruče, kot je Presto, Spark itd. (in ker delujemo na golih strežnikih, nimamo dostopa do orodij za analizo porazdeljenih podatkov, kot je EMR, ki jih je enostavno ustvariti).
- Poraba pomnilnika: Predpostavka Cassandre je, da je shranjevanje zelo poceni in da je mogoče gručo zlahka razširiti z novimi stroji. To pomeni, da vse omejitve za indekse in združevanja je treba plačati s shranjevanjem. Brez globalno učinkovitih indeksov in podpore za združevanje pomeni, da moramo denormalizirati in shraniti kopijo celotne tabele za vsako os, ki jo želimo poizvedovati. PostgreSQL nam prihrani terabajte prostora za shranjevanje.
- Usklajenost: Ker je Cassandra porazdeljena baza podatkov, usmerjena v AP (komunikacija poteka z ogovarjanjem med vozlišči), je doslednost le morebitna v smislu pisanja. Politiko doslednosti vsakega stavka lahko prilagodite tako za branje kot za pisanje, vendar cilj te zbirke podatkov nikoli ni bila močna doslednost. PostgreSQL ima močno zgodbo uporabe za kritične misije in je zelo odporen. Biti centraliziran pomeni tudi, da v pisalno pot ni vključeno nobeno omrežje.
- Transakcije in MVCC:
- Transakcije: Cassandra podpira samo lahke transakcije na poizvedbe DML. Lahko se uporabi nekaj serij (doc), vendar obstajajo številna opozorila, in sicer, da morajo biti vrstice v istem strežniku (= particiji), da ne bodo imele grozljive zmogljivosti.
- MVCC: Cassandra podpira časovno žigosanje vrstic, vendar celoten MVCC ni zagotovljen. Zgoščevanje lahko izbriše zastarele podatke in C* ne moremo povedati, da tega ne bi smelo (na primer pri transakciji v PG).
- PostgreSQL podpira močan model MVCC, ki zagotavlja dosledno bralno pot za naše uporabnike.
- Tooling: PostgreSQL ima veliko več orodij, ki se pogosto uporabljajo za enostavno upravljanje baze podatkov. Poleg tega orodje, kot je preletna pot zagotavlja, da vzdržujemo močno različico sheme baze podatkov. Uspešno smo ga že integrirali z našo kodno bazo. Na Cassandri ni ekvivalenta tej stopnji zrelosti.
- Horizontalna razširljivost: To je ključna prodajna točka Cassandre. Preprosto dodajte več strojev, ko se vaši podatki širijo. Ni ekvivalenta za PostgreSQL, saj je treba razdeljevanje in particioniranje izvesti ročno.
Kako načrtujemo obseg
Kot smo videli, je edina slaba stran uporabe nastavitve Postgres skaliranje tako pri branju kot pri shranjevanju. Kaj lahko storimo, da presežemo to omejitev?
Prvo učinkovito orodje, ki ga imamo, je ločitev vsakega protokola ali verige blokov, ki jo podpiramo, v lastno zbirko podatkov, saj se tako lahko ustrezno prilagodi obsegu in prometu. Segmentacija po poslovni domeni zagotavlja prvo plast skaliranja.
Z nadaljevanjem tega koncepta lahko segmentiramo tudi hladne, zgodovinske podatke v časovno particijo. Najnovejše različice Postgresa so močno izboljšale uporabnost particioniranih tabel, kar bi lahko omogočilo nemoteno premikanje podatkov po gruči strojev. Lahko bi na primer uporabili cenejše stroje z manj računalniške moči za gostovanje večine zgodovinskih podatkov, medtem ko bi obdržali močne uporabnike, ki strežejo velikane z RAM-om, za gostovanje združenih tabel in uporabnikovih najnovejših operacij.
Ta pristop zelo dobro deluje v našem primeru uporabe, ker v zgodovinskem pomnilniku ni zunanjih ključev med particijami (vse je na koncu pritrjeno na blok). Z vidika glavnega strežnika je mogoče pregledno dostopati do zgodovinskih podatkov z uporabo particioniranja in razširitve postgres_fdw.
Da bi pomagali postaviti vse to na svoje mesto, smo preučili tudi razširitev TimescaleDB. Ta razširitev doda veliko funkcionalnosti osnovnemu postgresu in večina teh je popolnoma primerna za naše primere uporabe:
- Samodejno razdelitev tabel na podlagi stolpca, podobnega času (v našem primeru ga prilagodimo tako, da vzamemo višino verige blokov kot referenco).
- Samodejno stiskanje starejših delov, ki se zaveda vrste podatkov in temelji na stolpcih. To zagotavlja skoraj popolno kompresijsko razmerje z uporabo najsodobnejših algoritmov za podatke, ki so si zelo podobni.
- Učinkovito združevanje na podlagi časovnega segmenta za enostavno izračunavanje zgodovinskih bilanc in grafov tržnih podatkov.
Smo šele na začetku eksperimentiranja glede shranjevanja in to odklene veliko primerov uporabe. Dokaz konceptov z uporabo majhne količine podatkov (~10k blokov v glavnem omrežju ethereum, torej približno 2 dni podatkov) pokazala zmanjšanje prostora na disku do 40 %.
Kot smo videli, obseg podatkov ni problem, če uporabljamo pravo strategijo. Toda kako se prilagoditi velikosti naše baze uporabnikov?
Že tukaj imamo lepo prednost: indeksiramo celotne podatke blockchaina. Tako potreben prostor za shranjevanje ne bo rasel kot število uporabnikov, ampak kot skupna velikost verige blokov. Optimizacije shranjevanja in branja so v svoji ločljivosti popolnoma ortogonalne.
Ta nastavitev je v kombinaciji z zelo nizko potrebo po pisanju v sorazmerju z obsegom branja, ki ga je treba postreči, sanjska nastavitev za vzorec replike vodilni sledilec pri razvrščanju. Da bi povečali nadaljnjo zmogljivost in prepustnost, lahko prav tako postavimo replike za branje postgres na iste stroje kot strežnike API in izkoristimo vtičnice domene UNIX, da preskočimo povratna potovanja v omrežju.
Tukaj je primer strategije replikacije podatkov, ki bi jo lahko uporabili za prilagajanje naših branj. Svetlo siva polja predstavljajo posamezne strežnike. Tukaj lahko vidimo, da so moduli API neposredno nameščeni skupaj z replikami najbolj vročih podatkov, da se zagotovi minimalen čas prenosa med shrambo in uporabniki. Arhivski primerki, opisani predhodno, niso predstavljeni, da ne bi preveč zapletli sheme.
Zaključne opombe
Kot dolgoletni uporabnik Cassandre želim poudariti, da gre za odlično zasnovano bazo podatkov, ki ustreza široki paleti aplikacij. Na žalost so se pri Ledgerju za njegovo uporabo odločili na podlagi primera uporabe podatkov, ki se ni nikoli uresničil.
To je vplivalo na produktivnost naše ekipe in v pričakovanju izzivov, ki jih moramo rešiti, smo se odločili ugrizniti v cilj in ne nasedati zmoti o potopljenih stroških.
V mnogih primerih vaši podatki niso veliki podatki. Upravljanje distribucije podatkov v večini primerov ni težka naloga in res je treba skrbno razmisliti o kompromisih polnopravne porazdeljene baze podatkov. Ključni dejavnik je izkušnja razvijalca, saj sprosti dragoceni čas za izdelavo česar koli drugega. To je pravi primer uporabe, v katerega moramo veliko vlagati.
- Distribucija vsebine in PR s pomočjo SEO. Okrepite se še danes.
- PlatoAiStream. Podatkovna inteligenca Web3. Razširjeno znanje. Dostopite tukaj.
- Kovanje prihodnosti z Adryenn Ashley. Dostopite tukaj.
- Kupujte in prodajajte delnice podjetij pred IPO s PREIPO®. Dostopite tukaj.
- vir: https://www.ledger.com/blog/serving-web3-at-web2-scale
- :ima
- : je
- :ne
- $GOR
- 10
- 10K
- 20
- a
- sposobnost
- Sposobna
- dostop
- dostopna
- Račun
- čez
- dejansko
- prilagodijo
- dodajte
- Dodaja
- držijo
- Prednost
- združevanje
- algoritmi
- vsi
- omogočajo
- omogoča
- že
- Prav tako
- Čeprav
- znesek
- an
- Analiza
- analitika
- in
- odgovor
- kaj
- karkoli
- API
- aplikacije
- uporabna
- pristop
- ustrezno
- Arhiv
- SE
- okoli
- Umetnost
- članek
- AS
- vidik
- vidiki
- predpostavka
- At
- Na voljo
- zaveda
- stran
- OSI
- Os
- Backend
- Ravnovesje
- tehtnice
- baza
- temeljijo
- Izhodišče
- BE
- ker
- bilo
- pred
- Začetek
- Behemoti
- počutje
- Prednosti
- med
- Big
- Big Podatki
- Bit
- Bitcoin
- Block
- blockchain
- podatki o blockchainu
- verige blokov
- Bloki
- tako
- Pasovi
- škatle
- Prinaša
- Bug
- izgradnjo
- poslovni
- vendar
- by
- klic
- poziva
- CAN
- Kandidat
- cap
- previdno
- primeru
- primeri
- Vzrok
- povzročilo
- centralizirano
- verige
- izziv
- izzivi
- izziv
- spremenite
- spreminjanje
- poceni
- cenejša
- cenejši stroji
- izbira
- Izberite
- izbral
- izbran
- jasno
- Grozd
- Koda
- baza kod
- hladno
- Stolpec
- kombinirani
- blago
- Komunikacija
- podjetje
- zapletenosti
- komponenta
- Izračunajte
- Koncept
- koncepti
- premislek
- šteje
- dosledno
- Cool
- Core
- strošek
- bi
- ustvaril
- kritično
- Trenutna
- datum
- Analiza podatkov
- izmenjavo podatkov
- shranjevanje podatkov
- Baze podatkov
- Dnevi
- Odločitev
- opisano
- Oblikovanje
- Razvojni
- razvoju
- težko
- neposredno
- umazanijo
- porazdeljena
- distribucija
- deljeno
- do
- ne
- tem
- domena
- dont
- slaba stran
- sanje
- voznik
- 2
- e
- vsak
- enostavno
- lahka
- Edge
- Učinkovito
- učinkovite
- ostalo
- vgrajeni
- poudariti
- omogočajo
- spodbujanje
- okrepi
- zagotovitev
- zagotavlja
- zagotoviti
- Enakovredna
- itd
- ethereum
- GLAVNO OMREŽJE ETHEREUM
- Tudi
- morebitne
- VEDNO
- Tudi vsak
- vse
- Primer
- obstoječih
- Eksotični
- širi
- izkušnje
- strokovno znanje
- raziskuje
- raziskovalec
- razširiti
- razširitev
- obsežen
- Dejstvo
- Padec
- Feature
- Lastnosti
- Nekaj
- Najdi
- prva
- fit
- za
- tuji
- Naprej
- prijaznost
- iz
- polno
- polnopravni
- v celoti
- funkcionalnosti
- nadalje
- Prihodnost
- pridobivanje
- dana
- Globalno
- Cilj
- dogaja
- grafi
- siva
- veliko
- skupina
- Grow
- Pridelovanje
- zagotovljena
- Smernice
- imel
- Trdi
- strojna oprema
- Imajo
- ob
- Glava
- močno
- višina
- pomoč
- tukaj
- visoka
- zelo
- zgodovinski
- gostitelj
- HOT
- najbolj vročih
- Kako
- Kako
- Vendar
- HTML
- HTTPS
- i
- idealen
- if
- nespremenljiv
- prizadeti
- izvajanja
- izboljšalo
- in
- vedno
- Indeks
- indeksi
- primer
- integrirana
- interaktivno
- v
- Invest
- vključeni
- vprašanje
- Vprašanja
- IT
- ITS
- pridružite
- pridružil
- jpg
- samo
- vzdrževanje
- Ključne
- tipke
- Otrok
- Pomanjkanje
- jezik
- velika
- Latenca
- Zadnji
- plast
- Led
- Ledger
- legitimno
- manj
- Stopnja
- Vzvod
- light
- lahek
- kot
- Omejitev
- omejitve
- Limited
- Seznam
- malo
- lokalno
- Long
- Pogledal
- si
- Sklop
- nizka
- Stroji
- je
- Glavne
- glavno omrežje
- vzdrževati
- Večina
- Izdelava
- upravljanje
- upravljanje
- ročno
- več
- Tržna
- Market Data
- zapadlosti
- max širine
- Maj ..
- pomeni
- kovinski
- selitev
- minimalna
- misije
- Model
- modeliranje
- več
- Poleg tega
- Najbolj
- premikanje
- veliko
- morajo
- in sicer
- skoraj
- Nimate
- potrebna
- potrebe
- Niti
- mreža
- nikoli
- Novo
- lepo
- št
- vozlišča
- nič
- Številka
- številne
- Cilji
- of
- on
- ONE
- samo
- deluje
- operacije
- Priložnosti
- or
- Da
- naši
- sami
- več
- Premagajte
- lastne
- plačana
- del
- Stranke
- pot
- Vzorec
- Plačajte
- peer
- peer to peer
- popolna
- performance
- perspektiva
- Kraj
- Načrt
- platon
- Platonova podatkovna inteligenca
- PlatoData
- Stroki
- Točka
- politika
- poligon
- mogoče
- postgresql
- potencial
- moč
- močan
- praksa
- problem
- Procesi
- produktivnost
- dokazilo
- Delež
- predlaga
- protokol
- dokazano
- zagotavljajo
- če
- dal
- poizvedbe
- RAM
- območje
- Oceniti
- precej
- razmerje
- Surovi
- Preberi
- pravo
- res
- razumno
- Zmanjšanje
- o
- povezane
- zanesljiv
- reorganizacijo
- odgovori
- replikacija
- predstavljajo
- zastopan
- zahteva
- odporno
- Resolucija
- rešiti
- rezultat
- ponovna
- Pravica
- robusten
- koren
- krog
- ROW
- Run
- tek
- Enako
- Lestvica
- razširljive
- Lestvica
- skaliranje
- brez težav
- Iskalnik
- varnost
- glej
- videl
- Segment
- segmentacija
- Prodaja
- prodajno mesto
- Storitev
- Storitve
- služijo
- nastavite
- nastavitev
- več
- brušenje
- delitev
- Kratke Hlače
- Prikaži
- strani
- Podoben
- saj
- sam
- Velikosti
- spretnosti
- majhna
- manj
- pametna
- So
- Rešitev
- SOLVE
- Rešuje
- nekaj
- Vesolje
- Spark
- Spawn
- SQL
- standardna
- Država
- Izjava
- shranjevanje
- trgovina
- Zgodba
- Strateško
- Strategija
- močna
- Močno
- Uspešno
- podpora
- Podpira
- miza
- Bodite
- ob
- Naloga
- skupina
- tehnični
- povej
- Pogoji
- kot
- da
- O
- Blok
- Država
- njihove
- POTEM
- Tukaj.
- te
- jih
- tretja
- tretje osebe
- ta
- pretočnost
- čas
- do
- tudi
- orodje
- orodja
- Skupaj za plačilo
- POPOLNOMA
- Prometa
- transakcija
- Transakcije
- prenos
- pregledno
- tip
- Vrste
- Konec koncev
- pod
- osnovni
- na žalost
- unix
- odklene
- po nepotrebnem
- us
- uporabnost
- Uporaba
- uporaba
- primeru uporabe
- Rabljeni
- uporabnik
- Uporabniki
- uporabo
- navadno
- dragocene
- raznolikost
- vertikalno
- zelo
- Obseg
- želeli
- je
- način..
- we
- Web2
- Web3
- Dobro
- Kaj
- Kaj je
- kdaj
- ki
- medtem
- Medtem ko
- celoti
- zakaj
- široka
- pogosto
- bo
- z
- brez
- deluje
- pisati
- pisni
- jo
- Najmlajši
- Vaša rutina za
- zefirnet