Я должен сделать существующее C ++ приложение распределенным и масштабируемым. Я ищу практический совет для хорошего подхода (распределенные шаблоны, структуры и т. Д.), Как это сделать. У меня есть идеи, но я не уверен в их целесообразности.
Абстрактная функциональность существующего приложения является относительно общей:
Очень смутно говоря, у меня есть переизбыток в основном независимых задач, которые должны быть назначены меньшему количеству блоков обработки, учитывая локальность (дочерние задачи должны идти к процессору родительской, дедушки и т. Д. Задачи).
Требования к распределенной реализации:
Простой способ — реализовать коммуникацию, разбиение, балансировку нагрузки и т. Д. Вручную, используя ZeroMQ, NanoMSG или некоторую другую библиотеку сообщений (или даже MPI). Это то, что я не хочу делать, потому что это занимает много времени, подвержено ошибкам, и я, вероятно, в конечном итоге реализую многие вещи, которые уже существуют.
Я думал об использовании Pregel-подобных систем обработки графиков (Giraph, GraphX, GraphLab), но они не предназначены для динамического построения графиков, а скорее для выполнения вычислений на существующих графах.
Тогда я подумал, что мог бы использовать Apache Spark или, возможно, Hama (на самом деле это был бы довольно интересный подход). Но здесь моя проблема заключается в том, что исходное приложение написано на C ++ (и является относительно большим и сложным), но Spark не имеет C / C ++ API. Я никогда не писал многоязычный код и не слишком много знаю о JNI / JNA / BridJ / SWIG, и я не уверен, сколько это будет работать и насколько велики будут потери производительности. Или, если это вообще возможно.
Вот почему я хотел бы спросить сообщество, особенно людей с опытом в распределенном программировании:
Какой подход (вышеупомянутые или новые) возможен и подходит для такой проблемы, как с точки зрения шаблонов (BSP, выполнение DAG, простой мастер-работник и т. Д.), Так и конкретных инструментов (Giraph, Spark, библиотеки обмена сообщениями, так далее.)?
Как насчет взаимодействия Java-C ++, если я решу использовать фреймворк на основе JVM?
Любые другие комментарии или советы?
Большое спасибо!
Задача ещё не решена.