Как превратить большой кусок машинного кода в масштабируемый сервис?


Приветствую, У меня есть большой кусок программного обеспечения, разработанного в Эйфеле. Можно использовать этот код из C++, но он загружает Eiffel runtime, и я не могу доверять Eiffel code и runtime, чтобы быть потокобезопасным, когда доступ к нескольким потокам из C++

Мне нужно превратить этот машинный код в сервис, но я хотел бы масштабироваться на несколько серверов в случае высокой нагрузки. Я не хочу делегировать масштабирование аспекту Eiffel code & runtime, поэтому я рассматриваю обертывание этого кода с помощью существующие параметры масштабируемости.

Есть ли что-нибудь под веб-сервером Apache, что позволило бы мне обеспечить потокобезопасный доступ к этому куску кода? Как насчет пула таких случаях код? Я имею в виду примерно следующее:

[множество запросов клиентов по сети] - - - > [некоторая масштабируемая платформа] -> [один или несколько экземпляров дорогостоящего для создания кода Eiffel]

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

С Наилучшими Пожеланиями

Seref

1 2

1 ответ:

Если вы не привязаны к Apache, но любой другой фреймворк будет достаточно, я предлагаю вам проверить фреймворк передачи сообщенийZeroMQ . Его ZMQ_PUSH/ZMQ_PULL Модель с zmq_tcp транспорт, кажется, делает то, что вы хотите.

Ваша настройка будет выглядеть примерно так: один "главный" процесс, обслуживающий внешние запросы (на любом языке/платформе, возможно, мод Apache) и настраиваемое во время выполнения количество рабочих процессов C++, которые вызывают код Eiffel и возвращают результаты.