Java-фреймворки в облаке

Поэтому я пытаюсь наконец понять, как работают облачные корпоративные приложения и как обычно выглядит их архитектура. Скажем, я использую облачного провайдера, такого как Amazon. Я предполагаю (пожалуйста, поправьте меня, если я ошибаюсь), что я буду платить за 1+ виртуальные машины, в которых будет размещаться стек программного обеспечения в соответствии с потребностями моего приложения.

Я не понимаю, как такие фреймворки, как jclouds или Terracotta, вписываются в общую картину. jclouds рекламирует себя как «библиотеку с открытым исходным кодом, которая поможет вам начать работу в облаке», и перечисляет ряд огромных функций, которые мало что значат для меня без содержательных примеров. Terracotta позиционирует себя как высокомасштабируемая среда кластеризации. Зачем мне нужно использовать что-то вроде jclouds? Для каких конкретных конкретных сценариев я бы его использовал?

Опять же, если я использую Amazon в качестве своего облачного провайдера, разве они уже не будут масштабироваться? Зачем мне Terracotta в облаке?


person IAmYourFaja    schedule 28.09.2011    source источник
comment
Из того немногого, что я знаю о Terracotta, я думаю, что его основная часть — это распределенная хеш-таблица, такая же, как memcached. Что он позволяет вам делать, так это кэшировать объекты Java в действительно очень большой хеш-таблице в памяти, которая совместно используется всеми узлами вашего кластера. Затем вы можете использовать это для кэширования, обмена данными или чего-то еще, для чего вам нужно использовать много общей памяти.   -  person millimoose    schedule 28.09.2011
comment
Спасибо @Sii - может ли кто-нибудь подтвердить это или уточнить?   -  person IAmYourFaja    schedule 29.09.2011


Ответы (2)


Перенос приложения «в облако» имеет как минимум два аспекта.

Во-первых, вам нужно управлять узлами: развернуть приложение на всех узлах, отслеживать их, запускать новые узлы для фактического масштабирования, обнаруживать и заменять отказавшие узлы, реализовывать некоторый сценарий обновления для новых версий приложения и так далее. Обычно это невозможно сделать без инструментов. Здесь подходит JClouds, поскольку он охватывает некоторые из этих пунктов.

Во-вторых, само ваше приложение должно быть «готово к работе в облаке». Вы не можете взять произвольное приложение, разместить его на нескольких узлах и ожидать, что оно будет хорошо масштабироваться. Главное здесь — определить, как масштабировать доступ к общим данным между всеми узлами (база данных SQL, хранилище данных NoSQL, потенциально репликация сеанса и т. д.). Обычно вы используете какой-то существующий фреймворк/сервер приложений/хранилище данных для управления вашим общим состоянием. Terracotta — один из них, в основном он обеспечивает эффективный способ совместного использования памяти между экземплярами JVM на нескольких узлах.

person Heri    schedule 28.09.2011

Итак, у вас есть Linux-машина (виртуальный экземпляр), и она работает нормально. Но внезапно вам нужно масштабироваться — то есть вам нужно запускать больше экземпляров по мере роста спроса и закрывать их, когда он падает. Итак, что вы можете сделать, так это использовать Amazon API для запуска инстансов EC2 — предоставить им все, что вы можете сделать из административной консоли (и даже больше). Но использование API Amazon в основном связывает ваши руки с Amazon. С такими фреймворками, как JCloud, вы делаете что-то вроде (это псевдокод):

CloudProvider provider = new CloudProvider.getProvider("Amazon"); 
provider.authenticate("username", "password");
provider.startInstance("some option", numOfInstances);

Итак, скажем, вам нужно масштабироваться, и вы развернуты на Amazon с помощью JClouds - вы собираетесь использовать что-то вроде вышеприведенного, НО внезапно вы решаете перейти с amazon на Rackspace, поэтому вместо того, чтобы перепроектировать всю логику вашего приложения, которое должно делать с предоставлением экземпляров и работой с ними вы можете просто изменить

CloudProvider provider = new CloudProvider.getProvider("Amazon");

к чему-то вроде

CloudProvider provider = new CloudProvider.getProvider("RackSpace");

и продолжайте использовать метод аутентификации и startInstance, но тогда библиотека поймет, как на самом деле «перевести» этот библиотечный метод в конкретный метод, который поддерживает данный облачный провайдер. По сути, это способ абстрагирования кода, который имеет дело с базовым облачным провайдером — вас не должно волновать, кто это, пока он предоставляет услугу, верно?

person LordDoskias    schedule 28.09.2011
comment
Ух ты!!! Это действительно круто! Ну, это в значительной степени помогло мне продать JClouds, но как насчет Terracotta? И спасибо за такой развернутый ответ! - person IAmYourFaja; 28.09.2011