Главная > Java - язык и технологии, Open Source, web2.0, Высокопроизводительная архитектура, Стартапы, СУБД > 10gen — ещё один стартап в области Cloud Computing, развивающий концепцию platform-as-a-service

10gen — ещё один стартап в области Cloud Computing, развивающий концепцию platform-as-a-service

10 августа 2008

Приветствуем наших читателей. На улице дождь и вообще погода радует (радует потому что при солнечном свете прямом достаточно трудно на работе сосредоточиться, поэтому дождливые дни для меня самые рабочие), поэтому сегодня мы поговорим о чём-то высоком... облачном. Да, о новом или, вернее, малоизвестном у нас стартапе, который создал свою платформу для облачных вычислений, хотя и это не совсем уж так точно - это платформа, которая предоставляется как сервис и позволяет получить гибкую и масштабированную среду исполнения для веб-проектов. В чём-то это все похоже на известный всем и уже почти нарицательный Amazon EC2, но и отличается от него существенным образом. Что и как - мы дальше и рассмотрим.

Стартап 10gen предлагает разработчикам свою технологию построения platform-as-a-service, которая позволяет получить гибкую и почти неограниченную по масштабированию платформу (уже сколько раз мы повторили это слово) для развёртывания приложений, которым нужно работать в условиях переменной нагрузки, которая, однако, имеет тенденцию для постоянного роста, которым нужно защищённая и простая платформа, чтобы добавление нового сервера или апгрейд базы данных не вызвал прекращение работы всей системы на несколько часов или суток.

10gen предлагает собственный стек технологических решений, приближаясь в этом к недавно появившемуся но уже широко известному Google App Engine. В отличии от более традиционного и привычного пользователям хостинга (VDS или выделенных сервером), который также может масштабироватьcя и претендует на звание Cloud (я говорю об Aptana Cloud, о котором мы уже писали), 10gen положилась на собственные технологии, разработав полный стек необходимых для веб-проектов технологий поверх традиционного Linux (а также совсем не традиционных MacOS X и скоро уже доступного Windows).

Говоря подробнее, "облако" от 10gen состоит из следующих уровней:

  • аппаратный уровень - кластер из серверов под управлением Linux (или других ОС, поддерживающих их стек). Насколько я понял, используются именно обычные сервера, а не виртуализация, за это отвечает уже более высокий уровень. Нет необходимости и в специализированных решениях вроде сетевых хранилищ данных (NAS).
  • Mongo - специальная объектно-ориентированная база данных (скорее - хранилище структурированных данных, аналогичное Amazon SimpleDB), собственная разработка компании. Этот проект интересен и сам по себе, и далее мы его рассмотрим подробнее.
  • Файловая система представлена несколькими системами, главной из которых является масштабируемая универсальная система GridFS, которая является и хранилищем данных для базы данных Mongo. Для хранения файлов проекта (исходный код скриптов, CSS, HTML и другие файлы) применяется надстройка SCF (Source Code Filesystem), которая работает и управляется поверх системы контроля версий Git (заметьте, в подобных проектах очень удобно совмещать систему контроля версий и непосредственно каталог проекта, который доступный через веб-сервер, поэтому и в Aptana Cloud применяется такой подход, правда через более привычный SVN).
  • Сервер приложений - это основной уровень, который предоставляет веб-сервер и среду исполнения для пользовательских приложений. Эта часть работает поверх JVM и автоматически масштабируется для предоставления необходимых ресурсов. В настоящее время поддерживаются приложения на JavaScript (server-side, очень сейчас популярное решение для Cloud, в частности в той же Aptana есть отличный сервер приложений Jaxer) и Ruby (Ruby on Rails, пока в процессе доработки). Сама система, по заявлениям 10gen, полностью независима от языка и использует промежуточное преобразование в java-код, который потом компилируется в нативный через javac, что позволяет потом использовать весь спектр Java-технологий для распределённого выполнения и масштабирования (а также, вероятно, и получить доступ ко всем компонентам платформы Java). Поэтому следует ожидать в будущем появление и других языков - например, самой Java, а также более привычных веб-разработчику PHP и Python.
  • Над всем этим находится система управления вашей системой, которая позволяет автоматически распределять нагрузку и масштабировать систему при необходимости. Для развёртывания проекта применяется, как мы уже говорили, распределённая система Git.

Давайте немного остановимся на момент с базой данных, уверен, тем, кто имеет опыт разработки обычных веб-приложений, это будет интересно. В платформе 10gen разработчики уверяют нас отказаться от использования обычной и привычной нам системы СУБД. Если в традиционном стеке LAMP мы применяем базу данных MySQL на низком уровне, и в большинстве случаев поверх неё используем какой-то из ORM-прослоек, то последним трендом является использование объектно-ориентированных баз данных, которые имеют гораздо более упрощённый API (не SQL) и опираются на файловую систему, что, однако не так и тормозит их, обеспечивая сильные возможности масштабирования и распределения нагрузки. Первопроходцем и апологетом этого подхода стала, вероятно, Google с её BigTable, а позже появился и открытый проект Apache Hadoop, который, в частности, применяется в некоторых очень серьёзных проектах, например, как система хранения данных в поисковике Nutch. Поэтому, исходя из объектной природы большинства данных, которыми оперирует приложение, а также возможности практически неограниченно масштабировать и виртуализировать такую файловую систему, мы можем вполне полностью отказаться от традиционных реляционных баз данных. Конечно, такой подход требует практически полной переделки существующего приложения или же проектирования с учётом новой платформы и даже, не побоюсь сказать, философии, однако выгоды от такого решения достаточно очевидны.

Объектно-ориентированная база данных Mongo позволяет хранить неограниченное число объектов, каждый из которых может быть как текстом (строкой), так и двоичным пакетом данных, например, мультимедийным файлом. Это позволяет использовать единый механизм доступа и хранить все типы содержимого вместе.  Сейчас Mongo предоставляет базовый функционал - запросы на извлечение или обработку данных (SELECT, INSERT, UPDATE, DELETE), а также индексы. В процессе разработки находится функциональность полнотекстового поиска, система реплицирования и механизмов блокировок.

Сейчас доступ к базе можно получить через родные API для поддерживаемых языков, в частности, JavaScript, после добавления Ruby заявлено, что будет поддержка и механизмов для популярных ORM-систем (думаю, речь идёт об ActiveRecord) и разработчики смогут сами писать плагины для работы с другими системами. Это позволит уже переносить приложение без существенного перепроектирования, если оно использует ORM для абстракции от доступа к данным.

Конечно, далеко не везде и не всегда можно использовать такую базу данных, да этого и не предполагают сами создатели. Это скорее хранилище данных, а не аналитический инструмент, поэтому инструментарий бизнес-аналитики и анализа данных вряд ли можно построить на основе объектной базы данных - они просто для этого не предназначены. Поэтому мне видится идеальной система, где будут совмещены оба подхода, да пусть и просто установлено два сервера БД - один обычный сервер, к примеру, MySQL Cluster и объектная база для хранения контента и другой информации, которая не требует специальной обработки. Такая система позволит использовать оба инструмента именно там и для тех функций, для которых они идеально подходят. Пока в стеке 10gen нет реляционной базы данных, но то, что в основе инфраструктуры лежит java, может означать, что добавление базы и соответствующего интерфейса, к примеру, Hibernate не будет слишком сложным.

Кстати, я не сказал ещё? 10gen предоставляют исходный код и бинарные дистрибутивы своей системы для всех желающих. Да, подобно системе Eucalyptus (о которой мы уже писали), вы имеете в своём распоряжении полный исходный код и можете создать свою собственную систему Cloud Computing для использования в проектах. Распространяется все это под лицензией GNU AGPL 3.0, только JavaScript библиотеки и основные модули фреймворка доступны под Apache License 2.0.  Пока поддерживаются только 64-bit Linux и MacOS, однако обещается в скором времени и Win32 версия платформы. Если вам нужно именно 32-битную версию под Linux уже сейчас, придётся использовать ночную сборку или исходный код с репозитария. Для работы требуется только ОС (Fedora 6 или 8, MacOS Х 10.5, Ubuntu 7.1 или 8.04) и установленная Java SE 5 или 6. Кстати, будет интересно попробовать всё же развернуть все это на виртуальной машине VirtualBox в среде Windows.

В заключение хотел бы подытожить. Тема виртуализации и cloud computing очень и очень востребована на рынке, что мы и видим на примере множества стартапов, пытающихся создать простую и масштабируемую среду для разработчиков. Одни опираются на уже годами проверенную и отточенную схему LAMP, другие занялись полной виртуализацией, предлагая клиентам самим разворачивать образы ОС, третьи же создают поверх уже виртуализированного железа (к примеру, через использование XEN или других технологий, либо через платформу Java) собственный стек, не стесняясь предлагать разработчикам совершенно новую концепцию, язык реализации и даже веб сервер и базу данных. Мне кажется, для стартапов самое оно...

  1. 15 сентября 2008 в 23:42 | #1

    Мне кажется поддержка нереляционных баз абсолютно пустым занятием. Все равно к новому формату вряд ли привыкнут. Не лучше ли подумать, как облегчить работу с существующими базами?

  2. 16 сентября 2008 в 13:01 | #2

    а вот остальным так не кажется 🙂 во многих областях реляционные вообще НЕ ПРИМЕНИМЫ. вы гугле 2 на реляционной сделаете? и даже первый не повторите 🙂

  3. alex
    28 сентября 2008 в 15:58 | #3

    ну да, все знания выкидываем, переучиваемся что бы написать гугл 2

  4. 5 февраля 2009 в 11:55 | #4

    Ну я бы не стал ни знания выкидывать, ни гугл-2 писать, но новые технологии упускать из виду не стоит. В некоторых случаях удобно использовать и не реляционные БД. А тот же упомянутый тут Jaxer, мне как бальзам на душу — многие вещи значительно упрощаются и не надо держать в голове несколько языков программирования

Комментирование отключено.
Developers.org.ua