Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona

Mifanoratra hafatra tsy reraka ny mpampiasa anay.
Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona
Tena betsaka izany. Raha mamaky ny hafatra rehetra an'ny mpampiasa rehetra ianao, dia haharitra 150 arivo taona mahery izany. Raha toa ka mpamaky efa mandroso ianao ary tsy mandany segondra iray isaky ny hafatra.

Miaraka amin'ny habetsahan'ny angon-drakitra toy izany, dia zava-dehibe ny fametrahana tsara ny lojika amin'ny fitehirizana sy ny fidirana azy. Raha tsy izany, ao anatin'ny fotoana iray tsy dia mahagaga, dia mety ho hita mazava fa tsy ho ela ny zava-drehetra.

Ho antsika dia tonga herintaona sy tapany lasa izay io fotoana io. Ahoana no nahatongavanay tamin'izany ary inona no nitranga tamin'ny farany - dia lazainay aminao araka ny filaharany.

nitranga ny tantara

Tamin'ny fampiharana voalohany indrindra, ny hafatra VKontakte dia niasa tamin'ny fitambaran'ny PHP backend sy MySQL. Vahaolana ara-dalΓ na tanteraka ho an'ny tranokalan'ny mpianatra kely izany. Na izany aza, nitombo tsy voafehy ity tranokala ity ary nanomboka nitaky ny fanatsarana ny rafitra angona ho an'ny tenany.

Tamin'ny faran'ny taona 2009 dia nosoratana ny tahirin-tsarimihetsika voalohany, ary tamin'ny 2010 dia nafindra tany aminy ny hafatra.

Ao amin'ny motera lahatsoratra, ny hafatra dia voatahiry ao anaty lisitra - karazana "boxes". Ny lisitra tsirairay toy izany dia faritana amin'ny uid - ny mpampiasa izay manana ireo hafatra rehetra ireo. Ny hafatra dia manana karazana toetra: mpamantatra mpiresaka, lahatsoratra, attachments, sns. Ny famantarana hafatra ao anatin'ny β€œboaty” dia local_id, tsy miova mihitsy izy io ary apetraka misesy ho an'ny hafatra vaovao. Ny "boaty" dia mahaleo tena ary tsy mifanandrify ao anaty motera; Ny fifandraisana eo amin'izy ireo dia mitranga amin'ny ambaratonga PHP. Azonao atao ny mijery ny firafitry ny angon-drakitra sy ny fahaizan'ny motera lahatsoratra avy ao anatiny eto.
Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona
Ampy ho an'ny fifampiresahana eo amin'ny mpampiasa roa izany. Inona no nitranga taorian'izay?

Tamin'ny Mey 2011, VKontakte dia nampiditra resaka tamin'ny mpandray anjara maromaroβ€”fizarana chat. Mba hiara-hiasa amin'izy ireo dia nanangana vondrona roa vaovao izahay - mpikambana-chat sy chat-mpikambana. Ny voalohany dia mitahiry angona momba ny chat ataon'ny mpampiasa, ny faharoa mitahiry angona momba ny mpampiasa amin'ny chat. Ho fanampin'ny lisitry ny tenany, tafiditra ao, ohatra, ny mpampiasa manasa sy ny fotoana nampidirina tao amin'ny chat.

"PHP, andao handefa hafatra amin'ny chat," hoy ny mpampiasa.
"Andao, {username}," hoy ny PHP.
Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona
Misy ny fatiantoka amin'ity tetika ity. Mbola andraikitry ny PHP ny fampifanarahana. Tantara mampidi-doza ny chat lehibe sy ny mpampiasa izay mandefa hafatra amin'izy ireo. Satria miankina amin'ny uid ny ohatra amin'ny maotera lahatsoratra, ny mpandray anjara amin'ny chat dia afaka mahazo hafatra mitovy amin'ny fotoana samy hafa. Afaka miaina izany ny olona iray raha mijanona ny fandrosoana. Tsy hitranga anefa izany.

Tamin'ny faran'ny taona 2015, nandefa hafatra ho an'ny vondrom-piarahamonina izahay, ary tamin'ny fiandohan'ny taona 2016, nanangana API ho azy ireo izahay. Miaraka amin'ny fahatongavan'ireo chatbots lehibe ao amin'ny vondrom-piarahamonina, azo atao ny manadino ny fizarana entana.

Ny bot tsara dia mamoaka hafatra an-tapitrisany isan'andro - na dia ny mpampiasa be resaka be aza dia tsy afaka mirehareha amin'izany. Midika izany fa nanomboka nijaly tanteraka ny motera lahatsoratra sasany, izay niainan'ny bots toy izany.

Ny maotera hafatra amin'ny taona 2016 dia tranga 100 amin'ny mpikambana amin'ny chat sy chats mpikambana, ary motera lahatsoratra 8000. Izy ireo dia nampiantrano amin'ny lohamilina arivo, samy manana fahatsiarovana 64 GB. Ho fepetra vonjy maika voalohany dia nampitomboinay tamin'ny 32 GB hafa ny fahatsiarovana. Nanombana ny vinavina izahay. Raha tsy misy fiovana mahery vaika, dia ho ampy ho an'ny taona hafa izany. Mila mahazo fitaovana ianao na manatsara ny angon-drakitra manokana.

Noho ny toetran'ny maritrano dia misy dikany fotsiny ny mampitombo ny fitaovana amin'ny multiples. Izany hoe, fara fahakeliny, avo roa heny ny isan'ny fiara - mazava ho azy, izany dia somary lafo lalana. Hanao optimize isika.

Hevitra vaovao

Ny tena fototry ny fomba fiasa vaovao dia ny chat. Ny chat dia manana lisitry ny hafatra mifandraika amin'izany. Ny mpampiasa dia manana lisitry ny chat.

Ny ambany indrindra takiana dia angon-drakitra roa vaovao:

  • chat-motera. Ity dia fitehirizana ny vectors amin'ny chat. Ny chat tsirairay dia manana vector ny hafatra mifandraika amin'izany. Ny hafatra tsirairay dia manana lahatsoratra sy famantarana hafatra tokana ao anatin'ny chat - chat_local_id.
  • motera mpampiasa. Ity dia fitahirizana ny vectors mpampiasa - rohy mankany amin'ny mpampiasa. Ny mpampiasa tsirairay dia manana veterin'ny peer_id (mpiara-miresaka - mpampiasa hafa, resaka maro na vondrom-piarahamonina) ary veteran'ny hafatra. Ny peer_id tsirairay dia manana vector amin'ny hafatra mifandraika amin'izany. Ny hafatra tsirairay dia manana chat_local_id ary ID hafatra tokana ho an'io mpampiasa io - user_local_id.

Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona
Ny kluster vaovao dia mifampiresaka amin'ny fampiasana TCP - izany dia miantoka fa tsy miova ny filaharan'ny fangatahana. Ny fangatahana sy ny fanamafisana ho azy ireo dia voarakitra ao amin'ny kapila mafy - mba hahafahantsika mamerina ny toetry ny filaharana amin'ny fotoana rehetra aorian'ny tsy fahombiazana na ny famerenana ny motera. Koa satria ny motera mpampiasa sy ny chat-engine dia 4 arivo isan'isa, ny filaharana fangatahana eo anelanelan'ny cluster dia hozaraina mitovy (fa raha ny marina dia tsy misy mihitsy - ary miasa haingana be).

Ny fiasana amin'ny kapila ao amin'ny angon-drakitray amin'ny ankamaroan'ny toe-javatra dia mifototra amin'ny fitambaran'ny lozisialy mimari-droa misy ny fiovana (binlog), sary static ary sary ampahany amin'ny fitadidiana. Ny fiovana mandritra ny andro dia soratana amin'ny binlog, ary ny sarin'ny fanjakana ankehitriny dia noforonina tsindraindray. Ny snapshot dia fitambarana rafitra angon-drakitra namboarina ho an'ny tanjonay. Izy io dia misy lohapejy (metaindex ny sary) ary andiana metafiles. Ny lohapejy dia voatahiry maharitra ao amin'ny RAM ary manondro ny toerana hitadiavana angona avy amin'ny sary. Ny metafile tsirairay dia misy angon-drakitra izay mety ilaina amin'ny fotoana akaiky, ohatra, mifandraika amin'ny mpampiasa tokana. Rehefa manontany ny angon-drakitra ianao amin'ny alΓ lan'ny lohatenin'ny snapshot, dia vakiana ny metafile ilaina, ary avy eo dia raisina ny fanovana ao amin'ny binlog izay nitranga taorian'ny namoronana ny snapshot. Afaka mamaky bebe kokoa momba ny tombontsoa amin'ity fomba ity ianao eto.

Mandritra izany fotoana izany, ny angon-drakitra momba ny kapila mafy dia miova indray mandeha isan'andro - amin'ny alina ao Moskoa, raha kely indrindra ny entana. Noho izany (fahafantarana fa ny rafitra ao amin'ny kapila dia tsy miova mandritra ny andro), dia afaka manolo ny vectors amin'ny arrays amin'ny habeny raikitra - ary noho izany dia mahazo ny fahatsiarovana.

Toy izao ny fandefasana hafatra amin'ny rafitra vaovao:

  1. Ny backend PHP dia mifandray amin'ny motera mpampiasa miaraka amin'ny fangatahana handefa hafatra.
  2. ny motera mpampiasa dia mandefa ny fangatahana amin'ny ohatra motera chat tiana, izay miverina amin'ny chat_local_id motera mpampiasa - famantarana tokana amin'ny hafatra vaovao ao anatin'ity chat ity. Ny chat_engine dia mandefa ny hafatra amin'ny mpandray rehetra ao amin'ny chat.
  3. User-engine dia mandray chat_local_id avy amin'ny chat-engine ary mamerina ny user_local_id amin'ny PHP - famantarana hafatra tokana ho an'ity mpampiasa ity. Ity famantarana ity dia ampiasaina, ohatra, mba hiasa amin'ny hafatra amin'ny alΓ lan'ny API.

Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona
Saingy ankoatry ny tena fandefasana hafatra dia mila mampihatra zavatra manan-danja vitsivitsy ianao:

  • Ny sublists dia, ohatra, ny hafatra farany hitanao rehefa manokatra ny lisitry ny resaka. Hafatra tsy novakiana, hafatra misy marika (β€œImportant”, β€œSpam”, sns.).
  • Fampidirana hafatra amin'ny chat-engine
  • Caching hafatra amin'ny mpampiasa-motera
  • Fikarohana (amin'ny fifanakalozan-kevitra rehetra ary ao anatin'ny iray manokana).
  • Fanavaozana tena fotoana (Longpolling).
  • Mitahiry tantara mba hampiharana caching amin'ny mpanjifa finday.

Ny sublist rehetra dia rafitra miova haingana. Ny miasa miaraka amin'izy ireo dia ampiasainay Splay hazo. Ity safidy ity dia hazavaina amin'ny hoe eo an-tampon'ny hazo dia mitahiry ampahany iray manontolo amin'ny hafatra avy amin'ny sary iray isika indraindray - ohatra, aorian'ny fanondroana indray alina, ny hazo dia misy tampony iray, izay misy ny hafatra rehetra ao amin'ny sublist. Ny hazo Splay dia manamora ny fampidirana eo afovoan'ny vertex toy izany nefa tsy mila mieritreritra momba ny fifandanjana. Ankoatra izany, Splay dia tsy mitahiry angona tsy ilaina, izay mamonjy antsika fahatsiarovana.

Ny hafatra dia misy fampahalalana be dia be, ny ankamaroan'ny lahatsoratra, izay ilaina mba ahafahana manindry. Zava-dehibe ny ahafahantsika manala tsara na dia ny hafatra tsirairay aza. Ampiasaina hanindry hafatra Algorithm Huffman miaraka amin'ny heuristics manokana - ohatra, fantatsika fa amin'ny hafatra dia mifandimby ny teny hoe "tsy teny" - habakabaka, mari-piatoana - ary tadidinay koa ny sasany amin'ireo mampiavaka ny fampiasana marika amin'ny teny Rosiana.

Koa satria vitsy kokoa ny mpampiasa noho ny chat, mba hitahiry ny fangatahana kapila fidirana kisendrasendra ao amin'ny motera chat, dia mitahiry hafatra ao amin'ny motera mpampiasa izahay.

Ny fikarohana hafatra dia ampiharina ho toy ny fangatahana diagonal avy amin'ny motera mpampiasa mankany amin'ny motera chat rehetra izay misy chat an'ity mpampiasa ity. Ny vokatra dia mitambatra ao amin'ny motera mpampiasa mihitsy.

Eny ary, ny antsipiriany rehetra dia noraisina, ny hany sisa tavela dia ny mifindra amin'ny drafitra vaovao - ary tsara kokoa raha tsy misy mpampiasa mahatsikaritra izany.

Data fifindra-monina

Noho izany, manana motera lahatsoratra izahay izay mitahiry hafatra avy amin'ny mpampiasa, ary vondrona roa amin'ny chat-member sy mpikambana-chat izay mitahiry angona momba ny efitranon'ny chat maro sy ny mpampiasa ao aminy. Ahoana ny fomba hialana amin'izany mankany amin'ny motera mpampiasa sy ny chat-engine vaovao?

Ny resadresaka ho an'ny mpikambana ao amin'ny rafitra taloha dia nampiasaina voalohany indrindra ho an'ny fanatsarana. Nafindranay haingana ny angona ilaina avy ao amin'ny chat-membres, ary avy eo dia tsy nandray anjara intsony tamin'ny fizotry ny fifindra-monina.

Filaharana ho an'ny mpikambana amin'ny chat. Ahitana tranga 100 izany, raha 4 arivo kosa ny motera chat. Mba hamindra ny angon-drakitra, dia mila mitondra azy ho amin'ny fanarahan-dalΓ na - noho izany, ny chat-mpikambana dia nizara ho mitovy 4 arivo kopia, ary avy eo ny famakiana ny chat-members binlog dia navela tao amin'ny chat-engine.
Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona
Ankehitriny ny chat-engine dia mahafantatra momba ny chat maro avy amin'ny mpikambana ao amin'ny chat, saingy tsy mbola mahalala na inona na inona momba ny fifanakalozan-kevitra amin'ny mpifanolo-bodirindrina roa. Ny fifanakalozan-kevitra toy izany dia hita ao amin'ny motera lahatsoratra miaraka amin'ireo mpampiasa. Eto izahay dia naka ny angon-drakitra "head-on": ny ohatry ny chat-engine tsirairay dia nanontany ny tranga rehetra amin'ny milina fanoratana raha nanana ny fifanakalozan-kevitra ilainy izy ireo.

Great - chat-engine dia mahafantatra izay misy amin'ny chat marobe ary mahafantatra izay misy ny fifanakalozan-kevitra.
Mila manambatra hafatra amin'ny chat maro-kabary ianao mba hiafaranao amin'ny lisitry ny hafatra isaky ny chat. Voalohany, ny chat-engine dia maka avy amin'ny text-engine ny hafatra rehetra mpampiasa avy amin'ity chat ity. Amin'ny toe-javatra sasany dia misy be dia be amin'izy ireo (hatramin'ny an-jatony tapitrisa), fa miaraka amin'ny tranga tsy fahita firy dia mifanaraka tanteraka amin'ny RAM ny chat. Manana hafatra tsy voalamina izahay, tsirairay avy amin'ny dika mitovy - na izany aza, izy rehetra dia nosintonina avy amin'ny toe-javatra misy maotera lahatsoratra mifanandrify amin'ny mpampiasa. Ny tanjona dia ny handamina ny hafatra sy ny fanesorana ireo dika mitovy izay maka toerana tsy ilaina.

Ny hafatra tsirairay dia manana mari-pamantarana misy ny fotoana nandefasana azy sy ny lahatsoratra. Mampiasa fotoana izahay amin'ny fanasokajiana - mametraka tondro mankany amin'ireo hafatra tranainy indrindra amin'ny mpandray anjara amin'ny chat izahay ary mampitaha ny hash avy amin'ny lahatsoratry ny dika mitovy, mandroso mankany amin'ny fampitomboana ny mari-potoana. Lojika ny hoe hanana tenifototra sy fe-potoana mitovy ny kopia, saingy amin'ny fampiharana dia tsy izany foana no izy. Araka ny tsaroanao, ny fampifanarahana amin'ny drafitra taloha dia nataon'ny PHP - ary amin'ny tranga tsy fahita firy, ny fotoana fandefasana hafatra mitovy dia tsy mitovy amin'ny mpampiasa samihafa. Amin'ireo toe-javatra ireo dia navelanay hanitsy ny mari-pamantarana - matetika ao anatin'ny segondra iray. Ny olana faharoa dia ny filaharan'ny hafatra ho an'ny mpandray samihafa. Amin'ny toe-javatra toy izany, navelanay hamorona kopia fanampiny, miaraka amin'ny safidy famandrihana samihafa ho an'ny mpampiasa samihafa.

Aorian'izany dia alefa any amin'ny motera mpampiasa ny angon-drakitra momba ny hafatra ao amin'ny multichat. Ary tonga ny endri-javatra tsy mahafinaritra amin'ny hafatra nafarana. Amin'ny fampandehanana ara-dalΓ na, ny hafatra tonga ao amin'ny motera dia fehezin'ny user_local_id hentitra araka ny filaharana miakatra. Ireo hafatra nafarana avy amin'ny maotera taloha ho ao amin'ny motera mpampiasa dia very ity fananana mahasoa ity. Amin'izay fotoana izay ihany koa, ho an'ny fanamorana ny fitsapana dia mila miditra haingana amin'izy ireo ianao, mitady zavatra ao anatiny ary manampy vaovao.

Mampiasa rafitra angon-drakitra manokana izahay hitahirizana hafatra nafarana.

Izy io dia maneho vector ny habeny Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velonaaiza daholo Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona - dia samy hafa ary milahatra amin'ny filaharana midina, misy filaharana manokana amin'ny singa. Ao amin'ny fizarana tsirairay misy indices Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona alahatra ny singa. Mitaky fotoana ny fitadiavana singa amin'ny rafitra toy izany Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona ny alalan ' Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona fikarohana binary. Ny fanampin'ny singa iray dia ahena Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona.

Noho izany, nieritreritra ny fomba hamindrana angona avy amin'ny maotera taloha mankany amin'ny vaovao izahay. Saingy mila andro maromaro izany dingana izany - ary tsy azo inoana fa mandritra ireo andro ireo dia hiala amin'ny fahazarana mifanoratra ny mpampiasa anay. Mba tsy hahavery hafatra mandritra io fotoana io, dia mifindra amin'ny rafitra miasa izay mampiasa cluster taloha sy vaovao izahay.

Ny angon-drakitra dia nosoratana ho an'ny mpikambana amin'ny chat sy ny motera mpampiasa (fa tsy amin'ny motera lahatsoratra, toy ny amin'ny asa mahazatra araka ny drafitra taloha). mpampiasa-motera proxy ny fangatahana chat-engine - ary eto ny fitondran-tena dia miankina amin'ny hoe efa natambatra ity chat ity na tsia. Raha toa ka tsy mbola natambatra ny chat, ny chat-engine dia tsy manoratra ny hafatra ho azy, ary ny fanodinana azy dia tsy misy afa-tsy amin'ny motera lahatsoratra. Raha toa ka efa natambatra ho motera chat ny chat, dia mamerina ny chat_local_id amin'ny motera mpampiasa ary mandefa ny hafatra amin'ny mpandray rehetra. mpampiasa-motera proxy ny angona rehetra amin'ny lahatsoratra-motera - ka raha misy zavatra mitranga, dia afaka mihemotra foana, manana ny angona ankehitriny rehetra ao amin'ny motera taloha. text-engine dia mamerina ny user_local_id, izay mitahiry ny motera mpampiasa ary miverina any amin'ny backend.
Avereno soratana ny angon-drakitra hafatra VKontakte hatramin'ny voalohany ary ho velona
Vokatr'izany dia toy izao ny fizotran'ny tetezamita: mampifandray ireo motera mpampiasa sy motera chat tsy misy na inona na inona izahay. Ny chat-engine dia mamaky ny binlog rehetra mpikambana ao amin'ny chat, avy eo dia manomboka ny proxy araka ny drafitra voalaza etsy ambony. Mamindra ny angon-drakitra taloha izahay ary mahazo cluster roa mifanandrify (antitra sy vaovao). Ny hany sisa tavela dia ny mamadika ny famakiana avy amin'ny motera lahatsoratra mankany amin'ny motera mpampiasa ary manafoana ny proxy.

vokatra

Noho ny fomba fiasa vaovao, dia nohatsaraina avokoa ny metrika fampisehoana an'ny motera ary voavaha ny olana momba ny tsy fitovian'ny angona. Ankehitriny dia afaka mampihatra haingana ireo endri-javatra vaovao amin'ny hafatra izahay (ary efa nanomboka nanao izany - nampitombo ny isan'ny mpandray anjara amin'ny chat izahay, nanatanteraka fikarohana ireo hafatra nalefa, nandefa hafatra voafantina ary nampiakatra ny fetran'ny isan'ny hafatra isaky ny mpampiasa) .

Tena goavana tokoa ny fiovan'ny lojika. Ary tiako ny manamarika fa izany dia tsy midika hoe taona iray manontolo amin'ny fampandrosoana ataon'ny ekipa goavana sy andalana code an'arivony maro. chat-engine sy ny motera mpampiasa miaraka amin'ireo tantara fanampiny rehetra toa an'i Huffman ho an'ny famatrarana hafatra, hazo Splay ary rafitra ho an'ny hafatra nafarana dia latsaky ny 20 arivo andalana code. Ary mpamorona 3 no nanoratra azy ireo tao anatin'ny 10 volana monja (na izany aza, tokony hotadidina fa ny rehetra telo developer - tompondaka eran-tany amin'ny fandaharana ara-panatanjahantena).

Ankoatr'izay, raha tokony hampitombo avo roa heny ny isan'ny mpizara, dia nahena antsasany ny isan'izy ireo - ankehitriny ny motera mpampiasa sy ny motera chat dia miaina amin'ny milina ara-batana 500, raha toa kosa ny rafitra vaovao dia manana efitrano lehibe ho an'ny entana. Nanangona vola be tamin'ny fitaovana izahay - eo amin'ny 5 tapitrisa dolara + 750 arivo dolara isan-taona amin'ny fandaniana amin'ny asa.

Miezaka mitady vahaolana tsara indrindra ho an'ny olana sarotra sy lehibe indrindra izahay. Manana maro amin'izy ireo izahay - ary izany no antony itadiavanay ireo mpamorona manan-talenta ao amin'ny departemanta angona. Raha tia sy mahay mamaha olana toy izany ianao, manana fahalalana tsara momba ny algorithm sy ny firafitry ny data, dia manasa anao izahay hanatevin-daharana ny ekipa. Mifandraisa aminay HRho an'ny antsipiriany.

Na dia tsy momba anao aza ity tantara ity, azafady mariho fa manome lanja ny soso-kevitra izahay. Lazao amin'ny namana iray fahabangan'ny developer, ary raha vitany soa aman-tsara ny fotoam-pitsapana, dia hahazo tombony 100 arivo roubles ianao.

Source: www.habr.com

Add a comment