Git Product home page Git Product logo

ozon_telegram_bot_gitlab's Introduction

telegram-bot [email protected]

GOHW-4

Оригинал: https://miro.com/app/board/uXjVPLcnlMM=/?share_link_id=427882255094

Функциональные требования

  • Предоставляет статистику по расходам
  • Сопоставляет расходы с лимитами

Нефункциональные требования

  • Низкое время отклика
  • Отказоустойчивость
  • Сохранность данных
  • Мониторинг

Оценки на 1 пользователя

Telegram API <-> app

  • Среднее число запросов в сутки ~10 (добавить расход ~5, получить отчет 3, прочий тип2)
  • Средний размер запроса через API telegram ~500+200+70 байт (http заголоки + json формат + текст от пользователя)
  • Средний размер ответа через API telegram ~500+200+1000 байт (http заголоки + json формат + текст для пользователя)
  • RPS = 10 / 24 / 60 / 60 = 0.00012 запросов/сек
  • BPS = 10 * (500+200+70 + 500+200+1000) / 24 / 60 / 60 = 0.29 байт/сек

app <-> База данных

  • Средний размер данных "пользователь" в БД ~64+64 байта (полезная нагрузка + индексы, системная информация)
  • Средний размер данных "расход" в БД ~320+2*64 байт (полезная нагрузка + индексы, системная информация)
  • Прирост данных в БД = 5 * (320+2*64) = 2240 байт/сутки
  • Кеш не используем, т.к. данные для самой затратной операции по памяти и времени "получить отчет" становятнся неактуальными после самой частой операции "добавить расход", т.е. постоянно нужно пересчитывать или оптимизировать эту операцию.
  • Данные храним за 2 года(текущий календарный + предыдущий), размер (64+64) + 23655*(320+2*64) + 10% = 1798860.8 байт = 1.8 Мб (данные "пользователь" + данные "расходы" + накладные системные расходы)
  • Бекап - x2 = 3.6 Мб
  • Реплику считаем отдельно, т.к. для простых систем не требуется

Максимальные показатели отдельно считать не будем, т.к. данные очень усредненные и не учитываем распределение в течение суток. При необходимости берем x5

Оценки системы на 1k пользователей

  • RPS = 1000 * 0.00012 = 0.12 запросов/сек
  • BPS = 1000 * 0.29 = 290 байт/сек
  • БД = 1000 * (1.8 + 3.6 + 0) = 5.4 Гб (primary replica + backup + read replica)

Оценки системы на 100k пользователей

  • RPS = 100000 * 0.00012 = 12 запросов/сек
  • BPS = 100000 * 0.29 = 29 кб/сек
  • БД = 100000 * (1.8 + 3.6 + 1.8) = 7.2 Тб

Оценки системы на 1m пользователей

  • RPS = 1000000 * 0.00012 = 120 запросов/сек
  • BPS = 1000000 * 0.29 = 290 кб/сек
  • БД = 1000000 * (1.8 + 3.6 + 1.8) = 72 Тб

Вывод

  • 120 запросов/сек кажется не так уж много, по 2-3 воркера хватит для работы с очередями (если вдруг один упадет, то это не будет заметно)
  • 290 кб/сек очень маленькая нагрузка, проблем не должно быть
  • БД на 72 Тб - самое проблемное место, которое может работать очень долго. Если требования не изменятся, то нужно подумать о том, чтобы не хранить все расходы одиночными записями, а сразу агрегировать по интервалам и категориям. Это позволит заметно снизить размер БД и быстрее строить получить данные для отчета.

ozon_telegram_bot_gitlab's People

Contributors

alexandermyasnikov avatar pav5000 avatar

Stargazers

Dima Gunkin avatar

Watchers

Dima Gunkin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.