N'ime akụkọ ya, Andrey Borodin ga-agwa gị otu ha si eburu n'uche ahụmahụ nke ịchacha PgBouncer mgbe ha na-emepụta njikọ ọdọ mmiri.
Video:
Ndewo, unu niile! Aha m bụ Andrew.
Na Yandex, m na-emepụta ọdụ data mepere emepe. Ma taa, anyị nwere isiokwu gbasara njikọ njikọ pooler.
Ọ bụrụ na ị maara ka esi akpọ njikọ pooler na Russian, gwa m. Achọrọ m n'ezie ịchọta ezigbo okwu teknuzu nke kwesịrị ịkwado na akwụkwọ nkà na ụzụ.
Isiokwu a gbagwojuru anya nke ukwuu, n'ihi na n'ọtụtụ ọdụ data, a na-arụ njikọ pooler na ị chọghị ịma banyere ya. N'ezie, enwere ụfọdụ ntọala n'ebe niile, ma na Postgres ọ naghị arụ ọrụ otú ahụ. N'otu aka ahụ (na HighLoad++ 2019) enwere akụkọ sitere na Nikolai Samokhvalov gbasara ịhazi ajụjụ na Postgres. Ma dị ka m ghọtara ya, ndị mmadụ bịara ebe a bụ ndị ahazilarị ajụjụ ha nke ọma, ndị a bụ ndị na-eche nsogbu sistemu na-adịghị ahụkebe ihu metụtara netwọkụ na iji akụrụngwa. N'ebe ụfọdụ, ọ pụkwara isiri nnọọ ike n'echiche bụ́ na nsogbu ndị ahụ apụtachaghị ìhè.
Yandex nwere Postgres. Ọtụtụ ọrụ Yandex bi na Yandex.Cloud. Ma anyị nwere ọtụtụ petabytes nke data na-ewepụta opekata mpe otu nde arịrịọ kwa nkeji na Postgres.
Ma anyị na-enye ụyọkọ ọkọlọtọ nke ọma maka ọrụ niile - nke a bụ isi ọnụ nke ọnụ ụzọ ahụ, ihe abụọ a na-emekarị (synchronous na asynchronous), ndabere, scaling nke ịgụ arịrịọ na oyiri.
Ụyọkọ ụyọkọ ọ bụla bụ Postgres, nke, na mgbakwunye na Postgres na sistemu nlekota, a na-etinyekwa njikọ njikọ. A na-eji njikọ pooler maka fencing na maka nzube ya bụ isi.
Gịnị bụ isi nzube nke njikọ pooler?
Postgres na-anabata usoro mgbe ọ na-arụ ọrụ na nchekwa data. Nke a pụtara na otu njikọ bụ otu usoro, otu Postgres backend. Na n'azụ azụ a enwere ọtụtụ cache dị iche iche, nke dị oke ọnụ iji mee ihe dị iche iche maka njikọ dị iche iche.
Na mgbakwunye, koodu Postgres nwere n'usoro akpọrọ procArray. O nwere data bụ isi gbasara njikọ netwọkụ. Na ihe fọrọ nke nta ka ọ bụrụ algọridim nhazi procArray nwere mgbagwoju anya; ha na-agafe njikọ netwọkụ niile. Ọ bụ okirikiri mara mma ngwa ngwa, mana iji njikọ netwọkụ na-abata ihe na-enweta ntakịrị ọnụ. Ma mgbe ihe na-akawanye ọnụ, ị nwere ike ịkwụsị ịkwụ ụgwọ dị oke ọnụ maka ọtụtụ njikọ netwọk.
Enwere ụzọ atọ nwere ike ime:
- N'akụkụ ngwa.
- N'akụkụ nchekwa data.
- Na n'etiti, ya bụ, ụdị nchikota niile.
N'ụzọ dị mwute, ọdọ mmiri arụnyere na-arụ ọrụ ugbu a. Ndị enyi anyị na PostgreSQL Professional na-eme nke a karịa. Mgbe ọ ga-apụta siri ike ịkọ. Na n'ezie, anyị nwere ihe ngwọta abụọ maka onye na-ese ụkpụrụ ụlọ ịhọrọ. Ndị a bụ ọdọ mmiri n'akụkụ ngwa na ọdọ mmiri proxy.
Ọdọ mmiri n'akụkụ ngwa bụ ụzọ kachasị mfe. Na ihe fọrọ nke nta ka ọ bụrụ ndị ọkwọ ụgbọ ala ndị ahịa niile na-enye gị ụzọ: gosi ọtụtụ nde njikọ gị na koodu dị ka njikọ iri na abụọ na nchekwa data.
Nsogbu na-ebilite bụ na n'otu oge ịchọrọ ịbawanye azụ azụ, ịchọrọ ibuga ya na ọtụtụ igwe mebere.
Mgbe ahụ ị ga-achọpụta na ị nwere ọtụtụ mpaghara nnweta ọzọ, ọtụtụ ebe data. Na ụzọ ikpokọta ndị ahịa na-eduga na ọnụ ọgụgụ buru ibu. Ndị buru ibu dị ihe dịka njikọ 10. Nke a bụ ọnụ nke nwere ike ịrụ ọrụ nke ọma.
Ọ bụrụ na anyị na-ekwu maka proxy poolers, mgbe ahụ enwere ọdọ mmiri abụọ nwere ike ime ọtụtụ ihe. Ha abụghị naanị ọdọ mmiri. Ha bụ ndị na-egwu mmiri + arụ ọrụ dị mma karịa. Nke a
Ma, ọ dị mwute ikwu, ọ bụghị onye ọ bụla chọrọ ọrụ ọzọ a. Ma ọ na-eduga n'eziokwu ahụ bụ na ndị na-egwu mmiri na-akwado ịkwado nnọkọ nnọkọ, ya bụ otu onye ahịa na-abata, otu onye ahịa na-apụ na nchekwa data.
Nke a adabaghị nke ọma maka ebumnuche anyị, yabụ anyị na-eji PgBouncer, nke na-arụ ọrụ ịgbakọ azụmahịa, yabụ njikọ nkesa na-ejikọta na njikọ ndị ahịa naanị maka ogologo oge nke azụmahịa ahụ.
Na n'ọrụ anyị, nke a bụ eziokwu. Ma enwere nsogbu ole na ole.
Nsogbu na-amalite mgbe ịchọrọ ịchọpụta otu nnọkọ, n'ihi na njikọ gị niile na-abata bụ mpaghara. Onye ọ bụla bịara na loopback na n'ụzọ ụfọdụ ọ na-esi ike ịchọta nnọkọ ahụ.
N'ezie ị nwere ike iji ngwa_name_add_host. Nke a bụ ụzọ dị n'akụkụ Bouncer iji tinye adreesị IP na ngwa_name. Mana ngwa_name ka edobere site na njikọ ọzọ.
Na eserese a, ebe akara edo edo bụ ezigbo arịrịọ, yana ebe akara anụnụ anụnụ bụ arịrịọ na-efeba na nchekwa data. Na nke a dị iche bụ kpọmkwem echichi nke application_name, nke a chọrọ naanị maka tracing, ma ọ bụghị free ma ọlị.
Na mgbakwunye, na Bouncer ị nweghị ike igbochi otu ọdọ mmiri, ya bụ ọnụ ọgụgụ nke njikọ nchekwa data maka onye ọrụ akọwapụtara, kwa nchekwa data akọwapụtara.
Kedu ihe nke a na-eduga? Ị nwere ọrụ ebugharị nke edere na C ++ na ebe dị nso na obere ọrụ na ọnụ nke na-adịghị eme ihe ọ bụla dị egwu na nchekwa data, mana onye ọkwọ ụgbọ ala ya na-agba ara. Ọ na-emepe njikọ 20 na ihe ọ bụla ọzọ ga-echere. Ọbụna koodu gị bụ nkịtị.
Anyị, n'ezie, dere obere patch maka Bouncer nke gbakwunyere ntọala a, ya bụ ịmachi ndị ahịa na ọdọ mmiri ahụ.
Ọ ga-ekwe omume ime nke a n'akụkụ Postgres, ya bụ, mechie ọrụ dị na nchekwa data site na ọnụ ọgụgụ njikọ.
Mana mgbe ahụ ị ga-efunahụ ike ịghọta ihe kpatara na ị nweghị njikọ na sava ahụ. PgBouncer anaghị atụfu njehie njikọ, ọ na-eweghachi otu ozi mgbe niile. Ma ị pụghị ịghọta: ma eleghị anya, paswọọdụ gị agbanweela, ma eleghị anya, nchekwa data ahụ furu efu, ma eleghị anya ihe adịghị mma. Ma ọ dịghị nchoputa. Ọ bụrụ na enweghị ike ịmebe nnọkọ, ị gaghị ama ihe kpatara enweghị ike ịtọ ya.
N'otu oge, ị na-elele eserese ngwa wee hụ na ngwa ahụ anaghị arụ ọrụ.
Lee anya n'elu wee hụ na Bouncer nwere otu eriri. Nke a bụ mgbanwe na ndụ nke ọrụ ahụ. Ị ghọtara na ị na-akwado ịtụba nchekwa data n'ime otu afọ na ọkara, na ị ga-ebuli elu ọdọ mmiri.
Anyị abịala na nkwubi okwu na anyị chọrọ PgBouncers ọzọ.
A kpachiela bouncer ntakịrị.
Ha mere ya ka enwere ike ibuli ọtụtụ Bouncers site na iji ọdụ ụgbọ mmiri TCP. Na sistemụ arụmọrụ na-ebufe njikọ TCP na-abata n'etiti ha na-eji okirikiri robin.
Nke a pụtara ìhè nye ndị ahịa, nke pụtara na ọ dị ka ị nwere otu Bouncer, mana ị nwere nkewa nke njikọ na-abaghị uru n'etiti Bouncers na-agba ọsọ.
Ma n'otu oge ị nwere ike ịchọpụta na 3 Bouncers nke ọ bụla na-eri isi ha site na 100%. Ị chọrọ bouncers ole na ole. Gịnị kpatara?
N'ihi na ị nwere TLS. Ị nwere njikọ ezoro ezo. Ma ọ bụrụ na ị benchmark Postgres na ma na-enweghị TLS, ị ga-ahụ na ọnụ ọgụgụ nke njikọ eguzobe na-ada site na ihe fọrọ nke nta ka ọ bụrụ iwu abụọ nke ịdị ukwuu nwere ike izo ya ezo, n'ihi na aka TLS na-eri ihe CPU.
Na n'elu ị nwere ike ịhụ ọtụtụ ọrụ cryptographic nke a na-eme mgbe enwere njikọ nke mbata. Ebe ọ bụ na isi anyị nwere ike ịgbanwe n'etiti mpaghara nnweta, ebili mmiri nke njikọ mbata bụ ọnọdụ a na-ahụkarị. Ya bụ, n'ihi ihe ụfọdụ na-enweghị isi ochie, ezigara ibu dum na ebe data ọzọ. Ha niile ga-abịa ịkele TLS n'otu oge.
Ọnụ ọgụgụ buru ibu nke aka TLS nwere ike ghara ịsị Bouncer ndewo, mana ọ ga-amanye akpịrị ya. N'ihi oge agwụla, ebili mmiri nke njikọ mbata nwere ike ghara imebi. Ọ bụrụ na ị na-agbalị ọzọ na ntọala na-enweghị exponential backback, ha agaghị na-abịa ugboro ugboro na a coherent ife.
Nke a bụ ihe atụ nke 16 PgBouncers na-ebu 16 cores na 100%.
Anyị bịara na cascade PgBouncer. Nke a bụ nhazi kachasị mma nke enwere ike nweta na ibu anyị na Bouncer. A na-eji Bouncers mpụga anyị maka aka aka TCP, a na-ejikwa Bouncers nke ime maka ezigbo ịgbakọ, ka ọ ghara imebi njikọ mpụga nke ukwuu.
N'ime nhazi a, ọ ga-ekwe omume ịmalitegharị nke ọma. Ị nwere ike ịmalitegharị ndị a niile 18 Bouncers otu otu. Ma ịnọgide na-enwe nhazi dị otú ahụ siri nnọọ ike. Sysadmins, DevOps, na ndị na-ahụ maka ihe nkesa a agaghị enwe obi ụtọ na nhazi a.
Ọ ga-adị ka enwere ike ịkwalite nkwalite anyị niile ka ọ bụrụ isi mmalite, mana akwadoghị Bouncer nke ọma. Dịka ọmụmaatụ, ikike ịgba ọsọ ọtụtụ PgBouncers n'otu ọdụ ụgbọ mmiri emere otu ọnwa gara aga. Enwere arịrịọ ịdọrọ na njirimara a ọtụtụ afọ gara aga.
Ma ọ bụ otu ihe atụ ọzọ. Na Postgres, ị nwere ike ịkagbu arịrịọ na-aga n'ihu site na izipu ihe nzuzo na njikọ dị iche na-enweghị nkwenye na-enweghị isi. Mana ụfọdụ ndị ahịa na-ezigara nrụpụta TCP, ya bụ, ha na-emebi njikọ netwọkụ. Kedu ihe Bouncer ga-eme? Ọ gaghị eme ihe ọ bụla. Ọ ga-aga n'ihu ime arịrịọ ahụ. Ọ bụrụ na ị nwetala ọnụ ọgụgụ dị ukwuu nke njikọ nke mebere nchekwa data nwere obere arịrịọ, mgbe ahụ naanị ịkwụsị njikọ site na Bouncer agaghị ezuru; Ikwesiri imezu arịrịọ ndị ahụ na-agba ọsọ na nchekwa data.
Emechiela nke a yana nsogbu a ejikọtabeghị na mgbago Bouncer.
Ya mere, anyị bịara na nkwubi okwu na anyị chọrọ anyị onwe anyị njikọ pooler, nke a ga-mepụtara, patched, nke nsogbu nwere ike ngwa ngwa mezie na nke, n'ezie, ga- multi-threaded.
Anyị na-edozi multithreading dị ka isi ọrụ. Anyị kwesịrị inwe ike ijikwa ebili mmiri nke njikọ TLS na-abata nke ọma.
Iji mee nke a, anyị ga-emepụta ọbá akwụkwọ dị iche a na-akpọ Machinarium, nke e mere iji kọwaa ọnọdụ igwe nke njikọ netwọk dị ka koodu usoro. Ọ bụrụ na ị lelee koodu isi mmalite libpq, ị ga-ahụ ụfọdụ oku dị mgbagwoju anya nwere ike weghachi gị nsonaazụ wee sị, “Kpọọ m ma emechaa. Ugbu a enwere m IO ugbu a, mana mgbe IO ga-apụ, m ga-ebu ibu na processor. Ma nke a bụ atụmatụ ọtụtụ ọkwa. Igwe steeti na-akọwakarị nzikọrịta ozi netwọkụ. Ọtụtụ iwu dị ka "Ọ bụrụ na m nataburu nkụnye eji isi mee nke nha N, ugbu a, ana m echere N bytes," "Ọ bụrụ na ezigara m ngwugwu SYNC, ugbu a ana m echere ngwugwu nwere metadata nsonaazụ." Nsonaazụ bụ koodu siri ike, nke na-emegiderịta onwe ya, dịka a ga-asị na agbanwere maze ahụ ka ọ bụrụ nyocha ahịrị. Anyị mere ya na kama igwe steeti, onye mmemme na-akọwa isi ụzọ mmekọrịta dị n'ụdị koodu iwu nkịtị. Ọ bụ naanị na n'ime koodu a dị mkpa ịkwesịrị ịtinye ebe a ga-akwụsị usoro igbu ya site na ichere data sitere na netwọkụ ahụ, na-ebufe ọnọdụ ogbugbu na coroutine ọzọ (eriri green). Ụzọ a yiri eziokwu ahụ bụ na anyị na-edepụta ụzọ kachasị atụ anya na maze n'ahịrị, wee tinye alaka na ya.
N'ihi ya, anyị nwere otu eri nke TCP na-anabata na gburugburu-robin na-enyefe njikọ TPC na ọtụtụ ndị ọrụ.
N'okwu a, njikọ ndị ahịa ọ bụla na-arụ ọrụ mgbe niile na otu processor. Na nke a na-enye gị ohere ime ya cache-friendly.
Na mgbakwunye, anyị emeziwanyela nchịkọta obere ngwugwu n'ime otu nnukwu ngwugwu iji wedata ngwugwu TCP sistemụ.
Tụkwasị na nke a, anyị emeela ka nchịkọta azụmahịa dịkwuo mma n'echiche bụ na Odyssey, mgbe a na-ahazi ya, nwere ike izipu CANCEL na ROLLBACK na ihe omume nke njikọ netwọk adịghị, ya bụ, ọ bụrụ na ọ dịghị onye na-echere arịrịọ, Odyssey ga-agwa nchekwa data ka ọ ghara ịgbalịsi ike. mezuo arịrịọ ahụ nke nwere ike imefusị akụ dị oké ọnụ ahịa.
Na mgbe ọ bụla enwere ike, anyị na-edobe njikọ na otu onye ahịa. Nke a na-ezere ịwụnye ngwa_name_add_host. Ọ bụrụ na nke a ga-ekwe omume, mgbe ahụ anyị ekwesịghịkwa ịtọgharịa paramita ndị achọrọ maka nyocha.
Anyị na-arụ ọrụ na ọdịmma nke Yandex.Cloud. Ma ọ bụrụ na ị na-eji PostgreSQL jikwaa ma tinye njikọ njikọ, ị nwere ike ịmepụta mmegharị ezi uche n'èzí, ya bụ, hapụ anyị, ọ bụrụ na ịchọrọ, na-eji ntụgharị ezi uche. Bouncer agaghị ahapụ mgbagharị ntụgharị ezi uche dị na ya n'èzí.
Nke a bụ ihe atụ nke ịtọliteghachi mmegharị ezi uche.
Na mgbakwunye, anyị nwere nkwado maka mmegharị anụ ahụ n'èzí. Na ígwé ojii, n'ezie, nke a agaghị ekwe omume, n'ihi na mgbe ahụ ụyọkọ ga-enye gị ọtụtụ ozi gbasara onwe ya. Mana n'ime nrụnye gị, ọ bụrụ na ịchọrọ mmegharị anụ ahụ site na njikọ pooler na Odyssey, nke a ga-ekwe omume.
Odyssey nwere nlebanya dakọtara na PgBouncer. Anyị nwere otu console nke na-agba ihe fọrọ nke nta ka ọ bụrụ otu iwu. Ọ bụrụ na ihe na-efu, ziga arịrịọ ịdọrọ, ma ọ bụ opekata mpe otu okwu na GitHub, anyị ga-emecha iwu ndị dị mkpa. Mana anyị enweela isi ọrụ PgBouncer console.
Na, n'ezie, anyị nwere njehie mbugharị. Anyị ga-eweghachite mperi nke nchekwa data kọrọ. Ị ga-enweta ozi gbasara ihe kpatara na etinyeghị gị na nchekwa data, ọ bụghị naanị na etinyeghị gị na ya.
Njirimara a nwere nkwarụ ma ọ bụrụ na ịchọrọ ndakọrịta 100% na PgBouncer. Anyị nwere ike na-akpa àgwà otu ụzọ ahụ dị ka Bouncer, naanị ka anyị nọrọ na nchekwa.
Mmepe
Okwu ole na ole gbasara koodu isi mmalite Odyssey.
Dịka ọmụmaatụ, enwere iwu "kwụsịtụ/ maliteghachi". A na-ejikarị ha emelite nchekwa data. Ọ bụrụ na ịchọrọ imelite Postgres, ị nwere ike kwụsịtụ ya na njikọ pooler, mee pg_upgrade, wee malitegharịa. Na n'akụkụ onye ahịa ọ ga-adị ka a ga-asị na nchekwa data ahụ na-ebelata. Ndị obodo wetara anyị ọrụ a. Ọ bụghị oyi kpọnwụrụ ma, ma n'oge na-adịghị ihe niile ga-adị. (Enwerela oyi kpọnwụrụ)
Na mgbakwunye, otu n'ime atụmatụ ọhụrụ dị na PgBouncer bụ nkwado maka SCRAM Authentication, nke onye na-adịghị arụ ọrụ na Yandex.Cloud wetara anyị. Ha abụọ bụ ọrụ mgbagwoju anya ma dị mkpa.
Ya mere, ọ ga-amasị m ịgwa gị ihe mere Odyssey, ma ọ bụrụ na ịchọrọ ide obere koodu ugbu a.
Ị nwere isi iyi Odyssey, nke dabere na ọba akwụkwọ abụọ. Ọbá akwụkwọ Kiwi bụ mmejuputa usoro ozi Postgres. Ya bụ, proto 3 nke Postgres bụ ozi ọkọlọtọ nke ihu na azụ na azụ nwere ike ịgbanwe. A na-emejuputa ha na ụlọ akwụkwọ Kiwi.
Ọbá akwụkwọ Machinarium bụ ọba akwụkwọ mmejuputa eri. Edere obere iberibe Machinarium a n'asụsụ mgbakọ. Mana atụla ụjọ, enwere naanị ahịrị iri na ise.
Odyssey architecture. Enwere igwe isi nke coroutines na-agba ọsọ. Igwe a na-arụ ọrụ ịnakwere njikọ TCP na-abata ma kesaa ha n'etiti ndị ọrụ.
Onye na-ahụ maka ọtụtụ ndị ahịa nwere ike ịrụ ọrụ n'ime otu onye ọrụ. Isi eri na-agbakwa njikwa njikwa na nhazi nke ọrụ crone iji hichapụ njikọ ndị na-adịghịzi mkpa na ọdọ mmiri.
A na-anwale Odyssey site na iji ọkọlọtọ Postgres test suite. Anyị na-agba ọsọ install-elele site na Bouncer na site na Odyssey, anyị na-enweta ihe efu. Enwere ọtụtụ ule metụtara nhazi ụbọchị nke na-agafeghị otu ihe ahụ na Bouncer na na Odyssey.
Na mgbakwunye, enwere ọtụtụ ndị ọkwọ ụgbọ ala nwere ule nke ha. Anyị na-ejikwa ule ha na-anwale Odyssey.
Na mgbakwunye, n'ihi nhazi nke cascade anyị, anyị ga-anwale ngwugwu dị iche iche: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey iji jide n'aka na ọ bụrụ na Odyssey kwụsịrị na akụkụ ọ bụla dị na cascade, ọ ka na-arụkwa ọrụ. dị ka anyị na-atụ anya.
Ikwu
Anyị na-eji Odyssey emepụta. Ma ọ gaghị adị mma ma ọ bụrụ na m kwuo na ihe niile na-arụ ọrụ. Mba, ya bụ, ee, ma ọ bụghị mgbe niile. Dịka ọmụmaatụ, na mmepụta ihe niile na-arụ ọrụ, mgbe ahụ ndị enyi anyị sitere na PostgreSQL Professional bịara kwuo na anyị nwere ebe nchekwa. Ha bụ n'ezie, anyị gbaziri ha. Ma ọ dị mfe.
Mgbe ahụ, anyị chọpụtara na onye na-egwu mmiri njikọ nwere njikọ TLS na-abata yana njikọ TLS na-apụ apụ. Na njikọ chọrọ asambodo ndị ahịa na asambodo nkesa.
Asambodo bouncer na Odyssey na-agụghachi site na pcache ha, mana asambodo ndị ahịa adịghị mkpa ka agụghachi ya site na pcache, n'ihi na Odyssey anyị nwere ike imecha na-abanye na arụmọrụ sistemụ nke ịgụ akwụkwọ a. Nke a tụrụ anyị n’anya, n’ihi na o wereghị ya ogologo oge iguzogide. Na mbụ ọ gbagoro n'ahịrị, mana mgbe njikọ 20 na-abata n'otu oge nsogbu a gosipụtara onwe ya.
Ụzọ nkwenye nkwụnye ọkụ bụ ikike iji ngwaọrụ Lunux arụnyere n'ime nyocha. Na PgBouncer a na-emejuputa ya n'ụzọ nke na enwere eriri dị iche iche ichere nzaghachi sitere na PAM na enwere eriri PgBouncer bụ isi nke na-arụ ọrụ njikọ dị ugbu a ma nwee ike ịrịọ ha ka ha biri na eriri PAM.
Anyị emeghị nke a n'ihi otu ihe dị mfe. Anyị nwere ọtụtụ eri. Gịnị mere anyị ji chọọ nke a?
Nke a nwere ike mechaa mepụta nsogbu na ọ bụrụ na ị nwere nyocha PAM na nyocha na-abụghị PAM, mgbe ahụ nnukwu ebili mmiri nke nyocha PAM nwere ike igbu oge nyocha na-abụghị PAM. Nke a bụ otu n'ime ihe ndị anyị edozibeghị. Mana ọ bụrụ na ịchọrọ idozi ya, ị nwere ike ime nke a.
Rake ọzọ bụ na anyị nwere otu eri na-anabata njikọ niile na-abata. Mgbe ahụ, a na-ebufe ha na ọdọ mmiri ndị ọrụ, ebe a ga-eme aka TLS.
N'okpuru ala, ọ bụrụ na ị nwere oke ikuku nke njikọ netwọkụ 20, a ga-anabata ha niile. Na n'akụkụ ndị ahịa libpq ga-amalite ịkọ oge nkwụsị. Site na ndabara ọ dị ka skịta 000.
Ọ bụrụ na ha niile enweghị ike ịbanye na nchekwa data n'otu oge, mgbe ahụ, ha enweghị ike ịbanye na nchekwa data, n'ihi na ihe a niile nwere ike kpuchie site na-enweghị nkọwa.
Anyị bịara na nkwubi okwu na anyị depụtaghachiri atụmatụ ahụ site na PgBouncer ebe a n'eziokwu na anyị na-atụgharị ọnụ ọgụgụ nke njikọ TCP nke anyị na-anabata.
Ọ bụrụ na anyị ahụ na anyị na-anabata njikọ, mana ha enweghị oge ịme aka, anyị na-etinye ha n'ahịrị ka ha ghara ịla n'iyi CPU. Nke a na-eduga n'eziokwu ahụ bụ na enweghị ike ịme aka n'otu oge maka njikọ niile bịarutere. Mana opekata mpe, mmadụ ga-abanye na nchekwa data, ọbụlagodi na ibu ahụ dị oke arọ.
Roadmap
Kedu ihe ị ga-achọ ịhụ n'ọdịnihu na Odyssey? Kedu ihe anyị dị njikere ịzụlite onwe anyị na gịnị ka anyị na-atụ anya n'aka obodo?
Dị ka nke August 2019.
Nke a bụ ihe okporo ụzọ Odyssey dị ka n'August:
- Anyị chọrọ nyocha SCRAM na PAM.
- Anyị chọrọ ibuga arịrịọ ọgụgụ na njikere.
- Malitegharịa ekwentị ga-amasị m.
- Na ikike ịkwụsịtụ na ihe nkesa.
Emechaala ọkara nke ụzọ ụzọ a, ọ bụghị nke anyị. Nke a dịkwa mma. Ya mere, ka anyị tụlee ihe fọdụrụ ma tinyekwuo.
Na ụkpụrụ, na Postgres, malite na 10, ọ ga-ekwe omume ịkọwa session_attrs mgbe ejikọtara. Ị nwere ike depụta ndị ọbịa nchekwa data niile na njikọ wee kwuo ihe mere ị na-aga na nchekwa data: dee ma ọ bụ gụọ naanị. Na onye ọkwọ ụgbọ ala n'onwe ya ga-ahọrọ onye ọbịa mbụ na ndepụta nke kachasị amasị ya, nke na-emezu ihe achọrọ nke session_attrs.
Mana nsogbu dị na usoro a bụ na ọ naghị achịkwa lagnik mmegharị ahụ. Ị nwere ike ịnwe ụdị oyiri nke daa azụ maka oge anaghị anabata maka ọrụ gị. Iji mee ka mmezu nke ọgụgụ isi rụọ ọrụ zuru oke na oyiri, anyị kwesịrị ịkwado ikike Odyssey ịghara ịgba ọsọ mgbe enweghị ike ịgụ ya.
Odyssey ga-agarịrị na nchekwa data site n'oge ruo n'oge wee rịọ maka anya ngbanwe site na isi. Ma ọ bụrụ na ọ ruru oke uru, ekwela ka arịrịọ ọhụrụ banye na nchekwa data, gwa onye ahịa na ọ kwesịrị ịmaliteghachi njikọ na, ikekwe, họrọ onye ọbịa ọzọ iji mezuo arịrịọ. Nke a ga-ekwe ka nchekwa data weghachi ngwa ngwa lag nke mmeghari ma laghachi ọzọ iji zaghachi na arịrịọ.
O siri ike inye oge maka mmejuputa iwu, n'ihi na ọ bụ isi mmalite. Mana, enwere m olileanya, ọ bụghị afọ 2,5 dị ka ndị ọrụ ibe m si PgBouncer. Nke a bụ njirimara m ga-achọ ịhụ na Odyssey.
Mana enwere nkwupụta akwadoro na ọkwa ozi protocol na proto3. Na nke a bụ ebe ozi a na-emepụta nkwupụta akwadoro na-abịa n'ụdị ahaziri ahazi. Ma anyị nwere ike ịkwado nghọta na na ụfọdụ njikọ nkesa nke onye ahịa jụrụ ịmepụta nkwupụta akwadoro. Ma ọ bụrụgodị na azụmahịa ahụ mechiri, anyị ka kwesịrị ịnọgide na-enwe njikọ n'etiti ihe nkesa na onye ahịa.
Ma ebe a, esemokwu na mkparịta ụka na-ebilite, n'ihi na mmadụ na-ekwu na ọ dị mkpa ka ị ghọta ụdị okwu a kwadebere nke onye ahịa ahụ kere ma kesaa njikọ nke ihe nkesa n'etiti ndị ahịa niile mepụtara njikọ nke ihe nkesa a, ya bụ, onye mepụtara nkwupụta a kwadebere dị otú ahụ.
Andres Freund kwuru na ọ bụrụ na onye ahịa abịakwute gị bụ onye mepụtarala nkwupụta a kwadebere na njikọ nkesa ọzọ, mepụta ya maka ya. Mana ọ dị ntakịrị ihe na-ezighi ezi ịme ajụjụ na nchekwa data kama ịbụ onye ahịa, mana site n'echiche nke onye nrụpụta nke na-ede protocol maka ịmekọrịta na nchekwa data, ọ ga-adaba ma ọ bụrụ na enyere ya njikọ netwọkụ nke na-eme ya. enwere ajụjụ a kwadoro.
Na otu ihe ọzọ anyị kwesịrị ime. Ugbu a anyị nwere nlebanya dakọtara na PgBouncer. Anyị nwere ike weghachi nkezi oge mmezu ajụjụ. Mana nkezi oge bụ nkezi okpomọkụ n'ụlọ ọgwụ: ụfọdụ na-ajụ oyi, ụfọdụ na-ekpo ọkụ - na nkezi, onye ọ bụla dị mma. Ọ bụghị eziokwu.
Anyị kwesịrị itinye nkwado maka pasentị nke ga-egosi na enwere ajụjụ nwayọ na-emebi ihe ma mee ka nleba anya bụrụ nke a na-anabata.
Ihe kachasị mkpa bụ na achọrọ m ụdị 1.0 (ụdị 1.1 ewepụtalarị). Nke bụ eziokwu bụ na Odyssey dị ugbu a na ụdị 1.0rc, ya bụ ntọhapụ ntọhapụ. Ma nsogbu niile m depụtara ka edobere ya na otu ụdịdị ahụ, belụsọ maka mgbaka ebe nchekwa.
Kedu ihe ụdị 1.0 ga-apụtara anyị? Anyị na-atụgharị Odyssey na ntọala anyị. Ọ na-agba ọsọ na ọdụ data anyị, ma mgbe ọ ruru n'ókè nke 1 arịrịọ kwa sekọnd, mgbe ahụ anyị nwere ike ikwu na nke a bụ ntọhapụ version na nke a bụ ụdị nke nwere ike na-akpọ 000.
Ọtụtụ ndị mmadụ n'ime obodo ajụọla ụdị 1.0 ahụ gụnyere kwụsịtụ na SCRAM. Mana nke a ga-apụta na anyị ga-ebupụ ụdị ọzọ na mmepụta, n'ihi na egbubeghị SCRAM ma ọ bụ kwụsịtụ. Ma, o yikarịrị, a ga-edozi okwu a ngwa ngwa.
Ana m eche arịrịọ ịdọrọ gị. Ọ ga-amasị m ịnụ ụdị nsogbu ị nwere na Bouncer. Ka anyị tụlee ha. Ikekwe anyị nwere ike mejuputa ụfọdụ ọrụ ị chọrọ.
Nke a bụ njedebe nke akụkụ m, ọ ga-amasị m ige gị ntị. Daalụ!
Ajụjụ gị
Ọ bụrụ na m edobe aha ngwa nke m, a ga-ebuga ya nke ọma, gụnyere n'ịgbakọ azụmahịa na Odyssey?
Odyssey ma ọ bụ Bouncer?
Na Odyssey. Na Bouncer a na-atụba ya.
Anyị ga-eme setịpụ.
Ma ọ bụrụ na ezigbo njikọ m na-amali na njikọ ndị ọzọ, a ga-ebunye ya?
Anyị ga-eme nhazi nke paramita niile edepụtara na listi ahụ. Enweghị m ike ịma ma application_name dị na ndepụta a. Echere m na ahụrụ m ya ebe ahụ. Anyị ga-edobe otu paramita niile. Site na otu arịrịọ, setịpụ ga-eme ihe niile onye ahịa etinyere n'oge mmalite.
Daalụ Andrey, maka akụkọ ahụ! Akụkọ ọma! Obi dị m ụtọ na Odyssey na-etolite ngwa ngwa na ngwa ngwa kwa nkeji. Achọrọ m ịga n'ihu otu a. Anyị arịọla gị ka ị nwee njikọ data-isi iyi ka Odyssey nwee ike jikọọ na ọdụ data dị iche iche n'otu oge, ya bụ ohu ukwu, wee jikọọ na nna ukwu ọhụrụ mgbe ọ kwụsịrị.
Ee, ọ dị m ka m na-echeta mkparịta ụka a. Ugbu a enwere ọtụtụ ebe nchekwa. Ma ọ dịghị mgbanwe n'etiti ha. N'akụkụ anyị, anyị ga-enyocha ihe nkesa ahụ na ọ ka dị ndụ wee ghọta na ọdịda emeela, onye ga-akpọ pg_recovery. Enwere m usoro nghọta na anyị abịaghị na nna ukwu. Anyị kwesịrị ịghọta n'ụzọ ụfọdụ site na mmejọ ma ọ bụ gịnị? Ya bụ, echiche ahụ na-adọrọ mmasị, a na-atụle ya. Dee nkọwa ndị ọzọ. Ọ bụrụ na ị nwere ndị ọrụ maara C, nke ahụ dị mma.
Okwu nke ịchagharị n'ofe oyiri dịkwa mmasị anyị, n'ihi na anyị chọrọ ime ka nkuchi nke ụyọkọ emegharịghachi dị mfe dị ka o kwere mee maka ndị mmepe ngwa. Mana ebe a ka m ga-achọkwu nkọwa, ya bụ kpọmkwem ka esi eme ya, otu esi eme ya nke ọma.
Ajụjụ bụkwa maka oyiri. Ọ na-apụta na ị nwere nna ukwu na ọtụtụ oyiri. Ma o doro anya na ha na-aga na oyiri ahụ obere oge karịa nna ukwu maka njikọ, n'ihi na ha nwere ike inwe ọdịiche. Ị kwuru na ọdịiche dị na data ahụ nwere ike ịbụ nke na ọ gaghị emeju azụmahịa gị ma ị gaghị aga ebe ahụ ruo mgbe emegharịrị ya. N'otu oge ahụ, ọ bụrụ na ịgaghị ebe ahụ ogologo oge, wee malite ịga, mgbe ahụ, data achọrọ agaghị adị ozugbo. Nke ahụ bụ, ọ bụrụ na anyị na-aga na nna ukwu mgbe niile, mgbe ahụ cache ahụ na-ekpo ọkụ, ma na oyiri cache dị ntakịrị.
Ee ọ bụ eziokwu. Pcache agaghị enwe ihe mgbochi data ịchọrọ, ezigbo cache agaghị enwe ozi gbasara tebụl ịchọrọ, atụmatụ ahụ agaghị enwe ajụjụ nyocha, ọ nweghị ihe ọ bụla.
Ma mgbe ị nwere ụdị ụyọkọ, ma tinye ihe ọhụrụ n'ebe ahụ, mgbe ọ na-amalite, ihe niile dị njọ na ya, ya bụ, ọ na-abawanye cache ya.
Enwere m echiche ahụ. Ụzọ ziri ezi ga-abụ ịmalite obere pasent nke ajụjụ na oyiri nke mbụ, nke ga-eme ka cache ahụ kpoo ọkụ. N'ikwu okwu n'ụzọ dị mfe, anyị nwere ọnọdụ na anyị ga-anọrịrị n'azụ nna ukwu n'ihe karịrị 10 sekọnd. Na ọnọdụ a adịghị etinye n'otu ebili mmiri, mana nke ọma maka ụfọdụ ndị ahịa.
Ee, bulie ibu.
Nke a bụ ezi echiche. Mana nke mbụ anyị kwesịrị ime mmechi a. Mbụ anyị kwesịrị ịgbanyụ, mgbe ahụ, anyị ga-eche maka otu esi agbanwuo. Nke a bụ nnukwu njirimara iji mee ka ọ dị nro.
Nginx nwere nhọrọ a slowly start
na ụyọkọ maka ihe nkesa. Ọ na-ejikwa nwayọọ nwayọọ na-ebu ibu.
Ee, echiche mara mma, anyị ga-anwale ya mgbe anyị rutere na ya.
isi: www.habr.com