Напишите два файла на Python: первый файл - сервер DummyMessenger, второй - клиент, который тестирует скорость работы DummyMessenger.
Сервер должен быть реализован с использованием асинхронного фреймворка (например, aiohttp, fastapi или другой подобный).
При запуске сервер должен инициализировать базу данных, создавая таблицу для сообщений, если она не существует на момент запуска.
Сервер должен предоставлять один метод HTTP POST, который:
- получает JSON-сообщение, содержащее имя отправителя и текст, и сохраняет его в базу данных (выбор конкретной базы данных не имеет принципиального значения)
- возвращает JSON с последними 10 (или меньшим количеством, если история не накопилась) сообщениями, включая текущее
- каждое сообщение в ответе должно содержать имя отправителя, текст сообщения, дату отправки, порядковый номер сообщения и количество сообщений от текущего пользователя
- дату, порядковый номер и счётчик сообщений пользователя необходимо вычислить в момент сохранения и записать в базу данных
- в ответе на запрос не должны присутствовать сообщения, полученные после текущего запроса
- в ответе на запрос не должны пропускаться сообщения
- порядковые номера сообщений не должны совпадать
- у сообщений от одного пользователя не должны совпадать счётчики сообщений Такие ситуации могут возникнуть, когда сервер обрабатывает два запроса асинхронно (или две параллельно работающие реплики сервера обрабатывают запросы одновременно). Необходимо предусмотреть и предотвратить такие ситуации с помощью инструментов базы данных.
Клиент должен поддерживать запросы к нескольким репликам одного сервера. Например, в клиенте можно указать два URL с разными портами сервера, и запрос будет отправлен на случайно выбранный сервер. Клиент должен отправлять текстовые сообщения от имени случайных пользователей, выбираемых из списка из десяти имен. Запросы должны отправляться асинхронно из 50 одновременно запущенных корутин. Каждая корутина последовательно отправит 100 запросов и завершит работу. В конце клиент должен подсчитать время, за которое было выполнено 5000 запросов, время работы одного запроса и общую пропускную способность серверов.
- Результаты выполнения задания должны быть размещены на GitHub. Создайте открытый репозиторий на GitHub, загрузите код двух файлов (сервер и клиент) в репозиторий и предоставьте нам ссылку на этот репозиторий в вашем ответе. Убедитесь, что репозиторий содержит все необходимые файлы для воспроизведения и проверки результатов.
- В README файле репозитория должна быть предоставлена информация о том, как воспроизвести результаты выполнения задания. Укажите шаги или инструкции, которые нам следует выполнить, чтобы проверить ваше решение и протестировать сервер DummyMessenger на двух одновременно запущенных репликах. Это может включать необходимые зависимости, команды для запуска сервера и клиента, а также любую другую информацию, которая может быть полезной для проверки вашего решения. Оформи этот текст более структурированно и красиво в Marcdown
2. Установить зависимости pip install -r requirements.txt
. Далее создать файл .env
для переменных окружения в корне проекта:
USER=user
PASSWORD=123321
DB=server
- для более быстрого и простого подключения к базе будет лучшим создание докер образа и контейнера postgresql
Способ №2 (Только для Ubuntu 22.04 либо на более ранних версиях с устнаовленным Python 3.10 и установленным Docker)
- для более быстрого и простого подключения к базе будет лучшим создание докер образа и контейнера postgresql