Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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. Odyssey, ka ha na-atụgharị ya na mmepụta. Tụkwasị na nke a, anyị ga-atụle ihe ọrụ nke puller anyị ga-achọ ịhụ na nsụgharị ọhụrụ: ọ dị anyị mkpa ọ bụghị nanị iji gboo mkpa anyị, ma ịzụlite obodo ndị ọrụ. Odyssey.

Video:

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Ndewo, unu niile! Aha m bụ Andrew.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Na Yandex, m na-emepụta ọdụ data mepere emepe. Ma taa, anyị nwere isiokwu gbasara njikọ njikọ pooler.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Ọ 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è.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Ụ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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Gịnị bụ isi nzube nke njikọ pooler?

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Ọ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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Nsogbu na-ebilite bụ na n'otu oge ịchọrọ ịbawanye azụ azụ, ịchọrọ ibuga ya na ọtụtụ igwe mebere.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Ọ 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 Pgpool и Crunchy-proxy.

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ụ.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Na n'ọrụ anyị, nke a bụ eziokwu. Ma enwere nsogbu ole na ole.Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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ụ.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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ọ.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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ị.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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ị.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Anyị, n'ezie, dere obere patch maka Bouncer nke gbakwunyere ntọala a, ya bụ ịmachi ndị ahịa na ọdọ mmiri ahụ.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Ọ ga-ekwe omume ime nke a n'akụkụ Postgres, ya bụ, mechie ọrụ dị na nchekwa data site na ọnụ ọgụgụ njikọ.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

N'otu oge, ị na-elele eserese ngwa wee hụ na ngwa ahụ anaghị arụ ọrụ.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Anyị abịala na nkwubi okwu na anyị chọrọ PgBouncers ọzọ.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

https://lwn.net/Articles/542629/

A kpachiela bouncer ntakịrị.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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ọ.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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?

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Ọ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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Nke a bụ ihe atụ nke 16 PgBouncers na-ebu 16 cores na 100%.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Ọ 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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

https://www.postgresql.org/docs/current/libpq-cancel.html

https://github.com/pgbouncer/pgbouncer/pull/79

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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ụ.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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í.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Nke a bụ ihe atụ nke ịtọliteghachi mmegharị ezi uche.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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 Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

https://github.com/yandex/odyssey/pull/66

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ụ)

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

https://github.com/yandex/odyssey/pull/73 - ama 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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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 Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Ụ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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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?

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

Banyere ajuju na-agụ naanị maka njikere? Anyị nwere oyiri ga-ekpo ọkụ ikuku n'emeghị arịrịọ. Anyị chọrọ ha iji nye failover na switchover. N'ọnọdụ nsogbu na otu n'ime ebe data, ọ ga-amasị m iji ụfọdụ ọrụ bara uru were ha. N'ihi na anyị enweghị ike hazi otu Central processors, otu ebe nchekwa dị iche iche, n'ihi na ma ọ bụghị replication agaghị arụ ọrụ.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

N'ime obodo, ndị mmadụ jụrụ maka nkwado maka nkwupụta akwadoro. Ugbu a ị nwere ike ịmepụta nkwupụta akwadoro n'ụzọ abụọ. Mbụ, ị nwere ike mebie iwu SQL, ya bụ "kwadoro". Iji ghọta iwu SQL a, anyị kwesịrị ịmụta ịghọta SQL n'akụkụ Bouncer. Nke a ga-abụ ihe karịrị akarị, n'ihi na ọ karịrị akarị, ebe ọ bụ na anyị chọrọ ihe nzacha ahụ dum. Anyị enweghị ike ịtụgharị iwu SQL ọ bụla.

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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.

Odyssey Roadmap: kedu ihe ọzọ anyị chọrọ site na ọdọ mmiri njikọ. Andrey Borodin (2019)

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

Tinye a comment