Company Box Location Redwood City, California Industry Technology

Виклик

Заснована у 2005 році, компанія з управління корпоративним контентом дозволяє своїм більш ніж 50 мільйонам користувачів керувати контентом у хмарі. Box був побудований в основному на використанні апаратного забезпечення у власних центрах обробки даних компанії, з монолітною кодовою базою PHP. Оскільки компанія розширювалася в глобальному масштабі, їй потрібно було зосередитися на тому, "як розподіляти робоче навантаження між різними хмарними інфраструктурами — від "bare metal" до публічної хмари", — розповідає Сем Годс, співзасновник і архітектор сервісів Box. "Це було величезним викликом, оскільки різні хмари, особливо "голий метал", мають дуже різні інтерфейси".

Рішення

За останні кілька років Box перевів свою інфраструктуру на мікросервіси і став одним з перших користувачів, а також учасником управління контейнерами з використанням Kubernetes. За словами Годса, Kubernetes дозволив розробникам Box "націлитися на універсальний набір концепцій, які можна перенести на всі хмари".

Вплив

"До Kubernetes, — каже Годс, — наша інфраструктура була настільки застарілою, що розгортання нового мікросервісу займало більше шести місяців. Сьогодні розгортання нового мікросервісу займає менше пʼяти днів. І ми працюємо над тим, щоб скоротити цей час до години".

Влітку 2014 року компанія Box відчувала на собі наслідки десятирічного використання апаратної та програмної інфраструктури, яка не відповідала потребам компанії.

Платформа Box, яка дозволяє понад 50 мільйонам користувачів (включаючи уряди та великі підприємства, такі як General Electric) керувати та обмінюватися контентом у хмарі, спочатку була PHP монолітом із мільйонами рядків коду, побудованим виключно на базі власних центрів обробки даних. Вона вже почала повільно відходити від моноліту, розкладаючи його на мікросервіси. «У міру того, як ми розширюємося в регіонах по всьому світу, а війна за публічну хмару набирає обертів, ми все більше зосереджуємося на тому, щоб зʼясувати, як ми можемо розподілити наші робочі навантаження між багатьма різними середовищами та багатьма різними постачальниками хмарної інфраструктури», — каже співзасновник Box та архітектор послуг Сем Годс. «Досі це було величезним викликом, оскільки всі ці різні провайдери, особливо bare metal, мають дуже різні інтерфейси та способи роботи з ними».

Перехід Box до хмарних технологій прискорився в червні, коли Годс відвідав DockerCon. Компанія усвідомила, що більше не може запускати свої застосунки тільки на серверах, і почала досліджувати можливості контейнеризації за допомогою Docker, віртуалізації за допомогою OpenStack та підтримки публічної хмари.

На цій конференції Google оголосив про випуск своєї системи управління контейнерами Kubernetes, і Годс був вражений. "Ми розглядали багато різних варіантів, але Kubernetes дійсно виділявся, особливо завдяки неймовірно сильній команді ветеранів Borg і баченню повністю незалежного від інфраструктури способу запуску хмарного програмного забезпечення", — каже він, маючи на увазі внутрішній оркестратор контейнерів Google Borg. "Те, що з самого початку вона була розроблена для роботи як звичайнгму компʼютерному обладнанні так само добре, як і в Google Cloud, означало, що ми могли фактично мігрувати на нього всередині наших центрів обробки даних, а потім використовувати ті ж самі інструменти та концепції для роботи з публічними хмарними провайдерами".

Ще один плюс: Годсу сподобалося, що Kubernetes має універсальний набір обʼєктів API, таких як pod, сервіс, набір реплік та обʼєкт розгортання, що створило узгоджену поверхню для створення інструментарію. "Навіть шари PaaS, такі як OpenShift або Deis, які будуються на основі Kubernetes, все ще розглядають ці обʼєкти як першокласні принципи", — каже він. "Ми були в захваті від того, що ці абстракції можна буде використовувати в усій екосистемі, що дасть набагато більший імпульс, ніж ми бачили в інших потенційних рішеннях".

Вже через шість місяців Box розгорнув Kubernetes у кластері в операційному центрі обробки даних. На той час Kubernetes ще перебував у стадії попередньої бета-версії 0.11. Почали з малого: першим завданням, яке команда Годса виконала на Kubernetes, була перевірка API Box, що підтверджує працездатність Box. "Це було зроблено лише для того, щоб написати та розгорнути програмне забезпечення, яке забезпечило б функціонування всього конвеєра", — каже він. Далі зʼявилися декілька демонів, які обробляють завдання, що було "добре і безпечно, тому що в разі будь-яких перебоїв ми не пропускали б синхронні вхідні запити від клієнтів".

Перший сервіс, до якого команда могла підключитися і запитувати інформацію, був запущений через кілька місяців. На той момент, за словами Годса, "ми були задоволені стабільністю кластера Kubernetes. Ми почали переносити деякі сервіси, потім збільшили розмір кластера і перенесли ще кілька, і в результаті в кожному центрі обробки даних залишилося близько 100 серверів, які використовуються виключно для Kubernetes. І це значно розшириться протягом наступних 12 місяців, ймовірно, до сотень, а то й тисяч."

Спостерігаючи за командами, які почали використовувати Kubernetes для своїх мікросервісів, "ми відразу помітили зростання кількості випущених мікросервісів", — зазначає Годс. "Очевидно, існував прихований попит на кращий спосіб створення програмного забезпечення за допомогою мікросервісів, а підвищення гнучкості допомогло нашим розробникам стати більш продуктивними та зробити кращі архітектурні рішення".

"Очевидно, що існував відкладений попит на кращий спосіб створення програмного забезпечення за допомогою мікросервісів, а підвищення гнучкості допомогло нашим розробникам бути більш продуктивними та робити кращий архітектурний вибір".

Годс зазначає, що як першопрохідці, Box пройшов інший шлях, ніж компанії зараз. "Ми, безумовно, чекали, поки певні речі стабілізуються або функції будуть випущені, — каже він. — На початку ми робили чималий внесок [у такі компоненти, як kubectl apply] і чекали, поки Kubernetes випустить кожен з них, а потім ми оновлювали, робили нові внески і так кілька разів. Весь проєкт зайняв близько 18 місяців від нашого першого реального розгортання на Kubernetes до загальної доступності. Якби ми зробили те саме сьогодні, це зайняло б не більше шести місяців".

У будь-якому випадку, Box не довелося вносити надто багато змін до Kubernetes, щоб він запрацював в компанії. "Переважна більшість роботи, яку виконала наша команда для впровадження Kubernetes у Box, полягала в тому, щоб забезпечити його роботу в нашій наявній (і часто застарілій) інфраструктурі, — каже Годс, — наприклад, оновлення нашої базової операційної системи з RHEL6 до RHEL7 або інтеграція в Nagios, нашу інфраструктуру моніторингу. Але загалом Kubernetes виявився надзвичайно гнучким у пристосуванні до багатьох наших обмежень, і ми дуже успішно використовуємо його на нашій власній інфраструктурі".

Можливо, більшим викликом для Box був культурний аспект. "Kubernetes і хмарні технології в цілому представляють собою досить великий зсув парадигми, і він не є поступовим", — каже Гходс. "Ми, по суті, стверджуємо, що Kubernetes вирішить усі проблеми, оскільки він працює правильно і все раптом стає кращим. Але важливо пам'ятати, що він не настільки перевірений, як багато інших рішень на ринку. Не можна сказати, скільки часу знадобилося тій чи іншій компанії, щоб це зробити, тому що їх ще не так багато. Нашій команді довелося по-справжньому боротися за ресурси, тому що наш проєкт був дещо амбітним".

Навчений досвідом, Годс пропонує ці дві поради для компаній, які стикаються з подібними проблемами:

1. Робіть випуски раніше та частіше.

Виявлення сервісів було великою проблемою для Box, і команда мала вирішити, чи створювати тимчасове рішення, чи чекати, поки Kubernetes самостійно задовольнить унікальні вимоги Box. Після довгих дебатів "ми просто почали зосереджуватися на створенні чогось, що працює, а потім вирішили пізніше зайнятися потенційним переходом на більш нативне рішення", — каже Гходс. "Головною метою команди завжди має бути обслуговування реальних випадків використання інфраструктури, незалежно від того, наскільки вони тривіальні. Це допомагає підтримувати імпульс як для самої команди, так і для сприйняття проєкту організацією".

2. Не будьте занадто категоричними щодо того, що ваша компанія повинна абстрагувати від розробників, а що ні.

На початку команда побудувала абстракцію над файлами Docker, щоб переконатися, що образи мають правильні оновлення безпеки. Це виявилося зайвою роботою, оскільки образи контейнерів вважаються незмінними, і ви можете легко просканувати їх після збірки, щоб переконатися, що вони не містять вразливостей. Оскільки управління інфраструктурою за допомогою контейнеризації — це такий стрибкоподібний крок, краще почати з безпосередньої взаємодії з нативними інструментами та вивчення їхніх унікальних переваг і застережень. Абстракцію слід будувати лише після того, як виникне практична потреба в ній.

Зрештою, вплив був потужним. "До Kubernetes, — каже Годс, — наша інфраструктура була настільки застарілою, що розгортання нового мікросервісу займало більше шести місяців. Зараз розгортання нового мікросервісу займає менше пʼяти днів. І ми працюємо над тим, щоб скоротити цей час до години. Звичайно, значна частина цих шести місяців була повʼязана з тим, наскільки зламаними були наші системи, але bare metal за своєю суттю є складною платформою для підтримки, якщо у вас немає такої системи, як Kubernetes, яка допоможе керувати нею".

За оцінками Годса, Box ще кілька років не досягне своєї мети — стати місцем, що на 90 з гаком відсотків працює на Kubernetes. "Ми дуже далекі від того, щоб мати критично важливе, стабільне розгортання Kubernetes, яке приносить багато користі", — каже він. "Зараз близько пʼяти відсотків усіх наших обчислень працює на Kubernetes, і я думаю, що в найближчі шість місяців цей показник становитиме від 20 до 50 відсотків. Ми наполегливо працюємо над тим, щоб уможливити всі випадки використання stateless сервісів, а після цього зосередимось на stateful сервісах".

Насправді, це те, що він бачить для всієї індустрії: Годс прогнозує, що Kubernetes має можливість стати новою хмарною платформою. Kubernetes надає API, сумісний з різними хмарними платформами, включаючи bare metal, і "я не думаю, що люди побачили весь потенціал того, що можливо, коли ви можете програмувати за допомогою одного інтерфейсу", — каже він. "Так само, як AWS змінила інфраструктуру так, що вам більше не потрібно думати про сервери, шафи чи мережеве обладнання, Kubernetes дозволяє зосередитися виключно на контейнерах, які ви використовуєте, що є досить захоплюючим. Ось таке бачення".

Годс вказує на проєкти, які вже знаходяться в розробці або нещодавно випущені для Kubernetes як хмарної платформи: федерація кластерів, і Dashboard UI та оператор etcd від CoreOS. "Я щиро вірю, що це найцікавіше, що я бачив у хмарній інфраструктурі, — каже він, — тому що це небачений раніше рівень автоматизації та інтелекту, що оточує інфраструктуру, яка є переносною та незалежною від будь-якого способу, яким ви можете запускати свою інфраструктуру".

Box, прийнявши на ранньому етапі рішення використовувати власн обладнання, розпочав свою подорож з Kubernetes з необхідності. Але Гходс каже, що навіть якщо сьогодні компанії не мусять бути незалежними від хмарних провайдерів, Kubernetes може незабаром стати галузевим стандартом, оскільки все більше інструментів і розширень створюються на основі API.

"Так само, як не має сенсу відходити від Linux, оскільки це такий стандарт, — каже Годс, — я думаю, що Kubernetes йде тим самим шляхом. Поки що це тільки початок — документація ще потребує доопрацювання, а досвід користувачів щодо написання та публікації специфікацій для кластерів Kubernetes все ще є недосконалим. Коли ви перебуваєте на передовій, можна очікувати невеликих втрат. Але суть у тому, що саме в цьому напрямку рухається галузь. Через три-пʼять років буде справді шокуючим, якщо ви будете керувати своєю інфраструктурою будь-яким іншим способом".