Ответы пользователя по тегу Проектирование программного обеспечения
  • Как сделать микросервисы из вебсокетов?

    @0nkery
    Да, желательно, чтобы у вас была одна точка входа в систему, потому что нормальная настройка вебсокет-шлюза займет немало времени, да и это будет полезно, если вы вдруг решите изменить архитектуру -- добавить сервис C, к примеру. Ваш клиент эти тонкости волновать не должны (в общем случае).

    Дальше необязательно, чтобы клиент обращался напрямую к сервисам A и B -- вебсокет-шлюз может сам общаться с внутренними сервисами и реализовывать сложные сценарии взаимодействия в бэкенде.

    Не забывайте, что внутренняя сеть гораздо быстрее и стабильнее, чем внешняя, по которой будет ходить клиент -- чем больше коммуникаций будет внутри внутренней сети, тем лучше.

    Ну и подумайте еще раз -- а так ли нужны вам отдельные сервисы? Может быть, лучше обойтись монолитом?
    Ответ написан
    Комментировать
  • Есть ли какая-то хорошая практика по интеграции функциональности из независимых библиотек для последующего использования?

    @0nkery
    Вы можете использовать общую шину, подключить туда две сущности: Licensing и Service, а между ними поставить сущность, которая знает о событии LicenceChanged и знает, что при этом событии нужно перезапустить сервисы, а так же, как именно это можно сделать (обращается к Service). Если обращаться к Service по той же шине, то в ситуации, когда Service недоступен (не подключен например), ничего происходить и не будет -- то есть, не надо будет явно обрабатывать кейс с отсутствием Service внутри сущности-обвязки.

    Плюс такого решения -- обвязка не зависит от кода конкретных реализаций License и Service. Строковую типизацию вы можете и не делать, если шина умеет в разные типы сообщений так или иначе -- в крайнем случае, хотя бы сериализацию для событий какую-то можно придумать. К тому же события все равно несут какую-то информацию помимо названия, так что какая-то структура этих событий не помешает. Но здесь я уже увлекся, ибо никаких таких вводных не было. :)

    Я рассуждаю в рамках акторной системы, где такие сценарии мне обдумывать проще, но кажется, что и в C# внутри какого-то другого подхода это реализуемо. :)
    Ответ написан
    Комментировать