Саволҳо оид ба меъморӣ ва кори ВКонтакте

Таърихи таъсиси ВКонтакте дар Википедия мавҷуд аст, ки онро худи Павел гуфтааст. Чунин ба назар мерасад, ки ҳама аллакай ӯро мешиносанд. Дар бораи дохилӣ, меъморӣ ва сохтори сайт дар HighLoad++ Pavel Соли 2010 ба ман гуфт. Аз он вақт инҷониб бисёр серверҳо фош шудаанд, аз ин рӯ мо маълумотро нав мекунем: мо онро тақсим мекунем, дарунро мебарорем, вазн мекунем ва ба дастгоҳи VK аз нуқтаи назари техникӣ назар мекунем.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Алексей Акулович (AterCattus) таҳиягари пуштибонӣ дар дастаи ВКонтакте. Нусхаи ин гузориш ҷавоби дастаҷамъона ба саволҳои зуд-зуд додашуда дар бораи фаъолияти платформа, инфрасохтор, серверҳо ва ҳамкории байни онҳост, аммо на дар бораи рушд, яъне дар бораи оҳан. Алоҳида, дар бораи пойгоҳи додаҳо ва он чизе ки ВК ба ҷои он, дар бораи ҷамъоварии гузоришҳо ва мониторинги тамоми лоиҳа дар маҷмӯъ. Тафсилот дар зери бурида.



Зиёда аз чор сол аст, ки ман бо ҳама гуна вазифаҳои марбут ба пуштибон сару кор дорам.

  • Боргузорӣ, нигоҳдорӣ, коркард, паҳн кардани ВАО: видео, ҷараёни мустақим, аудио, аксҳо, ҳуҷҷатҳо.
  • Инфрасохтор, платформа, мониторинги таҳиягарон, гузоришҳо, кэшҳои минтақавӣ, CDN, протоколи хусусии RPC.
  • Интегратсия бо хидматҳои беруна: огоҳиҳои push, таҳлили истинодҳои беруна, канали RSS.
  • Кӯмак ба ҳамкасбон бо саволҳои гуногун, ки ҷавоби онҳо ба рамзи номаълум ворид шуданро талаб мекунад.

Дар ин муддат ман дар бисёр ҷузъҳои сайт даст доштам. Ман мехоҳам ин таҷрибаро мубодила кунам.

Меъмории умумӣ

Ҳама чиз, чун маъмул, аз сервер ё гурӯҳи серверҳое оғоз мешавад, ки дархостҳоро қабул мекунанд.

Сервери пеш

Сервери пеши дархостҳоро тавассути HTTPS, RTMP ва WSS қабул мекунад.

HTTPS - инҳо дархостҳо барои веб-версияҳои асосӣ ва мобилии сайт: vk.com ва m.vk.com ва дигар муштариёни расмӣ ва ғайрирасмии API-и мо: муштариёни мобилӣ, паёмнависон. Мо кабул дорем RTMP-трафик барои пахши мустақим бо серверҳои пеши алоҳида ва WSS- пайвастҳо барои Streaming API.

Барои HTTPS ва WSS дар серверҳо он арзиш дорад nginx. Барои пахши RTMP, мо ба наздикӣ ба ҳалли худамон гузаштем киве, вале он аз доираи гузориш берун аст. Барои таҳаммулпазирӣ ба хатогиҳо, ин серверҳо суроғаҳои IP-и умумиро таблиғ мекунанд ва дар гурӯҳҳо амал мекунанд, то дар сурати пайдо шудани мушкилот дар яке аз серверҳо дархостҳои корбарон гум нашаванд. Барои HTTPS ва WSS, ин серверҳо трафикро рамзгузорӣ мекунанд, то як қисми сарбории CPU-ро ба худ гиранд.

Мо минбаъд дар бораи WSS ва RTMP гап намезанем, балки танҳо дар бораи дархостҳои стандартии HTTPS, ки одатан бо лоиҳаи веб алоқаманданд.

Backend

Дар паси пеш одатан серверҳои пуштибонӣ мавҷуданд. Онҳо дархостҳоеро коркард мекунанд, ки сервери пеш аз муштариён мегирад.

ин серверҳои kPHP, ки дар он демони HTTP кор мекунад, зеро HTTPS аллакай рамзкушоӣ шудааст. kPHP серверест, ки дар он кор мекунад моделҳои prefork: як раванди асосӣ, як қатор равандҳои кӯдаконаро оғоз мекунад, розеткаҳои гӯширо ба онҳо интиқол медиҳад ва онҳо дархостҳои худро коркард мекунанд. Дар ин ҳолат, равандҳо байни ҳар як дархости корбар аз нав оғоз намешаванд, балки танҳо ҳолати онҳоро ба ҳолати аслии сифрӣ барқарор мекунанд - дархост пас аз дархост, ба ҷои аз нав оғоз кардан.

Тақсимоти бор

Ҳама пуштибонии мо як ҳавзи бузурги мошинҳо нестанд, ки метавонанд ҳама гуна дархостро коркард кунанд. Мо онхо ба гуруххои алохида таксим карда шудаанд: умумй, сайёр, api, видео, инсценировка... Проблемаи гурухи алохидаи машинахо ба хамаи дигархо дахл намекунад. Дар сурати мушкилот бо видео, корбаре, ки мусиқӣ гӯш мекунад, ҳатто аз мушкилот огоҳ нахоҳад шуд. Ба кадом пуштибонии фиристодани дархост аз ҷониби nginx дар пеш мувофиқи конфигуратсия муайян карда мешавад.

Ҷамъоварии метрикӣ ва мувозинат

Барои фаҳмидани он ки мо бояд дар ҳар як гурӯҳ чанд мошин дошта бошем, мо ба QPS такя накунед. Пойгоҳҳо гуногунанд, онҳо дархостҳои гуногун доранд, ҳар як дархост мураккабии гуногуни ҳисобкунии QPS дорад. Барои хамин хам мо мо бо мафҳуми сарборӣ дар сервер дар маҷмӯъ фаъолият мекунем - дар CPU ва perf.

Мо ҳазорҳо чунин серверҳо дорем. Ҳар як сервери физикӣ як гурӯҳи kPHP-ро барои коркарди ҳамаи ядроҳо кор мекунад (зеро kPHP як ришта аст).

Сервери мундариҷа

CS ё Content Server як анбор аст. CS серверест, ки файлҳоро нигоҳ медорад ва инчунин файлҳои боршуда ва ҳама гуна вазифаҳои синхронии заминаро, ки фронти асосии веб ба он таъин мекунад, коркард мекунад.

Мо даҳҳо ҳазор серверҳои физикӣ дорем, ки файлҳоро нигоҳ медоранд. Истифодабарандагон бор кардани файлҳоро дӯст медоранд ва мо нигоҳ доштан ва мубодила кардани онҳоро дӯст медорем. Баъзе аз ин серверҳо тавассути серверҳои махсуси pu/pp баста мешаванд.

pu/pp

Агар шумо ҷадвали шабакаро дар VK кушоед, шумо pu/pp дидед.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

pu/pp чист? Агар мо як серверро паси дигаре пӯшем, пас ду имконот барои боргузорӣ ва зеркашии файл ба сервери басташуда мавҷуд аст: мустақиман через http://cs100500.userapi.com/path ё тавассути сервери мобайнӣ - http://pu.vk.com/c100500/path.

Pu номи таърихии боркунии аксҳо ва pp прокси аксҳо мебошад. Яъне як сервер барои бор кардани аксҳо ва дигаре барои бор кардан аст. Ҳоло на танҳо аксҳо бор карда мешаванд, балки ном ҳифз шудааст.

Ин серверҳо сессияҳои HTTPS-ро қатъ кунедбарои бартараф кардани бори протсессори аз анбор. Инчунин, азбаски файлҳои корбар дар ин серверҳо коркард мешаванд, ҳар қадар маълумоти кам ҳассос дар ин мошинҳо нигоҳ дошта мешаванд, ҳамон қадар беҳтар аст. Масалан, калидҳои рамзгузории HTTPS.

Азбаски мошинҳоро дигар мошинҳои мо бастаанд, мо метавонем ба онҳо IP-ҳои берунии "сафед" надиҳем ва "хокистарӣ" диҳед. Ҳамин тариқ, мо дар ҳавзи IP захира кардем ва кафолат додем, ки мошинҳоро аз дастрасии беруна муҳофизат кунем - танҳо IP барои ворид шудан ба он вуҷуд надорад.

Муқовимат ба IP-ҳои муштарак. Дар робита ба таҳаммулпазирии хатогиҳо, схема якхела кор мекунад - якчанд серверҳои физикӣ IP-и умумии физикӣ доранд ва сахтафзор дар пеши онҳо ба куҷо фиристодани дархостро интихоб мекунад. Ман дар бораи вариантҳои дигар баъдтар сӯҳбат мекунам.

Нуктаи бахсталаб он аст, ки дар ин маврид муштарӣ алоқаҳои камтар нигоҳ медорад. Агар як IP барои якчанд мошин мавҷуд бошад - бо як ҳост: pu.vk.com ё pp.vk.com, браузери муштарӣ шумораи дархостҳои ҳамзамон ба як ҳост маҳдудият дорад. Аммо дар замони HTTP/2 дар ҳама ҷо, ман боварӣ дорам, ки ин дигар он қадар муҳим нест.

Камбудии равшани схема дар он аст, ки он бояд тамоми трафикро пур кунед, ки ба анбор меравад, тавассути сервери дигар. Азбаски мо трафикро тавассути мошинҳо интиқол медиҳем, мо ҳоло наметавонем трафики вазнинро, масалан, видеоро бо истифода аз ҳамон схема интиқол диҳем. Мо онро мустақиман интиқол медиҳем - пайвасти мустақими алоҳида барои анборҳои алоҳида, махсусан барои видео. Мо мундариҷаи сабуктарро тавассути прокси интиқол медиҳем.

Чанде пеш мо версияи такмилёфтаи проксиро гирифтем. Акнун ман ба шумо мегӯям, ки чӣ тавр онҳо аз оддӣ фарқ мекунанд ва чаро ин зарур аст.

офтоб

Дар моҳи сентябри соли 2017, Oracle, ки қаблан Sun-ро харида буд, шумораи зиёди кормандони Sun аз кор озод карда шуданд. Мо гуфта метавонем, ки дар айни замон ширкат мавҷудияти худро қатъ кард. Ҳангоми интихоби ном барои системаи нав, маъмурони мо тасмим гирифтанд, ки хотираи ин ширкатро эҳтиром кунанд ва системаи навро Sun номгузорӣ карданд. Дар байни худ мо ӯро танҳо "офтобҳо" меномем.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

pp якчанд мушкилот дошт. Як IP барои як гурӯҳ - кэши бесамар. Якчанд серверҳои физикӣ суроғаи IP-и умумиро мубодила мекунанд ва ҳеҷ роҳе барои назорат кардани он, ки дархост ба кадом сервер меравад, вуҷуд надорад. Аз ин рӯ, агар корбарони гуногун барои як файл оянд, пас агар дар ин серверҳо кэш мавҷуд бошад, файл дар кэши ҳар як сервер хотима меёбад. Ин нақшаи хеле бесамар аст, аммо ҳеҷ коре карда наметавонист.

Дар натиҷа - мо мундариҷаро тақсим карда наметавонем, зеро мо наметавонем сервери мушаххасро барои ин гурӯҳ интихоб кунем - онҳо IP-и умумӣ доранд. Инчунин бо баъзе сабабҳои дохилӣ мо дар минтақаҳо насб кардани чунин серверҳо имкон надошт. Онҳо танҳо дар Санкт-Петербург истода буданд.

Бо офтоб, мо системаи интихобро тағир додем. Акнун мо дорем масири дилхоҳ: масир динамикӣ, anycast, демони худидоракунии санҷиш. Ҳар як сервер IP-и шахсии худро дорад, аммо зершабакаи умумӣ. Ҳама чиз тавре танзим карда шудааст, ки агар як сервер кор накунад, трафик дар дигар серверҳои ҳамон гурӯҳ ба таври худкор паҳн мешавад. Акнун имкон дорад, ки сервери мушаххасро интихоб кунед, нест кэши зиёдатӣ, ва эътимоднокӣ таъсир нарасонд.

Дастгирии вазн. Акнун мо метавонем, ки ба кадри зарурй дастгоххои дорой иктидори гуногун гузорем, инчунин дар сурати ба амал омадани проблемахои муваккатй вазнхои «офтоб»-и коркунандаро тагьир дихем, то ки бори онхо кам шавад, то ки онхо «дам гиранд» ва аз нав ба кор шуруъ кунанд.

Мубодила аз рӯи ID мундариҷа. Як чизи хандовар дар бораи sharding: мо одатан мундариҷаро тақсим мекунем, то корбарони гуногун ба як файл тавассути як "офтоб" раванд, то онҳо кэши умумӣ дошта бошанд.

Мо ба наздикй замимаи «Беда»-ро ба кор андохтаем. Ин як викторинаи онлайн дар пахши мустақим аст, ки дар он мизбон саволҳо медиҳад ва корбарон дар вақти воқеӣ ҷавоб медиҳанд ва имконотро интихоб мекунанд. Дар барнома чат мавҷуд аст, ки дар он корбарон метавонанд сӯҳбат кунанд. Метавонад ҳамзамон ба пахш пайваст шавад бештар аз 100 хазор нафар одамон. Ҳамаи онҳо паёмҳое менависанд, ки ба ҳамаи иштирокчиён фиристода мешаванд ва аватар бо паём меояд. Агар дар як «офтоб» барои як аватар 100 ҳазор нафар оянд, он гоҳ баъзан метавонад дар паси абр гардиш кунад.

Барои муқовимат ба таркишҳои дархостҳо барои як файл, маҳз барои як намуди мундариҷа мо нақшаи аблаҳеро ба кор меандозем, ки файлҳоро дар тамоми "офтобҳои" дастрас дар минтақа паҳн мекунад.

Офтоб аз дарун

Прокси баръакс дар nginx, кэш ё дар RAM ё дар дискҳои Optane/NVMe зуд. Мисол: http://sun4-2.userapi.com/c100500/path — пайванд ба «офтоб», ки дар минтақаи чорум ҷойгир аст, гурӯҳи дуюми сервер. Он файли роҳро, ки аз ҷиҳати ҷисмонӣ дар сервери 100500 ҷойгир аст, мепӯшонад.

Сарпӯши

Мо ба нақшаи меъмории худ як гиреҳи дигар илова мекунем - муҳити кэш.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Дар зер диаграммаи тарҳрезӣ аст кэшҳои минтақавӣ, онхо кариб 20 нафаранд. Инҳо ҷойҳое ҳастанд, ки кэшҳо ва "офтобҳо" ҷойгиранд, ки метавонанд трафикро тавассути худ кэш кунанд.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Ин кэшкунии мундариҷаи мултимедиявӣ мебошад; дар ин ҷо ягон маълумоти корбар нигоҳ дошта намешавад - танҳо мусиқӣ, видео, аксҳо.

Барои муайян кардани минтақаи корбар, мо мо префиксҳои шабакаи BGP-ро дар минтақаҳо эълон мекунем. Дар ҳолати бозгашт, мо инчунин бояд пойгоҳи додаи geoip-ро таҳлил кунем, агар мо IP-ро бо префиксҳо пайдо карда натавонем. Мо минтақаро аз рӯи IP-и корбар муайян мекунем. Дар код, мо метавонем ба як ё якчанд минтақаҳои корбар назар кунем - он нуқтаҳое, ки ӯ аз ҷиҳати ҷуғрофӣ ба онҳо наздиктар аст.

Чӣ тавр он кор мекунад?

Мо маъруфияти файлҳоро аз рӯи минтақа ҳисоб мекунем. Як қатор кэши минтақавӣ, ки дар он корбар ҷойгир аст ва идентификатори файл мавҷуд аст - мо ин ҷуфтро мегирем ва бо ҳар боргирӣ рейтингро боло мебарем.

Дар баробари ин, девҳо - хидматҳо дар минтақаҳо - гоҳ-гоҳ ба API меоянд ва мегӯянд: "Ман фалон кэш ҳастам, ба ман рӯйхати файлҳои маъмултарин дар минтақаи манро диҳед, ки ҳоло дар ман нестанд. » API як қатор файлҳоро аз рӯи рейтинг ҷудо мекунад, демон онҳоро зеркашӣ мекунад, онҳоро ба минтақаҳо мебарад ва файлҳоро аз он ҷо мерасонад. Ин фарқи асосии байни pu/pp ва Sun аз кэшҳост: онҳо файлро ба воситаи худашон фавран медиҳанд, ҳатто агар ин файл дар кэш набошад ва кэш аввал файлро ба худ зеркашӣ мекунад ва сипас ба додани он шурӯъ мекунад.

Дар ин ҳолат мо ба даст меорем мундариҷа ба корбарон наздиктар аст ва паҳн кардани бори шабака. Масалан, танҳо аз кэши Маскав мо дар соатҳои авҷгир зиёда аз 1 Тбит/с тақсим мекунем.

Аммо мушкилот вуҷуд доранд - серверҳои кэш резинӣ нестанд. Барои мундариҷаи хеле маъмул, баъзан шабакаи кофӣ барои сервери алоҳида вуҷуд надорад. Серверҳои кэшҳои мо 40-50 Гбит/с мебошанд, аммо мундариҷае вуҷуд дорад, ки чунин каналро комилан маҳкам мекунад. Мо барои татбиқи нигоҳдории зиёда аз як нусхаи файлҳои маъмул дар минтақа ҳаракат карда истодаем. Умедворам, ки то охири сол онро ба амал мебарорем.

Мо меъмории умумиро дида баромадем.

  • Серверҳои пеш, ки дархостҳоро қабул мекунанд.
  • Бозгаштҳое, ки дархостҳоро коркард мекунанд.
  • Анборҳое, ки бо ду намуди прокси баста мешаванд.
  • Кэшҳои минтақавӣ.

Дар ин диаграмма чӣ намерасад? Албатта, пойгоҳи додаҳое, ки мо дар он маълумот нигоҳ медорем.

Пойгоҳи додаҳо ё муҳаррикҳо

Мо онҳоро на пойгоҳи додаҳо, балки муҳаррикҳо - Муҳаррикҳо меномем, зеро мо амалан ба маънои аз ҷониби умум қабулшуда пойгоҳи додаҳо надорем.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Ин тадбири зарурист. Ин аз он сабаб рӯй дод, ки дар солҳои 2008-2009, вақте ки VK афзоиши беандоза дар маъруфият дошт, лоиҳа пурра дар MySQL ва Memcache кор мекард ва мушкилот вуҷуд дошт. MySQL вайрон кардан ва вайрон кардани файлҳоро дӯст медошт, ки пас аз он барқарор намешавад ва Memcache тадриҷан корашро паст кард ва бояд аз нав оғоз карда шавад.

Маълум мешавад, ки лоиҳаи торафт маъмултарин дорои нигаҳдории доимӣ мебошад, ки маълумотро вайрон мекунад ва кэшро суст мекунад. Дар чунин шароит тартиб додани лоихаи афзоянда душвор аст. Қарор дода шуд, ки чизҳои муҳимеро, ки лоиҳа ба велосипедҳои мо нигаронида шудааст, аз нав навишта шавад.

Халли бомуваффакият анчом ёфт. Имконияти ба амал баровардани ин кор, инчунин зарурати фавцулодда низ мавчуд буд, зеро дар он вакт дигар роххои васеъкунй вучуд надоштанд. Як қатор пойгоҳи додаҳо вуҷуд надоштанд, NoSQL ҳанӯз вуҷуд надошт, танҳо MySQL, Memcache, PostrgreSQL вуҷуд доштанд - ва ҳамин тавр.

Амалиёти универсалӣ. Таҳияро гурӯҳи мо аз таҳиягарони C роҳбарӣ мекард ва ҳама чиз ба таври пайваста анҷом дода шуд. Новобаста аз муҳаррик, ҳамаи онҳо тақрибан як формати файли ба диск навишташуда, як параметрҳои оғозёбӣ, сигналҳои коркарди якхела доштанд ва дар сурати вазъият ва мушкилоти канорӣ тақрибан якхела рафтор мекарданд. Бо афзоиши муҳаррикҳо, барои маъмурон идора кардани система қулай аст - ҳеҷ гуна зоопарк вуҷуд надорад, ки онро нигоҳ доштан лозим аст ва онҳо бояд чӣ гуна кор кардани ҳар як пойгоҳи нави сеюмро аз нав омӯзанд, ки ин имкон дод, ки зуд ва ба осонӣ афзоиш ёбад. шумораи онҳо.

Намудҳои муҳаррикҳо

Дастаи як қатор муҳаррикҳо навишт. Дар ин ҷо танҳо баъзе аз онҳо ҳастанд: дӯст, маслиҳатҳо, тасвир, ipdb, ҳарфҳо, рӯйхатҳо, гузоришҳо, memcached, meowdb, ахбор, nostradamus, акс, рӯйхати навозишҳо, pmemcached, қуттии қум, ҷустуҷӯ, нигоҳдорӣ, лайкҳо, вазифаҳо,…

Барои ҳар як вазифае, ки сохтори мушаххаси додаҳоро талаб мекунад ё дархостҳои ғайримуқаррариро коркард мекунад, дастаи C муҳаррики нав менависад. Барои чӣ не.

Мо муҳаррики алоҳида дорем ҳифзшуда, ки ба як муцаррарй монанд аст, вале бо як даста неъматдое, ки суръати корро суст намекунад. На ClickHouse, балки он ҳам кор мекунад. Алоҳида дастрас аст pmemcached Оё собиткадамона мемко-нанд, ки он инчунин метавонад маълумотро дар диск нигоҳ дорад, зиёда аз он, ки ба хотираи RAM мувофиқат кунад, то ҳангоми бозоғозӣ маълумот гум нашавад. Барои иҷрои вазифаҳои инфиродӣ муҳаррикҳои гуногун мавҷуданд: навбатҳо, рӯйхатҳо, маҷмӯаҳо - ҳама чизҳое, ки лоиҳаи мо талаб мекунад.

Кластерҳо

Аз нуқтаи назари код, ҳеҷ зарурате вуҷуд надорад, ки муҳаррикҳо ё пойгоҳи додаҳо ҳамчун равандҳо, объектҳо ё мисолҳо фикр кунанд. Рамз махсусан бо кластерҳо, бо гурӯҳҳои муҳаррикҳо кор мекунад - як навъ дар як кластер. Фарз мекунем, ки кластери memcached вуҷуд дорад - ин танҳо як гурӯҳи мошинҳост.

Ба код лозим нест, ки макони физикӣ, андоза ё шумораи серверҳоро донад. Вай бо истифода аз идентификатори муайян ба кластер меравад.

Барои ин кор кардан, шумо бояд як объекти дигареро илова кунед, ки дар байни код ва муҳаррикҳо ҷойгир аст - proxy.

Прокси RPC

Прокси автобуси пайвасткунанда, ки дар он кариб тамоми сайт кор мекунад. Дар баробари ин мо дорем ягон кашфи хидмат — ба ҷои ин, конфигуратсия барои ин прокси мавҷуд аст, ки ҷойгиршавии ҳама кластерҳо ва ҳама пораҳои ин кластерро медонад. Ин корест админҳо.

Ба барномасозон умуман парво надоранд, ки он чӣ қадар, дар куҷо ва чӣ арзиш дорад - онҳо танҳо ба кластер мераванд. Ин ба мо бисьёр имконият медихад. Ҳангоми гирифтани дархост, прокси дархостро ба куҷо равона мекунад ва медонад, ки онро худаш муайян мекунад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Дар ин ҳолат, прокси як нуқтаи муҳофизат аз нокомии хидмат мебошад. Агар баъзе муҳаррикҳо суст шаванд ё суқут кунанд, пас прокси инро мефаҳмад ва мувофиқан ба ҷониби муштарӣ ҷавоб медиҳад. Ин ба шумо имкон медиҳад, ки тайм-аутро хориҷ кунед - код интизори посухи муҳаррик нест, аммо мефаҳмад, ки он кор намекунад ва бояд ба таври дигар рафтор кунад. Рамз бояд барои он тайёр карда шавад, ки базахои маълумотхо на хамеша кор мекунанд.

Амалиётҳои мушаххас

Баъзан мо дар ҳақиқат мехоҳем, ки ҳамчун муҳаррик як навъ ҳалли ғайристандартӣ дошта бошем. Дар айни замон, тасмим гирифта шуд, ки rpc-прокси тайёри моро, ки махсус барои муҳаррикҳои мо сохта шудааст, истифода набарем, балки прокси алоҳида барои вазифа созем.

Барои MySQL, ки мо то ҳол дар ин ҷо ва он ҷо дорем, мо db-proxy-ро истифода мебарем ва барои ClickHouse - Хонаи гурбахона.

Он одатан чунин кор мекунад. Сервери муайяне вуҷуд дорад, ки он kPHP, Go, Python -ро идора мекунад - дар маҷмӯъ, ҳама гуна рамзе, ки протоколи RPC-и моро истифода бурда метавонад. Рамз ба таври маҳаллӣ дар прокси RPC кор мекунад - ҳар сервере, ки код ҷойгир аст, прокси маҳаллии худро иҷро мекунад. Бо дархост, прокси ба куҷо рафтанро мефаҳмад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Агар як муҳаррик ба дигараш рафтан мехоҳад, ҳатто агар он ҳамсоя бошад ҳам, тавассути прокси мегузарад, зеро ҳамсоя метавонад дар маркази дигар маълумот бошад. Муҳаррик набояд ба донистани ҷойгиршавии чизе, ки ғайр аз худаш бошад, такя кунад - ин ҳалли стандартии мост. Аммо албатта истисноҳо ҳастанд :)

Намунаи схемаи TL, ки мувофиқи он ҳама муҳаррикҳо кор мекунанд.

memcache.not_found                                = memcache.Value;
memcache.strvalue	value:string flags:int = memcache.Value;
memcache.addOrIncr key:string flags:int delay:int value:long = memcache.Value;

tasks.task
    fields_mask:#
    flags:int
    tag:%(Vector int)
    data:string
    id:fields_mask.0?long
    retries:fields_mask.1?int
    scheduled_time:fields_mask.2?int
    deadline:fields_mask.3?int
    = tasks.Task;
 
tasks.addTask type_name:string queue_id:%(Vector int) task:%tasks.Task = Long;

Ин як протоколи бинарӣ аст, ки аналоги наздиктарини он аст протобуф. Схема майдонҳои ихтиёрӣ, намудҳои мураккаб - васеъшавии скалярҳои дарунсохт ва дархостҳоро пешгӯӣ мекунад. Ҳама чиз мувофиқи ин протокол кор мекунад.

RPC бар TL бар TCP/UDP… UDP?

Мо барои иҷрои дархостҳои муҳаррик протоколи RPC дорем, ки дар болои схемаи TL кор мекунад. Ин ҳама тавассути пайвасти TCP/UDP кор мекунад. TCP фаҳмо аст, аммо чаро мо ба UDP аксар вақт ниёз дорем?

UDP кӯмак мекунад аз мушкилоти шумораи зиёди пайвастҳои байни серверҳо канорагирӣ кунед. Агар ҳар як сервер прокси RPC дошта бошад ва дар маҷмӯъ, он метавонад ба ҳама гуна муҳаррик равад, пас дар як сервер даҳҳо ҳазор пайвастҳои TCP вуҷуд доранд. Бор аст, вале бефоида. Дар сурати UDP ин мушкилот вуҷуд надорад.

Дастфишори зиёдатии TCP нест. Ин як мушкилоти маъмулист: вақте ки муҳаррики нав ё сервери нав ба кор андохта мешавад, дар як вақт бисёр пайвастҳои TCP муқаррар карда мешаванд. Барои дархостҳои хурди сабук, масалан, бори UDP, ҳама иртибот байни код ва муҳаррик аст ду бастаи UDP: яке ба як тараф, дуюмаш ба тарафи дигар парвоз мекунад. Як сафари даврӣ - ва код аз муҳаррик бидуни дастфишорӣ ҷавоб гирифт.

Бале, ҳамааш танҳо кор мекунад бо фоизи хеле ками талафи пакет. Протокол барои интиқол ва тайм-аут дастгирӣ мекунад, аммо агар мо бисёр чизро аз даст диҳем, мо қариб TCP мегирем, ки фоидаовар нест. Мо UDP-ро аз уқёнусҳо намеронем.

Мо ҳазорҳо чунин серверҳо дорем ва схема якхела аст: дар ҳар як сервери физикӣ як бастаи муҳаррикҳо насб карда шудаанд. Онҳо асосан як ришта доранд, то ҳарчи зудтар бидуни басташавӣ кор кунанд ва ҳамчун ҳалли як ришта тақсим карда мешаванд. Дар айни замон, мо аз ин муҳаррикҳо чизи боэътимодтар надорем ва ба нигоҳдории доимии маълумот диққати зиёд дода мешавад.

Нигоҳдории доимии маълумот

Муҳаррикҳо бинлогҳо менависанд. Binlog файлест, ки дар охири он ҳодиса барои тағир додани ҳолат ё маълумот илова карда мешавад. Дар ҳалли гуногун он ба таври гуногун номида мешавад: журнали бинарӣ, ВАЛ, AOF, вале принцип як аст.

Барои он ки муҳаррикҳо ҳангоми аз нав ба кор андохтан дар тӯли солҳои зиёд тамоми бинлогро дубора хонда нашаванд, муҳаррикҳо менависанд аксҳо - ҳолати кунунӣ. Агар лозим шавад, аввал аз он мехонанд ва баъд аз бинлог мутолиа мекунанд. Ҳама бинлогҳо дар як формати дуӣ навишта мешаванд - мувофиқи схемаи TL, то маъмурон тавонанд онҳоро бо асбобҳои худ баробар идора кунанд. Чунин зарурати аксбардорӣ вуҷуд надорад. Сарлавҳаи умумӣ мавҷуд аст, ки нишон медиҳад, ки акси кӣ int аст, ҷодуи муҳаррик ва кадом бадан барои касе муҳим нест. Ин мушкилот бо муҳаррикест, ки аксро сабт кардааст.

Ман зуд принципи амалиётро тавсиф мекунам. Сервер мавҷуд аст, ки дар он муҳаррик кор мекунад. Вай бинлоги нави холиро барои навиштан мекушояд ва барои тағир додани он ҳодиса менависад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Дар баъзе мавридҳо, ӯ тасмим мегирад, ки худаш аксбардорӣ кунад, ё ӯ сигнал мегирад. Сервер файли нав эҷод мекунад, тамоми ҳолати онро ба он менависад, андозаи ҷории binlog - офсет - ба охири файл замима мекунад ва минбаъд навиштанро идома медиҳад. Blog-и нав сохта нашудааст.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Дар баъзе лаҳзаҳо, вақте ки муҳаррик аз нав оғоз мешавад, дар диск ҳам бинлог ва ҳам аксбардорӣ хоҳад буд. Мотор тамоми аксро мехонад ва ҳолати худро дар як нуқтаи муайян баланд мекунад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Мавқеъеро, ки дар вақти офариниши акс ва андозаи бинлог буд, мехонад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Барои гирифтани ҳолати кунунӣ охири бинлогро мехонад ва навиштани рӯйдодҳои минбаъдаро идома медиҳад. Ин схемаи оддй аст, хамаи моторхои мо аз руи он кор мекунанд.

Репликатсияи маълумот

Дар натиҷа, такрори маълумот дар мо ба изҳорот асос ёфтааст — мо дар бинлог на ягон тагйироти сахифа, балки махз тағир додани дархостҳо. Ба он чизе, ки тавассути шабака меояд, хеле монанд аст, танҳо каме тағир дода шудааст.

Ҳамин схема на танҳо барои такрор, балки инчунин истифода мешавад барои сохтани нусхаҳои эҳтиётӣ. Мо муҳаррик дорем - устоди навиштан, ки ба бинлог менависад. Дар ҳама ҷое, ки маъмурон онро насб мекунанд, ин бинлог нусхабардорӣ карда мешавад ва ҳамин тавр - мо нусхаи эҳтиётӣ дорем.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Агар лозим бошад нусхаи хонданБарои кам кардани сарбории хониши CPU, муҳаррики хониш танҳо ба кор андохта мешавад, ки охири бинлогро мехонад ва ин фармонҳоро ба таври маҳаллӣ иҷро мекунад.

Дар ин чо акибмонй хеле хурд аст ва фахмидан мумкин аст, ки реплика аз усто то чй андоза акиб мемонад.

Шарҳи маълумот дар прокси RPC

Sharding чӣ гуна кор мекунад? Прокси чӣ гуна мефаҳмад, ки ба кадом кластер феҳрист фиристода шавад? Дар код нагуфтаанд: «Ба 15 дона фиристед!». — не, ин корро намояндаи ваколатдор мекунад.

Нақшаи соддатарин firstint аст — рақами якум дар дархост.

get(photo100_500) => 100 % N.

Ин як мисол барои протоколи оддии матнии memcached аст, аммо, албатта, дархостҳо метавонанд мураккаб ва сохторӣ бошанд. Мисоли рақами аввалро дар дархост ва боқимондаро ҳангоми тақсим кардани андозаи кластер мегирад.

Ин вақте муфид аст, ки мо мехоҳем, ки маҳалли маълумоти як объект дошта бошем. Биёед бигӯем, ки 100 ID корбар ё гурӯҳ аст ва мо мехоҳем, ки тамоми маълумоти як объект дар як порча барои дархостҳои мураккаб бошад.

Агар мо парво надорем, ки дархостҳо дар саросари кластер чӣ гуна паҳн мешаванд, варианти дигар вуҷуд дорад - хэш кардани тамоми пора.

hash(photo100_500) => 3539886280 % N

Мо инчунин хэш, боқимондаи тақсимот ва рақами пораро мегирем.

Ҳардуи ин вариантҳо танҳо кор мекунанд, агар мо ба он омода бошем, ки вақте ки андозаи кластерро зиёд мекунем, онро тақсим мекунем ё чанд маротиба зиёд мекунем. Масалан, мо 16 порча доштем, мо кофӣ надорем, мо бештар мехоҳем - мо метавонем 32-ро бидуни таъхир ба даст орем. Агар мо хоҳем, ки на чандкарата афзоиш диҳем, вақти бекорӣ хоҳад буд, зеро мо наметавонем ҳама чизро бе талафот дақиқ тақсим кунем. Ин вариантҳо муфиданд, аммо на ҳамеша.

Агар ба мо лозим ояд, ки шумораи ихтиёрии серверҳоро илова ё хориҷ кунем, мо истифода мебарем Hashing пайваста дар ҳалқаи ла Ketama. Аммо дар айни замон, мо маҳалли ҷойгиршавии маълумотро комилан аз даст медиҳем; мо бояд дархостро ба кластер муттаҳид кунем, то ҳар як порча посухи хурди худро баргардонад ва сипас посухҳоро ба прокси муттаҳид созем.

Дархостҳои хеле мушаххас мавҷуданд. Чунин ба назар мерасад: прокси RPC дархостро қабул мекунад, муайян мекунад, ки ба кадом кластер рафтан лозим аст ва пораро муайян мекунад. Он гоҳ ё устодони навиштан вуҷуд доранд, ё агар кластер дастгирии реплика дошта бошад, он бо дархост ба реплика мефиристад. Ин ҳама аз ҷониби прокси анҷом дода мешавад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Гузоришҳо

Мо гузоришҳоро бо чанд роҳ менависем. Аз ҳама равшан ва соддатарин аст сабтҳоро ба memcache нависед.

ring-buffer: prefix.idx = line

Як префикси калидӣ мавҷуд аст - номи журнал, сатр ва андозаи ин журнал - шумораи сатрҳо вуҷуд дорад. Мо як адади тасодуфиро аз 0 то шумораи сатрҳо минуси 1 мегирем. Калид дар memcache префикси бо ин рақами тасодуфӣ пайвастшуда мебошад. Мо хатти сабт ва вақти ҷорӣро ба арзиш захира мекунем.

Вақте ки ба хондани гузоришҳо зарур аст, мо иҷро мекунем Multi Get ҳама калидҳо, ки аз рӯи вақт мураттаб карда шудаанд ва ба ин васила дар вақти воқеӣ гузориши истеҳсолиро ба даст оред. Схема вақте истифода мешавад, ки ба шумо лозим аст, ки чизе дар истеҳсолот дар вақти воқеӣ, бидуни вайрон кардани чизе, бидуни таваққуф ё иҷозати трафик ба мошинҳои дигар ислоҳ кунед, аммо ин сабт дер давом намекунад.

Барои боэътимод нигод доштани логдо мо двигател дорем муҳаррики журналҳо. Маҳз барои ҳамин он офарида шудааст ва дар шумораи зиёди кластерҳо васеъ истифода мешавад. Бузургтарин кластере, ки ман медонам, 600 TB гузоришҳои бастабандишударо нигоҳ медорад.

Мотор хеле кӯҳна аст, кластерҳо мавҷуданд, ки аллакай 6-7 сол доранд. Дар он мушкилот вуҷуд доранд, ки мо кӯшиш мекунем, ки онҳоро ҳал кунем, масалан, мо барои нигоҳ доштани гузоришҳо ClickHouse-ро фаъолона истифода бурдем.

Ҷамъоварии гузоришҳо дар ClickHouse

Ин диаграмма нишон медиҳад, ки чӣ тавр мо ба муҳаррикҳои худ ворид мешавем.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Рамзе вуҷуд дорад, ки тавассути RPC ба RPC-прокси ба таври маҳаллӣ меравад ва он мефаҳмад, ки ба куҷо рафтан ба муҳаррик. Агар мо хоҳем, ки дар ClickHouse гузоришҳо нависем, мо бояд ду қисмро дар ин схема тағир диҳем:

  • баъзе муҳаррикҳоро бо ClickHouse иваз кунед;
  • прокси RPC-ро, ки ба ClickHouse дастрасӣ надорад, бо баъзе ҳалли он метавонад ва тавассути RPC иваз кунед.

Муҳаррик оддӣ аст - мо онро бо сервер ё кластери серверҳо бо ClickHouse иваз мекунем.

Ва барои рафтан ба ClickHouse, мо кардем Хонаи гурбача. Агар мо мустақиман аз KittenHouse ба ClickHouse равем, он мубориза намебарад. Ҳатто бидуни дархост, он аз пайвастҳои HTTP шумораи зиёди мошинҳоро илова мекунад. Барои кор кардани нақша, дар сервер бо ClickHouse прокси маҳаллии баръакс баланд мешавад, ки ба тарзе навишта шудааст, ки ба ҳаҷми зарурии пайвастҳо тоб оварда метавонад. Он инчунин метавонад маълумотро дар дохили худ нисбатан боэътимод буфер кунад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Баъзан мо намехоҳем схемаи RPC-ро дар ҳалли ғайристандартӣ, масалан, дар nginx татбиқ кунем. Аз ин рӯ, KittenHouse дорои қобилияти гирифтани гузоришҳо тавассути UDP мебошад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Агар ирсолкунанда ва қабулкунандаи гузоришҳо дар як мошин кор кунанд, пас эҳтимолияти аз даст додани бастаи UDP дар дохили ҳости маҳаллӣ хеле паст аст. Ҳамчун созиш байни зарурати татбиқи RPC дар ҳалли тарафи сеюм ва эътимод, мо танҳо фиристодани UDP-ро истифода мебарем. Мо дертар ба ин схема бармегардем.

Мониторинг

Мо ду намуди гузоришҳо дорем: онҳое, ки аз ҷониби маъмурон дар серверҳои худ ҷамъоварӣ шудаанд ва онҳое, ки аз ҷониби таҳиягарон аз код навишта шудаанд. Онҳо ба ду намуди нишондиҳандаҳо мувофиқанд: система ва маҳсулот.

Метрикҳои система

Он дар ҳама серверҳои мо кор мекунад Нетмаълумот, ки оморро чамъ карда, ба он мефиристад Графити карбон. Аз ин рӯ, ClickHouse ҳамчун системаи нигоҳдорӣ истифода мешавад, на Whisper, масалан. Агар лозим бошад, шумо метавонед бевосита аз ClickHouse хонед ё истифода баред Графана барои ченакҳо, графикҳо ва ҳисоботҳо. Ҳамчун таҳиягарон, мо ба Netdata ва Grafana дастрасии кофӣ дорем.

Меъёрҳои маҳсулот

Барои роҳат, мо бисёр чизҳоро навиштем. Масалан, маҷмӯи функсияҳои оддӣ мавҷуданд, ки ба шумо имкон медиҳанд, ки арзишҳои ҳисобҳо, UniqueCounts -ро дар омор нависед, ки ба ҷои дигар фиристода мешаванд.

statlogsCountEvent   ( ‘stat_name’,            $key1, $key2, …)
statlogsUniqueCount ( ‘stat_name’, $uid,    $key1, $key2, …)
statlogsValuetEvent  ( ‘stat_name’, $value, $key1, $key2, …)

$stats = statlogsStatData($params)

Баъдан, мо метавонем филтрҳои ҷудокунӣ ва гурӯҳбандиро истифода барем ва ҳама чизеро, ки аз омор мехоҳем, иҷро кунем - графикҳо созем, Watchdogs-ро танзим кунем.

Мо хеле менависем бисёр ченакҳо шумораи ҳодисаҳо аз 600 миллиард то 1 триллион дар як рӯз аст. Бо вуҷуди ин, мо мехоҳем онҳоро нигоҳ дорем камаш як-ду солбарои фаҳмидани тамоюлҳо дар метрика. Хамаи онро як-чоя кардан проблемаи калонест, ки мо онро хануз хал накардаем. Ман ба шумо мегӯям, ки он дар тӯли чанд соли охир чӣ гуна кор мекунад.

Мо функсияҳое дорем, ки ин нишондиҳандаҳоро менависанд ба memcache маҳаллӣбарои кам кардани шумораи дохилшавй. Як маротиба дар як муддати кутох дар махалхо ба кор андохта шуд статистика-демон тамоми сабтҳоро ҷамъ меорад. Баъдан, дев ченакҳоро ба ду қабати серверҳо муттаҳид мекунад кол-лектнвхо, ки омори як даста мошинҳои моро ҷамъ меорад, то қабати паси онҳо намонад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Агар лозим бошад, мо метавонем бевосита ба коллекторҳо нависем.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Аммо навиштан аз код мустақиман ба коллекторҳо, канорагирӣ аз stas-daemom, як ҳалли суст миқёспазир аст, зеро он сарбории коллекторро зиёд мекунад. Ҳалли он мувофиқ аст, агар бо ягон сабаб мо статс-демони memcache-ро дар мошин баланд карда натавонем ё он садама зад ва мо мустақиман рафтем.

Баъдан, коллекторҳои гузоришҳо оморро ба он муттаҳид мекунанд meowDB - ин махзани мост, ки инчунин метавонад ченакҳоро нигоҳ дорад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Он гоҳ мо метавонем аз код интихоби бинарии "наздик-SQL" созем.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Озмоиш

Тобистони соли 2018, мо як хакатони дохилӣ доштем ва идея пайдо шуд, ки кӯшиш кунем, ки қисми сурхи диаграммаро бо чизе иваз кунем, ки ченакҳоро дар ClickHouse нигоҳ дорад. Мо дар ClickHouse гузоришҳо дорем - чаро кӯшиш накунед?

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Мо нақшае доштем, ки тавассути KittenHouse гузоришҳо навишт.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Мо карор додем ба диаграмма боз як «*Хона» илова кунед, ки маҳз ченакҳоро дар формат қабул мекунад, зеро рамзи мо онҳоро тавассути UDP менависад. Он гоҳ ин *Хона онҳоро ба замимаҳо табдил медиҳад, ба монанди чӯбҳо, ки KittenHouse онро мефаҳмад. Вай метавонад ба таври комил ин гузоришҳоро ба ClickHouse расонад, ки бояд онҳоро хонда тавонад.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Схема бо базаи memcache, stats-demon ва logs-collectors бо ин иваз карда шудааст.

Саволҳо оид ба меъморӣ ва кори ВКонтакте

Схема бо базаи memcache, stats-demon ва logs-collectors бо ин иваз карда шудааст.

  • Ин ҷо фиристодани код мавҷуд аст, ки дар StatsHouse ба таври маҳаллӣ навишта шудааст.
  • StatsHouse ченакҳои UDP-ро, ки аллакай ба замимаҳои SQL табдил дода шудаанд, ба KittenHouse дар гурӯҳҳо менависад.
  • KittenHouse онҳоро ба ClickHouse мефиристад.
  • Агар мо хоҳем, ки онҳоро хонем, пас мо онҳоро тавассути StatsHouse - мустақиман аз ClickHouse бо истифода аз SQL муқаррарӣ мехонем.

Оё ҳанӯз ҳам озмоиш, вале ба мо маъкул мешавад, ки он чй тавр ба амал меояд. Агар мо мушкилотро бо схема ислоҳ кунем, пас шояд мо комилан ба он мегузарем. Шахсан ман умедворам.

Нақшаи оҳанро сарфа намекунад. Серверҳои камтар лозиманд, статс-демонҳои маҳаллӣ ва коллекторҳои гузоришҳо лозим нестанд, аммо ClickHouse сервери калонтарро аз серверҳои дар нақшаи ҷорӣ талаб мекунад. Серверҳои камтар лозиманд, аммо онҳо бояд гаронтар ва тавонотар бошанд.

Ҷойгир кардан

Аввалан, биёед ба ҷойгиркунии PHP назар андозем. Мо дар рафтан: истифода баред Гуглаб и TeamCity барои ҷойгиркунӣ. Филиалҳои рушд ба шохаи усто муттаҳид карда мешаванд, аз усто барои санҷиш онҳо ба саҳнасозӣ ва аз саҳнасозӣ ба истеҳсолот муттаҳид карда мешаванд.

Пеш аз ҷойгиркунӣ, шохаи истеҳсолии ҷорӣ ва қаблӣ гирифта мешавад ва дар онҳо файлҳои фарқият баррасӣ карда мешаванд - тағирот: эҷодшуда, нест карда шудаанд, тағир дода шудаанд. Ин тағирот дар бинлоги муҳаррики махсуси copyfast сабт шудааст, ки метавонад тағиротро дар тамоми парки сервери мо зуд такрор кунад. Он чизе, ки дар ин ҷо истифода мешавад, нусхабардорӣ нест, балки такрори ғайбат, вақте ки як сервер тағиротро ба ҳамсояҳои наздики худ мефиристад, онҳоро ба ҳамсояҳояшон ва ғайра. Ин ба шумо имкон медиҳад, ки кодро дар тӯли даҳҳо ва воҳидҳои сония дар тамоми флот навсозӣ кунед. Вақте ки тағирот ба нусхаи маҳаллӣ мерасад, он ин часбҳоро ба он татбиқ мекунад системаи файлии маҳаллӣ. Бозгашт низ аз рӯи ҳамин схема сурат мегирад.

Мо инчунин kPHP-ро зиёд истифода мебарем ва он инчунин рушди худро дорад рафтан мувофиқи диаграммаи боло. Аз ин ру Бинарии сервери HTTP, он гоҳ мо фарқиятро тавлид карда наметавонем - бинарии нашр садҳо МБ вазн дорад. Аз ин рӯ, дар ин ҷо як варианти дигар вуҷуд дорад - версия ба он навишта шудааст binlog copyfast. Бо ҳар як сохтмон он афзоиш меёбад ва ҳангоми бозгашт он низ меафзояд. Версия ба серверҳо такрор карда мешавад. Копифастҳои маҳаллӣ мебинанд, ки версияи нав ба бинлог ворид шудааст ва бо ҳамон такрори ғайбат онҳо версияи охирини бинариро барои худ мегиранд, бидуни хастагӣ сервери устои моро, балки бодиққат бориро дар тамоми шабака паҳн мекунанд. Чӣ пай дубора оғозёбӣ барои версияи нав.

Барои муҳаррикҳои мо, ки аслан дуӣ мебошанд, схема хеле монанд аст:

  • филиали git Master;
  • бинарӣ дар .deb;
  • версия ба binlog copyfast навишта шудааст;
  • ба серверҳо такрор карда мешавад;
  • сервер як .dep тару тозаро мебарорад;
  • dpkg -i;
  • бозсозии зебо ба версияи нав.

Фарқият дар он аст, ки бинарии мо дар архив баста шудааст .deb, ва хангоми баровардани онхо dpkg -i дар система гузошта шудаанд. Чаро kPHP ҳамчун дуӣ ҷойгир карда шудааст ва муҳаррикҳо ҳамчун dpkg ҷойгир карда мешаванд? Ҳамин тавр рӯй дод. Он кор мекунад - ба он даст нарасонед.

Пайвандҳои муфид:

Алексей Акулович аз чумлаи онхоест, ки дар хайати Комитети барномавй ёрй мерасонад PHP Русия 17 май бузургтарин чорабинии таҳиягарони PHP дар вақтҳои охир мегардад. Бингар, ки мо чӣ гуна компютери олӣ дорем, чӣ баромадкунандагон (ду нафари онҳо PHP-ро таҳия мекунанд!) - ба назар чунин менамояд, ки агар шумо PHP нависед, чизеро аз даст дода наметавонед.

Манбаъ: will.com

Илова Эзоҳ