В начале нового года команда разработчиков серверной системы прямых трансляций Huajiao открыла исходный код ряда базовых сервисов, которые широко используются внутри компании, включая систему шин и распределенное управление cron, представленное ранее:
- gokeeper — централизованный центр управления конфигурацией
- pepperbus - Система перечных автобусов
- peppercron — распределенное управление pepcron live cron
- приборная панель - фон операции перец и пепперкрон
gokeeper
- Адрес репозитория на гитхабе:
https://github.com/huajiao-tv/gokeeper
- репозиторий образов докеров:
docker pull huajiao/gokeeper
gokeeper — централизованный центр управления конфигурацией, написанный на языке go, который поддерживает функцию обнаружения сервисов, по умолчанию в качестве внутреннего хранилища конфигурации используется ETCD (который может поддерживать consul, zokeeper и т. д.), а также поддерживает работу с одним узлом. или развертывание кластера.
бегать
Предварительные условия
- Настройте среду Docker и docker-compose локально
- Клонировать код gokeeper на локальный
начать вратарь
- Входить
deploy/docker_compose
содержание - воплощать в жизнь
docker-compose up -d
Централизованная конфигурация
gokeeper поддерживает встроенную кодировку gob языка go и поддерживает большинство типов данных и составных структур языка go:
bool, []bool
int, int64
[]int, []int64
float64, []float64
string, []string
map[string]string, map[string]int, map[string]bool
map[int]string, map[int]int, map[int]bool
map[string][]string, map[string]struct{}, map[int]struct{}
time.Duration
В дополнение к перечисленным выше типам языка go он также поддерживает сопоставление строк json с пользовательскими типами.json
.
Кроме того, для совместимости с другими языками gokeeper также поддерживает использование протокола gRPC, а SDK для других языков все еще находятся в стадии разработки и тестирования.
доступ
-
вводить
go get -u github.com/huajiao-tv/gokeeper
-
использовать пользовательский
ini
конфигурация определения форматаиспользование ini-файла
<key> [type] = [value]
формат, если тип не указан, по умолчаниюstring
-
Создать объект конфигурации
go get -u github.com/huajiao-tv/gokeeper/cmd/gokeeper-cli
$GOPATH/bin/gokeeper-cli -in ./ini_file_path -out data
- gokeeper client
//your sections to use
sections := []string{"test.conf/DEFAULT"}
//gokeeper.WithGrpc() will use grpc to connect gokeeper server,otherwise use gorpc
client := gokeeper.New(keeperAddr, domain, nodeID, component, sections, nil, gokeeper.WithGrpc())
client.LoadData(data.ObjectsContainer).RegisterCallback(run)
if err := client.Work(); err != nil {
panic(err)
}
обнаружение службы
принцип
имя существительное | иллюстрировать |
---|---|
Service Provider | поставщики услуг |
Service Consumer | вызывающий абонент |
Instance | Информация об экземпляре, запущенный узел службы, уникальность идентификатора |
Service | Информация о службе. Служба содержит один или несколько экземпляров. |
ServiceName | Уникальный идентификатор сервиса в формате проект.сервис[.под_сервис] |
Zone | Идентификатор IDC |
Env | Идентификатор рабочей среды службы, prod (онлайн)/pre (предварительная версия)/test (тест)/dev (разработка). |
Registry | Интерфейс внутреннего хранилища для обнаружения сервисов можно подключить к etcd, zookeeper, consul и т. д. |
Scheduler | Планировщик балансировки клиентской нагрузки, настраиваемые случайные, весовые и другие стратегии |
характеристика
- Интерфейс для регистрации и обнаружения службы на стороне клиента взаимодействует только с gokeeper и не заботится о внутреннем хранилище для обнаружения gokeeper.
- Подписчики сервисов подписываются только на интересующие их сервисы, а сервисы без подписок не будут получать push-уведомления об изменении информации
- gokeeper discovery устанавливает соединение с серверным хранилищем, отслеживает изменения в информации об узле службы, и, если есть добавленные или удаленные узлы, обнаружение отправляет информацию подписчикам службы в режиме реального времени.
- В случае, если клиент-потребитель и обнаружение gokeeper не подключены, можно использовать исходный узел.
- Стратегия балансировки нагрузки настраивается в фоновом режиме, записывается в хранилище через gokeeper, синхронно обновляется каждым узлом обнаружения gokeeper, а затем синхронизируется с каждым потребителем услуг через gokeeper.
доступ
-
вводить
go get -u github.com/huajiao-tv/gokeeper/client/discovery
-
Service Provider
instance := discovery.NewInstance(discovery.GenRandomId(), "demo.test.com", map[string]string{discoverry.SchemaHttp: "127.0.0.1:17000"})
instance.Id = "test_id_1"
client := discovery.New(
// gokeeper server address(grpc address)
"127.0.0.1:7001",
// registry service
discovery.WithRegistry(instance),
discovery.WithRegistryTTL(60*time.Second),
// schedule strategy,default:random
discovery.WithScheduler(map[string]schedule.Scheduler{
"demo.test.com": schedule.NewRoundRobinScheduler(),
}),
)
- Service Consumer
// start gokeeper client
client := discoverry.New(
// gokeeper server address(grpc address)
"127.0.0.1:7001",
// subscribe a group of service
discovery.WithDiscovery("example_client1", []string{"demo.test.com"}),
)
// TODO
// get service address
addr, err := client.GetServiceAddr("demo.test.com", discovery.SchemaHttp)
if err != nil{
// TODO
}
pepperbus
- Адрес репозитория на гитхабе:
https://github.com/huajiao-tv/pepperbus
- репозиторий образов докеров:
docker pull huajiao/pepperbus
перец-автобус - автобусная система прямого вещания сычуаньского перца, соответствующий дизайн и внедрение находятся втехнология перцаВыпуск официального аккаунта 2019-11-26.
peppercron
- Адрес репозитория на гитхабе:
https://github.com/huajiao-tv/peppercron
- репозиторий образов докеров:
docker pull huajiao/pepperbus
peppercron — распределенный сервис управления cron для прямых трансляций pepcron, соответствующий дизайн и внедрение находятся в разработке.технология перцаВыпуск официального аккаунта 2019-10-29.
dashboard
- Адрес репозитория на гитхабе:
https://github.com/huajiao-tv/dashboard
- репозиторий образов докеров:
docker pull huajiao/dashboard
Панель инструментов — это фон общего управления, разработанный в соответствии с бизнес-требованиями прямой трансляции перца, чтобы упростить использование перцового автобуса и пепперкрона.
Инструкции по приборной панели
запускать
После клонирования кода на локальный выполнитеdocker-compose up -d
, создаются следующие контейнеры:
- Redis — хранилище сообщений приземляющихся сообщений
- mysql — база данных бэкэнд-панелей
- gokeeper_etcd — ETCD, используемый gokeeper и peppercron.
- gokeeper — Центр конфигурации
- peppercron — Распределенный сервис управления cron.
- php-fpm - потребление php шины
- перец-автобус - автобусная система
- приборная панель - фон операции управления pepperbus и pepcron
Авторизоваться
Вход через браузерlocalhost:8360
, учетная запись по умолчанию после запуска:
- Администратор по умолчанию:
admin
- пароль:
admin@pass
(существуетconfig.yaml
указано в)
Создать систему
автобус пеппербус
Добавить сервер перец в систему
Добавить хранилище Redis в систему
добавить очередь
Добавить две темы в очередь
в хранилище кодаexample/php/consume.php
Через php SDK реализованы два потребителя, а именно:queue1/topic1
, queue1/topic2
. Среди них тема1 по умолчанию возвращает успех, а тема2 по умолчанию возвращает ошибку.
Тема теста
- topic1
- topic2
управление задачами пепперкрон
Добавить сервер задач перец в систему
добавить задачу
тестовое задание
Перед запуском вы можете проверить, правильно ли настроена задача