Статьи

Получите продуктивность с GridGain

С самого начала мы ставим производительность труда разработчиков в качестве одной из наших главных целей, не жертвуя при этом какими-либо корпоративными вычислительными функциями. Но тогда вы подумаете — насколько легко это можно сделать, любой продукт можно относительно легко установить и настроить. Вот хорошая аналогия для вас — подумайте IPhone. Я никогда не думал, что пользоваться моим мобильным телефоном Motorola сложно, но IPhone только делает мою жизнь намного проще. Теперь я могу проверить погоду или статус полета в течение нескольких секунд (то, что я даже не удосужился сделать на своем старом сотовом телефоне). Такое же повышение производительности вы получаете с GridGain . Взгляните на некоторые функции GridGain, которые делают его таким простым в использовании и работе.

Единая модель программирования

В основном это означает, что ваше приложение должно давать те же результаты, если нет сетки, 1 узел в сетке или 1000 узлов в сетке (конечно, чем больше узлов вы добавите, тем быстрее и масштабнее будет ваше приложение). При написании кода котельной плиты вам не нужно беспокоиться о ее включении. Однако, если вам когда-либо понадобится включить сетку, логика включения сетки должна быть ортогональна вашей бизнес-логике. GridGain предоставляет два способа включения кода в сетке.

Включение прозрачной сетки

С включенной прозрачной сеткой вы можете перенести выполнение своего кода в сетку, просто добавив к ней аннотацию @Gridify , например:

public class BizLogic {
@Gridify
public Object process(Object arg) throws ProcessException {
// Perform bizness logic here.
}
}

Без GridGain метод process (..), описанный выше, просто работал бы локально, как обычно. Однако, просто прикрепив аннотацию @Gridify , выполнение этого метода будет перенесено на удаленный узел сетки. Одно это может значительно улучшить масштабируемость вашего приложения, поскольку теперь у вас есть автоматическое переключение при сбое, управление топологией узлов и балансировка нагрузки, предоставляемые вам GridGain из коробки.

Теперь, если вы решили, что ваш метод process (..) занимает слишком много времени и вам нужно разделить его выполнение, вам нужно будет реализовать интерфейс GridTask, чтобы сообщить GridGain, как будет разделяться ваша логика. Тем не менее, единственное изменение, которое вам нужно будет внести в ваш основной код, это указать, какую задачу он должен использовать следующим образом:

@Gridify(taskClass = MyProcessTask.class)

Включение Grid на основе API

Если вы хотите использовать прямые вызовы API вместо аннотации @Gridify или если вам нужно ожидать результатов асинхронно, GridGain также позволяет вам это делать. Просто вызовите любой из методов Grid.execute (..) напрямую следующим образом:

Grid grid = GridFactory.start(); 

// Execute.
GridTaskFuture<Object> future =
grid.execute(MyProcessTask.class, /*task argument*/someArg);

// Wait for result.
Object result = future.get();

GridTaskListener resultListener = new MyProcessTaskResultListener(); 

grid.execute(MyProcessTask.class, someArg, resultListener);

public MyGridTest extends TestCase {
// Simple test case.
public void testGrid() throws Exception {
GridConfiguration cfg1 = new GridConfigurationAdapter();
GridConfiguration cfg2 = new GridConfigurationAdapter();

cfg1.setGridName("grid1");
cfg2.setGridName("grid2");

try {
Grid grid1 = GridFactory.start(cfg1);
Grid grid2 = GridFactory.start(cfg2);

GridTaskFuture<Object> future = grid1.execute(MyTestTask.class, ...);

Object result = future.get();

assertNotNull(result);
}
finally {
GridFactory.stop("grid1", true);
GridFactory.stop("grid2", true);
}
}
}