cocaine: погружение в облака — Евгений Сафронов
DESCRIPTION
Всё больше и больше разговоров в последнее время занимают облака и технологии, с ними связанные. Многие программисты мечтают о том, чтобы писать масштабируемые и отказоустойчивые приложения было легко и просто. Многим администраторам хочется работать не с разношёрстным зоопарком программ, а в унифицированной и легко управляемой инфраструктуре. Наконец, серверам (наверняка) хочется использовать свои ресурсы на полезные дела, а не на обогрев воздуха. В Яндексе мы решаем все эти проблемы с помощью собственной opensource технологии под названием Cocaine, которую может использовать любой желающий. Что такое Cocaine, какие именно инфраструктурные проблемы он решает, какие возможности предоставляет — обо всем этом и пойдёт речь в докладе.TRANSCRIPT
1
2
Cocaine. Будущее сегодня
Евгений Сафронов, разработчик
Я.Субботник в Минске 30.08.2014
https://github.com/cocaine 3
OverviewOS вашей инфраструктуры.
Kernel & Userspace.
Управление ресурсами.
Сервисы.
Приложения.
Изоляция.
https://github.com/cocaine 4
СервисыАбстрактные фронтенды к различным
функциям вашей инфраструктуры.
Пишешь один раз (на C++) - используешь на
любом языке.
Готовые решения! Locator, Storage, Logging,
Node, UrlFetching, Elasticsearch …
https://github.com/cocaine 5
Сервисы: LocatorРаздает информацию о сервисах.
Все, что нужно знать - имя сервиса.
Информация: адрес, версия протокола, API.
Мы не используем IDL - вся информация о сервисах
передается в рантайме.
https://github.com/cocaine 6
Сервисы: StorageВряд ли какая облачная платформа
обойдется без облачного хранилища.
Нужна возможность писать, читать и
искать данные.
В нашем случае - это Elliptics.
https://github.com/cocaine 7
Сервисы: NodeКонтролирует работу приложений.
Доставляет приложения на ноду.
Запускает, останавливает.
Собирает информацию и метрики.
Использует контейнеры для изоляции
приложений!
https://github.com/cocaine 8
Сервисы: ApplicationПриложение - любой пользовательский код.
Используется собственный RPC протокол
(мультиплексирование, каналы).
Event-driven.
Пишем легко с фреймворками.
C++, Java, NodeJs, Go, Python, Ruby, Perl.
https://github.com/cocaine 9
Сервисы: LoggingЕдиная точка входа для логов со всех
приложений.
Структуризация логов.
Индексация, полнотекстовый поиск, Elasticsearch.
https://github.com/cocaine 10
Балансировка
Per-application. Автоматическая балансировка
нагрузки для каждого приложения.
IPVS. Динамические веса, мгновенная реакция на
изменения в кластере.
Routing Groups. Расщепление трафика между API-
совместимыми приложениями.
11
Что ждет нас впереди?
https://github.com/cocaine 12
Features: Dual-streaming RPCДвухсторонний канал между приложением/сервисом и
пользователем.
https://github.com/cocaine 13
Features: Dispatch graphГибкий протокол в виде дерева
переходов.
Можно реализовывать свои
собственные протоколы.
https://github.com/cocaine 14
Features: RaftАлгоритм достижения консенсуса в распределенной системе.
Более подробно: http://raftconsensus.github.io
https://github.com/cocaine 15
Features: Raft.UnicornРаспределенный согласованный сервис
хранения конфигураций с возможностью
оповещения подписчиков об изменениях.
Ближайший аналог - etcd.
https://github.com/cocaine 16
Structured loggingТеперь Logging Service умеет работать со
структурированными логами.
Приложение само определяет степень
структуризации логов.
Filter
level >= info
{ level: info message: «very important», id: 42, errno: 0, url: «ya.ru» }
Map
17
Взгляд в будущее
https://github.com/cocaine 18
Features: AAAАвторизация, приложения знали свои права.
Аутентификация, чтобы сервисы были уверены
в подлинности клиентов.
Аккаунтинг, чтобы можно было считать
деньги.
https://github.com/cocaine 19
Features: Debugging Удаленная отладка приложений в облаке.
Подключение прямо к работающему
приложению
Профилирование.
Определение bottleneck’ов.
https://github.com/cocaine 20
Improvements: SchedulerУправление ресурсами.
Распределение нагрузки.
Возможность контролировать ресурсы снизу.
Service Level Agreement.
https://github.com/cocaine 21
Features: HTTPНекоторым пользователям не нужен наш
протокол. Они хотят просто залить HTTP
приложение без изменений, и чтобы оно
получило все преимущества облака.
Почему бы не дать такую возможность?
https://github.com/cocaine 22
Features: Distributed tracingУникальный id на каждый запрос.
Все логи включают в себя этот id.
Построение дерева вызовов и определение
полного пути запроса.
Профилирование bottleneck’ов.
Спасибо за внимание!
23