Приложение для быстрого получения и хранения заказов
make docker
- запускает базу данных PG и очередь Nats streaming
make run
- запускает сервер
make publisher
- запускает клиент, с помощью которого можно записывать в очередь
- Cache (in memory) - для кэширования частых запросов
- PostgreSQL - в роли БД
- Nats-streaming - брокер сообщений для получения заказов
Был использован подход чистой архитектуры так чтобы можно было легко заменять конкретные реализации, например легко заменить кэш или бд на Redis, a Nats streaming на что-то поновее).
Для кэша был реализован подход Сache prefetching, предзагрузка данных из бд при каждом запуске. Считаю это не лучшим решением, поэтому была реализована логика и для другого подхода Cache aside.
Плюсы второго, в загрузке данных по необходимости из бд, редко используемые могут быть не загружены вовсе.
Для перехода на другой алгоритм, достаточно выбрать другой метод создания кэша. Вместо cache.NewOrderLoad -> cache.NewOrder. Тогда данные будут загружаться по логике cache hit/miss.