ʻO PostgreSQL a me nā hoʻonohonoho hoʻonohonoho hoʻonohonoho hoʻonohonoho pili pili pili

Ua hoʻomākaukau ʻia ka unuhi ʻana o ka ʻatikala no nā haumāna o ka papa "Ka waihona waihona". Makemake ʻoe e hoʻomohala ma kēia ʻaoʻao? Ke kono aku nei makou ia oe Lā Hāmama, kahi a mākou e kamaʻilio kikoʻī e pili ana i ka papahana, nā hiʻohiʻona o ka format online, nā mākaukau a me nā ʻoihana e kali ana i nā haumāna puka ma hope o ke aʻo ʻana.

ʻO PostgreSQL a me nā hoʻonohonoho hoʻonohonoho hoʻonohonoho hoʻonohonoho pili pili pili

ʻO PostgreSQL a me nā hoʻonohonoho hoʻonohonoho hoʻonohonoho hoʻonohonoho pili pili pili
Ma Compose, hana mākou i nā ʻikepili he nui, e hāʻawi iā mākou i ka manawa e kamaʻāina hou ai i kā lākou hana a me nā hemahema. I ko mākou aʻo ʻana i ke aloha i nā hiʻohiʻona o nā ʻikepili hou, hoʻomaka mākou e noʻonoʻo i ka maikaʻi inā loaʻa nā hiʻohiʻona like i nā mea hana ʻoi aʻe a mākou e hana nei no ka manawa lōʻihi. ʻO kekahi o nā hiʻohiʻona hou aʻu i makemake ai e ʻike ma PostgreSQL hiki ke hoʻonohonoho ʻia i ke kākau ʻana i kēlā me kēia pilina ma waena o ka pūʻulu holoʻokoʻa. A e like me ka mea i ʻike ʻia, ua loaʻa iā mākou, a i kēia lā makemake mākou e kaʻana like me ʻoe i ka ʻike pehea e hiki ai iā ʻoe ke hoʻohana.

No ke aha au e pono ai?

ʻO ke ʻano o ke ʻano o ka pūʻulu e pili ana i kāu noi. E lawe, no ka laʻana, i kahi polokalamu uku pila. Pono ʻoe i ka XNUMX% kūpaʻa ma waena o ka pūʻulu, no laila pono ʻoe e ʻae i ka synchronous commits i kali kāu ʻikepili no ka hoʻololi ʻana. Eia nō naʻe, inā he ʻupena kaiapili wikiwiki kāu noi, a laila makemake paha ʻoe i ka pane wikiwiki ma mua o XNUMX% kūlike. No ka hoʻokō ʻana i kēia, hiki iā ʻoe ke hoʻohana i nā commit asynchronous i kāu hui.

E hālāwai me ke kuʻikahi

Pono ʻoe e hana i nā tradeoffs ma waena o ka ʻikepili kūlike a me ka hana. Ke neʻe nei ʻo PostgreSQL mai ke kūpaʻa ʻana no ka mea hiki ke wānana ʻia ka hoʻonohonoho paʻamau a me ka ʻole o nā haʻalulu i manaʻo ʻole ʻia. I kēia manawa, e nānā kākou i nā kuʻikahi.

Kūʻai 1: Hana

Inā ʻaʻole koi ka pūʻulu PostgreSQL i ka kūlike, hiki iā ia ke holo asynchronously. Hana ʻia ke kākau ʻana i ke alakaʻi puʻupuʻu, a e hoʻouna ʻia nā mea hou i kāna replicas i kekahi mau milliseconds ma hope. Ke koi ʻia kahi pūʻulu PostgreSQL i ke kūlike, pono e holo like. E hana ʻia ka palapala i ke alakaʻi cluster, nāna e hoʻouna i kahi mea hou i nā replicas a kali no ka hōʻoia ʻana ua kākau kēlā me kēia ma mua o ka hoʻouna ʻana i ka hōʻoia i ka mea kūʻai aku i hoʻomaka i ke kākau ʻana ua kūleʻa ia. ʻO ka ʻokoʻa kūpono ma waena o kēia mau ala, ʻo ke ʻano asynchronous e pono ai ʻelua hops pūnaewele, aʻo ke ʻano synchronous e pono ai ʻehā.

Tradeoff 2: Kūlike

ʻOkoʻa nō hoʻi ka hopena inā hāʻule kahi alakaʻi i kēia mau ala ʻelua. Inā hana ʻia ka hana asynchronously, a laila inā loaʻa kēlā hewa, ʻaʻole e hana ʻia nā moʻolelo āpau e nā replicas. Ehia ka nui o ka lilo? Ma muli o ka noi pono'ī a me ka pono o ka hana hou. ʻO ka hoʻopili hou ʻana e pale i kahi kope mai ka lilo ʻana i alakaʻi inā ʻo ka nui o ka ʻike i loko o ia mea he 1 MB ka liʻiliʻi ma mua o ke alakaʻi, ʻo ia hoʻi, hiki i ka 1 MB o nā moʻolelo ke nalowale i ka wā o ka hana asynchronous.

ʻAʻole hiki kēia ma ke ʻano synchronous. Inā hāʻule ke alakaʻi, hoʻoponopono hou ʻia nā kope a pau, no ka mea, pono e hoʻopaʻa ʻia nā palapala i hoʻopaʻa ʻia ma luna o ke alakaʻi. He kūlike kēia.

Maikaʻi ka ʻano hana like ʻole i loko o kahi palapala hoʻopaʻa kālā kahi i loaʻa ai ka pōmaikaʻi o ke kūlike ma ke kālepa-off ma waena o ka kūlike a me ka hana. ʻO ka mea nui loa no ia noi he ʻikepili kūpono. I kēia manawa e noʻonoʻo e pili ana i kahi ʻoihana pūnaewele kahi hana nui e mālama i ka manaʻo o ka mea hoʻohana ma ka pane ʻana i nā noi i ka wikiwiki. I kēia hihia, ʻo ka hana me ka liʻiliʻi o nā hops pūnaewele a me ka liʻiliʻi o ka kali ʻana no nā hana e lilo i mea nui. Eia naʻe, ʻo ka tradeoff ma waena o ka hana a me ke kūpaʻa ʻaʻole wale ka mea āu e noʻonoʻo ai.

Hoʻokaʻawale 3: Nā hāʻule

He mea nui ka hoʻomaopopo ʻana i ke ʻano o ka puʻupuʻu i ka wā o ka hāʻule. E noʻonoʻo i kahi kūlana i hāʻule ʻole ai hoʻokahi a ʻoi aku paha. Ke hana ʻia nā hana asynchronously, e hoʻomau ka alakaʻi i ka hana, ʻo ia hoʻi, e ʻae a hoʻopaʻa i ke kākau ʻana, me ke kali ʻole i nā replicas nalo. I ka hoʻi ʻana o nā replicas i ka hui, hopu lākou i ke alakaʻi. Me ka hoʻopiʻi synchronous, inā ʻaʻole pane nā replicas, a laila ʻaʻohe koho o ke alakaʻi a hoʻomau ʻo ia e kali no ka hōʻoia ʻana a hiki i ka hoʻi ʻana o ka replica i ka pūpū a hiki ke ʻae a hana i ke kākau.

Hoʻokahi pilina no ke kālepa?

Pono kēlā me kēia noi i kahi ʻano like ʻole o ka hui pū ʻana o ka kūlike a me ka hana. Inā ʻaʻole, ʻoiaʻiʻo, ʻo kā mākou app uku bila, a mākou e noʻonoʻo nei e kūpaʻa loa, a i ʻole kā mākou polokalamu hoʻolaha pūnaewele kokoke ephemeral. I nā hihia ʻē aʻe a pau, aia kekahi mau manawa e pono ai kekahi mau hana i ka synchronous a ʻo kekahi asynchronous. ʻAʻole paha ʻoe makemake e kali ka ʻōnaehana a hiki i ka hoʻouna ʻia ʻana o kahi leka i ke kamaʻilio ʻana, akā inā e hana ʻia kahi uku ma ka noi like, a laila pono ʻoe e kali.

ʻO kēia mau hoʻoholo a pau, ʻoiaʻiʻo, ua hana ʻia e ka mea hoʻomohala noi. ʻO ka hana ʻana i nā hoʻoholo kūpono e pili ana i ka wā e hoʻohana ai i kēlā me kēia ala e kōkua iā ʻoe e loaʻa ka maikaʻi o kāu hui. He mea nui e hiki i ka mea hoʻomohala ke hoʻololi i waena o lākou ma ka pae SQL no nā pilina a no nā kālepa.

E hōʻoia ana i ka mana ma ka hana

Ma ka maʻamau, hāʻawi ʻo PostgreSQL i ka kūlike. Hoʻomaluʻia kēia e ka palena kikowaena synchronous_commit. Ma ka paʻamau aia ma ke kūlana on, akā he ʻekolu mau koho ʻē aʻe: local, remote_write ai ole ia, off.

Ke hoʻonohonoho ʻana i ka ʻāpana i off pau nā hana synchronous, ʻoiai ma ka ʻōnaehana kūloko. Hōʻike ka ʻāpana kūloko i ke ʻano synchronous no ka ʻōnaehana kūloko, akā kākau ʻia i nā replicas e hana ʻia me ka asynchronously. Remote_write ʻoi aku ka ʻoi aku: ua hana ʻia ke kākau ʻana i nā kope, akā hoʻihoʻi ʻia i ka wā i ʻae ai ka replica i ke kākau akā ʻaʻole i kākau iā ia i ka disk.

Ma ka noʻonoʻo ʻana i nā ʻano koho i loaʻa, koho mākou i kahi ʻano a me ka hoʻomanaʻo ʻana i kēlā on - he mau hoʻopaʻa hoʻopaʻa ʻia kēia, e koho mākou local no nā hana asynchronous ma luna o ka pūnaewele, ʻoiai e waiho ana i nā hana kūloko me ka synchronous.

I kēia manawa, e haʻi mākou iā ʻoe pehea e hoʻonohonoho ai i kēia i kahi manawa, akā e noʻonoʻo ua hoʻonohonoho mākou synchronous_commit в local no ke kikowaena. Ua noʻonoʻo mākou inā hiki ke hoʻololi i ka parameter synchronous_commit ma ka lele, a ua ʻike ʻia ʻaʻole hiki wale, aia ʻelua mau ala e hana ai i kēia. ʻO ka mea mua e hoʻonohonoho i ke kau o kāu pilina penei:

SET SESSION synchronous_commit TO ON;  
// Your writes go here

ʻO nā mea kākau hope aʻe i ke kau e hōʻoia i nā kākau i nā replicas ma mua o ka hoʻihoʻi ʻana i kahi hopena maikaʻi i ka mea kūʻai aku pili. Inā ʻaʻole ʻoe e hoʻololi i ka hoʻonohonoho synchronous_commit hou. Hiki iā ʻoe ke waiho i kahi ʻāpana SESSION i ke kauoha no ka mea, aia ma ka waiwai paʻamau.

Maikaʻi ke ala ʻelua inā makemake ʻoe e hōʻoia e loaʻa iā ʻoe ka replication synchronous no kahi kālepa hoʻokahi. I loko o ka nui o nā ʻikepili hanauna NoSQL ʻaʻole i loaʻa ka manaʻo o nā kālepa, akā aia ma PostgreSQL. I kēia hihia, hoʻomaka ʻoe i kahi kālepa a laila hoʻonohonoho synchronous_commit в on ma mua o ka hoʻokō ʻana i ke komo ʻana no ke kālepa. COMMIT e hoʻokō i ke kālepa me ka hoʻohana ʻana i kekahi waiwai parameter synchronous_commit, i hoʻonohonoho ʻia i kēlā manawa, ʻoiai ʻoi aku ka maikaʻi o ka hoʻonohonoho ʻana i ka hoʻololi i mua e hōʻoia i ka hoʻomaopopo ʻana o nā mea hoʻomohala ʻē aʻe ʻaʻole asynchronous nā kākau.

BEGIN;  
SET LOCAL synchronous_commit TO ON;  
// Your writes go here
COMMIT;  

E hōʻoia ʻia nā hana a pau e like me ke kākau ʻana i nā replicas ma mua o ka hoʻihoʻi ʻana o ka waihona i kahi pane maikaʻi i ka mea kūʻai aku i pili.

Hoʻonohonoho i ka PostgreSQL

Ma mua o kēia, ua noʻonoʻo mākou i kahi ʻōnaehana PostgreSQL me synchronous_commit, hoʻokomo ʻia i loko local. No ka hoʻokō pono i kēia ma ka ʻaoʻao kikowaena, pono ʻoe e hoʻonohonoho i ʻelua mau koho hoʻonohonoho kikowaena. Hoʻokahi ʻāpana synchronous_standby_names e hiki mai ana i kona wa synchronous_commit e loko on. Hoʻoholo ʻo ia i nā replicas e kūpono i nā hana synchronous, a na mākou e hoʻonoho iā ia *, ʻo ia hoʻi, pili nā kope a pau. Hoʻonohonoho pinepine ʻia kēia mau waiwai i waihona hoʻonohonoho ma ka hoʻohui ʻana:

synchronous_commit = local  
synchronous_standby_names='*'

Ma ka hoʻonohonoho ʻana i ka ʻāpana synchronous_commit i ke ano local, hana mākou i kahi ʻōnaehana kahi e noho like ai nā disks kūloko, akā ʻaʻole like ka hoʻopaʻa ʻana o ka pūnaewele. Inā ʻaʻole, ʻoiaʻiʻo, hoʻoholo mākou e hana i kēia mau hana i ka synchronous, e like me ka mea i hōʻike ʻia ma luna.

Inā ʻoe e hahai ana i ka hoʻomohala ʻana Pāhana kiaʻāina, ua ʻike paha ʻoe i kekahi mau loli hou (1, 2), ka mea i ʻae i nā mea hoʻohana kiaʻāina e hoʻāʻo i kēia mau ʻāpana a nānā i ko lākou kūlike.

He mau ʻōlelo hou aʻe...

I hoʻokahi pule i hala aku nei, ua haʻi wau iā ʻoe ʻaʻole hiki ke hoʻoponopono maikaʻi i ka PostgreSQL. ʻO ia ka manawa i koi ai ʻo Kurt, he lālā o ka hui kahua papa Compose, aia kēlā manawa kūpono. Ua hōʻoluʻolu ʻo ia i kaʻu mau kūʻē a loaʻa i ka palapala PostgreSQL kahi malalo:

ʻO PostgreSQL a me nā hoʻonohonoho hoʻonohonoho hoʻonohonoho hoʻonohonoho pili pili pili

Hiki ke hoʻololi i kēia hoʻonohonoho i kēlā me kēia manawa. Hoʻoholo ʻia ke ʻano no kēlā me kēia kālepa e ka hoʻonohonoho i mana i ka manawa o ka hana. No laila, hiki a pono i kekahi mau hana ke hana synchronously a no kekahi asynchronously. No ka laʻana, e hoʻoikaika i kekahi multistatement transaction to make commits asynchronously when the default value of the parameter is opposite, set SET LOCAL synchronous_commit TO OFF ma ke kuai ana.

Me kēia hoʻololi liʻiliʻi i ka faila hoʻonohonoho, hāʻawi mākou i nā mea hoʻohana i ka mana ma luna o ko lākou kūlike a me ka hana.

Source: www.habr.com

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