company_banner

Открытие облака для новых клиентов

    Новость одной строкой:

    Облако запустили

    Мы снова открыли возможность создавать виртуальные машины и готовы принять новых пользователей в нашем облаке в новом пуле. Тарифы те же, возможностей больше.
    Облако Селектел продолжает работу
    Ключевые изменения:
    • Новая кластерная СХД
    • Обновлённые шаблоны виртуальных машин на LVM, упрощающие изменение размеров диска
    • Снапшоты
    • Улучшенная производительность панели управления

    Собственно, на этом анонс заканчивается, дальше начинается лирика.

    Чем мы занимались эти 3 месяца?

    Или, правильнее сказать, «что было не так?».

    Замечательный язык python славится как отличное средство rapid development. Написать на нём прототип работающего приложения, «доказательство возможности» (proof of concept) — да. Написать на нём приложение, которое больше времени проводит в коде библиотек, чем над математикой — да.

    Но вот писать на нём многопоточные приложения с десятками тысяч транзакций в секунду с разумным потреблением процессора… До определённого момента можно. Дальше начинаются архитектурные проблемы, на борьбу с которыми начинает уходить больше времени, чем на программирование нового.

    Именно такая ситуация у нас и случилась. Одновременно в нескольких компонентах, которые были «написаны и забыты» (то есть не планировались к дальнейшему развитию в течение ближайшего времени) обнаружились боттлнеки. Некоторое время мы «развлекались» оптимизацией кода, обсуждали возможность вынесения его части в сишные библиотеки с биндингами на питоне… Пока мы не обнаружили, что проблемы копятся быстрее, чем мы их решаем. И это не смотря на то, что этой осенью мы практически удвоили число разработчиков.

    Дополнительную проблему создавали новые пользователи, экспериментирующие и играющие с функционалом (мы ничего не имеем против, но не в тот момент, когда система и так «на грани») — это давало дополнительный стресс. В тот момент, когда некоторые API-запросы стали выполняться 10 с вместо положенных 0.1-0.2 (кто-то мог заметить, как медленно в тот момент отображалось содержимое панели управления, причём задержка была совершенно непредсказуемая), было принято решение прекратить создание новых машин.

    Это во-первых снизило нагрузку от новых клиентов, во-вторых, когда все машины созданы, пользователи редко заходят в панель управления и число обращений к панели управления значительно упало.

    В то время, когда стабилизировалась нагрузка, в ходе крайне кровавых боёв функционалисты победили процедурщиков. Или, другими словами, мы посмотрели в сторону функциональных языков программирования.

    А именно, на язык программирования Haskell.

    Да-да, того страшного и ужасного языка, в статьях про который на 5-10 странице заканчивается код и начинается высшая математика.

    Лично я был отчаянным противником принятия этого языка. Однако, аргументация со стороны сторонников меня убедила — строгая типизация, выведение типов, паттерн матчинг (с контролем полноты оного)…

    Добавим к этому потребительские свойства: компилируемый язык (читай: для запуска нужен только исполняемый файл без всякого окружения), долгая история с давно пройденными детскими болезнями (20+ лет), масса библиотек для всех случаев жизни (это, кстати, определило «хаскел или окамл»). Окончательно меня сразило то, что программа на хаскеле шла нос-в-нос в простеньком тесте на IO и математику с программой на Си. Причём «нос-в-нос» — это при включенной оптимизации gcc.

    Быстро ли программировать на haskell? Нет. По моим наблюдениям программа пишется примерно в три раза медленнее, чем на питоне. Однако, настоящая разница приходит после. Достаточно сказать, что если для программ на питоне мы выкатывали в продакт в среднем от 3 до 10 багфиксов, то те программы, которые у нас сейчас работают на хаскеле, багфиксов практически не содержат. Большинство изменений связано с изменением ТЗ, а не реакцией на очередное «attribute has not method foobar» в трейслоге.

    Раньше мы писали много кода на питоне, теперь мы пишем мало кода на хаскеле.

    Всё ли мы переписали на хаскел? Увы, нет, процесс идёт по мере возникновения потребностей и большая часть нашего кода всё ещё на питоне, но по мере изменения архитектуры всё остальное планируется переписать на него.

    Более того, как финальный аккорд — наш сервер API всё ещё написан на питоне — и именно «быстрый питон» стал причиной двухнедельной задержки с запуском, так как пришлось многократно и болезненно перепроверять все варианты поведения новых функций, которые питон (как язык с динамической типизацией) проверить не мог.



    Впрочем, пока программисты оттачивали стиль, отдел системного администрирования не сидел на месте.

    Кластерная СХД

    Новая СХД СелектелОдним из наших недостатков было использование некластеризованных СХД. Данные были в безопасности, а вот вероятность наткнуться на проблемы с аптаймом была. Не очень большая, но была.

    Сочетание drbd, flashcache и multipath, надеюсь, решило эту проблему. Данные хранятся на 10ых рейдах, полная копия всех данных располагается на каждом узле кластера. Если узел умирает — клиенты либо не замечают ничего, либо (в худшем случае) получают 5-10 с однократную задержку дисковых операций, после чего multipath находит альтернативный путь и запросы дальше обрабатываются без сбоев.

    Шаблоны

    Ключевым и фундаментальным стал переход на ядро 3.1-xen (кроме центоса, который сам себе на уме). Заодно, скрепя сердце, мы разрешили пользователям грузить ядра из машины, а не «наши». Почему скрепя сердце? Потому что если клиент поставит «неправильное ядро», то его машина будет зависать или вести себя неадекватно. Бедный, бедный отдел технической поддержки. Но удобство от того, что ядро установлено внутри виртуалки всё же перевесило.

    Вторым важным изменением стал переход на LVM для системных дисков. Это должно значительно упростить процесс управления разделами.

    Обновились ОС: OpenSUSE 12.1, CentOS 5.7, появился Debian Wheezy. Появился шаблон с ClearOS (для тех, кому хочется веб-интерфейса к VPN-серверу). Ещё несколько полезных шаблонов в разработке.

    Снапшоты

    Снапшоты в облаке Селектел

    Самая сложная и трудная задача, которую мы решили с великим успехом. Про снапшоты и принципы их работы я напишу отдельную статью, но вот пока «выжимка» из фич снапшотов:
    * Снапшоты делаются «на ходу» без остановки машины
    * Снапшоты могут образовывать как хронологический список, так и «дерево».
    * Снапшоты хранят только изменённые данные (минимальный размер — 8Мб)
    * Оплачиваются снапшоты как дисковое пространство (отдельная строчка) по цене обычного дискового пространства
    * Снапшоты диска можно подключать в read only к существующим машинам без прекращения использования «обычного» диска.

    Для того, чтобы сделать это хорошо и удобно нам пришлось очень сильно переписать обычные снапшоты в Xen Cloud Platform, в частности, добавить поддержку древовидных отношений между снапшотами и возможность свободных откатов между любыми снапшотами.

    Панель управления

    Дизайн новой панели управления мы «выкатили» незадолго до приостановки обслуживания (глупо, да, но теперь его могут увидеть все желающие). Кроме того, мы переписали статистику, значительно уменьшили нагрузку на БД в некоторых типах запросов. Заодно, под шумок, мы добавили выгрузку данных по потреблению в CSV.

    Много времени было уделено эргономике. Например, такие поля как пароль, IP-адрес и другие данные, которые часто копируются, сделаны таким образом, чтобы двойной клик выделял их и только их, не заползая на соседей. Все элементы управления в обычных меню являются статичными (то есть не прыгают туда-сюда и не меняют значение в зависимости от контекста). Это не относится к «опасным операциям», где основной нашей задачей было не создать максимум удобств, а заставить задуматься «хочу или нет». Кстати, если у кого-то в каком-то случае возникает явное ощущение «слишком много делать» — пишите мне (или в тикеты). Исправление не обещаем, но я, как минимум, задумаюсь о том, как это реализовать и если получится придумать, сделаем.

    Судьба старого пула

    В силу архитектурных изменений мы не смогли реализовать новые фичи в старом пуле, они реализованы в новом пуле (в нём будут создаваться виртуальные машины).

    • Справка: pool (пул) — группа серверов, имеющая единый административный центр (мастера пула), имеющих единую конфигурацию и общие хранилища. В контексте нашего облака означает высшую иерархическую единицу сегментации облака. Пулы не взаимодействуют между собой, хотя и подчиняются единому серверу API.

    Мы будем продолжать поддерживать старый пул длительное время (не обещаю, что «всегда», но весьма долго — точно), а все новые машины будут создаваться в новом пуле — именно там будут работать снапшоты, «нативные ядра» и именно там находятся новые шаблоны.
    Selectel
    214.87
    ИТ-инфраструктура для бизнеса
    Share post

    Comments 72

      +2
      А Erlang не рассматривали?
        0
        Да и вообще — поздравляю! Наконец-то :)
          0
          Он тоже.
            0
            Эрланг на хостах (в dom0) будет не очень хорошо смотреться со своим потреблением памяти и обвязкой для работы.
              0
              А можно подробнее про потребление памяти.
              Учу мат часть по этому языку.
              Ваш опыт интересен.
                0
                Запустил голый erl R15B без halfword, весит 11м. Добавите пару приложений — вырастет на метр-другой. С другой стороны, haflword-версия способна значительно (на десятки процентов) снизить потребление памяти (правда, оставив вас без hype, если он вам нужен). Плюс можно поотрезать в reltool'е используемые библиотеки, это ещё уменьшит потребление.
                  +3
                  Серьёзное приложение, работающее с xen'ом и postgresql занимает в памяти 8Мб.

                  Кроме того, мне точно не нужны на dom0 посторонние сервисы, занятые непонятно чем (я про epmd). Я буквально сейчас пишу презентацию по безопасности облака, и один из тезисов — минимизация посторонних сервисов в dom0, как средство минимизации путей для атаки на dom0.
                    –3
                    Человек поинтересовался Erlang'ом, а не dom0.
                      +1
                      Поддерживаю про dom0. Для задач, не отвечающих за базовое управление гостями, лучше использовать отдельный служебный domU.
                      0
                      Спасибо.
                      Видел статья про 1000 000 соединений на Erlange'е.
                      Собственно из нее узнал о языке.
                        +2
                        Рекомендую прочитать OTP in Action, если интересуетесь. Может быть сложновата как первая книга, но однозначно must read как вторая.
                          0
                          Как раз читаю и согласен про must read
                +6
                За хаскель — уважуха
                  +4
                  Читал взахлеб!
                    +2
                    Ещё вопросец — можно ли как то «конвертнуть» сервер из старого пула в новый?
                      0
                      Нет, виртуальные машины не совместимы — другой формат диска, другая модель загрузки.
                        +1
                        Снизив стоимость для нового пула вы бы дополнительно мотивировали пользователей перебраться в него.
                          –1
                          Повысив стоимость для нового пула мы бы дополнительно мотивировали себя переводить туда всех клиентов принудительно.

                          Так что лучше пускай люди сами решают где лучше.
                      –4
                      Лучше бы для людей написали, а то этот птичий язык только сисадмины понимают.
                        +6
                        Для людей первый заголовок. Остальное не важно.
                        +2
                        Вы пишите, что переписали обычные снапшоты в Xen Cloud Platform. Вот это вот все уйдет разработчикам Xen Cloud Platform?
                          0
                          На VHD-уровне мы ничего не трогали, вопрос в отношениях снапшотов и в процессе их создания/удаления. Мы пока используем их ISO-based версию, в неё очень тяжело делать какие-либо изменения на уровне сырцов xapi. В планах есть переход на кронос (но он пока не совсем стабильный), тогда, я думаю, возврат изменений будет проще.

                          Сейчас изменения в снапшотах реализованы в нашей части cloud orchestration, которая поверх xapi. Реализовать их в xapi было бы здорово и сильно сэкономило бы нам усилия, но пока что нам не до того.
                            0
                            По описаниям выглядит очень удачно! Кстати а вы делает биллинг дополнительных дисковых операции при COW на снэпшотах?

                            Гость записал один сектор на диск. Снэпшот отклонировал себе слайс оригинала, потратив на это еще N операций записи. Платить нужно будет за одну запись из гостя или за все записи вместе с служебными записями снэпшота?
                              0
                              Погодите несколько дней, я расскажу, как устроены снапшоты. Оно много сложнее, чем кажется. Достаточно сказать, что каждый снапшот на самом деле состоит из двух файлов, при этом файл снапшота всегда 8 мб в размере.
                          +5
                          Блин, вы конечно каждый раз удивляете, я когда начал читать, ждал чего-то вроде «питон был медленным и мы перешли на Java» — но Хаскель, это конечно, неожиданно (мне даже почему-то смешно стало). Вы не боитесь, что вы потом программистов не найдете с такими редкими умениями, если что?

                          И по поводу пулов

                          > Мы будем продолжать поддерживать старый пул длительное время

                          А потом? Вы сами перенесете машины или пользователям придется это делать? Или надо как-то самому все бекапить, создавать новую машину и устанавливать? Непонятно.
                            0
                            Меня тоже интересует этот вопрос, хотелось бы получить на него ответ.
                              0
                              Боюсь. Это и было моим основным аргументом против. Однако, фривольность питона в динамической типизации очень напрягает.
                                0
                                Второй вопрос интересует даже больше, чем первый. Тот, что по поводу пулов.
                                  +1
                                  Мы не будем силком ни кого переводить. Хотите новые фичи? Извините, только для новых машин. Старый пул будет сокращаться по чуть-чуть, пока не зафиксируется на некоторой группе «упрямцев». Поскольку они деньги платят, мы будем продолжать их обслуживать.

                                  Я много раз продумывал схему мягкой «миграции» существующих клиентов, но все они были связаны с большими даунтаймами и ручной работой внутри машин клиентов. А у нас политика, что мы без согласия клиентов в их машины не лазаем.
                                    0
                                    А если я дам своё согласие, мигрируете?)
                                      +1
                                      Нет. Фактически мне придётся переносить всё самым грубым образом (dd), да ещё и менять БД вручную для сохранения владельцев.

                                      +2
                                      То есть, переводя с русского на русский, если я хочу новые фичи, я должен создать новую машину в новом пуле, диск для нее, скопировать его со старого, запустить новую машину, отключить старую. И при этом еще самому же обновить ДНСы, так как вы скорее всего выдадите новый IP на новую машину?
                                        +1
                                        Да, все верно (к сожалению).
                                          +2
                                          К сожалению, да. Если бы мы сделали по другому, то мы бы всё ещё планировали сценарии переезда машин (с дедлайном в районе мая).
                                      0
                                      Тоже интересен ответ на второй вопрос. И еще, сейчас в местонахождении сервера пишется Санкт-Петербург (1), (2) и т.д. Можно расшифровать цифры (1 — Цветочная, 2 — Технодом… ?).
                                        +1
                                        1, 2 — оба Цветочная. А поле location было добавлено в свете приближения к запуску в Москве.
                                    0
                                    А планируется ли поддержка ОС Windows?
                                      +1
                                      Только в виде VDS на базе hyper-v. У нас они есть. В облаке текущей конфигурации — не будет. Там очень много проблем, как с лицензиями, так и с функционированием.
                                        0
                                        в виде VDS много у кого есть

                                        хотелось бы именно в облаке
                                          0
                                          Даже если бы мы реализовали его, как быть с лицензией? Она стоит вполне конкретных денег в месяц, и эта цена не зависит от потребления или статуса включенности.
                                            0
                                            Честно говоря, я не в курсе особенностей лицензирования серверных версий Windows.
                                            Но не вижу принципиальных отличий от лицензирования VDS: сегодня пришел один клиент, завтра ушел другой.

                                            Лично я бы предпочел один раз заплатить за лицензию, без ежемесячных платежей.

                                            P.S. В общем, я понял, что в ближайшее время точно не будет. Буду использовать другие варианты.
                                              0
                                              минимальная лицензия на windows web server 11600 рублей
                                              и это вам никаких терминалов и прочего.
                                        0
                                        Судя по платформе виртуализации и моих неглубоких познаниях — нет.
                                          +1
                                          Технически можно, но windows — это HVM, а я HVM не люблю, я его опасаюсь (из-за qemu) и одна мысль про реализацию модели лицензирования мне становится не очень уютно. Я предпочитаю более чистую идею «продажи ресурсов».
                                            0
                                            Технически вы описали выше, но насколько мне известно Xen тесно интегрируется с ядром, и в случае Windows будет много накладных расходов, за которые платить клиенту?
                                              0
                                              Нет, производительность там вполне приемлимая, проблема в legacy HVM драйверах, эмулирующих реальное железо через qemu. Пользователь может abuse это и мешать работе соседей. Я этого очень не хочу.
                                        +2
                                        Огромная уважуха вам, ребята: далеко не каждая компания может пережить подобный кризис. Молодцы!
                                          0
                                          Есть пара вопросов по drbd + multipath, вызванных вот этим: http://fghaas.wordpress.com/2011/11/29/dual-primary-drbd-iscsi-and-multipath-dont-do-that/

                                          Вы нашли cluster-aware iscsi target? Или drbd в master/slave (тогда зачем multipath)? Или диски отдаете не по iscsi?
                                            +2
                                            Да. Волшебная сила xapi, который использует свой метод кластерных блокировок, не использующих persistent reservation. Я долго этот вопрос изучал, и именно xapi и его SM позволяет использовать multipath поверх DRBD.
                                              0
                                              Поделитесь ссылкой, где можно почитать о том, как xapi может работать с dual-primary drbd? Сейчас мне сложно представить, как это у него получается. Если он использует дополнительно свои блокировки — это же должно сказаться на скорости работы далеко не самым лучшим образом.
                                                0
                                                В сырцах. Если очень кратко — подумайте, для чего нужны глобальные блокировки и почему скорость их наложения не влияет на производительность IO.

                                                hint: см. патчи на lvm для XCP.
                                            0
                                            Рассматривался ли ocaml как альтернатива haskell?
                                            • UFO just landed and posted this here
                                                0
                                                Поправка: XenAPI имеет реализации на python и OCaml. Окамловская (цитриксовская) реализация называется xapi.
                                                • UFO just landed and posted this here
                                                    0
                                                    XenAPI реализован ещё и xend'ом. А он на python.
                                                0
                                                Да. Но у него хуже с библиотеками.
                                                • UFO just landed and posted this here
                                                  +1
                                                  Отличная новость для любителей Haskell! Чувствую, сейчас в Интернете начнется новый виток холиваров.

                                                  Не переживайте: хаскеллистов в случае чего найдете.

                                                  Будут ли интересные статьи от участников проекта о трудностях и их решениях? Этот опыт был бы очень полезен и помог бы в популяризации языка.
                                                    +3
                                                    Вероятнее всего, я ещё свою драму напишу, т.к. я засел его учить, чтобы понимать, что там программисты понаписали.
                                                    • UFO just landed and posted this here
                                                        +1
                                                        Я тоже скоро допишу интересную статью о Haskell. :) Так что да, посмотрим!
                                                      0
                                                      давно хотел попробовать, вчера ночью в очередной раз зашёл к вам на сайт и удивился что нет привычного сообщения о том что приём новых клиентов приостановлен. а с утра — новость =)

                                                      можно ли у вас в обозримом будущем ожидать поддержку centos 6 и ipv6?
                                                        0
                                                        ipv6 в экспериментальном режиме есть и работает — пишите на саппорт (хотя качества работы не обещаем). centos6 — там очень много нюансов, в основном из-за неочень хорошей работы pv_ops ядра под xapi.
                                                        –7
                                                        Опять селектел пиарится :)
                                                          +7
                                                          Я бы устыдился, если бы это не был корпоративный блог Селектела, который как бы для таких вещей просто изначально и предназначен.
                                                          +1
                                                          На старой машине поставил Arch Linux с убунтовским ядром, вроде работает хорошо. Теперь можно обойтись без таких извращений.
                                                            +2
                                                            3.1-xen строго и настоятельно рекомендуется. Использовать ванильное ядро можно, но мы не гарантируем хорошую работу MOD на нём, это раз, два, старые pv_ops висли при миграции.
                                                              0
                                                              Понятно. Спасибо.
                                                            0
                                                            А будет ли доступны Windows системы? Если да, то когда?
                                                            0
                                                            Круто!

                                                            Only users with full accounts can post comments. Log in, please.