Предназначен для обучения Go
Проект представляет собой распределенную систему нагрузочного тестирования. Это немного громко сказано - пока она сможет делать много GET запросов на целевой ендпоинт с нескольких машин, при этом нагрузку можно регулировать
Система состоит из 3-х компонент
- server
- master
- slave
- command line application - запускает задачи
Несколько нод, которые будут создавать нагрузку. Должна быть хотя бы одна master нода. Каждая нода стартует из консоли
Cтарт мастера
gluten-server --master-mode --web-port 8888 --rpc-port 9090
- Нужно будет запомнить IP+порт стартованного мастера, для удобства после старта можно его напечатать.
- Мастер сам выступает, как полноценная нода, которая тоже участвует в создании нагрузки
- Мастер имеет web интерфейс, на котором можно посмотреть статистику.
--web-portзадает порт для веба - С другими частями системы общается через порт заданный
--rpc-port - Мастер должен знать сколько у него слейвов. После того как на master пришла задача, на базе этих знаний он разбивает ее на подзадачи для каждого из слейвов и отсылает их посредством RPC
Старт слэйва
gluten-server --slave-mode --master 127.0.0.1:9090 --rpc-port
- с параметрами думаю все понятно, описывать не буду
- после того как пришла задача, нужно равномерно нагрузить целевой ендпоинт. Тут нужно прикрутить многопоточность
gluten --master 192.168.1.1:8888 ...
- набор параметров для регулирования нагрузки TDB, но пока вот такие
- нужно задать http endpoint который будем нагружать
- t - общее количество потоков на всех нодах вместе, из которых будут делаться запросы
- с - общее количество открытых соединений, которые откроют потоки
- про параметры можно посмотреть тут в утилите WRK https://github.com/wg/wrk. Это тоже небольшая утилита для создания нагрузки
- после создания задачи, она отсылается на мастер через RPC
- после отправки задачи, работа утилиты сразу завершается и печатается ссылка на веб-интерфейс мастера
- функционал этой утилиты можно продублировать в веб интерфейсе мастера, чтобы задачи можно было создавать из него
RPC желательно реализовать посредством Thrift, т.к. он используется на одном из проектов. Как замену можно использовать Protobuf+gRPC - как по мне, то это лучший вариант
Статистика хранится в базе - кто ее будет сохранять, только мастер или слэйвы тоже - нужно смотреть как лучше. База - Postgres или Mongo
Нужно прочитать про вендоринг и попробовать его использовать