Pull to refresh

Comments 65

А сервис не попадает на учет Роскомадзора? За распространие Cocaine то?
Вот да, Мизулина уже взялась за Яндекс.Браузер, а как узнает что в нем еще и Cocaine есть — ух, что начнется!
Замечу, что Cocaine не сервис, а технология.
Воистину. Вы правы, просто на языке крутилось выражение «Облачный сервис».
Уже представляю, как принесу бухгалтеру счет на оплату кокаина.
Почти чувствую себя рок-звездой!
— Как работает ваш сервис?
— Ну знаете, это как-бы облако и оно сделано из кокаина…
Хорошо хоть это облако не повторяет форму Украины.
Передайте от меня огромный респект Вашему графическому редактору!
Наверное у меня проблема с восприятием, но я долго тупил в картинку, да она наверное красивая, но понимания не добавила совсем.
Но ясно показала кашу в голове этого самого дизайнера, или наличие веществ…
Что-то куда-то подключается замешивается на кокаине, переключается и соединяется, иии вот результат.
Я про графический контент во всей серии статей в совокупности.
Я уже жалею что Яндекс обозвал это все кокаином. Не потому, что наркотики и все дела, а потому что горе-шутники хабра под каждым постом начинают извергать из себя шутки в стиле «хаха, кокаин, роскомнадзор, вы что курили?»
Уверен что Яндекс знал на что шел, когда так называл свою технологию.
Возможно это запланированный тролинг
это хороший повод посмотреть, кто адекватен, а кто нет :)
То есть сначала дать технологии название на грани фола, а потом негодовать почему так много внимания уделяется названию — адекватность?
Ну если отвечать лично за себя — да, это хороший индикатор тех, кто адекватный. если человек не может/не хочет понимать суть, но озабочен высказыванием своего мнение и думает, что это кому-то важно, это да, индикатив :)
Вы же тоже знали, на что шли, выбирая никнейм на Хабре :)
Конечно знал, это уже не первый мой никнейм с отвратительным смыслом и юзерпиком :) Так проще получить бейджик «Тролль».
UFO just landed and posted this here
Вы так говорите, как будто в этом есть что-то плохое.
Наконец-то! Давно ждал эту статью. Несколько раз уже пытался собрать кокаин. Все никак не получалось. То части зависимостей не достает, то компилятор с ошибками валится. (собирал на разных версиях убунты под докером)
Спасибо.
Сразу вопрос номер раз:
Описанное в статье реально развернуть на пяти контейнерах в докере?
Или лучше отдельные виртуалки в virtualbox заводить?
Кстати, совсем круто было бы, если бы вы опубликовали линки на уже настроенные образы (*.ovf) виртуалок.
Я разворачивал это на пяти вируталках с помощью Vagrant. Это были голые виртуалки, чтобы описывать реальный процесс установки и ничего не забыть. Box для Vagrant с precise и нужным ядром можно взять отсюда repo.reverbrain.com/vagrant-base/. Главное, чтобы multicast бегал между виртуалками и ядро было подходящее. А насчет запустить каждый элемент внутри контейнера — можно попробовать, получится здорово. Главное иметь ввиду неизменяемость контейнеров и пробрасывать внешние директории внутрь. Например, чтобы каталог, где Elliptics хранит данные, был проброшен с реальной машины, иначе после рестарта данных не будет.
Ну для тестов это и хорошо, что данных не останется.
А почему на первой картинке между программистом и облаком есть кот, а на второй его уже нету. С ним всё хорошо?
Безусловно да! За спиной программиста есть диванчик и котик пошел полежать.
Человек и кошка плачут у окошка
Серый дождик каплет прямо на стекло.
К человеку с кошкой едет неотложка,
Человеку бедному мозг больной свело…
Yandex едет, едет сквозь снежную равнину,
Cocaine целебный людям он везёт.
Мне из творчества этого автора больше нравится песня про индейца =) Без подтекста
На первой картинке и с перспективой косяк: облако висит над подоконником, а дождь идёт на улицу. Значит ли это, что данные будут сливаться наружу?
Заметьте, что человек успел переодеться за время смены картинки. Кроме того, на первом рисунке у него на столе какие-то банки, и у человека руки на клаве. На второй картинке банок уже нет и человек держится за стол.

Что с ним случилось?
Планируется ли cocaine-сервис? Возможно независимо от яндекса? Может хотя бы в демо-режиме?
Субъективно, все-таки сложновато это поднять, много шагов.
Немного смущают 2 вещи.
1) Я, наверное, запутался, но для деплоя надо каждый раз грузить новый контейнер целиком на сервер или он там как-то diff делает? Просто контейнер с ubuntu неплохо так весит — порядка 700 мегов.
Почему просто не используете git push, как на Heroku?
2) Все это заведется без Elliptics? С еще одним key-value store не тянет разбираться, хватает уже существующих. Было бы круто посмотреть, как это будет работать с чем-то более обыденным в отдельном контейнере, например, с Redis.
А в целом, отличное начинание.
1) Docker собирает контейнеры слоями. Например, базовый слой — ubuntu, второй слой python, третий слой конфиги, четвертый слой статика и тд. Подтягиваются только слои, начиная с измененного. Если ничего не изменили в первом и втором слое, то будут отдельно загружены только слои 3 и 4.
Что касается git push, то мы работаем на этим. Однако, чтобы получить полностью желаемый контейнер, желательно сделать Dockerfile (или Chef/Pupper). Безусловно Heroku, определив язык вашего приложения, попытается выполнить установку зависимостей. Но при этом поставить бинарные зависимости для python не может.
2) У нас нет плагина, чтобы обеспечить поддержку Redis. Но его можно сделать.
По поводу пункта 2.
А насколько трудоемка разработка плагинов?
Допустим, у меня есть своя какая-то key-value БД с доступом по HTTP-протоколу. Команды SET/GET/DEL.
Насколько сложно разработать плагин для такой БД?
Если хотите сделать из нее сторадж для хранения кода, то необходимо реализовать вот такой интерфейс:
github.com/cocaine/cocaine-core/blob/v0.11/include/cocaine/api/storage.hpp
В качестве примера можно рассмотреть:
— файловый (встроенный) сторадж
github.com/cocaine/cocaine-core/blob/v0.11/src/storages/files.cpp
— плагин на основе GridFS MongoDB github.com/cocaine/cocaine-plugins/tree/master/mongo

Если же желание использовать эту БД, как некий абстрактный сервис, то тут зависит от фантазии ).
Можно посмотреть вот
github.com/cocaine/cocaine-plugins/tree/master/elasticsearch
github.com/cocaine/cocaine-plugins/tree/master/chrono

В подробностях будет в следующей статье. Но можно спрашивать и до неё, если будут какие-то вопросы.
Ребята спасибо за пост и за то что делаете вообще.
Очень хочется прочитать про dev окружение и отладку в нем:
Как это все поднимать на dev тачке?
как оперативно и без геммороя отлаживать?
Быстро поднять dev себе на ноутбуке можно используя vagrant github.com/cocaine/cocaine-vagrant/tree/v0.11. Самый быстрый способо получить dev.
Можно про второй вопрос чуть шире? Потому как подходы к отладке они разные в зависимости от кода. Кому-то нужен DTrace для Nodejs, а так и gdb внутри койнера запускали в аттачились к запущенному воркеру.

Из стандартных средств: всегда есть логи, корки. Насколько мне известно, в некоторых очень крупных облаках, набор тот же.
Да вот к примеру я хочу написать приложение для кокаина которое работает с eliptics с postgresql и еще с парачку сервисами из cocaine вот как это все дело отлаживать в dev окружении.
Понятно что писать код, пушить его в «dev» инфраструктуру и отлаживать там не очень удобно.
Учитывая то, что eliptics вы будете дергать через тот же cocaine клиент, а postgresql через родной драйвер. То не важно где и как выполняется ваш код. Можно отладить максимально большую часть без загрузки его в облако. И только потом уже начинать тестирование там. Ведь по сути своей это все обычные приложения, некоторые моменты можно заменить заглушками. А там уже логирование.
Это все понятно, но если приложение сложное и надо прогнать всю связку, тут придется попотеть.
Вот к примеру у django+celery можно поднимать командой инфраструктуру у себя на машине, вот если-бы такая возможность была, было бы гораздо проще.
Да, но по мне так тут будет оправдан Unix-like подход, законченные небольшие приложения, выполняющие одну задачу, а не сложные GodApp. И стартуют быстрее, и точек отказа меньше. Но это все вопрос архитектуры.
Согласен, это true-way, но к сожалению есть legacy код, либо рефакторить-разносить, либо как-то подружить.
Вариант с подружить гораздо интереснее :)
Вот вы пишете про балансировку между версиями приложения. Просто разбрасывая по весам. Но это какой-то выраженный случай.
Умеет ли ваш балансер запоминать пользователя? Что бы дальше его уже на определенную ноду кидать.
Кидать на определенную ноду нет смысл, так как воркеры это сущности без состояния.

Но можно сделать больше. Можно написать приложение-балансировщик. Так как из одного приложения, легко звать другое, то реализуемо следующее. Вы можете анализитровать приходящий запрос как угодно, использовать любую информацию из него, принимать решение на основе любой логики, которую сами напишите. Например, анализируя содержимое хедеров (если речь, про HTTP). Это достаточно гибко.
1) Docker собирает контейнеры слоями. Например, базовый слой — ubuntu, второй слой python, третий слой конфиги, четвертый слой статика и тд. Подтягиваются только слои, начиная с измененного. Если ничего не изменили в первом и втором слое, то будут отдельно загружены только слои 3 и 4.
Что касается git push, то мы работаем на этим. Однако, чтобы получить полностью желаемый контейнер, желательно сделать Dockerfile (или Chef/Pupper). Безусловно Heroku, определив язык вашего приложения, попытается выполнить установку зависимостей. Но при этом поставить бинарные зависимости для python не может.
2) У нас нет плагина, чтобы обеспечить поддержку Redis. Но его можно сделать.
Какие проблемы с изоляцией контейнеров существуют по сравнению с полностью изолированными виртуальными машинами?
а что понимается под полностью изолированными виртуалками? KVM?
Скорее всего нет, потому как мы его не используем. Но если запросов будет много, то постараемся что-нибудь придумать.
На 14.04 после ее выхода пакеты в какое-то обозримое время появятся или года через два? :)

Я почему спрашиваю — для 13.10 собираю пакеты самостоятельно, в принципе, это не трудно, но вот с grape, например, проблемы, а без него не заводится historydb… Пичаль-пичаль.
мне не удалось обнаружить зависимость от grape в historydb. Можно больше подробностей?
В исходниках то может и нет.

github.com/reverbrain/historydb

Firstly, __complete__ elliptics tutorial. It is __neccessary__ to start work with elliptics.


Идём туда…

Build from source

Eblob
Elliptics
Cocaine Core
Cocaine Framework Python
Cocaine Framework Native
Swarm
Grape


Дисциплинированный читатель, привыкший к тому, что документацию надо читать, а не проглядывать по диагонали, поймет это именно так, а не иначе.

Да и какая разница, по большому счету, нужен ли Grape именно для HistoryDB или сам по себе. Все равно ведь ломается (это для cocaine-core достаточно просто CMakeLists.txt подправить). Я сейчас даже не уверен, что по пути к концу tutorial'a ломается именно Grape, а не Swarm. Завтра прогоню билд и напишу точнее.
В общем да, память подвела, grape там не нужен.

Нужны

  1. swarm (который собирался тоже не без приключений)
  2. fastcgi-daemon2 — исходники которого надо еще гуглить. Cлава богу, хоть находятся в странном месте github.com/golubtsov/Fastcgi-Daemon

    В этом ваша в Яндексе главная беда, все поразбросали по разным местам, половина вон на github.com/reverbrain/, другая половина на github.com/cocaine/, документация то там, то здесь, то еще вон там, частенько друг другу противоречит, пока разберешься, где свежее, где старье, на которое давно забили, а удалить руки не дошли… Ради бога, сложите всё на reverbrain, раз уж завелось специальное место и более менее живое. Остальное удалите нафиг, чтобы не гуглилось и не запутывало людей.


  3. В общем, historydb не собирается даже на precise… gist.github.com/cadmi/5e037df4c8e23bce552a
ответственные лица говорят, что зачинили. Попробуйте, пожалуйста!
А как дела обстоят с websocket в cocaine?
Т.к. это постоянные соединения, то наверное должна быть какая-то прокся которая грамотно могла бы разруливать соединения с end-point-ами, или как-то еще.
На данный момент никак, тк не было необходимости. Можно написать проксю, которая с клиентской стороны слушает ws, и заворачивает сообщения в приложения. По сути это та же HTTP прокси, что есть сейчас -только снаружи способ взаимодействия другой. Если есть C++ библиотека для работы с ws, то можно добавить эту возможность в native-proxy github.com/cocaine/cocaine-native-proxy или написать свою на другом языке. Будем рады пул-реквесту! =) Готовы обсуждать.
А постоянные соединения поддерживаются в github.com/cocaine/cocaine-native-proxy?
Я про HTTP/1.1? Тогда можно было-бы через постоянные соединения поднять сервис с wsgi интерфейсом и через него гонять websocket
Или как-то возможно пробрасывать HTTP/1.1 через, к примеру, nginx?
Спустя время решил таки попробовать собрать окружение для теста, но все никак не получается завести вариант с Docker, выдает ошибку:
cocaine-tool app start --name example-docker --profile default-docker
{
    "example-docker": "1:086d9b704ba9...a16f0408ea8c: Failed to process READ command: No such file or directory: -2"
}


При этом заливка приложения происходит корректно (никаких ошибок не выдает).
А можно мне вывод следующих команд, пожалуйста:
cocaine-tool app list
cocaine-tool app view --name example-docker
cocaine-tool profile list
cocaine-tool profile view --name default-profile

Можно в личку)
Sign up to leave a comment.