practiceCacheRedisGRPC

module
v0.0.0-...-d0c7a0f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 15, 2021 License: MIT

README

practiceCacheRedisGRPC

Практическое задание на реализацию распределенного сервиса кеша в Redis с cache-filling-ом на promis-ах.

Описание задания

Необходимо написать два сервиса, общающихся между собой по GRPC/Protobuf:
Сервис Cache:
Cчитывает конфиг из файла config.yml (см ниже)
Реализует GRPC метод GetRandomDataStream() без параметров, возвращающий поток из string
Получив запрос  он NumberOfRequests(из конфига) раз в параллельных горутинах вызывает случайный URL из
набора URLs(из конфига)
Полученные ответы по мере их поступления отдаются через поток и кэшируются в БД Redis с временем жизни =
случайным числом между MinTimeout(из конфига) и MaxTimeout(из конфига)
При каждом подзапросе к URL необходимо сначала проверять наличие данных в БД Redis, и если они там есть,
то отдавать их оттуда, а не через запрос по URL - т.е. выполнять фунцию “кэша”
При этом если в БД Redis записей нет или они просрочены, то необходимо обращаться напрямую по URL.
ВАЖНО: Сервис Cache будет запущен во множестве экземпляров на разных серверах. Поэтому другие параллельно
выполняющиеся горутины в данном процессе а также в других процессах / на других серверах также не должны
лезть в URL - они должны дожидаться окончания выполнения запроса первой горутиной и получить данные от нее
или через Redis. Т.е. одновременно никогда от всех сервисов Cache не должно быть повторных обращений по
одинаковым URL
Сервис Consumer:
Создает 1000 горутин и в каждой из них делает запросы ко второму сервису. Результат можно никуда не выводить
Содержимое файла config.yml:
URLs:
- https://golang.ir
- https://www.google.com
- https://www.bbc.co.uk
- https://www.github.com
- https://www.gitlab.com
- https://www.duckduckgo.com
- https://www.atlasian.com
- https://www.twitter.com
- https://www.facebook.com
MinTimeout: 10
MaxTimeout: 100
NumberOfRequests: 3

Directories

Path Synopsis
cmd
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL