Гектор (API)
Оригинальный автор(ы) | Ран Тавори |
---|---|
Финальный выпуск | 2.0
/ 16 июля 2014 г [ 1 ] |
Репозиторий | github |
Написано в | Ява |
Тип | Столбцово-ориентированная СУБД |
Лицензия | МОЯ лицензия |
Веб-сайт | довольнопринт ![]() |
Hector высокого уровня — это клиентский API для Apache Cassandra . Названный в честь Гектора , воина Трои в греческой мифологии , он является заменой Java-клиента Cassandra, или Thrift. [ 2 ] это заключено в Гекторе. [ 3 ] Он также имеет доступ к репозиторию Maven . [ 4 ]
История
[ редактировать ]Поскольку Cassandra поставляется с низкоуровневым протоколом Thrift (протоколом) , появилась возможность разработать лучший протокол для разработчиков приложений. Hector был разработан Раном Тавори как интерфейс высокого уровня, который перекрывает недостатки Thrift. Он имеет лицензию MIT, которая позволяет использовать, модифицировать, разделять и изменять дизайн. [ сомнительно – обсудить ]
Функции
[ редактировать ]Высокоуровневые особенности Гектора: [ 2 ]
- Высокоуровневый объектно-ориентированный интерфейс для Cassandra: он в основном основан на Cassandra-java-client. API определен в интерфейсе Keyspace.
- Пул соединений. Как и в крупномасштабных приложениях, обычным шаблоном для DAO является большое количество операций чтения/записи. Для клиентов слишком дорого открывать новые соединения при каждом запросе. Таким образом, у клиента могут легко закончиться доступные сокеты, если он работает достаточно быстро. Hector предоставляет пул соединений и удобную структуру, которая управляет деталями.
- Поддержка аварийного переключения: поскольку Cassandra — это распределенное хранилище данных, в котором хосты ( узлы ) могут выйти из строя. У Hector есть собственная политика аварийного переключения .
Тип | Комментарий |
---|---|
FAIL_FAST |
Если возникает ошибка, она терпит неудачу |
ON_FAIL_TRY_ONE_NEXT_AVAILABLE |
Пробует еще один хост, прежде чем сдаться |
ON_FAIL_TRY_ALL_AVAILABLE |
Пробует все доступные хосты, прежде чем сдаться. |
- Поддержка JMX : Hector предоставляет JMX для многих важных показателей времени выполнения, таких как количество доступных соединений, простаивающие соединения, статистика ошибок.
- Балансировка нагрузки . В новой версии существует простая балансировка нагрузки. [ 5 ]
- Поддерживает шаблон проектирования команд, позволяющий клиентам сосредоточиться на своей бизнес-логике и позволить Гектору позаботиться о необходимых сантехнических работах.
Метрики доступности
[ редактировать ]Hector предоставляет счетчики доступности и статистику через JMX . [ 6 ]
Балансировка нагрузки
[ редактировать ]Гектор следует двум политикам балансировки нагрузки: LoadBalancingPolicy
интерфейс. По умолчанию называется RoundRobinBalancingPolicy
и представляет собой простой алгоритм циклического распределения. LeastActiveBalancingPolicy
направляет запросы в пулы с наименьшим количеством активных соединений, обеспечивая хорошее распределение использования по кластеру. .
[ 7 ]
Объединение
[ редактировать ]The ExhaustedPolicy
определяет, как контролируются базовые пулы клиентских подключений. На данный момент доступны три варианта: [ 8 ]
Тип | Комментарий |
---|---|
WHEN_EXHAUSTED_FAIL |
Не удается привлечь клиентов, когда больше нет доступных клиентов. |
WHEN_EXHAUSTED_GROW |
Пул автоматически увеличивается, чтобы реагировать на увеличение нагрузки. |
WHEN_EXHAUSTED_BLOCK |
Блокировать привлечение до тех пор, пока клиент не станет доступным (по умолчанию). |
Примеры кода
[ редактировать ]реализация простой распределенной хеш-таблицы В качестве примера приведена на Cassandra.
/**
* Insert a new value keyed by key
* @param key Key for the value
* @param value the String value to insert
*/
public void insert(final String key, final String value) throws Exception {
execute(new Command(){
public Void execute(final Keyspace ks) throws Exception {
ks.insert(key, createColumnPath(COLUMN_NAME), bytes(value));
return null;
}
});
}
/**
* Get a string value.
* @return The string value; null if no value exists for the given key.
*/
public String get(final String key) throws Exception {
return execute(new Command(){
public String execute(final Keyspace ks) throws Exception {
try {
return string(ks.getColumn(key, createColumnPath(COLUMN_NAME)).getValue());
} catch (NotFoundException e) {
return null;
}
}
});
}
/**
* Delete a key from cassandra
*/
public void delete(final String key) throws Exception {
execute(new Command(){
public Void execute(final Keyspace ks) throws Exception {
ks.remove(key, createColumnPath(COLUMN_NAME));
return null;
}
});
}
Ссылки
[ редактировать ]- ^ «Релизы · гектор-клиент/Гектор» . Гитхаб .
- ^ Перейти обратно: а б Ран Тавори. «Гектор – клиент Java Cassandra» . PrettyPrint.me . Проверено 23 марта 2011 г.
«Из коробки» Cassanra предоставляет экономичный клиент, который хорош, но ему не хватает многих функций, необходимых для реальных клиентов. Я создал Гектора, чтобы заполнить этот пробел.
Вот высокоуровневые функции Hector, которые в настоящее время размещены на github.- Высокоуровневый объектно-ориентированный интерфейс для Cassandra.
- Поддержка аварийного переключения.
- Пул соединений.
- Поддержка JMX.
- Поддержка шаблона проектирования «Команда», позволяющая клиентам сосредоточиться на своей бизнес-логике и позволить Хектору позаботиться о необходимых сантехнических работах.
- ^ «Клиент Hector для Apache Cassandra: инкапсуляция Thrift API» (PDF) . ДатаСтакс . Проверено 12 апреля 2011 г.
Теперь Hector полностью инкапсулирует Thrift API, поэтому разработчикам приходится иметь дело только с клиентом Hector, используя знакомые шаблоны проектирования. Исходный API по-прежнему доступен существующим пользователям для перехода к своим текущим проектам, а также для тех, кому удобно работать с Thrift.
- ^ «Клиент Hector для Apache Cassandra: полностью Mavenized» (PDF) . ДатаСтакс . Проверено 12 апреля 2011 г.
Начиная с бета-версии Cassandra 0.7.0, Riptano предлагает доступ к репозиторию maven для зависимостей, необходимых для использования Cassandra через Hector.
- ^ Ран Тавори. «Балансировка нагрузки и улучшенное аварийное переключение в Hector» . PrettyPrint.me . Проверено 23 марта 2011 г.
Мы добавили в Hector очень простую функцию балансировки нагрузки, а также улучшили поведение при отказе. Hector — это клиент Java Cassandra. Чтобы узнать больше о нем, прочтите мою предыдущую публикацию Hector — клиент Java Cassandra. В версии 0.5.0-6 я добавил балансировку нагрузки для бедных, а также улучшил поведение при отказе.
- ^ «Клиент Hector для Apache Cassandra: доступность метрик» (PDF) . ДатаСтакс . Проверено 12 апреля 2011 г.
Чтобы обеспечить более плавную работу и лучшее понимание характеристик производительности, Hector предоставляет через JMX как счетчики доступности, так и, при необходимости, статистику производительности.
- ^ «Клиент Hector для Apache Cassandra: базовая балансировка нагрузки» (PDF) . ДатаСтакс . Проверено 12 апреля 2011 г.
Hector обеспечивает подключаемую балансировку нагрузки через
LoadBalancingPolicy
интерфейс. «Из коробки» предоставляются две основные реализации:LeastActiveBalancingPolicy
(по умолчанию) иRoundRobinBalancingPolicy
.LeastActiveBalancingPolicy
направляет запросы в пулы с наименьшим количеством активных соединений. Это обеспечивает хорошее распределение использования по кластеру за счет отправки запросов на компьютер, имеющий наименьшее количество подключений.RoundRobinBalancingPolicy
реализует простой алгоритм циклического распределения. - ^ «Клиент Hector для Apache Cassandra: конфигурация пула» (PDF) . ДатаСтакс . Проверено 12 апреля 2011 г.
Поведением базовых пулов клиентских подключений можно управлять с помощью ExhaustedPolicy. […]