Skip to content

vladlutkov/wordofwisdom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Документация сервисов WordOfWisdom

Архитектура

Система включает два компонента:

  • Сервер: отправляет задачи Proof-of-Work (челленджи), принимает решения и возвращает цитаты.
    Настройка: порт указывается через переменную окружения PORT

  • Клиенты: подключаются к серверу, решают задачи, отправляют результаты и получают цитаты.
    Настройка: подключение определяется через ADDR (например, server:44542).


Протокол взаимодействия

Шаги взаимодействия:

  1. Подключение: Клиент соединяется с сервером через TCP (server:44542 в сети app-network).

  2. Передача данных:

    • Сервер → Клиент:
      • difficulty (1 байт) — сложность задачи.
      • challenge (4 байта) — входные данные для вычислений.
    • Клиент → Сервер:
      • Решение задачи (nonce, 4 байта).
    • Сервер → Клиент (успешное решение):
      • Длина цитаты (quote_length, 4 байта).
      • Текст цитаты (quote, N байт, UTF-8).

Алгоритм Proof-of-Work

Клиент вычисляет значение nonce, чтобы удовлетворить условие:

hash(challenge + nonce) >> (hashlen - difficulty) == 0

Конфигурация docker-compose

  • Сеть: bridge
  • Сервер:
    • Работает на порту 44542, доступен как server:44542.
    • Конфигурация через переменные окружения (PORT).
  • Клиент:
    • Подключается к серверу через ADDR=server:44542.
    • Указано 3 реплики по умолчанию (можно масштабировать).

Пример использования

Запуск системы

docker-compose up --build

Масштабирование клиентов

docker-compose up --scale client=3

Остановка системы

docker-compose down

Клиенты автоматически подключаются к серверу, решают задачи и получают цитаты.

Динамическое изменение сложности

Сложность решения (difficulty) увеличивается с количеством запросов от пользователя. Это позволяет адаптировать систему Proof-of-Work, чтобы предотвратить злоупотребления и обеспечить честное распределение ресурсов. Пропускная способность зашита в server/main.go в вызове конструктора NewUsers

About

Just a test case

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published