Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ

Ndị ọrụ anyị na-edegara ibe ha ozi n'amaghị ike ọgwụgwụ.
Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ
Nke ahụ dị nnọọ ukwuu. Ọ bụrụ na ị malite ịgụ ozi niile nke ndị ọrụ niile, ọ ga-ewe ihe karịrị 150 puku afọ. Ọ bụrụhaala na ị bụ onye na-agụ akwụkwọ tozuru oke ma na-etinye ihe karịrị otu sekọnd na ozi ọ bụla.

Site na oke data dị otú ahụ, ọ dị oke mkpa na ezi uche maka ịchekwa na ịnweta ya na-ewu nke ọma. Ma ọ bụghị ya, n'otu oge na-adịghị mma, ọ nwere ike ịpụta ìhè na ihe niile ga-aga nke ọma n'oge na-adịghị anya.

Maka anyị, oge a bịara otu afọ na ọkara gara aga. Otu anyị si bịa na nke a na ihe mere na njedebe - anyị na-agwa gị n'usoro.

Azụ

Na mmejuputa nke mbụ, ozi VKontakte rụrụ ọrụ na ngwakọta nke PHP backend na MySQL. Nke a bụ ihe ngwọta zuru oke maka obere webụsaịtị ụmụ akwụkwọ. Agbanyeghị, saịtị a tolitere n'enweghị njikwa wee malite ịchọ ka emeziwanye usoro data maka onwe ya.

Ná ngwụsị nke 2009, e dere mbụ ederede-engine repository, na 2010 ozi e zigara ya.

N'ime igwe ederede, echekwara ozi na ndepụta - ụdị "igbe ozi". A na-ekpebi ụdị ndepụta ọ bụla site na uid - onye ọrụ nwere ozi ndị a niile. Ozi nwere otu njirimara: njirimara interlocutor, ederede, mgbakwunye, na ndị ọzọ. Ihe nchọpụta ozi dị n'ime "igbe" bụ local_id, ọ dịghị agbanwe agbanwe ma na-ekenye ya n'usoro maka ozi ọhụrụ. “igbe” ndị ahụ nwere onwe ha, anaghị emekọrịta ọnụ n'ime injin ahụ; nkwukọrịta n'etiti ha na-apụta na ọkwa PHP. Ị nwere ike ịlele nhazi data na ike nke ederede-engine site n'ime ebe a.
Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ
Nke a zuru oke maka ozi n'etiti ndị ọrụ abụọ. Chee ihe mere na-esote?

Na May 2011, VKontakte webatara mkparịta ụka ya na ọtụtụ ndị sonyere - ọtụtụ nkata. Iji soro ha rụọ ọrụ, anyị welitere ụyọkọ ọhụrụ abụọ - mkparịta ụka otu na ndị otu nkata. Nke mbụ na-echekwa data gbasara nkata site na ndị ọrụ, nke abụọ na-echekwa data gbasara ndị ọrụ site na nkata. Na mgbakwunye na ndepụta ahụ n'onwe ha, nke a gụnyere, dịka ọmụmaatụ, onye ọrụ na-akpọ oku na oge agbakwunyere ha na nkata.

"PHP, ka anyị ziga ozi na nkata," onye ọrụ na-ekwu.
"Bịa, {username}," PHP na-ekwu.
Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ
Enwere ọghọm dị na atụmatụ a. Mmekọrịta ka bụ ọrụ PHP. Nnukwu nkata na ndị ọrụ na-ezigara ha ozi n'otu oge bụ akụkọ dị ize ndụ. Ebe ihe igwe ederede dabere na uid, ndị na-akparịta ụka nwere ike ịnweta otu ozi n'oge dị iche iche. Mmadụ nwere ike ibi na nke a ma ọ bụrụ na ọganihu kwụ ọtọ. Ma nke ahụ agaghị eme.

Na njedebe nke 2015, anyị malitere ozi obodo, na mmalite nke 2016, anyị wepụtara API maka ha. Site na ọbịbịa nke nnukwu nkata na obodo, ọ ga-ekwe omume ichefu ọbụna nkesa ibu.

Bọt dị mma na-ewepụta ozi ọtụtụ nde kwa ụbọchị - ọbụlagodi ndị ọrụ na-ekwu okwu enweghị ike ịnya isi maka nke a. Nke a pụtara na oge ụfọdụ nke igwe ederede, nke bots ndị dị otú ahụ bi, malitere ịta ahụhụ zuru oke.

Igwe ozi na 2016 bụ ihe 100 nke ndị otu nkata na mkparịta ụka otu, yana igwe ederede 8000. A kwadoro ha na otu puku sava, nke ọ bụla nwere 64 GB nke ebe nchekwa. Dị ka ihe mberede mberede mbụ, anyị mụbara ebe nchekwa site na 32 GB ọzọ. Anyị mere atụmatụ amụma. Enweghị mgbanwe siri ike, nke a ga-ezuru ihe dị ka afọ ọzọ. Ịkwesịrị ijide ngwaike ma ọ bụ bulite ọdụ data n'onwe ha.

N'ihi ọdịdị nke ihe owuwu ahụ, ọ bụ naanị ihe ezi uche dị na ya ịbawanye ngwaike n'ọtụtụ. Ya bụ, ọ dịkarịa ala okpukpu abụọ nke ụgbọ ala - doro anya, nke a bụ ụzọ dị oke ọnụ. Anyị ga-ebuli.

Echiche ọhụrụ

Isi ihe dị mkpa nke ụzọ ọhụrụ a bụ nkata. Mkparịta ụka nwere ndepụta ozi metụtara ya. Onye ọrụ nwere ndepụta nkata.

Nke kacha nta achọrọ bụ ọdụ data ọhụrụ abụọ:

  • igwe nkata. Nke a bụ ebe nchekwa vectors nkata. Mkparịta ụka ọ bụla nwere vector nke ozi metụtara ya. Ozi ọ bụla nwere ederede na njirimara ozi pụrụ iche n'ime nkata - chat_local_id.
  • onye ọrụ-enjin. Nke a bụ nchekwa nke ndị ọrụ vectors - njikọ ndị ọrụ. Onye ọrụ ọ bụla nwere vector nke peer_id (interlocutors - ndị ọrụ ndị ọzọ, ọtụtụ nkata ma ọ bụ obodo) yana vector nke ozi. Peer_id ọ bụla nwere vector nke ozi metụtara ya. Ozi ọ bụla nwere chat_local_id yana ID ozi pụrụ iche maka onye ọrụ ahụ - user_local_id.

Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ
Ụyọkọ ọhụrụ na-ekwurịta okwu na ibe ha site na iji TCP - nke a na-eme ka a mata na usoro arịrịọ adịghị agbanwe. A na-edekọ arịrịọ onwe ha na nkwenye maka ha na draịvụ ike - ya mere anyị nwere ike iweghachi ọnọdụ kwụ n'ahịrị n'oge ọ bụla mgbe ọdịda ma ọ bụ malitegharịa nke engine. Ebe ọ bụ na onye ọrụ-engine na chat-engine bụ 4 puku shards ọ bụla, a ga-ekesa kwụ n'ahịrị arịrịọ n'etiti ụyọkọ (ma n'eziokwu ọ dịghị ma ọlị - ọ na-arụkwa ọrụ ngwa ngwa).

Iji diski na-arụ ọrụ na ọdụ data anyị n'ọtụtụ ọnọdụ na-adabere na nchikota ọnụọgụ ọnụọgụ abụọ nke mgbanwe (binlog), snapshots static na foto akụkụ na ebe nchekwa. A na-ede mgbanwe n'ime ụbọchị na binlog, na-emepụta foto nke ọnọdụ dị ugbu a kwa oge. Ihe onyonyo bụ mkpokọta data emebere maka ebumnuche anyị. Ọ nwere nkụnye eji isi mee (metaindex nke onyonyo) yana otu metafiles. A na-echekwa nkụnye eji isi mee na RAM kpamkpam wee gosi ebe a ga-achọ data sitere na foto foto. Metafile ọ bụla gụnyere data nke nwere ike ịdị mkpa n'oge dị nso - dịka ọmụmaatụ, metụtara otu onye ọrụ. Mgbe ị na-ajụ nchekwa data site na iji nkụnye eji isi foto, a na-agụ metafile achọrọ, wee banye n'uche mgbanwe na binlog nke mere ka emechara foto ahụ. Ị nwere ike ịgụkwu gbasara uru nke usoro a ebe a.

N'otu oge ahụ, data na draịvụ ike n'onwe ya na-agbanwe naanị otu ugboro n'ụbọchị - n'abalị na Moscow, mgbe ibu dị ntakịrị. N'ihi nke a (n'ịmara na ihe owuwu na diski na-adịgide adịgide n'ụbọchị dum), anyị nwere ike iji dochie vectors na nhazi nke nha - na n'ihi nke a, nweta na ebe nchekwa.

Izipu ozi na atụmatụ ọhụrụ a dị ka nke a:

  1. The PHP backend kọntaktị onye ọrụ-engine na arịrịọ izipu ozi.
  2. user-engine proxies arịrịọ a chọrọ ka ihe atụ-enjin nkata, nke na-alaghachi na user-engine chat_local_id - ihe nchọpụta pụrụ iche nke ozi ọhụrụ n'ime nkata a. Chat_engine wee gbasaa ozi ahụ nye ndị niile natara na nkata ahụ.
  3. onye ọrụ-enjin na-enweta chat_local_id site na igwe nkata wee weghachi user_local_id na PHP - ihe nchọpụta ozi pụrụ iche maka onye ọrụ a. A na-eji njirimara a, dịka ọmụmaatụ, iji jiri ozi rụọ ọrụ site na API.

Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ
Mana na mgbakwunye na izipu ozi n'ezie, ịkwesịrị ịmejuputa ihe ole na ole dị mkpa:

  • Ndebanye aha bụ, ọmụmaatụ, ozi kacha ọhụrụ ị na-ahụ mgbe imepe ndepụta mkparịta ụka. Ozi na-agụghị, ozi nwere mkpado ("dị mkpa", "Spam", wdg).
  • Na-akpakọ ozi na igwe nkata
  • Na-echekwa ozi na igwe onye ọrụ
  • Chọọ (site na mkparịta ụka niile yana n'ime otu).
  • Mmelite ozugbo (Longpolling).
  • Ịchekwa akụkọ ihe mere eme iji mejuputa caching na ndị ahịa mkpanaka.

Ihe ndekọ aha niile na-agbanwe ngwa ngwa. Anyị na-eji ha arụ ọrụ Osisi osisi. A na-akọwa nhọrọ a site n'eziokwu na n'elu osisi ahụ, anyị na-echekwa akụkụ dum nke ozi site na foto - dịka ọmụmaatụ, mgbe ịmegharị abalị abalị, osisi ahụ nwere otu n'elu, nke nwere ozi niile nke sublist. Osisi Splay na-eme ka ọ dị mfe itinye n'ime etiti vertex dị otú ahụ na-enweghị iche echiche maka ịhazigharị. Na mgbakwunye, Splay anaghị echekwa data na-enweghị isi, nke na-echekwa anyị ebe nchekwa.

Ozi gụnyere nnukwu ozi, ọkachasị ederede, nke bara uru iji nwee ike mpikota onu. Ọ dị mkpa na anyị nwere ike idowe nke ọma ọbụna otu ozi n'otu n'otu. Eji mpikota onu ozi Huffman algọridim na heuristics nke anyị - dịka ọmụmaatụ, anyị maara na n'ime okwu ozi na-agbanwe na "abụghị okwu" - oghere, akara edemede - na anyị na-echetakwa ụfọdụ n'ime ihe dị iche iche nke iji akara maka asụsụ Russian.

Ebe ọ bụ na ndị ọrụ pere mpe karịa nkata, iji chekwaa arịrịọ ohere diski enweghị usoro na igwe nkata, anyị na-echekwa ozi n'ime igwe onye ọrụ.

A na-emejuputa nchọta ozi dị ka ajụjụ diagonal sitere na injin onye ọrụ ruo n'igwe nkata niile nwere mkparịta ụka nke onye ọrụ a. A na-ejikọta nsonaazụ ya na injin onye ọrụ n'onwe ya.

Ọ dị mma, eburula nkọwa niile n'uche, naanị ihe fọdụrụ bụ ịgbanwee na atụmatụ ọhụrụ - yana ọkacha mma na-enweghị ndị ọrụ na-ahụ ya.

Mbugharị data

Yabụ, anyị nwere igwe ederede na-echekwa ozi site n'aka onye ọrụ, yana ụyọkọ abụọ na-akparịta ụka-ndị otu na nkata otu na-echekwa data gbasara ọnụ ụlọ nkata ọtụtụ na ndị ọrụ nọ n'ime ha. Kedu ka esi esi na nke a gaa na injin ọrụ-engine na nkata-engine ọhụrụ?

A na-eji mkparịta ụka ndị otu na atụmatụ ochie eme ihe maka nkwalite. Anyị na-ebufe ngwa ngwa data dị mkpa site na ya gaa na ndị otu nkata, mgbe ahụ ọ naghị esokwa na usoro mbugharị ahụ.

kwụ n'ahịrị maka ndị otu nkata. Ọ na-agụnye 100 ikpe, mgbe chat-engine nwere 4 puku. Iji nyefee data ahụ, ịkwesịrị iwebata ya na nnabata - maka nke a, e kewara ndị otu nkata n'ime otu puku puku anọ, wee gụọ binlog-members binlog na igwe nkata.
Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ
Ugbu a igwe nkata maara maka mkparịta ụka multi-chat sitere na ndị otu nkata, mana ọ mabeghị ihe ọ bụla gbasara mkparịta ụka ya na ndị na-emekọrịta ihe. Mkparịta ụka dị otú ahụ dị na igwe ederede na-ezo aka na ndị ọrụ. N'ebe a, anyị weere data ahụ "n'isi-n'ihu": ihe atụ nkata-engine ọ bụla jụrụ ihe ederede-engine niile ma ha nwere mkparịta ụka ọ chọrọ.

Nnukwu - igwe nkata maara ihe nkata ọtụtụ nkata dị ma marakwa mkparịta ụka enwere.
Ịkwesịrị ijikọ ozi na nkata ọtụtụ nkata ka ị nweta ndepụta ozi na nkata ọ bụla. Nke mbụ, igwe nkata na-eweghachite n'igwe ederede-ozi niile sitere na nkata a. N'ọnọdụ ụfọdụ enwere ọtụtụ n'ime ha (ruo narị nde mmadụ), mana na-enweghị oke, nkata ahụ dabara kpamkpam na RAM. Anyị nwere ozi enweghị usoro, nke ọ bụla n'ime ọtụtụ mbipụta - ka emechara, a na-adọta ha niile site na igwe ederede dị iche iche kwekọrọ na ndị ọrụ. Ebumnobi bụ ịhazi ozi ma wepụ akwụkwọ ndị na-ewere ohere na-adịghị mkpa.

Ozi ọ bụla nwere stampụ oge nwere oge ezigara ya na ederede. Anyị na-eji oge maka nhazi - anyị na-edobe ntụnye aka na ozi kacha ochie nke ndị sonyere multichat wee tụọ hashes site na ederede nke mbipụta ndị e zubere, na-aga n'ihu na-abawanye stampụ oge. Ọ bụ ihe ezi uche dị na ya na mbipụta ndị a ga-enwe otu hash na timestamp, mana na omume nke a anaghị adị mgbe niile. Dị ka ị na-echeta, mmekọrịta na ochie atụmatụ e rụrụ site PHP - na obere oge, oge izipu otu ozi dị iche iche n'etiti dị iche iche ọrụ. N'okwu ndị a, anyị na-ahapụ onwe anyị ka anyị dezie akara ngosi oge - na-emekarị n'ime sekọnd. Nsogbu nke abụọ bụ usoro ozi dị iche iche maka ndị nnata dị iche iche. N'ọnọdụ ndị dị otú ahụ, anyị kwere ka ịmepụta otu mgbakwunye, yana nhọrọ nhazi dị iche iche maka ndị ọrụ dị iche iche.

Mgbe nke a gasịrị, a na-eziga data gbasara ozi na multichat na injin onye ọrụ. Na ebe a na-abịa na-adịghị mma atụmatụ nke mbubata ozi. N'ime ọrụ nkịtị, onye ọrụ_local_id na-enye iwu ozi ndị na-abịa na injin ahụ n'usoro nrịgo. Ozi ndị e si na injin ochie webatara n'ime igwe onye ọrụ tụfuru ihe a bara uru. N'otu oge ahụ, maka ịdị mma nke ule, ị ga-enwe ike ịnweta ha ngwa ngwa, chọọ ihe n'ime ha ma tinye ndị ọhụrụ.

Anyị na-eji usoro data pụrụ iche iji chekwaa ozi ebubatara.

Ọ na-anọchi anya vector nke nha Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụebee ka onye obula no Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ - dị iche iche na iwu na-agbada n'usoro, na a pụrụ iche usoro nke ihe. Na akụkụ nke ọ bụla nwere indices Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ ihe na-ahazi. Ịchọ ihe dị n'ụdị nhazi ahụ na-ewe oge Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ site Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ ọchụchọ ọnụọgụ abụọ. A na-emezigharị ihe mgbakwunye nke mmewere Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ.

Yabụ, anyị achọpụtala otu esi ebufe data sitere na injin ochie gaa na nke ọhụrụ. Mana usoro a na-ewe ọtụtụ ụbọchị - na o yighị ka n'ime ụbọchị ndị a ndị ọrụ anyị ga-ahapụ àgwà nke idere ibe ha akwụkwọ. Ka ị ghara idafu ozi n'oge a, anyị na-atụgharị gaa na atụmatụ ọrụ nke na-eji ụyọkọ ochie na nke ọhụrụ.

Edere data na ndị otu nkata na injin onye ọrụ (ọ bụghị na injin ederede, dị ka ọ na-arụ ọrụ nkịtị dịka atụmatụ ochie si dị). onye ọrụ-enjin proxies na-arịọ arịrịọ maka igwe nkata - ebe a omume na-adabere na ma ejikọtala nkata a ma ọ bụ na ọ bụghị. Ọ bụrụ na ejikọtabeghị nkata ahụ, igwe nkata anaghị ede ozi ahụ n'onwe ya, nhazi ya na-apụta naanị na igwe ederede. Ọ bụrụ na ejikọtala nkata ahụ na igwe nkata, ọ na-eweghachite chat_local_id na onye ọrụ-engine wee ziga ozi ahụ nye ndị niile natara ya. onye ọrụ-engine proxies niile data na ederede-engine - nke mere na ọ bụrụ na ihe na-eme, anyị nwere ike tụgharịa azụ mgbe niile, na-enwe niile ugbu a data na ochie engine. injin ederede na-eweghachi user_local_id, nke injin-njin na-echekwa wee laghachi na azụ azụ.
Degharịa nchekwa data ozi VKontakte site na ọkọ wee dịrị ndụ
N'ihi ya, usoro mgbanwe dị ka nke a: anyị na-ejikọta igwe ọrụ efu na ụyọkọ nkata nkata. igwe nkata na-agụ ọnụọgụ ndị otu nkata, wee malite proxying dịka atụmatụ akọwara n'elu si dị. Anyị na-ebufe data ochie wee nweta ụyọkọ abụọ mekọrịtara ọnụ (nke ochie na nke ọhụrụ). Naanị ihe fọdụrụ bụ ka ịgbanwee ọgụgụ site na igwe ederede gaa na injin onye ọrụ wee gbanyụọ proxying.

Результаты

Ekele maka ụzọ ọhụrụ ahụ, metrics arụmọrụ niile nke engines na-emeziwanye ma dozie nsogbu ndị nwere data data. Ugbu a, anyị nwere ike mejuputa atụmatụ ọhụrụ na ozi ngwa ngwa (ma malitelarị ime nke a - anyị mụbara ọnụ ọgụgụ kachasị nke ndị sonyere na nkata, mejuputa ọchụchọ maka ozi ezigara, wepụta ozi pinned wee bulie oke na ọnụọgụ ozi nke onye ọrụ ọ bụla) .

Mgbanwe ndị dị na mgbagha dị nnukwu n'ezie. Ọ ga-amasị m ịmara na nke a anaghị apụta mgbe niile afọ mmepe site na nnukwu otu na ọtụtụ puku ahịrị koodu. igwe nkata na injin onye ọrụ yana akụkọ ndị ọzọ dị ka Huffman maka mkpakọ ozi, osisi splay na usoro maka ozi ebubata bụ ihe na-erughị 20 puku ahịrị koodu. Na ndị mmepe 3 dere ha n'ime naanị ọnwa 10 (agbanyeghị, ọ bara uru iburu n'uche nke ahụ niile atọ onye nrụpụta - ndị mmeri ụwa na mmemme egwuregwu).

Ọzọkwa, kama okpukpu abụọ nke sava, anyị belatara ọnụ ọgụgụ ha site na ọkara - ugbu a onye ọrụ-engine na chat-engine na-ebi na igwe anụ ahụ 500, ebe atụmatụ ọhụrụ ahụ nwere nnukwu isi ụlọ maka ibu. Anyị zọpụtara nnukwu ego na akụrụngwa - ihe dịka $ 5 nde + $ 750 puku kwa afọ na mmefu ọrụ.

Anyị na-agbalịsi ike ịchọta ngwọta kachasị mma maka nsogbu ndị dị mgbagwoju anya na nnukwu nsogbu. Anyị nwere ọtụtụ n'ime ha - ya mere anyị na-achọ ndị mmepe nwere nkà na ngalaba nchekwa data. Ọ bụrụ na ị hụrụ n'anya ma mara otú e si edozi nsogbu ndị dị otú ahụ, nwee ezigbo ihe ọmụma nke algọridim na usoro data, anyị na-akpọ gị òkù ka ị sonyere otu. Kpọtụrụ anyị HRmaka nkọwa.

Ọbụlagodi na akụkọ a abụghị gbasara gị, biko mara na anyị ji ndụmọdụ akpọrọ ihe. Gwa otu enyi ya ohere onye nrụpụta, ma ọ bụrụ na ọ ga-emecha nke ọma oge nke nnwale, ị ga-enweta ego nke 100 puku rubles.

isi: www.habr.com

Tinye a comment