Как превратить большой кусок машинного кода в масштабируемый сервис?
Приветствую, У меня есть большой кусок программного обеспечения, разработанного в Эйфеле. Можно использовать этот код из C++, но он загружает Eiffel runtime, и я не могу доверять Eiffel code и runtime, чтобы быть потокобезопасным, когда доступ к нескольким потокам из C++
Мне нужно превратить этот машинный код в сервис, но я хотел бы масштабироваться на несколько серверов в случае высокой нагрузки. Я не хочу делегировать масштабирование аспекту Eiffel code & runtime, поэтому я рассматриваю обертывание этого кода с помощью существующие параметры масштабируемости.
Есть ли что-нибудь под веб-сервером Apache, что позволило бы мне обеспечить потокобезопасный доступ к этому куску кода? Как насчет пула таких случаях код? Я имею в виду примерно следующее:
[множество запросов клиентов по сети] - - - > [некоторая масштабируемая платформа] -> [один или несколько экземпляров дорогостоящего для создания кода Eiffel]
Я хотел бы, чтобы фреймворк позволил мне обернуть несколько экземпляров дорогих кусков кода, и я хотел бы масштабировать это так же, как веб-ферма, добавив больше машин.
С Наилучшими Пожеланиями
Seref
1 ответ:
Если вы не привязаны к Apache, но любой другой фреймворк будет достаточно, я предлагаю вам проверить фреймворк передачи сообщенийZeroMQ . Его
ZMQ_PUSH
/ZMQ_PULL
Модель сzmq_tcp
транспорт, кажется, делает то, что вы хотите.Ваша настройка будет выглядеть примерно так: один "главный" процесс, обслуживающий внешние запросы (на любом языке/платформе, возможно, мод Apache) и настраиваемое во время выполнения количество рабочих процессов C++, которые вызывают код Eiffel и возвращают результаты.