Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe

Basebelisi ba rona ba ngollana melaetsa ntle le ho khathala.
Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe
Ke ntho e ngata haholo. Haeba u ikemiselitse ho bala melaetsa eohle ea basebelisi bohle, ho tla nka lilemo tse fetang likete tse 150. Hafeela u le 'mali ea tsoetseng pele haholo,' me ha u sebelise nako e fetang motsotsoana molaetsa o mong le o mong.

Ka bongata bo joalo ba data, ho bohlokoa hore mohopolo oa ho e boloka le ho o fihlella o hahuoe hantle. Ho seng joalo, ka nako e le 'ngoe e seng e makatsang, ho ka hlaka hore ntho e' ngoe le e 'ngoe e tla tloha e fosahetse.

Ho rona, motsotso ona o fihlile selemo le halofo e fetileng. Hore na re fihlile joang ho sena le se etsahetseng qetellong - re u bolella ka tatellano.

Ka morao

Ts'ebetsong ea pele, melaetsa ea VKontakte e ile ea sebetsa ho motsoako oa PHP backend le MySQL. Ena ke tharollo e tloaelehileng ka ho felletseng bakeng sa webosaete e nyane ea baithuti. Leha ho le joalo, sebaka sena sa marang-rang se ile sa hola ka mokhoa o sa laoleheng mme sa qala ho batla ntlafatso ea meaho ea data bakeng sa eona.

Qetellong ea 2009, ho ile ha ngoloa sebaka sa pele sa enjine ea mongolo, 'me ka 2010 melaetsa e ile ea fetisetsoa ho eona.

Ka har'a enjine ea mongolo, melaetsa e ne e bolokoa lethathamong - mofuta oa "mabokose a poso". Lenane le leng le le leng le joalo le khethoa ke uid - mosebelisi eo e leng mong'a melaetsa ena kaofela. Molaetsa o na le sete ea litšobotsi: sekhetho sa interlocutor, mongolo, lihokelo, joalo-joalo. Sekhetho sa molaetsa ka har'a "lebokose" ke local_id, ha se fetohe 'me se abeloa ka tatellano bakeng sa melaetsa e mecha. "Mabokose" a ikemetse 'me ha a lumellane ka har'a enjene; ​​puisano pakeng tsa bona e etsahala boemong ba PHP. U ka sheba sebopeho sa data le bokhoni ba enjene ea mongolo ho tsoa kahare mona.
Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe
Sena se ne se lekane bakeng sa ngollano pakeng tsa basebelisi ba babeli. Nahana hore na ho ile ha etsahala'ng ka mor'a moo?

Ka May 2011, VKontakte e ile ea qala lipuisano le barupeluoa ba 'maloa-meqoqo e mengata. Ho sebetsa le bona, re hlahisitse lihlopha tse peli tse ncha - lipuisano tsa litho le litho tsa moqoqo. Ea pele e boloka lintlha tse mabapi le lipuisano tsa basebelisi, ea bobeli e boloka data ka basebelisi ka meqoqo. Ntle le manane ka bobona, sena se kenyelletsa, mohlala, mosebelisi ea memelang le nako eo ba kentsoeng moqoqong.

"PHP, ha re romelle molaetsa moqoqong," mosebelisi o re.
"Tloo, {username}," ho bolela PHP.
Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe
Ho na le mefokolo ea morero ona. Kamahanyo e ntse e le boikarabello ba PHP. Lipuisano tse kholo le basebelisi ba romellang melaetsa ka nako e le 'ngoe ke pale e kotsi. Kaha mohlala oa mongolo oa mongolo o itšetlehile ka uid, barupeluoa ba qoqa ba ka fumana molaetsa o tšoanang ka linako tse fapaneng. Motho a ka phela le sena haeba tsoelo-pele e ne e ka ema. Empa hoo ho ke ke ha etsahala.

Qetellong ea 2015, re ile ra qala melaetsa ea sechaba, 'me qalong ea 2016, re ile ra hlahisa API bakeng sa bona. Ka ho fihla ha li-chatbots tse kholo metseng, ho ile ha khonahala ho lebala ka kabo ea mojaro.

Bot e ntle e hlahisa melaetsa e limilione tse 'maloa ka letsatsi - esita le basebelisi ba buang haholo ba ke ke ba ithorisa ka sena. Sena se bolela hore maemo a mang a mongolo-enjine, eo bots e joalo e neng e lula ho eona, e ile ea qala ho utloa bohloko ka ho feletseng.

Lienjineri tsa melaetsa ka 2016 ke liketsahalo tse 100 tsa litho tsa moqoqo le lipuisano tsa litho, le li-text-engines tse 8000. Li ne li tšoaretsoe li-server tse sekete, e 'ngoe le e' ngoe e na le 64 GB ea memori. E le mohato oa pele oa tšohanyetso, re ile ra eketsa mohopolo ka 32 GB e 'ngoe. Re ile ra hakanya esale pele. Ntle le liphetoho tse khōlō, sena se ne se tla lekana hoo e ka bang selemo se seng. U hloka ho fumana hardware kapa ho ntlafatsa li-database ka bobona.

Ka lebaka la sebopeho sa meralo, hoa utloahala ho eketsa lisebelisoa ka bongata. Ke hore, bonyane palo ea likoloi e imena habeli - ho hlakile hore ena ke tsela e theko e boima haholo. Re tla ntlafatsa.

Khopolo e ncha

Taba ea mantlha ea mokhoa o mocha ke moqoqo. Puisano e na le lethathamo la melaetsa e amanang le eona. Mosebelisi o na le lethathamo la lipuisano.

Bonyane bo hlokahalang ke li-database tse peli tse ncha:

  • chat-engine. Mona ke polokelo ea li-vector tsa meqoqo. Puisano ka 'ngoe e na le vector ea melaetsa e amanang le eona. Molaetsa o mong le o mong o na le mongolo le sekhetho sa molaetsa se ikhethileng ka har'a chat - chat_local_id.
  • mosebedisi-enjene. Ena ke polokelo ea li-vector tsa basebelisi - lihokela ho basebelisi. Mosebelisi e mong le e mong o na le vector ea peer_id (li-interlocutors - basebelisi ba bang, meqoqo e mengata kapa sechaba) le vector ea melaetsa. Peer_id ka 'ngoe e na le vector ea melaetsa e amanang le eona. Molaetsa o mong le o mong o na le chat_local_id le ID ea molaetsa e ikhethang bakeng sa mosebelisi eo - user_local_id.

Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe
Lihlopha tse ncha li buisana li sebelisa TCP - sena se tiisa hore taelo ea likopo ha e fetohe. Likopo ka botsona le litiisetso bakeng sa bona li tlalehiloe ho hard drive - kahoo re ka khutlisa boemo ba mokoloko ka nako efe kapa efe ka mor'a ho hloleha kapa ho qala hape enjene. Kaha mochine oa mochine le mochine oa puisano ke li-shards tse likete tse 4 ka 'ngoe, mokoloko oa kopo pakeng tsa lihlopha o tla ajoa ka mokhoa o ts'oanang (empa ha e le hantle ha ho na letho - mme o sebetsa ka potlako haholo).

Ho sebetsa le disk ho databases tsa rona maemong a mangata ho ipapisitse le motsoako oa binary log of changes (binlog), li-snapshots tse tsitsitseng le setšoantšo se sa lekanyetsoang mohopolong. Liphetoho nakong ea letsatsi li ngolloa binlog, 'me setšoantšo sa boemo ba hona joale se etsoa nako le nako. Senepe ke pokello ea libopeho tsa data tse ntlafalitsoeng molemong oa rona. E na le hlooho (metaindex ea setšoantšo) le sete ea metafiles. Hlooho e bolokiloe ka ho sa feleng ho RAM 'me e bontša moo u ka batlang data ho tsoa ho snapshot. Metafile e 'ngoe le e 'ngoe e kenyelletsa lintlha tse ka 'nang tsa hlokahala ha nako e ntse e ea-ka mohlala, e amanang le mosebedisi a le mong. Ha u botsa database u sebelisa sehlooho sa snapshot, metafile e hlokahalang e baloa, ebe liphetoho ho binlog tse etsahetseng ka mor'a hore snapshot e thehoe li hlokomeloa. U ka bala haholoanyane ka melemo ea mokhoa ona mona.

Ka nako e ts'oanang, data ea hard drive ka boeona e fetoha hanngoe feela ka letsatsi - bosiu bosiu Moscow, ha mojaro o le tlase. Ka lebaka la sena (ho tseba hore sebopeho sa disk se lula se le teng letsatsi lohle), re ka khona ho fetola li-vectors ka lihlopha tsa boholo bo tsitsitseng - 'me ka lebaka la sena, fumana mohopolong.

Ho romella molaetsa sekemeng se secha ho shebahala tjena:

  1. PHP backend e ikopanya le mosebelisi-enjine ka kopo ea ho romella molaetsa.
  2. user-engine proxies kopo ea mohlala o lakatsehang oa mochine oa puisano, o khutlelang ho user-engine chat_local_id - sekhetho se ikhethileng sa molaetsa o mocha moqoqong ona. Chat_engine e ntan'o hasa molaetsa ho batho bohle ba moqoqong.
  3. user-engine e fumana chat_local_id ho tsoa ho chat-engine ebe e khutlisetsa user_local_id ho PHP - e leng sekhetho se ikhethileng sa molaetsa bakeng sa mosebelisi enoa. Sesupo sena se sebelisoa, mohlala, ho sebetsa ka melaetsa ka API.

Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe
Empa ntle le ho romella melaetsa, o hloka ho kenya tšebetsong lintho tse 'maloa tsa bohlokoa:

  • Mathathamo ke, mohlala, melaetsa ea morao-rao eo u e bonang ha u bula lethathamo la lipuisano. Melaetsa e sa baloang, melaetsa e nang le li-tag ("Bohlokoa", "Spam", joalo-joalo).
  • Ho hatella melaetsa ka mochine oa puisano
  • Ho boloka melaetsa ka har'a enjine ea mosebelisi
  • Batla (ka lipuisano tsohle le ka har'a e itseng).
  • Nchafatso ea nako ea 'nete (Longpolling).
  • Ho boloka nalane ho kenya tšebetsong caching ho bareki ba mehala.

Mananeoana kaofela ke meaho e fetohang ka potlako. Ho sebetsa le bona re sebelisa Lifate tsa Splay. Khetho ena e hlalosoa ke taba ea hore ka holim'a sefate ka linako tse ling re boloka karolo e feletseng ea melaetsa e tsoang ho setšoantšo - ka mohlala, ka mor'a ho pheta-pheta bosiu, sefate se na le top e le 'ngoe, e nang le melaetsa eohle ea lenane le tlaase. Sefate sa Splay se etsa hore ho be bonolo ho kenya bohareng ba vertex e joalo ntle le ho nahana ka ho leka-lekanya. Ntle le moo, Splay ha e boloke data e sa hlokahaleng, e re bolokang mohopolo.

Melaetsa e kenyelletsa lintlha tse ngata, haholo-holo mongolo, o thusang ho khona ho hatella. Ke habohlokoa hore re ka hlakola molaetsa o le mong ka nepo. E sebedisetswa ho hatella melaetsa Algorithm ea Huffman ka li-heuristics tsa rona - mohlala, rea tseba hore melaetsang mantsoe a fapanyetsana le "non-mantsoe" - libaka, matšoao a puo - hape re hopola tse ling tsa likarolo tse ikhethang tsa ho sebelisa matšoao bakeng sa puo ea Serussia.

Kaha ho na le basebelisi ba fokolang haholo ho feta lipuisano, ho boloka likopo tsa disk tsa phihlello ka mokhoa o sa reroang ka enjineng ea moqoqo, re boloka melaetsa ka har'a mosebelisi.

Patlo ea melaetsa e kengoa tšebetsong e le potso ea diagonal ho tloha ho mosebelisi ho ea maemong ohle a mehala ea puisano e nang le lipuisano tsa mosebelisi enoa. Liphetho li kopantsoe ho mosebelisi-enjine ka boeona.

Che, lintlha tsohle li hlokometsoe, ho setseng feela ke ho fetohela ho sekema se secha - mme ka ho khetheha ntle le hore basebelisi ba se lemohe.

Phalliso ea data

Kahoo, re na le enjine ea mongolo e bolokang melaetsa ka mosebelisi, le litho tse peli tsa meqoqo le litho tsa meqoqo tse bolokang data mabapi le likamore tse ngata tsa meqoqo le basebelisi ba ho tsona. U ka tloha joang ho sena ho ea ho enjine e ncha ea mosebelisi le enjine ea moqoqo?

Lipuisano tsa litho morerong oa khale li ne li sebelisoa haholo bakeng sa ho ntlafatsa. Ka potlako re ile ra fetisetsa data e hlokahalang ho eona ho ea ho litho tsa moqoqo, 'me ha ea ka ea hlola e kenya letsoho mosebetsing oa ho falla.

Lethathamo la litho tsa moqoqo. E kenyelletsa maemo a 100, ha enjine ea puisano e na le likete tse 4. Ho fetisetsa data, o hloka ho e tlisa tumellanong - bakeng sa sena, litho tsa moqoqo li arotsoe ka likopi tse tšoanang tse likete tse 4, ebe ho bala binlog ea litho tsa moqoqo ho ile ha nolofalloa mocheng oa moqoqo.
Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe
Hona joale enjine ea moqoqo e tseba ka meqoqo e mengata ho tsoa ho litho tsa moqoqo, empa ha e e-so tsebe letho ka lipuisano le li-interlocutors tse peli. Lipuisano tse joalo li fumaneha ka har'a enjine ea mongolo mabapi le basebelisi. Mona re nkile "data-on-on": mohlala o mong le o mong oa moqoqo oa puisano o ile oa botsa maemo ohle a enjine ea mongolo hore na ba na le puisano eo e e hlokang.

E ntle haholo - enjine ea puisano e tseba hore na ho na le lipuisano life tse ngata ebile e tseba lipuisano tse teng.
U hloka ho kopanya melaetsa lipuisanong tse ngata tsa meqoqo e le hore u qetelle u e-na le lethathamo la melaetsa moqoqong ka mong. Taba ea pele, enjine ea moqoqo e fumana melaetsa eohle ea mosebelisi ho tsoa moenjineng oa mongolo. Maemong a mang ho na le tse ngata haholo (ho fihla ho limilione tse makholo), empa ka mekhelo e sa tloaelehang moqoqo o lumellana ka botlalo le RAM. Re na le melaetsa e sa laoleheng, e 'ngoe le e' ngoe ka likopi tse 'maloa - ka mor'a moo, kaofela e huleloa maemong a fapaneng a enjine ea mongolo a tsamaellanang le basebelisi. Sepheo ke ho hlophisa melaetsa le ho tlosa likopi tse nkang sebaka se sa hlokahaleng.

Molaetsa o mong le o mong o na le setempe sa nako se nang le nako eo o rometsoeng ka eona le mongolo. Re sebelisa nako ho hlophisa - re beha lisupa melaetsa ea khale ka ho fetesisa ea bankakarolo ba meqoqo e mengata ebe re bapisa li-hashes ho tsoa mongolong oa likopi tse reriloeng, ho ea ho setempe sa nako se ntseng se eketseha. Hoa utloahala hore likopi li tla ba le hashe le setempe sa linako tse tšoanang, empa ka ts'ebetso sena ha se joalo kamehla. Joalo ka ha u hopola, ho hokahanya leano la khale ho entsoe ke PHP - mme maemong a sa tloaelehang, nako ea ho romella molaetsa o tšoanang e ne e fapane har'a basebelisi ba fapaneng. Maemong ana, re ile ra itumella ho fetola setempe sa nako - hangata nakong ea motsotsoana. Bothata ba bobeli ke tatellano e fapaneng ea melaetsa bakeng sa baamoheli ba fapaneng. Maemong a joalo, re lumelletse hore ho etsoe kopi e 'ngoe, e nang le likhetho tse fapaneng tsa ho odara bakeng sa basebelisi ba fapaneng.

Kamora sena, data e mabapi le melaetsa ea multichat e romelloa ho enjine ea mosebelisi. 'Me mona ho tla tšobotsi e sa thabiseng ea melaetsa e tsoang linaheng tse ling. Ts'ebetsong e tloaelehileng, melaetsa e tlang enjeneng e laeloa ka mokhoa o tiileng ka tatellano e nyolohang ka user_local_id. Melaetsa e tsoang enjene ea khale ho ea ho enjene ea mosebelisi e lahlehetsoe ke thepa ena ea bohlokoa. Ka nako e ts'oanang, molemong oa tlhahlobo, o hloka ho khona ho li fihlella kapele, ho batla ho hong ho tsona le ho eketsa tse ncha.

Re sebelisa sebopeho se ikhethileng sa data ho boloka melaetsa e tsoang kantle ho naha.

E emela vector ea boholo Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohebohle ba kae Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe - li fapane ebile li hlophisitsoe ka tatellano e theohang, ka tatellano e khethehileng ea likarolo. Karolong e 'ngoe le e' ngoe e nang le li-indices Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe likarolo li hlophisoa. Ho batla ntho e itseng sebopehong se joalo ho nka nako Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe ho pholletsa Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe lipatlisiso tsa binary. Keketso ea element e fokotsehile Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe.

Kahoo, re fumane mokhoa oa ho fetisetsa data ho tloha lienjineng tsa khale ho ea ho tse ncha. Empa ts'ebetso ena e nka matsatsi a 'maloa - mme ha ho na monyetla oa hore matsatsing ana basebelisi ba rona ba tlohele tloaelo ea ho ngollana. E le hore re se ke ra lahleheloa ke melaetsa nakong ena, re fetohela lenaneong la mosebetsi le sebelisang lihlopha tsa khale le tse ncha.

Lintlha li ngoletsoe litho tsa moqoqo le mosebelisi-enjine (eseng ho mongolo-enjine, joalo ka ts'ebetsong e tloaelehileng ho latela morero oa khale). mosebelisi enjine kopo ea ho chat-engine - 'me mona boitšoaro bo itšetlehile ka hore na puisano ena e se e kopantsoe kapa che. Haeba moqoqo o e-s'o kopane, mochine oa puisano ha o ngole molaetsa ho oona, 'me ts'ebetso ea oona e etsahala feela ka mochine oa mongolo. Haeba moqoqo o se o kopantswe ho enjine ya moqoqo, e busetsa chat_local_id ho mosebedisi-enjene mme e romela molaetsa ho baamohedi bohle. mosebelisi-enjine proxies data tsohle ho mongolo-enjine - e le hore haeba ho hong ho etsahala, re ka lula re khutlela morao, re na le data eohle ea hajoale enjeneng ea khale. text-engine returns user_local_id, eo mosebedisi e e bolokang le ho khutlela ka morao.
Ngola hape database ea molaetsa oa VKontakte ho tloha qalong 'me u pholohe
Ka lebaka leo, ts'ebetso ea phetoho e shebahala tjena: re hokahanya lihlopha tse se nang letho tsa enjine ea mosebelisi le meqoqo ea moqoqo. chat-engine e bala binlog eohle ea chat-members, ebe proxying e qala ho latela morero o hlalositsoeng ka holimo. Re fetisetsa data ea khale mme re fumana lihlopha tse peli tse lumellanang (tsa khale le tse ncha). Seo se setseng ke ho fetola ho bala ho tloha ho mongolo-enjine ho ea ho mosebelisi le ho tima proxying.

Liphetho

Ka lebaka la mokhoa o mocha, litekanyetso tsohle tsa ts'ebetso ea lienjine li ntlafalitsoe mme mathata a ho lumellana ha data a rarollotsoe. Hona joale re ka kenya tšebetsong likarolo tse ncha ka potlako melaetsa ('me re se re qalile ho etsa sena - re ekelitse palo e kholo ea bankakarolo moqoqong, ra kenya tšebetsong patlo ea melaetsa e romelloang, ra tsebisa melaetsa e hatisitsoeng mme ra phahamisa moeli ho palo eohle ea melaetsa ka mosebelisi) .

Liphetoho tsa logic li hlile li kholo haholo. 'Me ke rata ho hlokomela hore sena hase kamehla se bolelang lilemo tsohle tsa tsoelo-pele ke sehlopha se seholo le mela e mengata ea khoutu. chat-engine le user-engine hammoho le lipale tsohle tse eketsehileng tse kang Huffman bakeng sa khatello ea molaetsa, Lifate tsa Splay le sebopeho sa melaetsa e tsoang linaheng tse ling e ka tlase ho mela e likete tse 20 ea khoutu. 'Me li ngotsoe ke baetsi ba 3 ka likhoeli tse 10 feela (leha ho le joalo, ho bohlokoa ho hopola hore tsohle tse tharo moqapi - bahlabani ba lefatše lenaneong la lipapali).

Ho feta moo, ho e-na le ho imena habeli palo ea li-server, re ile ra fokotsa palo ea tsona ka halofo - hona joale mochine oa mosebedisi le mochine oa puisano o phela ka mechine ea 'mele ea 500, ha morero o mocha o na le hlooho e kholo ea mojaro. Re bolokile chelete e ngata ho lisebelisoa - hoo e ka bang $ 5 milione + $ 750 tse likete ka selemo ka litšenyehelo tsa ts'ebetso.

Re ikitlaelletsa ho fumana tharollo e molemohali bakeng sa mathata a rarahaneng ka ho fetisisa le a maholo. Re na le tse ngata tsa tsona - ke ka lebaka leo re batlang bahlahisi ba nang le talenta lefapheng la polokelo ea litaba. Haeba u rata 'me u tseba ho rarolla mathata a joalo, u na le tsebo e ntle ea li-algorithms le libopeho tsa data, re u mema hore u kene sehlopheng. Ikopanye le rona HRbakeng sa lintlha.

Leha pale ena e sa bue ka uena, ka kopo hlokomela hore re ananela likhothaletso. Bolella motsoalle ka likheo tsa mesebetsi, 'me haeba a atleha ho qeta nako ea teko, o tla fumana bonase ea li-ruble tse likete tse 100.

Source: www.habr.com

Eketsa ka tlhaloso