Pehea e ho'ōki ai i ka hopohopo a hoʻomaka e noho me ka monolith

Pehea e ho'ōki ai i ka hopohopo a hoʻomaka e noho me ka monolith

Aloha kākou i nā moʻolelo. Makemake mākou e noho a puni ke ahi a kamaʻilio e pili ana i kā mākou lanakila i hala, kaua, a i ʻole kā mākou ʻike hana.

He lā like kēia lā. A inā ʻaʻole ʻoe i ke ahi i kēia manawa, he moʻolelo kā mākou no ʻoe. ʻO ka moʻolelo o kā mākou hoʻomaka ʻana e hana me ka mālama ʻana ma Tarantool.

I kekahi manawa, ua loaʻa i kā mākou hui he mau "monoliths" a me hoʻokahi "ceiling" no nā mea a pau, kahi i hele mālie ai kēia mau monoliths, e kaupalena ana i ka lele ʻana o kā mākou hui, ko mākou ulu ʻana. A ua maopopo ka maopopo: i kekahi lā e paʻi ikaika mākou i kēia kaupaku.

ʻO ia ka manaʻo nui o ka hoʻokaʻawale ʻana i nā mea āpau a me nā mea āpau, mai nā lako a hiki i ka loiloi ʻoihana. ʻO ka hopena, no ka laʻana, loaʻa iā mākou ʻelua DC i kūʻokoʻa maoli i ka pae pūnaewele. A laila ua ʻokoʻa loa nā mea a pau.

I kēia lā, nui nā mea hana a me nā mea hana no ka hoʻololi ʻana i ke ʻano o CI/CD, K8S, etc. I ka manawa "monolithic", ʻaʻole pono mākou i nā huaʻōlelo haole. Ua lawa ka hoʻoponopono wale ʻana i ka "waihona" i ka waihona.

Akā, ua neʻe ka manawa i mua, a ua neʻe ka nui o nā noi me ia, i kekahi manawa e pana ana i ka RPS ma mua o ko mākou hiki. Me ke komo ʻana o nā ʻāina CIS i loko o ka mākeke, ʻaʻole i hāʻule ka ukana ma ka waihona waihona o ka monolith mua ma lalo o 90%, a noho mau ʻo RPS ma ke kiʻekiʻe o 2400. ʻAʻole kēia mau mea koho liʻiliʻi wale nō, akā nā nīnau hefty me kahi. pūʻulu o nā loiloi a me nā JOIN hiki ke holo kokoke i ka hapalua o ka ʻikepili e kū'ē i ke kāʻei o IO nui.

I ka wā i hoʻomaka ai ka kūʻai ʻana o ka Pōʻalima ʻeleʻele piha ma ke kahua - a ʻo Wildberries kekahi o nā mea mua i paʻa iā lākou ma Rūsia - ua kaumaha loa ke kūlana. Ma hope o nā mea a pau, piʻi ka ukana ma ia mau lā i ʻekolu manawa.
ʻO kēia mau "manawa monolithic"! Ua maopopo iaʻu ua ʻike ʻoe i kahi mea like, a ʻaʻole hiki iā ʻoe ke hoʻomaopopo i ke ʻano o kēia mea e hiki ai iā ʻoe.

He aha kāu e hana ai - pili ka ʻenehana i ka ʻenehana. Ma kahi o 5 mau makahiki i hala aku nei, pono mākou e noʻonoʻo hou i kekahi o kēia mau mods ma ke ʻano o kahi pūnaewele e kū nei ma .NET a me MS SQL server, nāna i mālama pono i nā loiloi āpau o ka pūnaewele ponoʻī. Ua mālama pono wau i ka ʻike ʻana i kēlā monolith i lilo i mea leʻaleʻa lōʻihi a ʻaʻole maʻalahi.
ʻO kahi digression liʻiliʻi.

Ma nā hanana like ʻole, ʻōlelo wau: "inā ʻaʻole ʻoe i ʻike i kahi monolith, a laila ʻaʻole ʻoe i ulu!" Makemake au i kou manaʻo no kēia mea, e ʻoluʻolu e kākau ma nā ʻōlelo.

He kani o ka hekili

E hoʻi kāua i kā mākou "pua ahi". No ka hāʻawi ʻana i ka ukana o ka hana "monolithic", ua hoʻoholo mākou e hoʻokaʻawale i ka ʻōnaehana i nā microservices e pili ana i nā ʻenehana opensource. No ka mea, ma ka liʻiliʻi loa, ʻoi aku ka liʻiliʻi o lākou. A ua loaʻa iā mākou ka 100% maopopo e pono mākou e hoʻonui (a nui). Ma hope o nā mea a pau, i kēlā manawa ua hiki ke komo i nā mākeke o nā ʻāina kokoke, a ʻo ka helu o nā inoa inoa, a me ka helu o nā kauoha, ua hoʻomaka e ulu ikaika.

I ka hoʻopaʻa ʻana i nā moho mua no ka haʻalele ʻana mai ka monolith i microservices, ua ʻike mākou he 80% o ka palapala i loko o lākou mai nā ʻōnaehana hope, a me ka heluhelu ʻana mai ke keʻena mua. ʻO ka mea mua, pili kēia i kekahi mau subsystem koʻikoʻi no mākou - ka ʻikepili mea hoʻohana a me kahi ʻōnaehana no ka helu ʻana i ke kumu kūʻai hope loa o nā waiwai e pili ana i ka ʻike e pili ana i nā uku kūʻai aku a me nā coupons.

Indented. I kēia manawa he mea makaʻu ke noʻonoʻo, akā, ma waho aʻe o nā subsystem i ʻōlelo ʻia ma luna nei, ua wehe ʻia nā papa inoa huahana, kahi kaʻa kūʻai mea hoʻohana, kahi ʻōnaehana huli huahana, kahi ʻōnaehana kānana no nā papa inoa huahana, a me nā ʻano ʻano o nā ʻōnaehana manaʻo ua wehe pū ʻia mai kā mākou monolith. No ka hana ʻana o kēlā me kēia o lākou, aia nā papa ʻokoʻa o nā ʻōnaehana liʻiliʻi, akā i kekahi manawa ua noho lākou a pau i hoʻokahi "hale".

Ua hoʻolālā koke mākou e hoʻololi i ka ʻikepili e pili ana i kā mākou mea kūʻai aku i ka ʻōnaehana sharded. ʻO ka wehe ʻana i ka hana no ka helu ʻana i ke kumukūʻai hope loa o nā waiwai e pono ai ka scalability maikaʻi no ka heluhelu ʻana, no ka mea, ua hana ʻo ia i ka ukana RPS nui loa a ʻo ia ka mea paʻakikī loa e hoʻokō no ka waihona (nui ka ʻikepili i ke kaʻina helu).

ʻO ka hopena, ua hele mai mākou me kahi hoʻolālā e kūpono me Tarantool.

I kēlā manawa, no ka hana ʻana o nā microservices, ua koho ʻia nā papahana no ka hana ʻana me nā kikowaena data ma nā mīkini virtual a me nā mīkini. E like me ka mea i hōʻike ʻia ma nā kiʻi, ua hoʻohana ʻia nā koho hoʻopiʻi ʻo Tarantool i nā ʻano master-master a me master-slave mode.

Pehea e ho'ōki ai i ka hopohopo a hoʻomaka e noho me ka monolith
Hoʻolālā. Koho 1. Mea hoʻohana lawelawe

I kēia manawa, aia he 24 shards, ʻo kēlā me kēia mea he 2 mau manawa (hoʻokahi no kēlā me kēia DC), ma ke ʻano master-master mode.

Aia ma luna o ka waihona nā noi e komo i nā replicas waihona. Hana nā noi me Tarantool ma o kā mākou hale waihona puke maʻamau, kahi e hoʻokō ai i ka interface hoʻokele ʻo Tarantool Go. ʻIke ʻo ia i nā kope a pau a hiki ke hana pū me ka haku e heluhelu a kākau. ʻO ka mea nui, hoʻokō ʻo ia i ke kumu hoʻohālike replica, kahi e hoʻohui ai i ka loiloi no ke koho ʻana i nā replicas, ka hoʻokō ʻana i ka hoʻāʻo hou ʻana, kahi kaʻa kaʻa a me ka palena palena.

I kēia hihia, hiki ke hoʻonohonoho i ke kulekele koho kope i ka pōʻaiapili o shards. No ka laʻana, roundrobin.

Pehea e ho'ōki ai i ka hopohopo a hoʻomaka e noho me ka monolith
Hoʻolālā. Koho 2. Hana no ka helu ʻana i ke kumu kūʻai hope loa o nā waiwai

ʻO kekahi mau mahina i hala aku nei, ua hele ka hapa nui o nā noi no ka helu ʻana i ke kumukūʻai hope loa o nā waiwai i kahi lawelawe hou, ʻo ia hoʻi, e hana me ka ʻole o ka ʻikepili, akā i kekahi manawa i hala aku nei ua hana ʻia nā mea a pau i ka 100% e kahi lawelawe me Tarantool ma lalo o ka pā.

Aia i loko o ka waihona ʻikepili lawelawe nā haku 4 kahi e hōʻiliʻili ai ka synchronizer i ka ʻikepili, a hāʻawi kēlā me kēia haku replication i ka ʻikepili i nā replika heluhelu wale nō. Loaʻa i kēlā me kēia haku ma kahi o 15 mau kope.

Ma ka papahana mua a i ʻole ka lua, inā ʻaʻole loaʻa kahi DC, hiki i ka noi ke loaʻa ka ʻikepili i ka lua.

He mea pono e hoʻomaopopo i ka hoʻopili hou ʻana ma Tarantool a hiki ke hoʻonohonoho ʻia i ka wā holo. Ma nā ʻōnaehana ʻē aʻe, ua kū mai nā pilikia. No ka laʻana, pono ka hoʻololi ʻana i nā ʻāpana max_wal_seners a me max_replication_slots ma PostgreSQL e hoʻomaka hou i ka wizard, a ma kekahi mau hihia e hiki ke hoʻopau i nā pilina ma waena o ka noi a me ka DBMS.

E ʻimi a loaʻa iā ʻoe!

No ke aha mākou i hana ʻole ai "e like me ka poʻe maʻamau", akā koho i kahi ala atypical? Ma muli o ka mea i manaʻo ʻia he mea maʻamau. Nui nā poʻe e hana i kahi hui mai Mongo a hoʻolaha iā ia ma ʻekolu DC i puʻunaue ʻia.

I kēlā manawa, ua loaʻa iā mākou ʻelua mau papahana Redis. ʻO ka mua he huna huna, a ʻo ka lua he mālama mau no ka ʻikepili koʻikoʻi ʻole. He mea paʻakikī loa iā ia, ma muli o kā mākou hewa. I kekahi manawa, nui nā puke i loko o ke kī, a i kēlā me kēia manawa ua maʻi ka pūnaewele. Ua hoʻohana mākou i kēia ʻōnaehana ma ka mana master-slave. A he nui nā hihia i loaʻa ai kekahi mea i ka haku a ua haki ka replication.

ʻO ia hoʻi, maikaʻi ʻo Redis no nā hana stateless, ʻaʻole nā ​​​​mea hana. Ma ke kumu, ua ʻae ia i ka hoʻoponopono ʻana i ka hapa nui o nā pilikia, akā inā he mau ʻōlelo koʻikoʻi koʻikoʻi lākou me nā papa kuhikuhi. Akā ʻo Redis i kēlā manawa ua kaumaha loa me ka hoʻomau a me ka hana hou ʻana. Eia kekahi, aia nā hoʻopiʻi e pili ana i ka hana.

Ua noʻonoʻo mākou e pili ana i MySQL a me PostgreSQL. Akā ʻo ka mea mua ʻaʻole i loaʻa iā mākou, a ʻo ka lua he huahana maʻalahi iā ia iho, a he mea kūpono ʻole ke kūkulu ʻana i nā lawelawe maʻalahi.
Ua hoʻāʻo mākou iā RIAK, Cassandra, ʻo ia hoʻi kahi waihona kiʻi. ʻO kēia nā mea hoʻonā niche maikaʻi ʻole i kūpono i ka hana o kahi mea hana maʻamau no ka hana ʻana i nā lawelawe.

I ka hopena, noho mākou ma Tarantool.

Ua huli mākou iā ia i ka wā ma ka mana 1.6. Ua hoihoi mākou iā ia e ka symbiosis o ka waiwai kī a me ka hana o kahi waihona pili. Aia nā papa kuhikuhi lua, nā kālepa a me nā hakahaka, ua like kēia me nā papa, akā ʻaʻole maʻalahi, hiki iā ʻoe ke mālama i nā helu like ʻole o nā kolamu i loko o lākou. Akā ʻo ka hiʻohiʻona pepehi o Tarantool he mau helu helu lua i hui pū ʻia me ka waiwai nui a me ka transactionality.

ʻO ke kaiāulu ʻōlelo Lūkini pane, mākaukau e kōkua i ke kamaʻilio, ua pāʻani pū kekahi. Hoʻohana ikaika mākou i kēia a noho pololei mākou i ke kamaʻilio. A mai poina e pili ana i ka hoʻomau maikaʻi me ka ʻole o nā hewa a me nā hewa. Inā ʻoe e nānā i kā mākou mōʻaukala me Tarantool, ua nui ka ʻeha a me nā hāʻule ʻole me ka replication, akā ʻaʻole mākou i nalowale i ka ʻikepili ma muli o kona hewa!

Ua hoʻomaka ka hoʻokō ʻana i kahi hoʻomaka paʻakikī

I kēlā manawa, ʻo .NET kā mākou waihona hoʻomohala nui, ʻaʻohe mea hoʻohui no Tarantool. Hoʻomaka koke mākou e hana i kekahi mea ma Go. Ua hana maikaʻi pū me Lua. ʻO ka pilikia nui i kēlā manawa me ka debugging: ma .NET ua maikaʻi nā mea a pau me kēia, akā ma hope o ia mea ua paʻakikī ke komo ʻana i loko o ka honua o Lua i hoʻopili ʻia, inā ʻaʻohe ou debugging koe wale nō nā lāʻau. Eia kekahi, no kekahi kumu i hāʻule ai ka hoʻopiʻi ʻana i kēlā me kēia manawa, no laila pono wau e ʻimi i ke ʻano o ka mīkini Tarantool. Ua kōkua ke kamaʻilio me kēia, a ma kahi liʻiliʻi, ka palapala; i kekahi manawa nānā mākou i ke code. I kēlā manawa, ua like ka palapala.

No laila, i loko o kekahi mau mahina, ua hiki iaʻu ke hoʻohuli i koʻu poʻo a loaʻa nā hopena maikaʻi mai ka hana ʻana me Tarantool. Ua hōʻuluʻulu mākou i nā hanana kuhikuhi ma git i kōkua i ka hoʻokumu ʻana i nā microservice hou. No ka laʻana, i ka wā i kū ai kahi hana: e hana i kahi microservice hou, ua nānā ka mea hoʻomohala i ke kumu kumu o ka hoʻonā kuhikuhi i loko o ka waihona, a ʻaʻole i ʻoi aku ma mua o hoʻokahi pule e hana i kahi mea hou.

He mau manawa kūikawā kēia. Ma keʻano maʻamau, hiki iā ʻoe ke hele i luna ma ka papa ʻaina aʻe a nīnau: "E hāʻawi mai iaʻu i kahi mīkini virtual." Ma kahi o kanakolu minuke ma hope mai, aia ke kaʻa me ʻoe. Ua hoʻopili ʻoe iā ʻoe iho, hoʻokomo i nā mea āpau, a ua hoʻouna ʻia ke kaʻa iā ʻoe.

I kēia lā ʻaʻole e hana hou kēia: pono ʻoe e hoʻohui i ka nānā ʻana a me ka hoʻopaʻa inoa ʻana i ka lawelawe, uhi i ka hana me nā hoʻokolohua, kauoha i kahi mīkini virtual a i ʻole ka hāʻawi ʻana iā Kuber, etc. Ma keʻano laulā, eʻoi aku ka maikaʻi ma kēiaʻano,ʻoiai e lōʻihi aʻoi aku ka pilikia.

Māhele a hoʻoponopono. He aha ka pili iā Lua?

He pilikia koʻikoʻi: ʻaʻole hiki i kekahi mau hui ke hoʻololi pono i nā hoʻololi i kahi lawelawe me ka noʻonoʻo nui ma Lua. Hoʻopili pinepine ʻia kēia me ka hana ʻole o ka lawelawe.

ʻO ia hoʻi, ke hoʻomākaukau nei nā mea hoʻomohala i kekahi ʻano hoʻololi. Hoʻomaka ʻo Tarantool e hana i ka neʻe ʻana, akā aia ka replica me ka code kahiko; Hiki mai kekahi DDL a i ʻole kekahi mea ʻē aʻe ma o ka hoʻopiʻi ʻana, a hāʻule wale ke code no ka mea ʻaʻole i mālama ʻia. ʻO ka hopena, ua waiho ʻia ke kaʻina hana hou no nā luna hoʻomalu ma ka pepa A4: hoʻopau i ka hoʻopiʻi ʻana, hoʻohou i kēia, hoʻohuli i ka replication, hoʻopau i ʻaneʻi, hoʻonui i laila. ʻO ka moeʻuhane!

ʻO ka hopena, i kēia manawa, hoʻāʻo pinepine mākou e hana ʻole ma Lua. E hoʻohana wale i ka iproto (kahi protocol binary no ka launa pū ʻana me ke kikowaena), a ʻo ia nō. Malia paha he nele kēia o ka ʻike ma waena o nā mea hoʻomohala, akā mai kēia ʻike he paʻakikī ka ʻōnaehana.

ʻAʻole mākou e hahai makapō i kēia palapala. I kēia lā, ʻaʻohe o mākou ʻeleʻele a keʻokeʻo: aia nā mea āpau ma Lua, a i ʻole nā ​​​​mea āpau i Go. Ua maopopo iā mākou pehea e hiki ai iā mākou ke hoʻohui iā lākou i ʻole e pau i nā pilikia neʻe ma hope.

Aia ma hea ʻo Tarantool i kēia manawa?
Hoʻohana ʻia ʻo Tarantool i ka lawelawe no ka helu ʻana i ke kumukūʻai hope loa o nā waiwai e noʻonoʻo ana i nā coupons hoʻemi, ʻike ʻia ʻo "Promoter". E like me kaʻu i ʻōlelo ai ma mua, ke hoʻomaha nei ʻo ia: ke pani ʻia nei ʻo ia e kahi lawelawe catalog hou me nā kumukūʻai i helu mua ʻia, akā ʻeono mahina i hala aku nei ua hana ʻia nā helu āpau ma Promotizer. Ma mua, ua kākau ʻia ka hapalua o kona manaʻo ma Lua. Iʻelua makahiki i hala aku nei, ua hoʻololiʻia ka lawelawe i kahi hale mālama, a ua kākau houʻia ka loiloi ma Go, no ka mea, ua loli iki ka mechanics o nā ho'ēmi a ua nele ka lawelawe.

ʻO kekahi o nā lawelawe koʻikoʻi ʻo ia ka mea hoʻohana. ʻO ia hoʻi, mālama ʻia nā mea hoʻohana Wildberries āpau ma Tarantool, a aia ma kahi o 50 miliona o lākou.
Wahi a RPS, ʻo Promoter ke alakaʻi, hiki i 6 tausani mau noi. I kekahi manawa ua loaʻa iā mākou he 50-60 kope. I kēia manawa, ʻo ke alakaʻi i ka RPS nā mea hoʻohana, ma kahi o 12 tausani. Hoʻohana kēia lawelawe i ka sharding maʻamau, i puʻunaue ʻia e nā pae o nā ID mea hoʻohana. ʻOi aku ka lawelawe o ka lawelawe ma mua o 20 mau mīkini, akā he nui loa kēia; hoʻolālā mākou e hōʻemi i nā kumuwaiwai i hāʻawi ʻia, no ka mea ua lawa ka mana o nā mīkini 4-5.

ʻO ka lawelawe Session kā mākou lawelawe mua ma vshard a me Cartridge. ʻO ka hoʻonohonoho ʻana iā vshard a me ka hoʻomaikaʻi ʻana i ka Cartridge e koi i kahi hoʻoikaika mai iā mākou, akā i ka hopena ua holo nā mea āpau.

ʻO ka lawelawe no ka hōʻike ʻana i nā hae like ʻole ma ka pūnaewele a ma ka polokalamu kelepona kekahi o nā mea mua i hoʻokuʻu pololei ʻia ma Tarantool. He mea kaulana kēia lawelawe no ka mea he 6-7 mau makahiki, ke hana mau nei a ʻaʻole i hoʻomaka hou ʻia. Ua hoʻohana ʻia ka haku-master replication. ʻAʻohe mea i haki.

Aia kekahi laʻana o ka hoʻohana ʻana iā Tarantool no ka hana kuhikuhi wikiwiki i loko o kahi ʻōnaehana hale kūʻai e hoʻopaʻa koke i ka ʻike i kekahi mau hihia. Ua ho'āʻo mākou e hoʻohana iā Redis no kēia, akā ʻoi aku ka nui o ka ʻikepili i ka hoʻomanaʻo ma mua o Tarantool.

Hoʻohana pū nā lawelawe o kahi papa inoa kali, nā mea kūʻai aku, nā moʻolelo i kēia manawa a me nā waiwai i hoʻopaneʻe ʻia me Tarantool. ʻO ka lawelawe hope loa i ka hoʻomanaʻo ʻana ma kahi o 120 GB. ʻO kēia ka lawelawe piha loa o nā mea i luna.

hopena

Mahalo i nā helu helu lua i hui pū ʻia me ka waiwai nui a me ka transactionality, ua kūpono ʻo Tarantool no nā hale hana microservices. Akā naʻe, ua loaʻa iā mākou nā pilikia i ka wā e hoʻololi ai i nā lawelawe me ka noʻonoʻo nui ma Lua - ua pau pinepine nā lawelawe. ʻAʻole hiki iā mākou ke lanakila i kēia, a ma hope o ka manawa ua hiki mākou i nā hui like ʻole o Lua a me Go: ʻike mākou i kahi e hoʻohana ai i kahi ʻōlelo a me kahi e hoʻohana ai i kekahi.

He aha hou aʻe e heluhelu ai ma ke kumuhana

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka