Этот пост полностью сфокусирован на кластеризации. Я покажу, как можно использовать кластеризацию и платформу распределения данных Hazelcast на платформе Jelastic в облаке InfoboxCloud. Это очень быстрый, надежный, масштабируемый и дружественный к пользователю способ деплоя. Если вам нужно разделять данные между множеством серверов, кластеризовать ваше Java –приложение, кэшировать ваши данные, предоставлять вашим серверам возможность безопасных коммуникаций или отказоустойчивого управления данными, Hazelcast – то, что вам надо.
Hazelcast использует мультикаст для работы или TCP/IP для сред, где мультикаст не доступен. А Jelastic хорошо подходит для построения кластера Hazelcast. Давайте посмотрим, как эти две платформы работают вместе.
Регистрация в Jelastic и бесплатный плюшки
Зарегистрироваться и получить доступ к Jelastic можно по этой ссылке. Первые 5 дней бесплатный триал, далее — переход в коммерческий режим и 3 клаудлета + первый IP адрес — бесплатно (можно перейти в коммерческий режим и раньше, чтобы получить бесплатные лимиты).
Создаем окружение
Залогиньтесь в Jelastic. Создаем среду на Tomcat 7, состоящую из нескольких инстансов (в нашем примере 4), устанавливаем лимиты масштабирования для клаудлетов и включаем IPv4.
Не пугайтесь страшным цифрам на скриншоте (максимальное значение), оно достижимо только если ваша система постоянно на 100% загружает все сервера при максимальных выделенных ресурсах, что в реальной жизни конечно маловероятно. При моих испытаниях Hazelcast на 4 инстанса было выделено 13 клаудлетов (при том, что максимально в пик нагрузки может выделиться 132 клаудлета). В этом и прелесть облачных технологий — мы без проблем переживем пик нагрузки и при этом нам нужно платить только за реально потребляемые ресурсы, а не всегда за пиковые. К тому же ползунки управления вертикальным масштабированием можно поставить всегда в рамки бюджета на серверы.
Ждем несколько минут и ваше окружение будет создано.
Скачиваем Hazelcast
1. Идем на hazelcast.com и скачиваем последний стабильный выпуск платформы:
Распакуйте скачанный архив.
Создание приложения
Давайте создадим простой сервер на Java и клиентское приложение с использованием кластера Hazelcast для развертывания на платформу Jelastic в облако InfoboxCloud в окружение, которое мы уже создали (на самом деле деплоить можно куда угодно, тк в InfoboxCloud нет Vendor-lock и все технологии можно поставить и к себе на сервера, просто в облаке это делать гораздо удобнее).
Серверное приложение
1. Давайте создадим Java класс серверного приложения и импортируем все необходимые библиотеки Hazelcast, которые включены в загруженный пакет (hazelcast-x.x.x/lib). В нашем случае мы будем использовать приложение, которое запускает первый сервер и использует map и queue пользователя:
package com.infoboxcloud; import com.hazelcast.config.Config; import com.hazelcast.config.JoinConfig; import com.hazelcast.config.NetworkConfig; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import java.util.ArrayList; import java.util.Map; import java.util.Queue; /** * Created by trukhinyuri on 05/12/13. */ public class HazelcastServer { public void run() { Config cfg = new Config(); NetworkConfig networkConfig = cfg.getNetworkConfig(); JoinConfig join = networkConfig.getJoin(); join.getMulticastConfig().setEnabled(false); join.getTcpIpConfig().addMember("109.120.149.234").addMember("109.120.149.236").addMember("109.120.149.200").addMember("109.120.149.184").setEnabled(true); ArrayList<String> interfaces = new ArrayList<>(); interfaces.add("109.120.149.234"); interfaces.add("109.120.149.236"); interfaces.add("109.120.149.200"); interfaces.add("109.120.149.184"); networkConfig.getInterfaces().setEnabled(true).setInterfaces(interfaces); HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg); Map<Integer, String> mapCustomers = instance.getMap("customers"); mapCustomers.put(1, "Joe"); mapCustomers.put(2, "Ali"); mapCustomers.put(3, "Avi"); System.out.println("Customer with key 1: "+ mapCustomers.get(1)); System.out.println("Map Size:" + mapCustomers.size()); Queue<String> queueCustomers = instance.getQueue("customers"); queueCustomers.offer("Tom"); queueCustomers.offer("Mary"); queueCustomers.offer("Jane"); System.out.println("First customer: " + queueCustomers.poll()); System.out.println("Second customer: "+ queueCustomers.peek()); System.out.println("Queue size: " + queueCustomers.size()); } }
На заметку: в Jelastic Вы можете увидеть публичные IP адреса нажав на кнопку расширенного меню на вашей серверной ноде, как показано на скриншоте:
IP адреса в предыдущем коде — адреса публичной сети, взятые из панели управления Jelastic, у вас они будут другими.
2. Создадим servlet listener, который запустит ваш код автоматически после развертывания:
package com.infoboxcloud; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; /** * Created by trukhinyuri on 05/12/13. */ public class AppServletContextListener implements ServletContextListener{ @Override public void contextInitialized(ServletContextEvent servletContextEvent) { System.out.println("ServletContextListener started"); new HazelcastServer().run(); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { System.out.println("ServletContextListener destroyed"); } }
3. Добавим секцию listener в ваш web.xml файл:
<?xml version=«1.0» encoding=«UTF-8»?>
<web-app xmlns=«java.sun.com/xml/ns/javaee»
xmlns:xsi=«www.w3.org/2001/XMLSchema-instance»
xsi:schemaLocation=«java.sun.com/xml/ns/javaee
java.sun.com/xml/ns/javaee/web-app_3_0.xsd»
version=«3.0»>
<display-name>infoboxcloud_demo</display-name>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<listener-class>com.infoboxcloud.AppServletContextListener</listener-class>
</web-app>
4. Соберем проект в WAR архив.
Клиентское приложение
Создадим Java класс с использованием Hazelcast Native Java Client API. Мы будем использовать пример, в котором добавим в конфигурацию все 4 ноды у отобразим Map Size:
package com.infoboxcloud; import com.hazelcast.client.HazelcastClient; import com.hazelcast.client.config.ClientConfig; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; /** * Created by trukhinyuri on 05/12/13. */ public class Client { public static void main(String[] args) { ClientConfig clientConfig = new ClientConfig(); clientConfig.addAddress("109.120.149.234:5701").addAddress("109.120.149.236:5107").addAddress("109.120.149.200:5107").addAddress("109.120.149.184:5107"); HazelcastInstance client = HazelcastClient.newHazelcastClient(clientConfig); IMap map = client.getMap("customers"); System.out.println("Map Size:" + map.size()); } }
Таким образом мы запустили Hazelcast на платформе Jelastic в облаке InfoboxCloud.
Безусловно на этом останавливаться не стоит, поэтому в следующей статье я расскажу про другие способы конфигурирования Hazelcast и настройки сети, разберемся глубже с возможностями Hazelcast и потестируем, насколько он быстр на кластере Jelastic в InfoboxCloud.
ссылка на оригинал статьи http://habrahabr.ru/post/203290/
Добавить комментарий