Этот пост полностью сфокусирован на кластеризации. Я покажу, как можно использовать кластеризацию и платформу распределения данных 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 и потестируем, насколько он быстр на нашем кластере.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.
Комментариев нет:
Отправить комментарий