MikhailFerapontow / yadro-go

Проект с Golang курс | YADRO
1 stars 0 forks source link

Задание 3 #5

Closed vbelogrudov closed 4 months ago

vbelogrudov commented 4 months ago

Оптимизация производительности Go приложения: многопоточность, конкурентный доступ, кэширование.

Цель

Увеличить скорость работы приложения из задания 2 путем параллелизации запросов и кэширования. Приложение можно прерывать, при старте оно должно продолжить со следующего необработанного комикса. Какое оптимальное количество горутин необходимо? Какие способы “транзакционности” можно придумать?

Количество горутин считывается из конфигурационного файла.

Критерии приемки

  1. Флаги -n и -o не нужны. -с флаг для нахождения конфига, единственный флаг приложения. make build создает xkcd приложение.

  2. Прерывание приложения должно оставлять структуру в database.json в консистентном виде, то есть если успели прочитать 10 комиксов, они должны лежать в database.json в корректном json формате. Пользователь в любой момент может безопасно прервать программу.

  3. Если уже существует database.json, программа должна продолжить с пропущенных комиксов (даже пропуски в середине), принимая во внимание уже считанные.

  4. В конфигурационном файле parallel указывает на количество горутин параллельных запросов к сайту xkcd.com, с комментарием - почему именно такое число.

  5. Имплементация нахождения последнего комикса, считаем, что несуществует страница xkcd.com/info.0.json

  6. (со звездочкой) Корректно отрабатываем сценарий “отключения света/kill -9” (сохраняем обработанные комиксы в БД), а не только ctrl-c

    Материалы для ознакомления