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

OSCHINA-MIRROR/blackbeans-kiteq

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

KiteQ image

Множественный MQ-фреймворк с различными схемами устойчивого хранения, реализованный на основе Go + Protobuf.

Вики (https://kiteq/wiki)

Краткое описание

* Поддержка горизонтального и вертикального масштабирования отправителей, подписчиков и брокеров через zk/etcd
* Поддержка подписки на сообщения по теме и типу сообщения второго уровня
* Устойчивое хранение сообщений с использованием MySQL и файлового хранилища
* Обеспечение надёжной асинхронной доставки
* Поддержка двухэтапного коммита распределённых транзакций
* Возможность настройки ограничений скорости потока на уровне темы внутри группы для защиты подписчиков
* Защита от перегрузки сервера kiteserver
* Отчёт клиента о времени подготовки системы для постепенного увеличения объёма передачи сообщений в соответствии с этим временем
* Поддерживаемые клиенты: Java, Go, C++, PHP

Структура проекта

kiteq/
├── README.md
├── conf              конфигурационная информация
├── log               конфигурация log4go
├── build.sh          скрипт установки
├── doc               документация
├── handler           необходимые обработчики Handler для KiteQ
├── kiteq.go          внешний вход для запуска KiteQ        
└── server            сборка компонентов серверной части KiteQ
Основные понятия: * Binding: привязка, структура данных, описывающая подписку на определенный тип сообщений
* Consumer: потребитель сообщений
* Producer: отправитель сообщений
* Topic: тема сообщений, например, Trade — это тема сообщений, которая обычно представляет собой определенный вид бизнеса
* MessageType: второй уровень типа сообщений, например, в Trade существует тип сообщения pay-succ-200

Структура данных Zookeeper

    KiteServer: /kiteq/server/${topic}/ip:port
    Producer: /kiteq/pub/${topic}/${groupId}/ip:port
    Consumer: /kiteq/sub/${topic}/${groupId}-bind/$data(bind)
Способы подписки:
    Direct (прямоточная подписка): конкретная подписка на тему и тип сообщения
    Regx (регулярная подписка): подписка на тип сообщения по регулярному выражению уровня темы
    Fanout (распределенная подписка): подписка на все типы сообщений уровня темы
Устойчивая и непостоянная подписка
    Устойчивая подписка: даже если все машины в группе вышли из сети, сообщения не будут потеряны; при восстановлении KiteQ будет повторно отправлено сообщение

    Непостоянная подписка: если все машины в группе вышли из сети, сообщения не будут сохранены и будут удалены

Схема модулей

image

  • Описание:

    KiteQ-Common предоставляет средства для работы с хранилищами, сетевыми протоколами передачи данных и управлением через zk. KiteQ-OPS обеспечивает графическое отслеживание состояния кластера KiteQ.

    Turbo предоставляет общие средства для работы с сетью.

Архитектурная схема

image

  • Описание процесса:

KiteQ:

    1.1 При запуске KiteQ отправляет список поддерживаемых им тем (topics) в центр регистрации (zk/etcd) на узел /kiteq/server и начинает слушать изменения подписок на эти темы.

    1.2 В случае изменения подписок, центр регистрации уведомляет KiteQ о новых подписках с помощью механизма watch, чтобы он мог обновить локальные данные подписок и начать доставку сообщений новым группам подписчиков.

Producer:

    2.1 После запуска производитель отправляет список тем, которые ему требуется использовать, в центр регистрации на узел /kiteq/pub (это используется для управления публикациями).

    2.2 Производитель получает IP и порт соответствующего узла KiteQ из центра регистрации на основе списка тем и наблюдает за изменениями этого узла с помощью механизма watch.

    3.1 Производитель устанавливает TCP соединение с этим узлом KiteQ и поддерживает его постоянной активностью путём периодического отправления heartbeat.

    3.2 После успешной проверки авторизации со стороны KiteQ, производитель может начать публикацию сообщений.Consumer:

    2.1 После запуска потребитель отправляет информацию о своих подписках на узел /kiteq/sub в центр регистрации.

    2.2 Потребитель получает IP и порт соответствующих узлов KiteQ из центра регистрации на основе информации о подписках и наблюдает за изменениями этих узлов с помощью механизма watch.

    3.1, 3.2 Потребитель устанавливает TCP соединение с этими узлами KiteQ и поддерживает его постоянной активностью путём периодического отправления heartbeat. После установления соединения KiteQ начинает направлять сообщения к этому потребителю при наличии соответствующих сообщений.

KiteQ-OPS:

    На основе данных, предоставленных центром регистрации и HTTP-интерфейсов KiteQ, система собирает информацию о состоянии системы и представляет её в виде диаграмм.

- Примечание:
    Разделение ролей между издателями и подписчиками является условным. Та же группа может выполнять роль как издателя, так и подписчика.
Двухэтапная синхронизация: Из-за введения асинхронной схемы доставки, в некоторых случаях требуется, чтобы локальное выполнение какой-либо транзакции завершилось успешно, прежде чем сообщение будет считаться принятым получателем.

Например:- При успешной оплате покупки подписки необходимо обновить баланс пользователя в локальной базе данных MySQL и уведомить систему подписок о продлении срока действия подписки для данного пользователя.

  • В этом случае возникает необходимость гарантировать успешное выполнение операции в MySQL перед тем, как система подписок получит уведомление о продлении срока действия подписки.Для решения вышеописанных проблем, KiteQ работает аналогично системе уведомлений Ali:
  1. Отправка незавершенного сообщения в KiteQ, при этом KiteQ не выполняет его доставку.

  2. KiteQ регулярно отправляет запрос TxAck на производителя относительно незавершенных сообщений.

  3. Процесс продолжается до тех пор, пока производитель явно не скажет о завершении или откате этого сообщения.

  4. Завершение приведёт к обычному процессу доставки, тогда как откат приведёт к удалению текущего сообщения.##### Быстрый старт

    1. Скачайте последнюю версию с releases[https://kiteq/releases]

    2. Установите последнюю версию Zookeeper с http://www.apache.org/dyn/closer.cgi/zookeeper/

    3. Запустите Zookeeper $ZOOKEEPER_HOME/bin/zkServer.sh start (Разработка в среде с одним узлом)

    4. Распакуйте KiteQ-xxx-xxxx.tar.gz в путь развёртки

    5. Выполните sh kiteq.sh

    Восхитительный кластер KiteServer запущен...

*** Примечание:

    Конфигурация KiteQ находится в conf/cluster.toml
    
    Можно использовать команду 'sh kiteq -clusterName=${cluster_name} -configPath=${toml_path}'
    
    Рекомендуется использовать supervisor для управления kiteq.

*** Регистрация KiteQ:

    zk:    zk://localhost:2181,localhost:2181 (стабильная)
    
    etcd:  etcd://http://localhost:2379,http://localhost:2379 (неустойчивая)
Поддерживаемые клиенты:

Go-Client

Java-Client

PHP-ClientCPP-Client

Контактная информация

Почта: blackbeans.zc@gmail.com

QQ: 136448723

QQ-группа: 139685004 (группа практики Kiteq)

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

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

Введение

Kiteq — это распределённая MQ-инфраструктура. Развернуть Свернуть
Отмена

Обновления

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

Участники

все

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

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