Coder Social home page Coder Social logo

test's Introduction

Redis web proxy

Instructions for how to run the proxy and tests.

Запуск сервисов make start Тест make e2e (не make test т.к. это зарезервировано)

High-level architecture overview

Используемый стек

  • NodeJS:latest
  • NestJS:latest
  • Redis:latest
  • Nginx:latest

Приложение состоит из основного модуля и модуля взаимодействия с Redis. Архитектура многослойная и в основном продиктована NestJS best practices. В принципе это обычный MVC с дополнительным внедрением слоя middleware ДО и ПОСЛЕ request.

Ограничение в n входящих запросов обеспечивается Nginx.

What the code does.

Последовательность действий которые выполняются сервисом

  • Входящий вопрос приходит транспортный слой приложения
  • Слой промежуточных обработчиков проверяет на наличие такого типа запроса в кэше, и если он есть - возвращает его, без перехода к следующему слою
  • Фреймворк делает необходимые преобразования со слоя транспорта на "логический" слой приложения без дополнительных преобразований
  • Обработанный запрос поступает на контроллер
  • Контроллер отправляет запрос без обработки далее на сервисный слой
  • Сервис взаимодействия с redis получает искомый ключ с помощью программного клиента
  • Ответ передается далее на сервисный слой
  • Ответ передается далее, по пути встречая слой "перехватчиков" (в терминологии NestJS, middleware наоборот), кэшируя при этом значение на время установленное в dotenv
  • Ответ отдается клиенту

Algorithmic complexity of the cache operations.

see node-cache-manager

How long you spent on each part of the project.

nginx - 6 часов (никогда сам не настраивал) nestJS - 4 часа плюс минус e2e - 4 часа readme - 1 час

A list of the requirements that you did not implement and the reasons for omitting them.

  • Я не смог обеспечить искусственный bottleneck (честно, я долго думал, но ничего годного не придумал, нода это не совсем то где именно ограничивают ресурсы, она скорее та, кто их распределяет и "распараллеливает")
  • Я не смог сделать последовательную обработку запросов) примерно по той же причине что и до этого, почти все решения которые могут мне помочь в этом плане - это fire-and-forget и подвешивать запрос на стороне ноды, что не есть правильное и элегантное решение в том стеке что выбран
  • Я не смог оценить алгоритмическую сложность кэширования т.к. просто не успел залезть в сырцы библиотеки которая делает это из коробки за меня. Доверился тому что этот пакет используют и повсеместно.

test's People

Contributors

uakob avatar

Watchers

Kirill Temnov avatar  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.