ʻAʻohe manaʻo o kahi "ʻoi aku ka wikiwiki o Redis" ma Habré - . Ma muli o ka loaʻa ʻana o ka ʻike hou loa i ka hoʻohana ʻana iā ia, makemake wau e hoʻopiha i kēia āpau.
![KeyDB ma ke ʻano he [pono] pani no Redis](/wp-content/uploads/2020/02/9642ef3dc712ad2e6304104facb464b7.jpeg)
ʻAʻole paʻakikī ke ʻano: i hoʻokahi lā, me ka nui o nā kaʻa, ua hoʻopaʻa ʻia kahi hōʻemi nui o ka hana noi (ʻo ia hoʻi, ka manawa pane). I kēlā manawa, akā naʻe, ʻaʻole hiki ke hoʻokō i kahi maʻi maʻamau o ka mea e hana nei, no laila ua hoʻolālā ʻia kahi ʻano o nā hoʻāʻo ukana. Ma hope o ka alakaʻi ʻana iā lākou, ua hiki iā mākou ke ʻike i kahi bottleneck, ʻo ia ka waihona waihona ma Redis. E like me ka hana pinepine ʻana, ʻaʻole hiki ke hoʻoponopono koke ʻia ka pilikia a ma ke ala kūpono - e nā mea hoʻomohala (ma ka hoʻololi ʻana i ka loiloi o ka hana). No laila, ua hoʻohuli ʻia ka ʻimi a me ka makemake e lanakila i ke kūlana ma ke ala puni. ʻO kēia ke ʻano o kēia ʻatikala.
Nā pilikia
E pili ana iā Redis ma ka laulā
E like me ka ʻike ʻana o ka poʻe he nui, ʻo Redis kahi waihona hoʻokahi-threaded. No ka ʻoi aku ka pololei, e like me kēia i ka pōʻaiapili o ka hana ʻana me ka ʻikepili mea hoʻohana. Ma hope o nā mea a pau, mai ka hā o ka mana, lawelawe, nā hana kūloko o Redis no ka hana like. Eia naʻe, hoʻololi wale kēia hoʻololi i kahi hapa liʻiliʻi o ka hana, no ka mea, ua hana ʻia ka nui o ka hana ma ka ʻikepili mea hoʻohana.
He nui nā kope i haki ʻia ma kēia kumuhana, akā hōʻole ʻole nā mea hoʻomohala Redis e hoʻokō i ka parallelism piha, me ka haʻi ʻana i ka nui o ka hoʻopiʻi ʻana i ka noi a hoʻonui i nā kumukūʻai overhead, a me ka hoʻohui ʻana i nā pōpoki. ʻO kā lākou kūlana kēia: inā ʻoe e kū nei i kahi pilikia hoʻokahi, loaʻa iā ʻoe nā pilikia me ka hoʻolālā noi a pono e hoʻololi ʻia kekahi mea i loko. Ma waena o nā mea hoʻohana, aia kekahi "hoʻomoana ʻē aʻe" - ka poʻe i paʻa i hoʻokahi kumu a ʻōlelo ʻo Redis e hana nei i kahi bottleneck nona iho. I ka hihia o nā ukana nui loa - ma hope a ma hope paha - ʻaʻole hiki ke ʻike i kēia pilikia, kahi e kau ai i nā palena koʻikoʻi i ka hoʻolālā a me / a i ʻole nā pilikia i koi ʻia.
ʻAʻole wau e loiloi i kēia a i kēlā manaʻo. Akā, e kaʻana aku au i kā mākou hihia kikoʻī a pehea mākou i hoʻoponopono ai.
ʻO kā mākou hihia
Ma kekahi o nā papahana, ua ʻike mākou i ka ʻoiaʻiʻo ua hoʻonohonoho ka hui hoʻomohala i ka hoʻopaʻa ʻana i ka ʻikepili mai ka waihona (PostgreSQL) ma o Redis. ʻO kēia wale nō ke ala e hoʻopakele ai iā PostgreSQL ponoʻī, i ka wā o ka lele ʻana o ke kaʻa, a ma muli o ka noi mai ka make.
Ma hope o ke ʻano o nā hoʻāʻo hoʻouka, ua loiloi mākou i ke kūlana a ʻike ʻia ua kaupalena ʻia ʻo Redis i hoʻokahi kumu (ʻo ka mea i kapa ʻia ʻo "shelf"), a ukali ʻia e ka wikiwiki wikiwiki o ka noi. He exponential ka "choking": i ka hiki ʻana o ka palena hana a Redis, ua pau ka hana ʻana.
Ua like kona ʻano me kēia:
![KeyDB ma ke ʻano he [pono] pani no Redis](/wp-content/uploads/2020/02/c0f55ca1d9f28f8c305bb74cdc77a84a.jpeg)
Ua ʻike maopopo ʻo New Relic i ka pilikia:
![KeyDB ma ke ʻano he [pono] pani no Redis](/wp-content/uploads/2020/02/ce72e290f84560d143f2d6c128358477.jpeg)
Eia ka helu no ka hana. get ma Redis:
![KeyDB ma ke ʻano he [pono] pani no Redis](/wp-content/uploads/2020/02/31d98a6bb2985cfbe391976e24b8a8a6.jpeg)
Ma hope o ka hōʻike kikoʻī ʻia ʻana o ka pilikia i ka hui hoʻomohala, ua ʻike ʻia "ʻaʻole hiki ke hoʻoponopono ʻia ka pilikia i kēia manawa." Pēlā i hoʻomaka ai ka ʻimi ʻana i kahi hoʻonā ma ka ʻaoʻao hana, a ʻo KeyDB i haʻi mua ʻia ka pane.
Eia nō naʻe, ma mua o ka hoʻomaka ʻana i kā mākou loiloi, pono e haʻi ʻia e hoʻohana ka papahana iā Redis kūʻokoʻa, no ka mea, ʻoi aku ka haʻahaʻa o ka hopena cluster e pili ana iā Sentinel ma ke ʻano o ka latency. ʻO kahi hoʻonā maopopo ʻo ka hana ʻana i kekahi mau kope o ka cache: a e hele ka noi i nā wahi āpau me ke kaulike! Eia nō naʻe, ma hope o ka kūkākūkā ʻana me nā mea hoʻomohala, ua koi ʻia mākou e hoʻolei i kēia koho ma muli o ke ʻano hana hoʻokae cache paʻakikī o ka noi. Hoʻonui ʻia ka pilikia like i ka cache sharding.
He Nānā wikiwiki i KeyDB
I ka ʻimi ʻana i kahi hoʻonā hiki i ka pilikia, ua ʻike mākou . ʻO kēia kahi pahu Redis i hoʻomohala ʻia e a hāʻawi ʻia ma lalo o ka laikini BSD manuahi. He ʻōpiopio loa ka papahana: ua ola ia mai ka hoʻomaka ʻana o 2019. ʻO kāna moʻolelo, ua hālāwai pū nā mea kākau i nā palena o Redis ... a ua hoʻoholo e hana i kā lākou iho. Eia kekahi, ʻaʻole ia i hoʻoponopono wale i nā pilikia i ʻike ʻia, akā loaʻa pū kekahi i nā hiʻohiʻona hou i loaʻa i ka mana enterpise o Redis.
No ka poʻe makemake e kamaʻāina me KeyDB i nā kikoʻī hou aku, aia kahi maikaʻi , ka mea e hōʻike ana i ka DBMS a me nā hōʻailona pōkole e hoʻohālikelike ana me kāna "makua" - Redis.
ʻO ka mea mua, ua hoihoi mākou iā KeyDB e ka hopena kūpono i kā mākou pilikia, a ma ka manawa like mākou i hoihoi i kekahi mau hiʻohiʻona hou. ʻO ka hoʻohana ʻana iā KeyDB i hoʻohiki i kēia mau pōmaikaʻi:
- ka loaʻa ʻana o ka multithreading piha;
- piha piha a paʻa loa me Redis (he mea koʻikoʻi kēia no mākou, no ka mea ʻaʻole hiki ke hana i nā hoʻololi i ka ʻaoʻao noi), ka mea i hoʻohiki i ka neʻe ʻana me ka pilikia ʻole;
- i hoʻopaʻa ʻia i loko o ka waihona S3;
- maʻalahi e hoʻokō i ka hana hou;
- ka hoʻopili maʻalahi a me ka sharding me ka Sentinel a me nā polokalamu kākoʻo ʻē aʻe.
ʻOi aku ma mua o 3 tausani mau hōkū a me nā mea kōkua he nui ma GitHub. Hoʻomohala ikaika ʻia ka palapala noi a kākoʻo ʻia, ʻike maopopo ʻia i nā hana, kamaʻilio i nā pilikia, a me nā PR i pani ʻia (ʻae ʻia). ʻO ka pane mai ka mea mālama nui ma nāʻaoʻao a pau he hoaaloha mau a wikiwiki. Ma keʻano laulā, nui nā hoʻopaʻapaʻa.
Ka neʻe ʻana a me nā hopena
ʻOiai ʻo ka pāhana neʻe ʻana he mea pāʻani liʻiliʻi loa ia (ma muli o ke ʻano hou o KeyDB), ʻaʻole nui ka pohō. Ma hope o nā mea a pau, ʻoi aku ka wikiwiki a me ka maʻalahi o ka hoʻololi ʻana i hope - ʻoi aku ka maikaʻi, ua kau ʻia ka ʻōnaehana holoʻokoʻa ma Kubernetes, a me nā hana i kūkulu ʻia. Hoʻoponopono maikaʻi lākou i ia mau pilikia.
Ma keʻano laulā, ua hoʻomākaukau mākou i nā hiʻohiʻona Helm, ua hoʻololi i ka noi i loko o ke kaiapuni hoʻāʻo i kahi waihona hou a ʻōwili i nā mea āpau, hāʻawi ʻia i ke keʻena QA o ka mea kūʻai.
Hoʻomaka ka hoʻāʻo ʻana, ʻo ia ka lōʻihi o hoʻokahi pule a me nā kikoʻī ʻaʻole mākou i luʻu i loko. ʻIke wale mākou ua hoʻāʻo ka mea kūʻai aku i nā hana maʻamau o ka hana ʻana me Redis me ka hoʻohana ʻana i kahi mea hoʻokele PHP , a ua alakaʻi pū i ka hoʻāʻo QA o ka mea hoʻohana. Ma hope o kēlā, hāʻawi ʻia iā mākou ke kukui ʻōmaʻomaʻo: ʻaʻohe hopena ʻaoʻao i loaʻa i ka hoʻohana ʻana i ka polokalamu hou. ʻo ia Mai ka nānā ʻana i ka noi, ʻaʻohe mea i loli iki.
He mea pono e hoʻomaopopo ʻaʻole mākou i hoʻololi i kekahi mea i ka config: ʻoiaʻiʻo, ua hoʻololi wale mākou i ke kiʻi i hoʻohana ʻia. Pēlā nō ka nānā ʻana a me ka lawe ʻana aku i nā metric i Prometheus: hana maikaʻi me KeyDB a ʻaʻohe hoʻololi. No laila, hiki iā mākou ke ʻōlelo palekana mai kahi ʻano hana, he neʻe kūpono wale nō kēia.
Mahalo i kēia mau mea a pau, ma hope o ka hoʻololi ʻana i ka noi i kahi DBMS hou, ʻaʻole hiki iā ʻoe ke hoʻololi i kekahi mea, akā ma ke ʻano he "stabilization ana" hiki iā ʻoe ke waiho i kēia ʻano e hana i ke kaua no kekahi manawa. Eia nō naʻe, inā makemake ʻoe e ʻike i ka piʻi ʻana o ka hana (a i ʻole nā loli ʻē aʻe), ʻaʻole pono ʻoe e poina i kēlā ma ke ʻano KeyDB parameter kuleana no ka multithreading (server-threads), ua like me hoʻokahi, ʻo ia hoʻi Hana like ka DBMS me Redis.
Ma hope o ka hoʻololi ʻana, ka hoʻāʻo ʻana a me kekahi manawa o ke ola ma ka noi hou (me KeyDB), ua hoʻoholo mākou e hana hou i ka hoʻāʻo ukana me nā ʻāpana like i hoʻohana ʻia no Redis. He aha nā hopena? ..
Wahi a ka pakuhi hoʻohana CPU, ua ʻike koke ʻia ka hoʻopau ʻana i nā pilikia me ka "ceiling" o kahi kumu: ua hoʻomaka ke kaʻina hana e hoʻohana i nā kumuwaiwai i loaʻa:
![KeyDB ma ke ʻano he [pono] pani no Redis](/wp-content/uploads/2020/02/8a3a168507ef75a8e1cdf69e1d30d996.jpeg)
A ma hope mai ua hoʻāʻo wau e "hoʻomāinoino" i ka noi me ka ikaika a ʻike i ka ʻai ʻana a hiki i ʻekolu cores...
Wahi a New Relic, ʻo ka noi pūnaewele ma ke ʻano holoʻokoʻa, me ka ukana like, ua hoʻomaka i ka hana ʻoi aku ka maikaʻi. Ua ʻike ʻia kekahi hōʻemi o ka hana, akā naʻe, ke hoʻohālikelike ʻia me ka pakuhi like ma luna, hiki iā ʻoe ke loiloi i ka holomua nui nou iho:
![KeyDB ma ke ʻano he [pono] pani no Redis](/wp-content/uploads/2020/02/f46bf41bd6b8d190f5117d049ed2dce5.jpeg)
Ua ʻoi aku ka maikaʻi o ka latency o ka waihona hou (KeyDB), akā noho mau i loko o nā waiwai i ʻae ʻia:
![KeyDB ma ke ʻano he [pono] pani no Redis](/wp-content/uploads/2020/02/b9e0a3103a51707628a9f500dfdd53ad.jpeg)
Hōʻike maopopo ʻia ka pakuhi ma lalo nei he like ka helu o nā noi iā KeyDB ponoʻī:
![KeyDB ma ke ʻano he [pono] pani no Redis](/wp-content/uploads/2020/02/0a067239194adb39eb3c3738fa73860e.jpeg)
No ka hōʻuluʻulu ʻana i kēia mau hoʻāʻo synthetic, hiki iā mākou ke ʻōlelo e hōʻike ana ʻo Redis a me KeyDB i kahi hoʻohaʻahaʻa hana koʻikoʻi i ka latency (40 ms +) me ka piʻi nui ʻana o ka helu o nā pili like (1000+). I kā mākou hihia, hiki i ka palapala pūnaewele ke "hoʻopau" i ka latency o Redis me ka helu haʻahaʻa o nā pilina (400+), ʻoiai no KeyDB ua ʻae ʻia kēlā ukana.
haʻina
Hōʻike maopopo kēia hiʻohiʻona i ka ikaika o ke kaiāulu Open Source i ka hoʻomohala ʻana i nā papahana i makemake ai. Ua loaʻa iaʻu kahi ʻōlelo maikaʻi loa ma ka Pūnaewele, ʻo ke ʻano maʻamau i hoʻolapalapa ʻia i kēia mau mea: "Ke hana nei kekahi hui nui i kahi huahana hoihoi, wehe i kekahi o kāna mau hana, akā waiho i ka hapa nui i uku ʻia. Hoʻohana a hoʻohana ke kaiāulu iā ia, a laila hāʻawi kekahi a hana i kahi ʻōpala, hoʻokō i nā hiʻohiʻona uku like i loko a wehe iā lākou i nā mea āpau. Eia ʻo KeyDB ka hihia like.
Ke kamaʻilio nei e pili ana i ka neʻe ʻana iā ia iho, he mea maʻalahi loa ia, ʻaʻole mākou i loaʻa loa he piʻi nui o ka hana, hiki ke manaʻo ʻia ma ka nānā ʻana i nā kiʻi o nā mea kākau o KeyDB ... Eia naʻe, ʻo kēia wale nō kā mākou hihia kūikawā, kahi e nui ai nā deviations, me ka hoʻolālā kaulana o ka noi (no ka laʻana. , he helu nui o nā kauoha get ma Redis ma kahi o ka koho ʻoi aku ka hana o nā nīnau hui mget...). Eia nō naʻe, hiki iā mākou ke hoʻokō i nā hopena maikaʻi, a me lākou pū kekahi mau hana pono e hoʻokō ai mākou i ka wā e hiki mai ana.
Ma keʻano laulā, ʻike ʻia ʻo KeyDB: ʻoiai e loaʻa iā mākou ka ʻike kūpono me kēia DBMS (a pono mākou e loaʻa iā ia!)
Eia naʻe, ʻaʻole pono e noʻonoʻo ʻia kēia ʻatikala ma ke ʻano he alakaʻi (e waiho wale i kahi kelepona) e hana no ka haʻalele ākea ʻana iā Redis ma ke ʻano o KeyDB. ʻOiai ko mākou ʻike maikaʻi, ʻike maopopo ʻaʻole kēia he pōkā kālā. He kikoʻī loa ka hihia: ʻokoʻa no ka hoʻoponopono ʻana i kahi pilikia pōkole i kahi kūlana e pono ai e hana wikiwiki a me ka uku liʻiliʻi, ua ʻāpono ʻia kēia hopena. E pono anei ʻo KeyDB i kāu hihia? Ma ka liʻiliʻi i kēia manawa ua ʻike ʻoe aia kēia hiki ke loaʻa.
PS
E heluhelu pū ma kā mākou blog:
- «";
- «";
- «";
- «".
Source: www.habr.com
