Что если в паравиртуализированной подсистеме используется облегченная модель процесса (как в Erlang)? - PullRequest
2 голосов
/ 09 декабря 2011

Что если веб-сервер будет реализован следующим образом:

  1. Хост-ОС, например, Linux
  2. Виртуальная машина, на которой запущена эта подс-ОС (паравиртуализация)
  3. Множество облегченных процессов для каждого соединения в этой подсистеме, которые взаимодействуют с внешним интерфейсом через системные вызовы подсистемы

?

В этом случае

  1. Отсутствует процесс-фуд в хост-системе
  2. Изоляция - она ​​продолжает работать нормально, что бы ни происходило на виртуальной машине
  3. Мы запускаем нативные скомпилированные приложения и "даем сбой" в случае чего-либопойдет не так.Или отключите даже дырку виртуальной машины.

1 Ответ

0 голосов
/ 30 декабря 2012

Обработка сетевого трафика в виртуализированной среде всегда вызывает проблемы с производительностью операций сетевого ввода-вывода. Смотрите, например, этот пост: Basecamp, теперь с большим количеством vroom

Все входящие HTTP-запросы должны перенаправляться операционной системой хоста на определенные виртуальные машины. Это приведет к постоянному переключению контекста между этими паравиртуализированными операционными системами и дополнительным расходам на операции сетевого ввода-вывода.

Host OS receive a HTTP packet -> copy the packet to the VM's memory -> switch to the VM process -> inside the VM: receive the packet in the sub-OS network stack -> copy the packet to the receiving process (the web server) -> switch to the receiving process -> handle the request and return a response (with the same steps in reverse order)

Это могло бы подойти для упомянутых дополнительных преимуществ, но потребовало бы дополнительного оборудования для обработки того же трафика по сравнению со стандартными решениями.

В Erlang его виртуальная машина не является отдельной операционной системой со своим собственным сетевым стеком, а является стандартным процессом, работающим в операционной системе хостинга. Нет никаких накладных расходов на сетевые операции ввода-вывода, поскольку все они обрабатываются операционной системой хоста.

Host OS receive a HTTP packet -> copy the packet to the Erlang VM's memory -> switch to the Erlang VM process -> handle the request and return a response
...