Tupperware: Facebook-тің Kubernetes өлтірушісі?

Tupperware көмегімен кез келген масштабтағы кластерлерді тиімді және сенімді басқару

Tupperware: Facebook-тің Kubernetes өлтірушісі?

Бүгін қосулы Жүйелер @Scale конференциясы біз барлық дерлік қызметтерімізді басқаратын миллиондаған серверлерде контейнерлерді реттейтін кластерлік басқару жүйемізді Tupperware енгіздік. Біз Tupperware-ді алғаш рет 2011 жылы орналастырдық, содан бері инфрақұрылымымыз одан әрі өсті. 1 деректер орталығы бүтінге дейін 15 гео-таратылған деректер орталығы. Осы уақыт бойы Tupperware бір орында тұрмай, бізбен бірге дамыды. Біз сізге Tupperware бірінші дәрежелі кластерді басқаруды, оның ішінде күйді көрсететін қызметтерге ыңғайлы қолдауды, барлық деректер орталықтары үшін бірыңғай басқару тақтасын және нақты уақытта қызметтер арасында сыйымдылықты бөлу мүмкіндігін қамтамасыз ететінін көрсетеміз. Инфрақұрылымымыз дамып келе жатқанда біз алған сабақтарымызбен де бөлісетін боламыз.

Tupperware әртүрлі тапсырмаларды орындайды. Қолданбаларды әзірлеушілер оны қолданбаларды жеткізу және басқару үшін пайдаланады. Ол қолданба кодын және тәуелділіктерді кескінге буып, оны серверлерге контейнер ретінде жеткізеді. Контейнерлер бір сервердегі қолданбалар арасындағы оқшаулауды қамтамасыз етеді, осылайша әзірлеушілер қолданба логикасымен айналысады және серверлерді табу немесе жаңартуларды басқару туралы алаңдамауы керек. Tupperware сонымен қатар сервердің жұмысын бақылайды, егер ол ақаулық тапса, ол проблемалы серверден контейнерлерді тасымалдайды.

Сыйымдылықты жоспарлау инженерлері Tupperware бағдарламасын бюджет пен шектеулер негізінде командаларға сервер сыйымдылығын бөлу үшін пайдаланады. Олар оны серверді пайдалануды жақсарту үшін де пайдаланады. Деректер орталығының операторлары контейнерлерді деректер орталықтары бойынша дұрыс тарату және техникалық қызмет көрсету кезінде контейнерлерді тоқтату немесе жылжыту үшін Tupperware бағдарламасына жүгінеді. Осының арқасында серверлерге, желілерге және жабдықтарға қызмет көрсету адамның минималды араласуын талап етеді.

Tupperware архитектурасы

Tupperware: Facebook-тің Kubernetes өлтірушісі?

Tupperware PRN архитектурасы біздің деректер орталықтарымыздың аймақтарының бірі болып табылады. Аймақ жақын жерде орналасқан бірнеше деректер орталығының ғимараттарынан (PRN1 және PRN2) тұрады. Біз бір аймақтағы барлық серверлерді басқаратын бір басқару панелін жасауды жоспарлап отырмыз.

Қолданбаларды әзірлеушілер Tupperware тапсырмалары түрінде қызметтерді жеткізеді. Тапсырма бірнеше контейнерлерден тұрады және олардың барлығы әдетте бірдей қолданба кодын іске қосады.

Tupperware контейнерлерді қамтамасыз етуге және олардың өмірлік циклін басқаруға жауапты. Ол бірнеше құрамдас бөліктерден тұрады:

  • Tupperware интерфейсі пайдаланушы интерфейсі, CLI және Tupperware бағдарламасымен өзара әрекеттесуге болатын басқа автоматтандыру құралдары үшін API интерфейстерін қамтамасыз етеді. Олар Tupperware жұмыс иелерінен бүкіл ішкі құрылымды жасырады.
  • Tupperware Scheduler — контейнер мен жұмыстың өмірлік циклін басқаруға жауапты басқару тақтасы. Ол аймақтық және жаһандық деңгейлерде орналастырылған, мұнда аймақтық жоспарлаушы бір аймақтағы серверлерді басқарады және жаһандық жоспарлаушы әртүрлі аймақтардағы серверлерді басқарады. Жоспарлаушы бөліктерге бөлінеді және әрбір бөлік тапсырмалар жинағын басқарады.
  • Tupperware's Scheduler проксиі ішкі бөлшектеуді жасырады және Tupperware пайдаланушылары үшін ыңғайлы бір шыны панелін қамтамасыз етеді.
  • Tupperware бөлгіші контейнерлерді серверлерге тағайындайды. Жоспарлаушы контейнерлерді тоқтатуды, іске қосуды, жаңартуды және ауыстыруды өңдейді. Қазіргі уақытта бір бөлуші бөліктерге бөлінбестен бүкіл аймақты басқара алады. (Терминологиядағы айырмашылыққа назар аударыңыз. Мысалы, Tupperware бағдарламасындағы жоспарлаушы басқару тақтасына сәйкес келеді Kubernetes, ал Tupperware бөлгіші Кубернетесте жоспарлаушы деп аталады.)
  • Ресурс брокері сервер мен қызмет оқиғалары үшін ақиқат көзін сақтайды. Біз әрбір деректер орталығы үшін бір ресурс брокерін іске қосамыз және ол сол деректер орталығындағы серверлер туралы барлық ақпаратты сақтайды. Ресурс брокері және сыйымдылықты басқару жүйесі немесе ресурстарды қамтамасыз ету жүйесі қай жоспарлаушы жеткізуі қай серверді басқаратынын динамикалық түрде шешеді. Денсаулықты тексеру қызметі серверлерді бақылайды және олардың денсаулығы туралы деректерді ресурс брокерінде сақтайды. Серверде ақаулар болса немесе техникалық қызмет көрсету қажет болса, ресурс брокері бөлуші мен жоспарлаушыға контейнерлерді тоқтату немесе оларды басқа серверлерге жылжыту туралы айтады.
  • Tupperware агенті - контейнерлерді дайындау мен жоюды басқаратын әрбір серверде жұмыс істейтін демон. Қолданбалар контейнер ішінде жұмыс істейді, бұл оларға көбірек оқшаулау мен қайталану мүмкіндігін береді. Қосулы өткен жылғы Systems @Scale конференциясы Біз жеке Tupperware контейнерлерінің кескіндер, btrfs, cgroupv2 және systemd көмегімен қалай жасалатынын жоғарыда сипаттадық.

Tupperware бағдарламасының ерекше белгілері

Tupperware көптеген жолдармен Kubernetes және сияқты басқа кластерді басқару жүйелеріне ұқсас Мезос, бірақ айырмашылықтар да бар:

  • Мемлекеттік қызметтерге кірістірілген қолдау.
  • Ниет, кластерлерді пайдаланудан шығару және техникалық қызмет көрсету негізінде контейнерлерді жеткізуді автоматтандыру үшін әртүрлі деректер орталықтарындағы серверлерге арналған бірыңғай басқару тақтасы.
  • Масштабтау үшін басқару тақтасының бөлінуін тазалаңыз.
  • Серпімді есептеулер нақты уақыт режимінде қызметтер арасында қуатты бөлуге мүмкіндік береді.

Біз бұл керемет мүмкіндіктерді үлкен жаһандық ортақ серверлер флотында азаматтығы жоқ және күйі бар түрлі қолданбаларды қолдау үшін әзірледік.

Мемлекеттік қызметтерге кірістірілген қолдау.

Tupperware Facebook, Instagram, Messenger және WhatsApp үшін тұрақты өнім деректерін сақтайтын түрлі маңызды күй қызметтерін басқарады. Бұл кілт-мән жұптарының үлкен қоймалары болуы мүмкін (мысалы, ZippyDB) және деректер репозиторийлерін бақылау (мысалы, ODS горилла и Скуба). Мемлекеттік қызметтерді сақтау оңай емес, өйткені жүйе контейнерлерді жеткізу желідегі үзілістерді немесе электр қуатын өшіруді қоса алғанда, ауқымды үзілістерге төтеп бере алатынын қамтамасыз етуі керек. Контейнерлерді ақаулы домендер бойынша тарату сияқты кәдімгі әдістер азаматтығы жоқ қызметтер үшін жақсы жұмыс істегенімен, мемлекеттік қызметтер қосымша қолдауды қажет етеді.

Мысалы, сервер қатесі бір дерекқор репликасын қолжетімсіз етсе, 50 10 пулындағы 50 сервердегі ядроларды жаңартатын автоматты техникалық қызмет көрсетуді қосу керек пе? Жағдайға байланысты. Егер осы 2 сервердің біреуінде сол дерекқордың басқа көшірмесі болса, бірден XNUMX репликаны жоғалтпау және күту жақсы. Жүйеге техникалық қызмет көрсету және өнімділік туралы шешімді динамикалық түрде қабылдау үшін бізге деректердің ішкі репликациясы және әрбір күйі бар қызметтің орналастыру логикасы туралы ақпарат қажет.

TaskControl интерфейсі күйі бар қызметтерге деректер қолжетімділігіне әсер ететін шешімдерге әсер етуге мүмкіндік береді. Бұл интерфейсті пайдалана отырып, жоспарлаушы сыртқы қолданбаларға контейнерлік операциялар (қайта іске қосу, жаңарту, тасымалдау, техникалық қызмет көрсету) туралы хабарлайды. Күйі бар қызмет Tupperware бағдарламасына әрбір операцияны орындау қауіпсіз болған кезде хабарлайтын контроллерді жүзеге асырады және бұл әрекеттерді уақытша ауыстыруға немесе кейінге қалдыруға болады. Жоғарыдағы мысалда дерекқор контроллері Tupperware-ге 49 сервердің 50-ын жаңартуды айта алады, бірақ нақты серверді (X) әзірше жалғыз қалдырыңыз. Нәтижесінде, ядроны жаңарту кезеңі өтіп кетсе және дерекқор әлі де проблемалық көшірмені қалпына келтіре алмаса, Tupperware әлі де X серверін жаңартады.

Tupperware: Facebook-тің Kubernetes өлтірушісі?

Tupperware-дегі көптеген мемлекеттік қызметтер TaskControl функциясын тікелей емес, ShardManager арқылы пайдаланады, бұл Facebook-те күй қызметтерін жасауға арналған ортақ платформа. Tupperware көмегімен әзірлеушілер деректер орталықтары бойынша контейнерлердің нақты қалай бөліну керектігі туралы өз ниеттерін көрсете алады. ShardManager көмегімен әзірлеушілер деректер бөліктерінің контейнерлер бойынша қалай таратылу керектігін анықтайды. ShardManager қолданбаларының деректердің орналасуы мен репликациясын біледі және қолданбаның тікелей қатысуынсыз контейнерлік операцияларды жоспарлау үшін TaskControl интерфейсі арқылы Tupperware бағдарламасымен байланысады. Бұл біріктіру мемлекеттік қызметтерді басқаруды айтарлықтай жеңілдетеді, бірақ TaskControl одан да көп нәрсені жасай алады. Мысалы, біздің кең ауқымды веб-деңгейіміз азаматтығы жоқ және контейнерлердегі жаңартулар жылдамдығын динамикалық реттеу үшін TaskControl пайдаланады. Ақырында веб-деңгейі бағдарламалық құралдың бірнеше шығарылымдарын жылдам аяқтауға қабілетті қолжетімділікке нұқсан келтірместен күніне.

Деректер орталықтарындағы серверлерді басқару

Tupperware алғаш рет 2011 жылы іске қосылғанда, әрбір сервер кластерін бөлек жоспарлаушы басқарды. Ол кезде Facebook кластері бір желі қосқышына қосылған сервер сөрелерінің тобы болды және деректер орталығында бірнеше кластерлер болды. Жоспарлаушы тек бір кластердегі серверлерді басқара алады, яғни тапсырма бірнеше кластерлерге тарай алмайды. Инфрақұрылымымыз өсті, біз кластерлерді есептен шығардық. Tupperware жұмысты өшірілген кластерден басқа кластерлерге өзгеріссіз жылжыта алмайтындықтан, қосымшаларды әзірлеушілер мен деректер орталығының операторлары арасында көп күш пен мұқият үйлестіруді қажет етті. Бұл процесс пайдаланудан шығару процедураларына байланысты серверлер айлар бойы бос тұрғанда ресурстардың ысырап болуына әкелді.

Біз кластерді пайдаланудан шығару мәселесін шешу және техникалық қызмет көрсету тапсырмаларының басқа түрлерін үйлестіру үшін ресурс брокерін жасадық. Ресурс брокері сервермен байланысты барлық физикалық ақпаратты қадағалайды және әрбір серверді қандай жоспарлаушы басқаратынын динамикалық түрде шешеді. Серверлерді жоспарлаушылармен динамикалық байланыстыру жоспарлаушыға әртүрлі деректер орталықтарындағы серверлерді басқаруға мүмкіндік береді. Tupperware жұмысы енді бір кластермен шектелмейтіндіктен, Tupperware пайдаланушылары ақаулық домендері бойынша контейнерлердің қалай таратылу керектігін көрсете алады. Мысалы, әзірлеуші ​​нақты қол жетімділік аймақтарын көрсетпей-ақ өз ниетін жариялай алады (айталық: «жұмысымды PRN аймағындағы 2 қате доменінде іске қосу»). Tupperware өзі бұл ниетті жүзеге асыру үшін қолайлы серверлерді табады, тіпті кластер немесе қызмет тоқтатылған болса да.

Бүкіл жаһандық жүйені қолдау үшін масштабталады

Тарихи түрде біздің инфрақұрылым жеке командаларға арналған жүздеген арнайы сервер пулдарына бөлінген. Бөлшектену мен стандарттардың болмауына байланысты бізде операциялық шығындар жоғары болды, ал бос тұрған серверлерді қайта пайдалану қиынырақ болды. Өткен жылғы конференцияда Жүйелер @Scale ұсындық қызмет ретінде инфрақұрылым (IaaS), ол біздің инфрақұрылымды үлкен бір серверлік паркке біріктіруі керек. Бірақ бір серверлік парктің өзіндік қиындықтары бар. Ол белгілі бір талаптарға сай болуы керек:

  • Масштабтау мүмкіндігі. Әр аймақта деректер орталықтарын қосқан сайын инфрақұрылымымыз өсті. Серверлер кішірейді және энергияны үнемдейді, сондықтан әр аймақта олардың саны көбірек. Нәтижеде, әр аймақтағы бір жоспарлаушы әр аймақтағы жүздеген мың серверлерде іске қосуға болатын контейнерлер санын өңдей алмайды.
  • Сенімділік. Жоспарлаушыны соншалықты үлкейтуге болатын болса да, жоспарлаушының үлкен ауқымы қателер қаупі жоғары екенін және контейнерлердің бүкіл аймағын басқару мүмкін болмайтынын білдіреді.
  • Ақауларға төзімділік. Үлкен инфрақұрылым ақауы болған жағдайда (мысалы, жоспарлаушыны іске қосатын серверлер желі ақаулығына немесе электр қуатының үзілуіне байланысты істен шығады), жағымсыз салдар аймақтағы серверлердің бір бөлігіне ғана әсер етуі керек.
  • Пайдаланудың қарапайымдылығы. Бір аймақ үшін бірнеше тәуелсіз жоспарлаушыны іске қосу қажет болып көрінуі мүмкін. Бірақ ыңғайлылық тұрғысынан аймақтың ортақ пулына кірудің бір нүктесі қуат пен жұмыс орындарын басқаруды жеңілдетеді.

Үлкен ортақ пулды сақтау мәселелерін шешу үшін жоспарлаушыны бөліктерге бөлдік. Әрбір жоспарлаушы бөлігі аймақтағы жұмыстардың жеке жинағын басқарады және бұл жоспарлаушымен байланысты тәуекелді азайтады. Ортақ пул ұлғайған сайын біз қосымша жоспарлаушы бөліктерін қоса аламыз. Tupperware пайдаланушылары үшін үзінділер мен жоспарлаушы проксилері бір басқару тақтасына ұқсайды. Оларға тапсырмаларды орындайтын көптеген сынықтармен жұмыс істеудің қажеті жоқ. Жоспарлағыш бөлшектері серверлердің ортақ пулын желі топологиясына сәйкес статикалық түрде бөлусіз басқару тақтасы бөлінген кезде біз бұрын пайдаланған кластерлік жоспарлаушылардан түбегейлі ерекшеленеді.

Серпімді есептеулер көмегімен пайдалану тиімділігін арттырыңыз

Инфрақұрылымымыз неғұрлым үлкен болса, инфрақұрылымдық шығындарды оңтайландыру және жүктемені азайту үшін серверлерді тиімді пайдалану соғұрлым маңызды. Серверді пайдалану тиімділігін арттырудың екі жолы бар:

  • Серпімді есептеулер - тыныш сағаттарда онлайн қызметтерді кішірейтіңіз және машиналық оқыту және MapReduce тапсырмалары сияқты офлайн жұмыс жүктемелері үшін босатылған серверлерді пайдаланыңыз.
  • Шамадан тыс жүктелу - топтамалық жұмыс жүктемелері төмен басымдықпен жұмыс істеуі үшін желілік қызметтер мен пакеттік жұмыс жүктемелерін бірдей серверлерге орналастырыңыз.

Біздің деректер орталықтарындағы кедергі қуатты пайдалану. Сондықтан біз бірге көбірек өңдеу қуатын қамтамасыз ететін шағын, энергияны үнемдейтін серверлерді таңдаймыз. Өкінішке орай, процессоры мен жады аз шағын серверлерде шамадан тыс жүктеу тиімді емес. Әрине, біз процессор ресурстары мен жадты аз тұтынатын шағын энергияны үнемдейтін серверге шағын қызметтердің бірнеше контейнерін орналастыра аламыз, бірақ бұл жағдайда үлкен қызметтердің өнімділігі төмен болады. Сондықтан, біз ірі қызметтерді әзірлеушілерге бүкіл серверлерді пайдалану үшін оларды оңтайландыруға кеңес береміз.


Негізінде біз серпімді есептеулерді пайдалана отырып, пайдалану тиімділігін арттырамыз. Жаңалықтар арнасы, Хабар алмасу мүмкіндігі және алдыңғы веб-деңгейі сияқты көптеген негізгі қызметтеріміз күннің уақытына байланысты өзгереді. Біз тыныш сағаттарда онлайн қызметтерді әдейі кішірейтеміз және машиналық оқыту және MapReduce тапсырмалары сияқты офлайн жұмыс жүктемелері үшін босатылған серверлерді қолданамыз.

Tupperware: Facebook-тің Kubernetes өлтірушісі?

Тәжірибеден білеміз, бүкіл серверлерді серпімді сыйымдылық бірлігі ретінде қамтамасыз еткен дұрыс, өйткені үлкен қызметтер негізгі донорлар және серпімді сыйымдылықтың негізгі тұтынушылары болып табылады және бүкіл серверлерді пайдалану үшін оңтайландырылған. Сервер тыныш сағаттарда онлайн қызметтен босатылған кезде, ресурс брокер ондағы желіден тыс жұмыс жүктемелерін іске қосу үшін серверді жоспарлаушыға жалға береді. Егер онлайн қызмет ең жоғары жүктемені сезінсе, ресурс брокері қарызға алынған серверді тез шақырады және жоспарлаушымен бірге оны онлайн қызметке қайтарады.

Алған сабақтары мен болашаққа жоспарлары

Соңғы 8 жыл ішінде біз Facebook-тің қарқынды өсуіне ілесу үшін Tupperware-ті дамыттық. Біз білгендерімізбен бөлісеміз және ол басқаларға жылдам дамып келе жатқан инфрақұрылымдарды басқаруға көмектеседі деп үміттенеміз:

  • Басқару тақтасы мен ол басқаратын серверлер арасында икемді қосылымды орнатыңыз. Бұл икемділік басқару тақтасына әртүрлі деректер орталықтарындағы серверлерді басқаруға мүмкіндік береді, кластерлерді пайдаланудан шығаруды және техникалық қызмет көрсетуді автоматтандыруға көмектеседі және серпімді есептеулерді пайдаланып динамикалық сыйымдылықты бөлуге мүмкіндік береді.
  • Аймақтағы жалғыз басқару тақтасының көмегімен тапсырмалармен жұмыс істеу ыңғайлырақ болады және үлкен ортақ серверлер паркін басқару оңайырақ болады. Басқару тақтасының ішкі құрылымы масштаб немесе ақауға төзімділік себептері бойынша бөлінген болса да, бір кіру нүктесін сақтайтынын ескеріңіз.
  • Плагин үлгісін пайдалана отырып, басқару тақтасы алдағы контейнер әрекеттері туралы сыртқы қолданбаларды хабарлай алады. Сонымен қатар, күйді көрсететін қызметтер контейнерді басқаруды теңшеу үшін плагин интерфейсін пайдалана алады. Бұл плагин үлгісімен басқару тақтасы көптеген әртүрлі күй қызметтеріне тиімді қызмет көрсете отырып, қарапайымдылықты қамтамасыз етеді.
  • Пакеттік тапсырмалар, машиналық оқыту және басқа да шұғыл емес қызметтер үшін донорлық қызметтерден бүкіл серверлерді алып тастайтын серпімді есептеулер шағын, энергияны үнемдейтін серверлердің тиімділігін арттырудың оңтайлы жолы деп санаймыз.

Біз енді ғана жүзеге асыруға кірісіп жатырмыз бірыңғай ғаламдық ортақ серверлер флоты. Қазіргі уақытта серверлеріміздің шамамен 20% ортақ пулда. 100%-ға қол жеткізу үшін ортақ сақтау пулын қолдау, техникалық қызмет көрсетуді автоматтандыру, жалға берушілер арасындағы талаптарды басқару, серверді пайдалануды жақсарту және машиналық оқу жұмыс жүктемелеріне қолдау көрсетуді қоса алғанда, көптеген мәселелерді шешу қажет. Біз бұл қиындықтарды жеңіп, жетістіктерімізбен бөлісуді күте алмаймыз.

Ақпарат көзі: www.habr.com

пікір қалдыру