Kumaha ngeureunkeun hariwang sareng mimitian hirup tanpa monolith

Kumaha ngeureunkeun hariwang sareng mimitian hirup tanpa monolith

Urang sadaya cinta carita. Simkuring resep diuk sabudeureun seuneu jeung ngobrol ngeunaan victories kaliwat urang, battles, atawa ngan saukur pangalaman gawé urang.

Dinten ieu ngan dinten sapertos. Sareng upami anjeun henteu aya dina seuneu ayeuna, kami gaduh carita pikeun anjeun. Carita kumaha urang ngamimitian damel sareng neundeun dina Tarantool.

Sakali waktos, perusahaan kami ngagaduhan sababaraha "monoliths" sareng hiji "siling" kanggo sadayana, dimana monolith ieu lalaunan tapi pasti caket, ngabatesan penerbangan perusahaan kami, pamekaran urang. Sareng aya pamahaman anu jelas: hiji dinten urang bakal pencét siling ieu sesah.

Ayeuna mangrupikeun ideologi anu umum pikeun misahkeun sadayana sareng sadayana, tina peralatan dugi ka logika bisnis. Hasilna, urang, contona, boga dua DC anu praktis bebas di tingkat jaringan. Lajeng sagalana éta sagemblengna béda.

Kiwari, aya seueur alat sareng alat pikeun ngarobih dina bentuk CI/CD, K8S, jsb. Dina waktos "monolitik", urang henteu peryogi seueur kecap asing. Ieu cukup ngan saukur ngabenerkeun "gudang" dina database.

Tapi waktu pindah ka hareup, sarta jumlah requests dipindahkeun ka hareup sapanjang kalawan eta, kadang shooting RPS saluareun kamampuhan urang. Kalayan asupna nagara-nagara CIS kana pasar, beban dina prosésor database tina monolith munggaran henteu turun di handap 90%, sareng RPS tetep dina tingkat 2400. Sareng ieu sanés ngan ukur pamilih leutik, tapi patarosan anu ageung kalayan a kebat cék sarta JOINs nu bisa ngajalankeun ampir satengah tina data ngalawan latar tukang IO badag.

Nalika penjualan Hideung Jumaah pinuh mimiti muncul dina adegan - sareng Wildberries mangrupikeun salah sahiji anu pangheulana nahan aranjeunna di Rusia - kaayaan janten hanjelu. Barina ogé, beban dina dinten sapertos naek tilu kali.
Oh, ieu "jaman monolitik"! Kuring yakin yén anjeun geus ngalaman hal sarupa, jeung anjeun masih teu bisa ngarti kumaha ieu bisa lumangsung ka anjeun.

Naon anu anjeun tiasa laksanakeun - fashion aya dina téknologi. Ngeunaan 5 sababaraha taun ka pengker, urang kedah rethink salah sahiji mods ieu dina bentuk situs aya dina .NET jeung MS SQL server, nu taliti disimpen sagala logika situs sorangan. Kuring tetep taliti pisan yén ngagaji monolit sapertos kitu tétéla janten karesep anu panjang sareng henteu gampang pisan.
A digression leutik.

Dina sagala rupa acara kuring nyarios: "upami anjeun henteu ningali monolith, maka anjeun henteu tumbuh!" Abdi resep kana pendapat anjeun ngeunaan masalah ieu, punten nyerat dina koméntar.

Hiji Sora Guntur

Hayu urang balik deui ka urang "bonfire". Pikeun ngadistribusikaeun beban fungsionalitas "monolithic", kami mutuskeun pikeun ngabagi sistem kana microservices dumasar kana téknologi opensource. Kusabab, sahenteuna, aranjeunna langkung mirah pikeun skala. Sareng urang ngagaduhan 100% pamahaman yén urang kedah skala (sareng seueur). Barina ogé, dina waktu éta mungkin pikeun asup ka pasar nagara tatangga, sarta jumlah pendaptaran, kitu ogé jumlah pesenan, mimiti tumuwuh malah leuwih kuat.

Saanggeus dianalisis calon munggaran pikeun miang ti monolith mun microservices, urang sadar yen 80% tina tulisan di antarana asalna tina sistem back office, sarta maca ti kantor hareup. Anu mimiti, ieu merhatikeun sababaraha subsistem penting pikeun urang - data pamaké sarta sistem keur ngitung biaya ahir barang dumasar kana informasi ngeunaan diskon customer tambahan sarta kupon.

Indent. Ayeuna éta pikasieuneun pikeun ngabayangkeun, tapi salian ti subsistem anu disebatkeun di luhur, katalog produk, karanjang balanja pangguna, sistem milarian produk, sistem nyaring pikeun katalog produk, sareng sababaraha jinis sistem rekomendasi ogé dikaluarkeun tina monolit kami. Pikeun operasi unggal sahijina aya kelas misah tina sistem heureut tailored, tapi sakali waktu maranéhanana kabéh cicing di hiji "imah".

Kami langsung ngarencanakeun pikeun mindahkeun data ngeunaan klien kami ka sistem sharded. Ngaleungitkeun fungsionalitas keur ngitung biaya ahir barang diperlukeun scalability alus keur bacaan, sabab dijieun beban RPS greatest sarta éta paling hese pikeun nerapkeun pikeun database (loba data aub dina prosés itungan).

Hasilna, urang datang nepi ka skéma nu fits ogé kalawan Tarantool.

Waktu éta, pikeun operasi microservices dipilih skéma pikeun gawé bareng sababaraha puseur data dina mesin virtual jeung hardware. Sakumaha anu dipidangkeun dina gambar, pilihan réplikasi Tarantool diterapkeun dina modeu master-master sareng master-slave.

Kumaha ngeureunkeun hariwang sareng mimitian hirup tanpa monolith
Arsitéktur. Pilihan 1. Ladenan pamaké

Dina waktos ayeuna, aya 24 beling, anu masing-masing gaduh 2 instansi (hiji pikeun tiap DC), sadayana dina mode master-master.

Di luhureun pangkalan data aya aplikasi anu ngaksés réplika pangkalan data. Aplikasi tiasa dianggo sareng Tarantool ngalangkungan perpustakaan khusus kami, anu ngalaksanakeun antarmuka supir Tarantool Go. Anjeunna ningali sadaya réplika sareng tiasa damel sareng master pikeun maca sareng nyerat. Intina, éta ngalaksanakeun modél set replika, anu nambihan logika pikeun milih réplika, ngalakukeun retries, pemutus sirkuit sareng wates laju.

Dina hal ieu, kasebut nyaéta dimungkinkeun pikeun ngonpigurasikeun kawijakan pilihan replika dina konteks shards. Contona, roundrobin.

Kumaha ngeureunkeun hariwang sareng mimitian hirup tanpa monolith
Arsitéktur. Pilihan 2. Service keur ngitung biaya ahir barang

Sababaraha bulan kapengker, lolobana requests keur ngitung biaya ahir barang indit ka layanan anyar, nu, prinsipna mah, jalan tanpa database, tapi sababaraha waktu ka tukang sagalana geus diolah 100% ku layanan kalawan Tarantool handapeun tiung.

Database jasa diwangun ku 4 master dimana sinkronisasi ngumpulkeun data, sareng masing-masing master réplikasi ieu nyebarkeun data ka réplika ngan ukur dibaca. Unggal master gaduh kirang langkung 15 réplika sapertos kitu.

Boh dina skéma kahiji atawa kadua, lamun hiji DC teu sadia, aplikasi nu bisa nampa data dina kadua.

Perhatos yén réplikasi dina Tarantool cukup fleksibel sareng tiasa dikonpigurasi dina waktos runtime. Dina sistem séjén, kasusah timbul. Contona, ngarobah max_wal_senders na max_replication_slots parameter di PostgreSQL merlukeun balikan deui wizard, nu dina sababaraha kasus bisa ngakibatkeun severing sahiji sambungan antara aplikasi tur DBMS.

Milarian sareng anjeun bakal mendakan!

Naha urang henteu ngalakukeun éta "sapertos jalma normal", tapi milih cara anu teu biasa? Éta gumantung kana naon anu dianggap normal. Seueur jalma umumna ngadamel klaster tina Mongo sareng nyebarkeun kana tilu DC anu disebarkeun geo.

Dina waktos éta, urang parantos ngagaduhan dua proyék Redis. Kahiji éta cache a, sarta kadua mangrupa gudang pengkuh pikeun data teu kritis teuing. Ieu rada hese jeung manehna, sabagean ngaliwatan lepat urang. Kadang-kadang volume anu lumayan ageung aya dina konci, sareng ti waktos ka waktos situs janten teu damang. Kami nganggo sistem ieu dina versi master-slave. Sareng aya seueur kasus dimana aya anu kajantenan ka master sareng réplikasi rusak.

Nyaéta, Redis saé pikeun tugas anu teu aya kawarganagaraan, sanés tugas anu stateful. Sacara prinsip, éta diwenangkeun ngarengsekeun paling masalah, tapi ngan lamun éta solusi konci-nilai kalawan sapasang indexes. Tapi Redis dina waktos éta rada sedih kalayan kegigihan sareng réplikasi. Sajaba ti éta, aya keluhan ngeunaan kinerja.

Urang panginten ngeunaan MySQL sareng PostgreSQL. Tapi anu kahiji kumaha waé henteu kéngingkeun kami, sareng anu kadua mangrupikeun produk anu rada canggih, sareng éta henteu pantes pikeun ngawangun jasa saderhana.
Urang diusahakeun RIAK, Cassandra, malah database grafik. Ieu mangrupikeun solusi anu lumayan anu henteu cocog pikeun peran alat universal umum pikeun nyiptakeun jasa.

Pamustunganana urang netep di Tarantool.

Urang tos ka dinya nalika éta dina versi 1.6. Kami kabetot dina éta ku simbiosis konci-nilai sareng pungsionalitas database relational. Aya indéks sekundér, transaksi sareng rohangan, sapertos tabel, tapi henteu saderhana, anjeun tiasa nyimpen jumlah kolom anu béda dina éta. Tapi fitur pembunuh Tarantool nyaéta indéks sekundér digabungkeun sareng nilai konci sareng transaksional.

Komunitas anu nyarios Rusia anu responsif, siap ngabantosan dina obrolan, ogé maénkeun peran. Kami aktip ngagunakeun ieu sareng hirup langsung dina obrolan. Sarta ulah poho ngeunaan santun pengkuh tanpa blunders atra jeung kasalahan. Upami anjeun ningali sajarah urang sareng Tarantool, urang ngagaduhan seueur nyeri sareng kagagalan kalayan réplikasi, tapi urang henteu pernah kaleungitan data kusabab kasalahanana!

Palaksanaan ngagaduhan ka awal kasar

Waktu éta, tumpukan ngembangkeun utama urang éta .NET, nu teu aya konektor pikeun Tarantool. Urang langsung ngamimitian ngalakukeun hiji hal di Go. Éta ogé damel sareng Lua. Masalah utama dina waktos anu sareng debugging: di .NET sagalana geus gede jeung ieu, tapi sanggeus éta hésé terjun kana dunya Lua embedded, mun anjeun teu boga debugging iwal log. Sajaba ti éta, pikeun sababaraha alesan réplikasi périodik murag eta, jadi kuring kungsi delve kana struktur mesin Tarantool. Obrolan ngabantosan ieu, sareng sakedik, dokuméntasi; sakapeung urang ningali kodeu. Dina waktos éta, dokuméntasina sakitu-kituna.

Janten, salami sababaraha bulan, kuring tiasa ngaraoskeun sirah kuring sareng nampi hasil anu santun tina damel sareng Tarantool. Kami nyusun pamekaran rujukan dina git anu ngabantosan formasi microservices énggal. Salaku conto, nalika aya tugas: nyiptakeun microservice anu sanés, pamekar ningali kode sumber solusi rujukan dina gudang, sareng peryogi henteu langkung ti saminggu pikeun nyiptakeun anu énggal.

Ieu waktos husus. Sacara konvensional, teras anjeun tiasa angkat ka admin dina méja salajengna sareng naroskeun: "Pasihan abdi mesin virtual." Kira-kira tilu puluh menit ti harita mobilna geus aya jeung anjeun. Anjeun disambungkeun sorangan, dipasang sagalana, sarta lalulintas dikirim ka anjeun.

Dinten ieu moal tiasa dianggo deui: anjeun kedah nambihan ngawaskeun sareng logging kana jasa, nutupan pungsionalitasna ku tés, mesen mesin virtual atanapi pangiriman ka Kuber, jsb. Sacara umum, éta bakal langkung saé ku cara ieu, sanaos bakal langkung lami sareng langkung nyusahkeun.

Ngabagi jeung aturan. Naon urusan jeung Lua?

Aya dilema anu serius: sababaraha tim henteu tiasa dipercaya pikeun ngarobih parobihan kana jasa anu seueur logika di Lua. Ieu sering dibarengan ku jasa anu henteu jalan.

Nyaéta, pamekar nyiapkeun sababaraha jinis parobihan. Tarantool mimiti ngalakukeun migrasi, tapi replica masih jeung kode heubeul; Sababaraha DDL atanapi anu sanésna sumping ka dinya ngalangkungan réplikasi, sareng kodeu ngan saukur murag sabab henteu diperhatoskeun. Hasilna, prosedur update pikeun pangurus diatur dina lambar A4: eureun réplikasi, ngapdet ieu, ngahurungkeun réplikasi, mareuman dieu, update di ditu. Ngimpina!

Hasilna, ayeuna urang paling sering nyoba ngalakukeun nanaon di Lua. Ngan nganggo iproto (protokol binér pikeun berinteraksi sareng server), sareng éta. Panginten ieu mangrupikeun kakurangan pangaweruh diantara pamekar, tapi tina sudut pandang ieu sistemna rumit.

Kami henteu salawasna nuturkeun skrip ieu. Kiwari kami henteu gaduh hideung sareng bodas: sadayana aya di Lua, atanapi sadayana aya di Go. Urang geus ngarti kumaha urang bisa ngagabungkeun aranjeunna ambéh urang teu mungkas nepi ka masalah migrasi engké.

Dimana Tarantool ayeuna?
Tarantool dipaké dina layanan keur ngitung biaya ahir barang nyokot kana akun diskon Kupon, ogé katelah "Promoter". Sakumaha anu kuring nyarios tadi, anjeunna ayeuna pensiunan: anjeunna diganti ku jasa katalog énggal kalayan harga anu tos diitung, tapi genep bulan kapengker sadaya itungan dilakukeun dina Promotizer. Saméméhna, satengah logika na ditulis dina Lua. Dua taun ka tukang, jasa ieu ngancik kana fasilitas gudang, sarta logika ieu ditulis deui dina Go, sabab mékanika diskon geus robah saeutik tur jasa lacked kinerja.

Salah sahiji layanan anu paling kritis nyaéta profil pangguna. Hartina, sakabeh pamaké Wildberries disimpen dina Tarantool, tur aya ngeunaan 50 juta di antarana.Sistem sharded ku ID pamaké, disebarkeun di sakuliah sababaraha DCs disambungkeun ka jasa Go.
Numutkeun RPS, Promoter éta sakali pamingpin, ngahontal 6 rébu requests. Dina hiji waktos urang ngagaduhan 50-60 salinan. Ayeuna pamimpin di RPS nyaéta profil pangguna, sakitar 12 rébu. Layanan ieu nganggo sharding khusus, dibagi ku kisaran ID pangguna. Palayanan nyayogikeun langkung ti 20 mesin, tapi seueur teuing; kami ngarencanakeun ngirangan sumber daya anu dialokasikeun, sabab kapasitas mesin 4-5 cukup pikeun éta.

Ladenan sési mangrupikeun jasa munggaran kami dina vshard sareng Cartridge. Nyetel vshard tur ngamutahirkeun Cartridge diperlukeun sababaraha usaha ti kami, tapi tungtungna sagalana digawé kaluar.

Ladenan pikeun nampilkeun spanduk anu béda dina halaman wéb sareng dina aplikasi mobile mangrupikeun salah sahiji anu munggaran dileupaskeun langsung dina Tarantool. Ladenan ieu kasohor kusabab umurna 6-7 taun, éta masih beroperasi sareng henteu kantos di-reboot. Réplikasi master-master dipaké. Euweuh nu peupeus.

Aya conto ngagunakeun Tarantool pikeun fungsionalitas rujukan gancang dina sistem gudang pikeun gancang ganda-mariksa informasi dina sababaraha kasus. Kami nyobian nganggo Redis pikeun ieu, tapi data dina mémori nyandak langkung seueur rohangan tibatan Tarantool.

Ladenan daptar antosan, langganan klien, carita ayeuna modis sareng barang nunggak ogé tiasa dianggo sareng Tarantool. Ladenan panungtungan dina mémori nyokot ngeunaan 120 GB. Ieu mangrupikeun jasa anu paling komprehensif di luhur.

kacindekan

Hatur nuhun kana indéks sekundér digabungkeun jeung konci-nilai na transactionality, Tarantool ieu ogé cocog pikeun arsitéktur basis microservices. Nanging, kami mendakan kasusah nalika ngaluncurkeun parobihan kana jasa kalayan seueur logika di Lua - jasa sering lirén damel. Kami henteu tiasa ngatasi ieu, sareng kana waktosna kami dugi ka kombinasi anu béda tina Lua sareng Go: kami terang dimana ngagunakeun hiji basa sareng dimana nganggo anu sanés.

Naon deui maca dina topik

sumber: www.habr.com

Tambahkeun komentar