Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira

Masu amfani da mu suna rubuta saƙonni ga junansu ba tare da sanin gajiya ba.
Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira
Wannan yayi yawa. Idan kun tashi don karanta duk saƙonnin duk masu amfani, zai ɗauki fiye da shekaru dubu 150. Matukar cewa kai ƙwararren ƙwararren karatu ne kuma bai wuce daƙiƙa ɗaya akan kowane saƙo ba.

Tare da irin wannan ƙarar bayanai, yana da mahimmanci cewa dabarun adanawa da samun dama an gina su da kyau. In ba haka ba, a cikin wani lokaci mai ban mamaki, zai iya bayyana cewa komai zai yi kuskure.

A gare mu, wannan lokacin ya zo shekara daya da rabi da suka wuce. Yadda muka zo wannan da abin da ya faru a ƙarshe - muna gaya muku cikin tsari.

Bayani

A cikin aiwatarwa na farko, saƙonnin VKontakte sunyi aiki akan haɗin haɗin PHP da MySQL. Wannan cikakken bayani ne na al'ada ga ƙaramin gidan yanar gizon ɗalibi. Koyaya, wannan rukunin yanar gizon ya girma ba tare da kulawa ba kuma ya fara buƙatar inganta tsarin bayanai don kansa.

A ƙarshen 2009, an rubuta wurin ajiyar injin rubutu na farko, kuma a cikin 2010 an tura saƙonni zuwa gare shi.

A cikin injin rubutu, an adana saƙonni a cikin jerin - nau'in "akwatunan wasiku". Kowane irin wannan jeri yana ƙayyade ta uid - mai amfani wanda ya mallaki duk waɗannan saƙonnin. Saƙo yana da saitin halaye: mai gano interlocutor, rubutu, haɗe-haɗe, da sauransu. Mai gano saƙon da ke cikin “akwatin” local_id ne, baya canzawa kuma ana sanya shi akai-akai don sabbin saƙonni. “akwatunan” masu zaman kansu ne kuma ba a daidaita su da juna a cikin injin; sadarwa tsakanin su tana faruwa a matakin PHP. Kuna iya duba tsarin bayanai da damar injin rubutu daga ciki a nan.
Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira
Wannan ya isa sosai don wasiku tsakanin masu amfani biyu. Ka yi tunanin me ya faru?

A cikin watan Mayu 2011, VKontakte ya gabatar da tattaunawa tare da mahalarta da yawa - hira da yawa. Don yin aiki tare da su, mun ɗaga sabbin gungu biyu - taɗi-mambobi da membobin taɗi. Na farko yana adana bayanai game da taɗi ta masu amfani, na biyu yana adana bayanai game da masu amfani ta hanyar taɗi. Baya ga lissafin kansu, wannan ya haɗa da, misali, mai amfani da gayyata da lokacin da aka ƙara su cikin taɗi.

"PHP, bari mu aika sako zuwa hira," in ji mai amfani.
"Zo, {username}," in ji PHP.
Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira
Akwai rashin amfani ga wannan tsarin. Aiki tare har yanzu alhakin PHP ne. Manyan taɗi da masu amfani waɗanda ke aika saƙon lokaci guda zuwa gare su labari ne mai haɗari. Tun da misalin injin rubutu ya dogara da uid, mahalarta taɗi na iya samun saƙo iri ɗaya a lokuta daban-daban. Mutum zai iya rayuwa tare da wannan idan ci gaba ya tsaya cak. Amma hakan ba zai faru ba.

A ƙarshen 2015, mun ƙaddamar da saƙonnin al'umma, kuma a farkon 2016, mun ƙaddamar da API don su. Da zuwan manyan chatbots a cikin al'ummomi, yana yiwuwa a manta da ko da rarraba kaya.

Kyakkyawan bot yana haifar da saƙonnin miliyan da yawa a kowace rana - har ma mafi yawan masu amfani ba za su iya yin alfahari da wannan ba. Wannan yana nufin cewa wasu lokuta na injin rubutu, wanda irin waɗannan bots suka rayu, sun fara wahala sosai.

Injunan saƙo a cikin 2016 misalai ne 100 na membobin taɗi da taɗi da membobi, da injunan rubutu 8000. An shirya su akan sabobin dubu, kowanne yana da 64 GB na ƙwaƙwalwar ajiya. A matsayin ma'aunin gaggawa na farko, mun ƙara ƙwaƙwalwar ajiya da wani 32 GB. Mun kiyasta hasashen. Ba tare da sauye-sauye masu tsauri ba, wannan zai isa kusan wata shekara. Kuna buƙatar ko dai riƙe kayan aiki ko inganta bayanan bayanai da kansu.

Saboda yanayin gine-ginen, yana da ma'ana kawai don ƙara kayan aiki a cikin nau'i-nau'i. Wato, aƙalla ninka adadin motoci - a fili, wannan hanya ce mai tsada. Za mu inganta.

Sabuwar ra'ayi

Babban jigon sabuwar hanyar shine taɗi. Taɗi yana da jerin saƙonnin da ke da alaƙa da shi. Mai amfani yana da jerin taɗi.

Mafi ƙanƙancin da ake buƙata shine sabbin bayanai biyu:

  • injin hira. Wannan ma'ajiya ce ta vectors taɗi. Kowace taɗi tana da saƙon da ke da alaƙa da shi. Kowane saƙo yana da rubutu da mai gano saƙo na musamman a cikin tattaunawar - chat_local_id.
  • injin mai amfani. Wannan ma'adana ce ta masu amfani vectors - hanyoyin haɗi zuwa masu amfani. Kowane mai amfani yana da vector na peer_id (masu shiga tsakani - sauran masu amfani, taɗi da yawa ko al'ummomi) da saƙon saƙo. Kowane peer_id yana da saƙon saƙon da ke da alaƙa da shi. Kowane saƙo yana da chat_local_id da ID ɗin saƙo na musamman don mai amfani - user_local_id.

Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira
Sabbin gungu suna sadarwa da juna ta amfani da TCP - wannan yana tabbatar da cewa tsarin buƙatun baya canzawa. Buƙatun kansu da tabbatarwa a gare su an rubuta su akan rumbun kwamfutarka - don haka za mu iya dawo da yanayin layin a kowane lokaci bayan gazawar ko sake kunna injin. Tun da injin mai amfani da injin taɗi na shards dubu 4 kowanne, za a rarraba layin buƙata tsakanin gungu a ko'ina (amma a zahiri babu ko ɗaya - kuma yana aiki da sauri).

Yin aiki tare da faifai a cikin bayananmu a mafi yawan lokuta yana dogara ne akan haɗakar binary log na canje-canje (binlog), faifan hoto da hoto a cikin ƙwaƙwalwar ajiya. Ana rubuta canje-canje a cikin rana zuwa binlog, kuma ana ƙirƙira hoto na halin yanzu lokaci-lokaci. Hoton hoto shine tarin tsarin bayanai da aka inganta don dalilanmu. Ya ƙunshi kan kai (metaindex na hoton) da saitin metafiles. Ana adana taken har abada a cikin RAM kuma yana nuna inda za'a nemo bayanai daga hoton. Kowane metafile ya ƙunshi bayanan da wataƙila za a buƙaci a kusa da lokaci-misali, mai alaƙa da mai amfani guda ɗaya. Lokacin da ka nemi bayanan bayanan ta amfani da taken hoto, ana karanta metafile ɗin da ake buƙata, sannan ana la'akari da canje-canje a cikin binlog ɗin da ya faru bayan an ƙirƙiri hoton. Kuna iya karanta ƙarin game da fa'idodin wannan hanyar a nan.

A lokaci guda, bayanan da ke kan rumbun kwamfutar kanta suna canzawa sau ɗaya kawai a rana - a cikin dare a Moscow, lokacin da nauyin ya kasance kadan. Godiya ga wannan (sanin cewa tsarin a kan faifai yana da tsayi a ko'ina cikin yini), za mu iya samun damar maye gurbin vectors tare da tsararru na ƙayyadaddun girman - kuma saboda wannan, samun ƙwaƙwalwar ajiya.

Aika sako a cikin sabon tsarin yayi kama da haka:

  1. A baya na PHP yana tuntuɓar injin mai amfani tare da buƙatar aika saƙo.
  2. injin mai amfani yana wakiltar buƙatun zuwa misalin injin hira da ake so, wanda ke komawa zuwa injin mai amfani chat_local_id - mai gano sabon saƙo a cikin wannan taɗi. Sa'an nan chat_engine yana watsa sakon ga duk masu karɓa a cikin hira.
  3. injin mai amfani yana karɓar chat_local_id daga injin taɗi kuma yana mayar da user_local_id zuwa PHP - mai gano saƙo na musamman ga wannan mai amfani. Ana amfani da wannan mai ganowa, misali, don aiki tare da saƙonni ta API.

Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira
Amma ban da aika saƙonni a zahiri, kuna buƙatar aiwatar da wasu abubuwa masu mahimmanci:

  • Sublists sune, misali, saƙon baya-bayan nan waɗanda kuke gani lokacin buɗe lissafin tattaunawa. Saƙonnin da ba a karanta ba, saƙonni tare da tags ("Mahimmanci", "Spam", da sauransu).
  • Matsa saƙonni a cikin injin hira
  • Caching saƙonni a cikin injin mai amfani
  • Bincika (ta duk maganganu da cikin takamaiman ɗaya).
  • Sabuntawa na ainihi (Longpolling).
  • Ajiye tarihi don aiwatar da caching akan abokan cinikin wayar hannu.

Duk jerin sunayen suna canza tsarin da sauri. Don yin aiki tare da su muna amfani da su Splay itatuwa. An bayyana wannan zaɓi ta gaskiyar cewa a saman bishiyar a wasu lokuta muna adana dukkanin sashe na saƙon daga hoto - alal misali, bayan sake maimaita dare, bishiyar ta ƙunshi saman ɗaya, wanda ya ƙunshi duk saƙonnin sublist. Itacen Splay yana sauƙaƙa don sakawa a tsakiyar irin wannan juzu'in ba tare da yin tunanin daidaitawa ba. Bugu da ƙari, Splay baya adana bayanan da ba dole ba, wanda ke adana mana ƙwaƙwalwar ajiya.

Saƙonni sun ƙunshi bayanai masu yawa, galibi rubutu, waɗanda ke da amfani don samun damar damfara. Yana da mahimmanci mu iya ɓoye daidaitaccen tarihin ko da saƙo ɗaya ne. Ana amfani da shi don damfara saƙonni Huffman algorithm tare da namu heuristics - alal misali, mun san cewa a cikin saƙonnin kalmomi suna canzawa da "ba kalmomi" - sarari, alamomin rubutu - kuma muna tunawa da wasu abubuwan da ake amfani da su na amfani da alamomi na harshen Rashanci.

Tunda akwai ƙarancin masu amfani fiye da taɗi, don adana buƙatun faifai bazuwar a cikin injin taɗi, muna adana saƙonni a injin mai amfani.

Ana aiwatar da binciken saƙo azaman tambayar diagonal daga injin mai amfani zuwa duk misalan injunan taɗi waɗanda ke ɗauke da taɗi na wannan mai amfani. Ana haɗa sakamakon a cikin injin mai amfani da kanta.

Da kyau, an yi la'akari da duk cikakkun bayanai, abin da ya rage shine canza zuwa sabon tsari - kuma zai fi dacewa ba tare da masu amfani sun lura da shi ba.

Hijira bayanai

Don haka, muna da injin rubutu wanda ke adana saƙonni ta mai amfani, da gungu guda biyu masu tattaunawa-membobi da taɗi-memba waɗanda ke adana bayanai game da ɗakunan taɗi da yawa da masu amfani da su. Yadda ake matsawa daga wannan zuwa sabon injin mai amfani da injin hira?

Hirar memba a cikin tsohon makirci an yi amfani da shi da farko don ingantawa. Mun hanzarta canja wurin bayanan da suka wajaba daga gare ta zuwa ga membobin hira, sannan kuma ba ta shiga cikin tsarin ƙaura.

Jerin sunayen mambobi. Ya haɗa da lokuta 100, yayin da injin hira yana da 4 dubu. Don canja wurin bayanan, kuna buƙatar kawo shi cikin yarda - don wannan, an raba membobin taɗi zuwa kwafin 4 guda ɗaya, sannan karanta binlog-members binlog a cikin injin taɗi.
Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira
Yanzu-injin taɗi ya san game da Multi-chat daga chat-membobi, amma har yanzu bai san wani abu game da tattaunawa da biyu interlocutors. Irin waɗannan maganganun suna cikin ingin rubutu tare da la'akari da masu amfani. Anan mun ɗauki bayanan “kai-kai”: kowane misalin injin hira ya tambayi duk misalan injin rubutu idan suna da tattaunawar da ake buƙata.

Mai girma - injin-chat ya san menene taɗi da yawa da ke akwai kuma ya san irin tattaunawa da ake samu.
Kuna buƙatar haɗa saƙonni a cikin taɗi da yawa don ku ƙare da jerin saƙonni a kowace hira. Na farko, injin taɗi yana maidowa daga injin rubutu duk saƙon mai amfani daga wannan taɗi. A wasu lokuta akwai da yawa daga cikinsu (har zuwa ɗaruruwan miliyoyin), amma tare da keɓancewa da yawa, tattaunawar ta dace da RAM gaba ɗaya. Muna da saƙon da ba a ba da oda ba, kowanne a cikin kwafi da yawa - bayan haka, an ciro su daga misalan injin rubutu daban-daban daidai da masu amfani. Manufar ita ce rarraba saƙonni da kawar da kwafi waɗanda ke ɗaukar sarari mara amfani.

Kowane saƙo yana da tambarin lokaci mai ɗauke da lokacin aika shi da rubutu. Muna amfani da lokaci don rarrabuwa - muna sanya masu nuni ga tsofaffin saƙonnin mahalarta chat da yawa kuma muna kwatanta hashes daga rubutun kwafin da aka nufa, matsawa zuwa ƙara tambarin lokaci. Yana da ma'ana cewa kwafin za su kasance da hash iri ɗaya da tambarin lokaci, amma a aikace wannan ba koyaushe haka yake ba. Kamar yadda kuke tunawa, aiki tare a cikin tsohon makirci an gudanar da shi ta hanyar PHP - kuma a lokuta da yawa, lokacin aika saƙo iri ɗaya ya bambanta tsakanin masu amfani daban-daban. A cikin waɗannan lokuta, mun ƙyale kanmu don gyara tambarin lokaci - yawanci a cikin daƙiƙa guda. Matsala ta biyu ita ce tsarin saƙo daban-daban na masu karɓa daban-daban. A irin waɗannan lokuta, mun ba da izinin ƙirƙirar ƙarin kwafi, tare da zaɓuɓɓukan oda daban-daban don masu amfani daban-daban.

Bayan wannan, ana aika bayanai game da saƙonni a cikin multichat zuwa injin mai amfani. Kuma a nan ya zo da wani yanayi mara kyau na saƙonnin da aka shigo da su. A cikin aiki na yau da kullun, saƙonnin da suka zo kan injin ana yin odarsu sosai cikin tsari mai hawa ta user_local_id. Saƙonnin da aka shigo da su daga tsohuwar injin cikin injin mai amfani sun rasa wannan kadarar mai amfani. A lokaci guda, don dacewar gwaji, kuna buƙatar samun damar shiga cikin sauri da sauri, nemi wani abu a cikin su kuma ƙara sababbi.

Muna amfani da tsarin bayanai na musamman don adana saƙonnin da aka shigo da su.

Yana wakiltar vector mai girma Sake rubuta bayanan saƙon VKontakte daga karce kuma tsiraina kowa Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira - daban-daban kuma an ba da umarni a cikin tsari mai saukowa, tare da tsari na musamman na abubuwa. A kowane bangare tare da fihirisa Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira abubuwa ana jerawa. Neman wani abu a cikin irin wannan tsari yana ɗaukar lokaci Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira ta hanyar Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira binary searches. Ƙarin wani abu yana raguwa Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira.

Don haka, mun gano yadda ake canja wurin bayanai daga tsoffin injuna zuwa sababbi. Amma wannan tsari yana ɗaukar kwanaki da yawa - kuma yana da wuya a cikin waɗannan kwanaki masu amfani da mu za su daina dabi'ar rubuta wa junansu. Domin kada mu rasa saƙonni a wannan lokacin, mun canza zuwa tsarin aiki wanda ke amfani da tsofaffi da sababbin gungu.

An rubuta bayanai zuwa ga membobin hira da injin mai amfani (kuma ba don injin rubutu ba, kamar yadda yake a cikin aiki na yau da kullun bisa ga tsohon makirci). Injin mai amfani yana ba da izinin buƙatun injin taɗi - kuma a nan yanayin ya dogara da ko an riga an haɗa wannan taɗi ko a'a. Idan har yanzu ba a haɗa taɗi ba, injin ɗin chat ɗin ba ya rubuta saƙon kansa, kuma sarrafa shi yana faruwa ne kawai a injin rubutu. Idan an riga an haɗa taɗi zuwa injin taɗi, yana mayar da chat_local_id zuwa injin mai amfani kuma yana aika saƙon ga duk masu karɓa. injin mai amfani yana ba da izinin duk bayanai zuwa injin rubutu - ta yadda idan wani abu ya faru, koyaushe za mu iya jujjuya baya, samun duk bayanan da ke cikin tsohon injin. Injin rubutu yana dawo da user_local_id, wanda injin mai amfani ke adanawa kuma yana komawa baya.
Sake rubuta bayanan saƙon VKontakte daga karce kuma tsira
A sakamakon haka, tsarin canji ya yi kama da haka: muna haɗa injin mai amfani mara amfani da gungu-injin hira. Injin hira yana karanta binlog na memba na chat gabaɗaya, sannan wakili zai fara bisa tsarin da aka bayyana a sama. Muna canja wurin tsoffin bayanai kuma muna samun gungu guda biyu masu aiki tare (tsohuwa da sababbi). Abin da ya rage shi ne canza karatu daga injin rubutu zuwa injin mai amfani da kuma kashe wakili.

Результаты

Godiya ga sabon tsarin, duk matakan aikin injinan an inganta su kuma an warware matsaloli tare da daidaiton bayanai. Yanzu za mu iya aiwatar da sabbin abubuwa cikin sauri cikin saƙonni (kuma mun riga mun fara yin hakan - mun haɓaka matsakaicin adadin mahalarta taɗi, aiwatar da bincike don saƙonnin da aka tura, ƙaddamar da saƙon da aka ɗora da haɓaka iyaka akan adadin saƙonnin kowane mai amfani) .

Canje-canje a cikin tunani suna da girma da gaske. Kuma ina so in lura cewa wannan ba koyaushe yana nufin cikakken shekaru na ci gaba ta wata babbar ƙungiya da ɗimbin layukan lambobin ba. injin taɗi da injin mai amfani tare da duk ƙarin labarai kamar Huffman don matsawar saƙo, Bishiyar Splay da tsarin saƙon da aka shigo da shi ƙasa da layin lamba 20 dubu 3. Kuma masu haɓaka 10 ne suka rubuta su a cikin watanni XNUMX kawai (duk da haka, yana da kyau a kiyaye hakan duk uku mai haɓakawa - zakarun duniya a cikin shirye-shiryen wasanni).

Bugu da ƙari, maimakon ninka adadin sabobin, mun rage adadin su da rabi - yanzu injin mai amfani da injin taɗi suna rayuwa akan na'urori na zahiri 500, yayin da sabon tsarin yana da babban ɗakin ɗaukar kaya. Mun adana kuɗi da yawa akan kayan aiki - kusan dala miliyan 5 + $ 750 dubu a kowace shekara a cikin kuɗin aiki.

Muna ƙoƙari don nemo mafi kyawun mafita ga mafi rikitarwa da manyan matsaloli. Muna da su da yawa - kuma shi ya sa muke neman ƙwararrun masu haɓakawa a cikin sashin bayanan. Idan kuna son kuma ku san yadda za ku magance irin waɗannan matsalolin, kuna da kyakkyawar ilimin algorithms da tsarin bayanai, muna gayyatar ku ku shiga ƙungiyar. Tuntuɓi mu HRdon cikakkun bayanai.

Ko da wannan labarin ba game da ku ba ne, da fatan za a lura cewa muna daraja shawarwari. Faɗa wa aboki game da guraben haɓakawa, kuma idan ya samu nasarar kammala lokacin gwaji, za ku sami kari na 100 dubu rubles.

source: www.habr.com

Add a comment