Toe tusi le VKontakte message database mai le sasa ma ola

O matou tagata faʻaoga e tusi savali i le tasi ma le isi e aunoa ma le iloa le vaivai.
Toe tusi le VKontakte message database mai le sasa ma ola
E fai lava si tele. Afai e te alu e faitau uma feʻau a tagata faʻaoga uma, e sili atu i le 150 afe tausaga. Fa'apea o oe o se tagata faitau e sili atu le maualuga ma fa'aalu le sili atu ma le sekone i fe'au ta'itasi.

Faatasi ai ma le tele o faʻamaumauga, e taua tele le faʻaogaina o le faʻaogaina ma le faʻaogaina e fausia lelei. A leai, i se tasi taimi e le o se mea ofoofogia, e mafai ona manino o mea uma o le a le pine ae sese.

Mo i matou, o lenei taimi na oʻo mai i le tausaga ma le afa talu ai. Na faapefea ona matou oʻo mai i lenei mea ma le mea na tupu i le faaiuga - matou te taʻu atu ia te oe i le faasologa.

Faʻamatalaga

I le faʻatinoga muamua, o feʻau VKontakte na galue i luga o le tuʻufaʻatasiga o PHP backend ma MySQL. Ole fofo masani lea mo se upega tafaʻilagi a tamaiti aoga. Ae ui i lea, o lenei 'upega tafaʻilagi na faʻatupulaia ma le le pulea ma amata ona manaʻomia le faʻaleleia atili o faʻamaumauga o faʻamaumauga mo ia lava.

I le faaiuga o le 2009, na tusia ai le uluai text-engine repository, ma i le 2010 na ave ai savali i ai.

I totonu o le text-engine, o feʻau na teuina i lisi - o se ituaiga "pusameli". O ia lisi ta'itasi e fa'atulaga e se uid - le tagata fa'aoga e ona nei fe'au uma. O se fe'au o lo'o i ai se seti o uiga: tagata fa'asinomaga, tusitusiga, mea fa'apipi'i, ma isi. O le fa'amatalaga fe'au i totonu o le "pusa" o le local_id, e le suia lava ma e tu'uina fa'asolosolo mo fe'au fou. O "pusa" e tutoʻatasi ma e le faʻatasia le tasi ma le isi i totonu o le afi; fesoʻotaʻiga i le va o latou e tupu ile PHP. E mafai ona e vaʻavaʻai i le fausaga faʻamaumauga ma gafatia o tusitusiga-engine mai totonu iinei.
Toe tusi le VKontakte message database mai le sasa ma ola
Sa lava lea mo fetusia'iga i le va o tagata e to'alua. Mafaufau o le a le mea na sosoo ai?

I le masina o Me 2011, na faʻaalia ai e le VKontakte talanoaga ma le tele o tagata auai - tele-chat. Ina ia galulue faʻatasi ma i latou, na matou faʻatupuina ni fuifui fou se lua - tagata-talatala ma talatalanoa-tagata. O le mea muamua e teuina faʻamatalaga e uiga i talatalanoaga a tagata faʻaoga, o le lona lua e teuina faʻamatalaga e uiga i tagata faʻaoga e ala i talatalanoaga. I le faaopoopo atu i lisi latou lava, e aofia ai, mo se faʻataʻitaʻiga, le tagata faʻaoga valaʻaulia ma le taimi na latou faʻaopoopoina i le talatalanoaga.

"PHP, seʻi o tatou lafo se feʻau i le talatalanoaga," o le tala lea a le tagata faʻaoga.
“Sau, {username},” o le tala lea a PHP.
Toe tusi le VKontakte message database mai le sasa ma ola
E iai fa'aletonu i lenei polokalame. O le fa'amaopoopoina o le matafaioi lava lea a le PHP. O talatalanoaga tetele ma tagata fa'aoga e lafo i le taimi e tasi ni fe'au ia i latou o se tala mata'utia. Talu ai ona o le fa'ata'ita'iga o le text-engine e fa'alagolago i le uid, e mafai ona maua e le au fai talatalanoaga le fe'au tutusa i taimi eseese. E mafai ona ola se tasi i lenei mea pe afai e tumau pea le alualu i luma. Ae e le tupu lena mea.

I le faaiuga o le 2015, na matou faʻalauiloaina feʻau faʻalapotopotoga, ma i le amataga o le 2016, na matou faʻalauiloaina se API mo i latou. Faatasi ai ma le oʻo mai o chatbots tetele i totonu o nuʻu, na mafai ona faʻagaloina e oʻo lava i le tufatufaina atu o uta.

O se bot lelei e maua ai le tele o miliona feʻau i le aso - e oʻo lava i tagata sili ona tautala e le mafai ona mitamita i lenei mea. O lona uiga o nisi taimi o le text-engine, lea na ola ai ia bots, na amata ona pagatia i le atoatoa.

Savali afi i le 2016 o 100 taimi o talatalanoaga-tagata ma tagata-talatalanoa, ma 8000 tusitusiga-engine. Sa talimalo i luga o le afe o 'auʻaunaga, taʻitasi ma le 64 GB o le manatua. I le avea ai o se faʻalavelave faʻafuaseʻi muamua, na matou faʻateleina le manatua e se isi 32 GB. Sa matou fuafuaina le tala. A aunoa ma ni suiga tetele, o le a lava lea mo le isi tausaga. E te manaʻomia a le o le mauaina o meafaigaluega poʻo le faʻaogaina o faʻamaumauga lava latou.

Ona o le natura o le fausaga, e naʻo le faʻateleina o meafaigaluega i le tele. O lona uiga, e le itiiti ifo i le faaluaina o le numera o taavale - e mautinoa lava, o se auala taugata lenei. O le a matou fa'asilisiliina.

Manatu fou

O le autu autu o le auala fou o le talatalanoaga. O se talatalanoaga e iai le lisi o fe'au e fa'atatau i ai. E iai le lisi o talatalanoaga a le tagata fa'aoga.

Ole la'ititi mana'omia e lua fa'amaumauga fou:

  • chat-engine. Ose faleteuoloa o talatalanoaga vectors. O talanoaga ta'itasi e iai se ve'a o fe'au e fa'atatau i ai. O fe'au ta'itasi o lo'o i ai se tusitusiga ma se fa'amatalaga uiga ese o fe'au i totonu ole talatalanoaga - chat_local_id.
  • masini fa'aoga. O le teuina lea o tagata fa'aoga vectors - feso'ota'iga i tagata fa'aoga. O tagata fa'aoga ta'itasi o lo'o iai se ve'a ole peer_id (tagata fa'afeso'ota'i - isi tagata fa'aoga, tele-talanoaga po'o nu'u) ma se ve'a o fe'au. O peer_id ta'itasi o lo'o iai se ve'a o fe'au e fa'atatau i ai. O fe'au ta'itasi e iai le chat_local_id ma se ID fe'au tulaga ese mo lea fa'aoga - user_local_id.

Toe tusi le VKontakte message database mai le sasa ma ola
O fuifui fou e fesoʻotaʻi ma le tasi ma le isi e faʻaaoga ai le TCP - e mautinoa ai e le suia le faasologa o talosaga. O talosaga latou lava ma faʻamaoniga mo i latou o loʻo faʻamauina i luga o le kesi malo - ina ia mafai ona matou toe faʻafoʻisia le tulaga o le laina i soʻo se taimi pe a maeʻa pe toe amata le afi. Talu ai o le tagata faʻaoga-inisinia ma talatalanoa-engine e 4 afe shards taʻitasi, o le laina talosaga i le va o fuifui o le a tufatufaina tutusa (ae o le mea moni e leai se mea - ma e galue vave).

O le galue ma le tisiki i totonu oa tatou fa'amaumauga i le tele o tulaga e fa'avae i luga o le tu'ufa'atasiga o se fa'amaumauga o suiga (binlog), ata fa'amautu ma se vaega o ata i le manatua. Suiga i le aso e tusia i se binlog, ma o se ata o le tulaga o loʻo i ai nei e faia i lea taimi ma lea taimi. O se fa'ata'ita'iga o se fa'aputuga o fa'amaumauga o fa'amaumauga ua fa'asilisiliina mo a tatou fa'amoemoega. E aofia ai se ulutala (metaindex o le ata) ma se seti o metafiles. O le ulutala e teuina tumau i le RAM ma faʻaalia le mea e suʻe ai faʻamatalaga mai le ata. O metafile ta'itasi e aofia ai fa'amaumauga e ono mana'omia i taimi lata mai—mo se fa'ata'ita'iga, e feso'ota'i ma se tagata e to'atasi. A e su'esu'eina le fa'amaumauga e fa'aaoga ai le ulutala snapshot, e faitau le metafile mana'omia, ona suia lea o le binlog lea na tupu ina ua uma ona fai le ata. E mafai ona e faitau atili e uiga i aoga o lenei auala iinei.

I le taimi lava e tasi, o faʻamatalaga i luga o le kesi malo e suia naʻo le tasi i le aso - i le leva o le po i Moscow, pe a laʻititi le uta. Faʻafetai i lenei mea (i le iloa o le fausaga i luga o le tisiki e tumau i le aso atoa), e mafai ona tatou gafatia e suitulaga vectors ma faʻasologa o se lapoʻa faʻamau - ma ona o lenei mea, maua ai le manatua.

O le lafoina o se fe'au i le polokalame fou e pei o lenei:

  1. O le PHP backend e faʻafesoʻotaʻi le masini faʻaoga ma se talosaga e lafo se feʻau.
  2. fa'aoga-engine sui le talosaga i le fa'ata'ita'iga fa'atalanoaga, lea e toe fo'i i le user-engine chat_local_id - o se fa'ailoa tulaga ese o se fe'au fou i totonu o lenei talatalanoaga. Ona fa'asalalauina lea e le chat_engine le fe'au i tagata uma e mauaina i le talatalanoaga.
  3. e maua e le user-engine le chat_local_id mai le chat-engine ma toe fa'afo'i le user_local_id ile PHP - ose fa'amatalaga tulaga ese mo lenei tagata fa'aoga. Ona fa'aaogaina lea o le fa'amatalaga, mo se fa'ata'ita'iga, e galulue ai ma fe'au e ala i le API.

Toe tusi le VKontakte message database mai le sasa ma ola
Ae i le faaopoopo atu i le auina atu o feʻau, e tatau ona e faʻatinoina ni nai mea taua:

  • Sublists o, mo se faʻataʻitaʻiga, o feʻau sili ona lata mai e te vaʻaia pe a tatalaina le lisi o talanoaga. O fe'au e le'i faitauina, fe'au e iai fa'ailoga ("Taua", "Spam", ma isi).
  • Fa'apipi'i fe'au i totonu ole masini talatalanoaga
  • Fa'asaoina o fe'au i totonu o le masini fa'aoga
  • Su'esu'e (e ala i talanoaga uma ma i totonu o se mea patino).
  • Fa'afouga taimi moni (Longpolling).
  • Fa'asaoina o tala fa'asolopito e fa'atino ai le fa'aogaina i luga o tagata fa'atau feavea'i.

O sublists uma e vave ona suia fausaga. E galulue ma i latou matou te faʻaaogaina La'au fa'asala. O lenei filifiliga o loʻo faʻamatalaina i le mea moni e faapea i le pito i luga o le laʻau matou te teuina i nisi taimi se vaega atoa o feʻau mai se ata - mo se faʻataʻitaʻiga, pe a maeʻa le toe faʻavasegaina o po, o le laau e aofia ai le tasi pito i luga, lea e aofia ai feʻau uma o le sublist. O le Splay tree e faigofie ai ona faʻaofi i totonu o le ogatotonu o sea vertex e aunoa ma le mafaufau i le paleni. E le gata i lea, e le teuina e Splay ni faʻamatalaga le manaʻomia, lea e faʻasaoina ai tatou manatua.

O feʻau e aofia ai le tele o faʻamatalaga, tele o tusitusiga, lea e aoga e mafai ai ona faʻapipiʻi. E taua le mafai ona tatou fa'asa'o sa'o e tusa lava pe tasi le fe'au ta'itasi. Fa'aoga e fa'a'omi ai fe'au Huffman algorithm faʻatasi ai ma a tatou lava faʻataʻitaʻiga - mo se faʻataʻitaʻiga, tatou te iloa o upu feʻau e fesuiaʻi ma "e le o ni upu" - avanoa, faailoga faʻailoga - ma tatou manatua foi nisi o uiga faʻapitoa o le faʻaaogaina o faʻailoga mo le gagana Rusia.

Talu ai e toʻaitiiti tagata faʻaoga nai lo talatalanoaga, e faʻasaoina ai talosaga faʻapipiʻi avanoa i le chat-engine, matou te faʻaogaina savali i totonu o le masini faʻaoga.

O su'esu'ega fe'au o lo'o fa'atinoina e pei o se fa'afesili fa'ata'oto mai le tagata fa'aoga-mesinia i fa'ata'ita'iga uma o talatalanoaga e iai talatalanoaga a lenei tagata fa'aoga. O taunuʻuga e tuʻufaʻatasia i totonu o le tagata faʻaoga-inisinia lava ia.

Ia, o faʻamatalaga uma ua uma ona amanaia, pau lava le mea o loʻo totoe o le fesuiaʻi lea i se polokalame fou - ma sili atu e aunoa ma le matauina e tagata faʻaoga.

Fa'amatalaga femalagaiga

O lea la, o loʻo i ai a matou tusitusiga-engine e teu ai feʻau e le tagata faʻaoga, ma lua fuifui talatalanoaga-tagata ma tagata-talatala e teuina faʻamatalaga e uiga i potu tele-talanoaga ma tagata faʻaoga i totonu. E faʻafefea ona alu ese mai lenei mea i le tagata faʻaoga-engine ma talatalanoa-engine?

O talanoaga a le au paia i le polokalame tuai sa fa'aaoga muamua mo le fa'asilisiliina. Na matou vave faʻafeiloaʻi faʻamatalaga talafeagai mai ai i tagata talatalanoaga, ona le toe auai lea i le faagasologa o femalagaiga.

Tuli mo tagata talatalanoaga. E aofia ai le 100 taimi, ae o le chat-engine e 4 afe. Ina ia faʻafeiloaʻi faʻamatalaga, e tatau ona e faʻafeiloaʻi - mo lenei mea, na vaevaeina tagata talatalanoa i le 4 afe kopi tutusa, ona mafai ai lea ona faitau le binlog chat-members i le chat-engine.
Toe tusi le VKontakte message database mai le sasa ma ola
O lea ua iloa e le chat-engine e uiga i le tele-chat mai tagata talatalanoa, ae e leʻi iloa se mea e uiga i talanoaga ma ni tagata se toʻalua. O ia talanoaga o loʻo maua i totonu o le text-engine e faʻatatau i tagata faʻaoga. O iinei na matou ave ai faʻamatalaga "ulu i luga": o faʻataʻitaʻiga talatalanoaga taʻitasi na fesiligia uma faʻataʻitaʻiga o tusitusiga-engine pe o iai le latou talanoaga e manaʻomia.

Tele - e iloa e le masini talatalanoaga le tele o talatalanoaga o lo'o i ai ma iloa po'o a talanoaga o lo'o i ai.
E te manaʻomia le tuʻufaʻatasia o feʻau i le tele-chat chats ina ia e faʻaiʻu i se lisi o feʻau i talatalanoaga taʻitasi. Muamua, e toe maua mai e le chat-engine mai le text-engine feʻau uma a tagata faʻaoga mai lenei talatalanoaga. I nisi tulaga e tele naua (e oo atu i le fiaselau miliona), ae faʻatasi ai ma ni tuusaunoaga e seasea maua, o le talatalanoaga e fetaui ma le RAM. E iai a matou fe'au e le'i fa'atonuina, ta'itasi i le tele o kopi - a uma mea uma, e toso uma mai fa'asologa o tusitusiga-enisinia e fetaui ma tagata fa'aoga. O le sini o le fa'avasegaina o fe'au ma fa'ate'a kopi o lo'o fa'aogaina avanoa e le mana'omia.

O fe'au ta'itasi e iai se fa'ailoga taimi o lo'o iai le taimi na lafo ai ma tusitusiga. Matou te faʻaogaina le taimi mo le faʻavasegaina - matou te tuʻuina atu faʻamatalaga i feʻau sili ona leva a tagata auai multichat ma faʻatusatusa faʻailoga mai tusitusiga o kopi faʻamoemoeina, agai i le faʻateleina o le timestamp. E fetaui lelei o kopi o le a tutusa le hash ma le timestamp, ae o le faʻatinoga e le o taimi uma e tupu ai. E pei ona e manatua, o le tuʻufaʻatasia i le polokalame tuai na faʻatinoina e le PHP - ma i se mea e seasea tupu, o le taimi o le lafoina o le feʻau tutusa e ese mai i tagata eseese. I nei tulaga, na matou fa'atagaina i matou lava e fa'asa'o le timestamp - e masani lava i totonu o le sekone. O le fa'afitauli lona lua o le 'ese'ese o fa'asologa o fe'au mo 'ese'ese e taliaina. I ia tulaga, na matou fa'atagaina se kopi fa'aopoopo e fai, ma fa'asologa eseese o filifiliga mo tagata fa'aoga eseese.

A maeʻa lenei mea, o faʻamatalaga e uiga i feʻau i le telechat e lafoina i le masini faʻaoga. Ma o iinei e sau ai se uiga le lelei o feʻau faʻaulufale mai. I le fa'agaioiga masani, o fe'au e o'o mai i le afi o lo'o fa'atonuina fa'aa'e i luga e le user_local_id. O fe'au na fa'aulufale mai mai le afi tuai i totonu o le masini fa'aoga na leiloa lenei mea aoga. I le taimi lava e tasi, mo le faʻaogaina o suʻega, e tatau ona e vave faʻafeiloaʻi i latou, suʻe se mea i totonu ma faʻaopopo mea fou.

Matou te fa'aogaina se fa'amaumauga fa'apitoa e teu ai fe'au fa'aulufale mai.

O lo'o fa'atusalia ai se ve'a tele Toe tusi le VKontakte message database mai le sasa ma olao fea o iai tagata uma Toe tusi le VKontakte message database mai le sasa ma ola - e 'ese'ese ma fa'atonu i lalo ifo, fa'atasi ai ma se fa'atonuga fa'apitoa o elemene. I vaega ta'itasi ma fa'ailoga Toe tusi le VKontakte message database mai le sasa ma ola ua faavasega elemene. O le su'eina o se elemene i sea fausaga e umi se taimi Toe tusi le VKontakte message database mai le sasa ma ola e ala i Toe tusi le VKontakte message database mai le sasa ma ola su'esu'ega binary. O le fa'aopoopoina o se elemene e fa'amāmā Toe tusi le VKontakte message database mai le sasa ma ola.

O lea, na matou mafaufauina pe faʻafefea ona faʻafeiloaʻi faʻamatalaga mai masini tuai i mea fou. Ae o lenei faagasologa e tele aso - ma e foliga mai o nei aso o le a lafoaia ai e tatou tagata faaaoga le masani o le tusitusi o le tasi i le isi. Ina ia aua ne'i leiloa fe'au i le taimi lea, matou te sui i se polokalame galuega e fa'aoga uma ai fuifui tuai ma fou.

O faʻamatalaga e tusia i tagata talatalanoaga ma tagata faʻaoga-engine (ae le o le text-engine, e pei o le masani masani e tusa ai ma le polokalame tuai). fa'aoga-engine sui le talosaga e talatalanoa-engine - ma o iinei o le amio e faalagolago i luga o lenei talanoaga ua uma ona tuufaatasia pe leai. Afai e leʻi tuʻufaʻatasia le talatalanoaga, e le tusia e le chat-engine le feʻau ia te ia lava, ma o lona gaioiga e tupu naʻo le text-engine. Afai o le talanoaga ua uma ona tuʻufaʻatasia i le chat-engine, e toe faʻafoʻi le chat_local_id i le user-engine ma auina atu le feʻau i tagata uma e mauaina. e fa'aogaina e le tagata-engine fa'amatalaga uma i le text-engine - ina ia afai e tupu se mea, e mafai lava ona tatou toe fo'i i tua, ma maua uma fa'amaumauga o lo'o iai i le afi tuai. text-engine toe fa'afo'i le user_local_id, lea e teu ai e le masini ma toe fo'i i tua.
Toe tusi le VKontakte message database mai le sasa ma ola
O le i'uga, o le fa'agasologa o suiga e pei o lenei: matou te fa'afeso'ota'i gaogao tagata fa'aoga-engine ma talatalanoa-engine fuifui. chat-engine e faitau uma le binlog chat-members, ona amata lea o le sui e tusa ai ma le polokalame o loʻo faʻamatalaina i luga. Matou te tuʻuina atu faʻamaumauga tuai ma maua ni fuifui faʻatasi se lua (tuai ma fou). Pau lava le mea o loʻo totoe o le fesuiaʻiina lea o le faitau mai le text-engine i le user-engine ma faʻamalo le sui.

Iʻuga

Faʻafetai i le auala fou, ua faʻaleleia uma fua faʻatinoga o afi ma faʻafitauli i faʻamaumauga faʻamaumauga ua foia. I le taimi nei, e mafai ona vave faʻatinoina foliga fou i feʻau (ma ua amata ona fai lenei mea - matou faʻateleina le aofaʻi o tagata auai talatalanoaga, faʻatino se sailiga mo feʻau tuʻuina atu, faʻalauiloa feʻau faʻapipiʻi ma siitia le tapulaʻa o le aofaʻi o feʻau i le tagata faʻaoga) .

O suiga i le mafaufau e matua tetele lava. Ma ou te fia maitauina e le o taimi uma o lona uiga o tausaga atoa o le atinaʻeina e se 'au tele ma le faitau afe o laina code. chat-engine ma le user-engine faʻatasi ai ma tala faʻaopoopo uma e pei o Huffman mo le faʻapipiʻiina o feʻau, Splay laau ma fausaga mo feʻau faʻaulufale mai e itiiti ifo i le 20 afe laina o le code. Ma na tusia e le au atinaʻe 3 i na o le 10 masina (peitaʻi, e taua le manatuaina o lena mea. uma tolu atinae - siamupini o le lalolagi i polokalame tau taaloga).

E le gata i lea, nai lo le faʻaluaina o le numera o 'auʻaunaga, matou te faʻaititia le latou numera i le afa - o le taimi nei o le tagata faʻaoga-engine ma talatalanoa-engine ola i luga o le 500 masini faʻapitoa, ae o le polokalame fou o loʻo i ai se potu ulu tele mo uta. Na matou faʻasaoina le tele o tupe i meafaigaluega - e tusa ma le $ 5 miliona + $ 750 afe i le tausaga i tupe faʻaalu.

Matou te taumafai e suʻe fofo sili mo faʻafitauli sili ona lavelave ma tetele. E tele a matou mea - ma o le mafuaʻaga lea matou te suʻeina ai tagata atamamai talenia i le matagaluega o faʻamaumauga. Afai e te alofa ma iloa pe faʻafefea ona foia ia faʻafitauli, maua se malamalama sili i algorithms ma faʻamaumauga faʻamaumauga, matou te valaʻauina oe e te auai i le 'au. Fa'afeso'ota'i la matou HRmo fa'amatalaga.

Tusa lava pe le o lenei tala e uiga ia te oe, faamolemole ia matau matou te faatauaina fautuaga. Ta'u atu i se uo avanoa e fausia ai, ma afai na te faʻamaeʻaina lelei le vaitaimi faataitai, o le ae mauaina se ponesi o le 100 afe rubles.

puna: www.habr.com

Faaopoopo i ai se faamatalaga