1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dzh-dimit

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Распределенная система управления потоками

Быстрый старт

  • Добавление зависимости pom в maven
    <dependencies>
        <dependency>
            <groupId>io.github.dzh</groupId>
            <artifactId>dimit-core</artifactId>
        </dependency>
        <dependency>
            <groupId>io.github.dzh</groupId>
            <artifactId>dimit-zk</artifactId>
        </dependency>
    </dependencies>
  • Инициализация StoreSystem
String uri = "dimit-zk://dzh/dimit?host=127.0.0.1:2181&sleep=1000&retry=3";
DimitStoreSystem dss = DimitStores.newStoreSystem(URI.create(uri), null);
  • Последовательное создание конфигураций управления потоками Conf, с учетом структуры уровней конфигурации:
- DimitConf             Определяет один контроллер потока
    - ChannelGroupConf  Конфигурация группы каналов
        - ChannelConf   Конфигурация канала

Примечание: Для справки см. модульные тесты dimit-demo/../TestZkStoreConfDemo

  • Инициализация Dimiter, создание соответствующих данных выполнения на основе конфигураций управления потоками
// инициализация dimiter и каналов выполнения
String uri = "dimit-zk://dzh/dimit?host=127.0.0.1:2181&sleep=1000&retry=3";
Dimiter dimiter = Dimiter.newDimiter(URI.create(uri), null, dimitConfId);
ChannelGroupWrapper group = demo.initChannelGroup(channelGroupConfId);
group.newChannel(ChannelConfId_1, ChannelType.SEND);
group.newChannel(ChannelConfId_2, ChannelType.SEND);

// выбор
List<ChannelWrapper> selected = group.select(TagA, TagB);
V result = null;
for(ChannelWrapper channel : selected) {
    try{
        result = channel.call(new ChannelCallable<V>() {
            // TODO запрос
            ...
        });
        // TODO парсинг результата
        ... 
        break;
    } catch(RateLimiterException e){
        LOG.info(e.getMessage(), e);
    } catch(InvalidChannelException e){
        LOG.error(e.getMessage(), e);
    } catch(Exception e){  // или break
        LOG.error(e.getMessage(), e);
    }
}
``````markdown
// завершение программы
dimiter.close();

Примечание: Для справки см. модульные тесты dimit-demo/../TestDimiterDemo.

Список характеристик

  • Управление трафиком
    • ChannelConf определяет max-tps, где tps канала равно max-tps делённому на общее количество каналов.
  • Фильтрация по тэгам
    • ChannelConf определяет список тэгов для канала; при вызове ChannelGroupWrapper.select(...) выбираются группы каналов, удовлетворяющие условиям.
  • Переключение между основным и резервным каналами
    • ChannelConf определяет состояние канала ChannelStatus; в списке доступных каналов, возвращаемых select, PRIMARY имеет приоритет перед STANDBY.
  • Анализ качества
    • Включается функция анализа качества канала (stat.enable=true, по умолчанию включена); при вызове ChannelWrapper.call() собирается информация stat.
  • Динамическое переключение при сбоях
    • По информации stat вычисляется ChannelWrapper.priority(), которое влияет на результат select.
  • Веб-управление
    • TODO

Требования к окружению

  • JDK 1.7 или выше
  • Maven 3
  • Protobuf 3
  • Servlet-api v3.1.0

TODO использовать web4j

Ссылки на документацию


Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Система управления распределённым трафиком. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/dzh-dimit.git
git@api.gitlife.ru:oschina-mirror/dzh-dimit.git
oschina-mirror
dzh-dimit
dzh-dimit
master