Загрузка не-поточно-ориентированной нативной библиотеки в Vert.x: вершины из нескольких экземпляров ограничены собственным процессом - PullRequest
0 голосов
/ 08 ноября 2019

Я хотел бы написать статью, которая отображает графики с помощью GraphViz. Я хотел бы сделать это путем загрузки собственных (общих) библиотек в JVM и вызова через JNI. Теперь сам GraphViz не является потокобезопасным. Недостаточно запускать каждую из вершин с несколькими экземплярами всегда в своем собственном потоке, я должен дополнительно убедиться, что каждая вертикаль получает свой собственный экземпляр собственного кода, или, другими словами, каждая вертикаль выполняется в отдельном процессе, каждыйиспользуя одно из ядер.

В большинстве описаний Vert.x говорится только об изоляции между потоками (не обмениваясь данными и т. Д.). Я ничего не нашел об изоляции процессов.

В основном я ищу фреймворк для создания пары экземпляров REST-сервера, которые все слушают в одном сокете или с балансировщиком нагрузки впереди, и мне не нужно писать какой-либо код самостоятельно. Вроде того, что PM2 делает для Node.js. Могу ли я сделать это с Vert.x?

Я понимаю, что это может противоречить духу Vert.x, как ясно из базовой документации:

Вместо одного цикла обработки событийкаждый экземпляр Vertx поддерживает несколько циклов событий. По умолчанию мы выбираем число на основе количества доступных ядер на машине, но это может быть переопределено.

Это означает, что один процесс Vertx может масштабироваться на вашем сервере, в отличие от Node.js.

Но так как я использую нативные библиотеки, которые могут быть загружены только один раз для каждой JVM, и в моем случае не может выполняться одновременно, и поэтому предотвращаю масштабирование до нескольких ядер, я думаю, что мне действительно нужен шаблон Node.js, только в Java.

Мое требование также намного проще, чем то, что описано в документации по кластеризованной шине событий, например, Пример Zookeeper , потому что мне не нужна связь между экземплярами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...