Всё больше и больше разговоров в последнее время занимают облака и технологии, с ними связанные. Многие программисты мечтают о том, чтобы писать масштабируемые и отказоустойчивые приложения было легко и просто. Многим администраторам хочется работать не с разношёрстным зоопарком программ, а в унифицированной и легко управляемой инфраструктуре. Наконец, серверам (наверняка) хочется использовать свои ресурсы на полезные дела, а не на обогрев воздуха.
В Яндексе мы решаем все эти проблемы с помощью собственной opensource технологии под названием Cocaine, которую может использовать любой желающий.
Что такое Cocaine, какие именно инфраструктурные проблемы он решает, какие возможности предоставляет — обо всем этом и пойдёт речь в докладе.
4. https://github.com/cocaine 4
Сервисы
Абстрактные фронтенды к различным
функциям вашей инфраструктуры.
Пишешь один раз (на C++) - используешь на
любом языке.
Готовые решения! Locator, Storage, Logging,
Node, UrlFetching, Elasticsearch …
5. Сервисы: Locator
Раздает информацию о сервисах.
Все, что нужно знать - имя сервиса.
Информация: адрес, версия протокола, API.
Мы не используем IDL - вся информация о сервисах
передается в рантайме.
https://github.com/cocaine 5
6. https://github.com/cocaine 6
Сервисы: Storage
Вряд ли какая облачная платформа
обойдется без облачного хранилища.
Нужна возможность писать, читать и
искать данные.
В нашем случае - это Elliptics.
7. https://github.com/cocaine 7
Сервисы: Node
Контролирует работу приложений.
Доставляет приложения на ноду.
Запускает, останавливает.
Собирает информацию и метрики.
Использует контейнеры для изоляции
приложений!
8. https://github.com/cocaine 8
Сервисы: Application
Приложение - любой пользовательский код.
Используется собственный RPC протокол
(мультиплексирование, каналы).
Event-driven.
Пишем легко с фреймворками.
C++, Java, NodeJs, Go, Python, Ruby, Perl.
9. Сервисы: Logging
Единая точка входа для логов со всех
приложений.
Структуризация логов.
Индексация, полнотекстовый поиск, Elasticsearch.
https://github.com/cocaine 9
10. https://github.com/cocaine 10
Балансировка
Per-application. Автоматическая балансировка
нагрузки для каждого приложения.
IPVS. Динамические веса, мгновенная реакция на
изменения в кластере.
Routing Groups. Расщепление трафика между API-
совместимыми приложениями.
14. Features: Raft
Алгоритм достижения консенсуса в распределенной системе.
Более подробно: http://raftconsensus.github.io
https://github.com/cocaine 14
15. https://github.com/cocaine 15
Features: Raft.Unicorn
Распределенный согласованный сервис
хранения конфигураций с возможностью
оповещения подписчиков об изменениях.
Ближайший аналог - etcd.
16. 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
18. Features: AAA
Авторизация, приложения знали свои права.
Аутентификация, чтобы сервисы были уверены
в подлинности клиентов.
Аккаунтинг, чтобы можно было считать
деньги.
https://github.com/cocaine 18
19. https://github.com/cocaine 19
Features: Debugging
Удаленная отладка приложений в облаке.
Подключение прямо к работающему
приложению
Профилирование.
Определение bottleneck’ов.
20. Improvements: Scheduler
Управление ресурсами.
Распределение нагрузки.
Возможность контролировать ресурсы снизу.
Service Level Agreement.
https://github.com/cocaine 20
21. https://github.com/cocaine 21
Features: HTTP
Некоторым пользователям не нужен наш
протокол. Они хотят просто залить HTTP
приложение без изменений, и чтобы оно
получило все преимущества облака.
Почему бы не дать такую возможность?
22. Features: Distributed tracing
Уникальный id на каждый запрос.
Все логи включают в себя этот id.
Построение дерева вызовов и определение
полного пути запроса.
Профилирование bottleneck’ов.
https://github.com/cocaine 22