Skip to content
This repository was archived by the owner on May 13, 2021. It is now read-only.

instinctools/gluten

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GLuTEN - Go LoadTEstiNg

Предназначен для обучения Go

Проект представляет собой распределенную систему нагрузочного тестирования. Это немного громко сказано - пока она сможет делать много GET запросов на целевой ендпоинт с нескольких машин, при этом нагрузку можно регулировать

Архитектура

Система состоит из 3-х компонент

  • server
    • master
    • slave
  • command line application - запускает задачи

Server

Несколько нод, которые будут создавать нагрузку. Должна быть хотя бы одна master нода. Каждая нода стартует из консоли

Master

Cтарт мастера

gluten-server --master-mode --web-port 8888 --rpc-port 9090
  • Нужно будет запомнить IP+порт стартованного мастера, для удобства после старта можно его напечатать.
  • Мастер сам выступает, как полноценная нода, которая тоже участвует в создании нагрузки
  • Мастер имеет web интерфейс, на котором можно посмотреть статистику. --web-port задает порт для веба
  • С другими частями системы общается через порт заданный --rpc-port
  • Мастер должен знать сколько у него слейвов. После того как на master пришла задача, на базе этих знаний он разбивает ее на подзадачи для каждого из слейвов и отсылает их посредством RPC

Slave

Старт слэйва

gluten-server --slave-mode --master 127.0.0.1:9090 --rpc-port
  • с параметрами думаю все понятно, описывать не буду
  • после того как пришла задача, нужно равномерно нагрузить целевой ендпоинт. Тут нужно прикрутить многопоточность

Command line app

gluten --master 192.168.1.1:8888 ...
  • набор параметров для регулирования нагрузки TDB, но пока вот такие
    • нужно задать http endpoint который будем нагружать
    • t - общее количество потоков на всех нодах вместе, из которых будут делаться запросы
    • с - общее количество открытых соединений, которые откроют потоки
  • про параметры можно посмотреть тут в утилите WRK https://github.com/wg/wrk. Это тоже небольшая утилита для создания нагрузки
  • после создания задачи, она отсылается на мастер через RPC
  • после отправки задачи, работа утилиты сразу завершается и печатается ссылка на веб-интерфейс мастера
  • функционал этой утилиты можно продублировать в веб интерфейсе мастера, чтобы задачи можно было создавать из него

Технологии

RPC желательно реализовать посредством Thrift, т.к. он используется на одном из проектов. Как замену можно использовать Protobuf+gRPC - как по мне, то это лучший вариант

Статистика хранится в базе - кто ее будет сохранять, только мастер или слэйвы тоже - нужно смотреть как лучше. База - Postgres или Mongo

Нужно прочитать про вендоринг и попробовать его использовать

About

Go LoadTEstiNg

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •