Каков наилучший способ обработки одновременного обмена данными конфигурации - PullRequest
1 голос
/ 27 марта 2020

Я думаю переписать монолитное c приложение C / C ++ (изначально это был один исполняемый файл C ++), и я пытаюсь сделать свое приложение более модульным. Я думал, что смогу доставить весь свой модуль как dll (или объект .so на платформе linux) и составить свое приложение во время выполнения вместо одного исполняемого файла. Также я стремлюсь к модульности, я прилагаю все усилия, чтобы помнить, что скорость также важна для этого приложения. Поэтому мой дизайн должен быть компромиссом между модульностью и производительностью.

Это приложение IOT, предназначенное для сбора различных данных в зависимости от геолокации автомобиля. В моем текущем приложении есть 3 компонента:

enter image description here

  1. AntennaService: это основной сервисный компонент моего приложения. Этот модуль будет загружать другие. При каждом движении транспортного средства он запрашивает сервис ConfigurationDataService, чтобы он возвращал самую близкую географическую точку, указанную в плоском файле конфигурации. А при необходимости запускается событие для асинхронной регистрации через службу журналов.

  2. LogService: сервис модуля, который использует pub / sub mecansim для асинхронной регистрации данных локально или онлайн в зависимости от соединения inte rnet.

  3. ConfigurationDataService: это служба модуля, которая потенциально может вызываться одновременно несколькими другими компонентами, запрашивающими его о конфигурации для использования. Этот модуль читает файл некоторых буферов протокола, в который индексируются данные конфигурации только для чтения. И в зависимости от критериев запроса, задаваемых другим модулем, он фильтрует или конфигурирует данные конфигурации stati c перед anserwring.

Проблема, с которой я сталкиваюсь, заключается в том, что я не найти лучший способ смоделировать ConfigurationDataService для получения быстрого и оптимального ответа: должен ли он использовать блокировку и критические секции для ответа на параллельные запросы к другим модулям? Или вы думаете, что может быть гораздо лучший дизайн.

...