Твиты дорожного карты Crate Docs
portunusd - это сетевой сервер приложений, вдохновленный relayd и реликвией OpenBSD inetd . Он прослушивает входящее сетевое соединение, пересылав входящие данные через дверь Illumos в предполагаемое приложение и возвращая ответ аналогичным образом. portunusd отображает каждый подключенный порт к двери на файловой системе, предоставленной целевым приложением.
секвенированная
Участник клиент
Участник Портунусд
Дверь участника
Приложение участника
Application->> Дверь: Создать /var/run/app.door
Portunusd->> Дверь: открыта
Portunusd->> Portunusd: Слушайте на порту 80
Запросы на ручку петли
Client->>+Portunusd: Отправить http-запрос
Portunusd->>+Приложение: Запрос вперед через Door_call
Application->>-Portunusd: Отправить ответ через дверь
Portunusd->>-Клиент: Отправить ответ http
конец
Основная цель portunusd -облегчить масштабирование однопоточных приложений. Согласно модели inetd , создается новый процесс для обработки каждого запроса. Используя двери, portunusd может создать новую ветку в процессе подачи заявки только тогда, когда была достигнута новая отметка параллелизма высокой воды; В противном случае существующие потоки будут повторно использованы для обработки последующих запросов.
Мы хотим, чтобы наши приложения, обращенные в сеть, масштабируются в соответствии с потребительским спросом. Мы хотим свести к минимуму стоимость ресурсов наших приложений, когда они простаиваются, и мы хотим, чтобы наши затраты были линейными с точки зрения спроса. Мы хотим минимизировать степень, в которой разработчик приложений несет ответственность за управление ресурсами, и мы хотим сохранить (насколько это возможно) знакомая среда разработки инструментов командной строки UNIX.
Выбор на рельсах В качестве примера, однопоточное приложение Ruby on Rails может обрабатывать один запрос пользователя одновременно. Несколько одновременных запросов не могут быть обработаны без нескольких копий приложения резидента в памяти (на отдельных рубиновых переводчиках). Эта модель потребляет много памяти, даже когда пользовательский спрос мало, что затрудняет работу хоста запускать другие рабочие нагрузки. Будет последовало много пейджинга и скрежки диска.
Такие среды, как Node.js, решают эту проблему, делая асинхронность более прозрачной для программиста. Хотя может быть полезно принять асинхронную природу компьютеров, он также внес изменения в языки, которые поддерживают его; Это не просто изменение синтаксиса, но и нетривиальное изменение в ментальной модели, которую использует для чтения, написания и понимания программ.
На другом конце спектра приложения CGI требуют уникального процесса и адресного пространства для каждого запроса. Эти приложения могут линейно масштабироваться с потребительским спросом, включая сокращение до нулевого использования памяти / процессора при простоя, но стоимость вызова execv(2) для каждого запроса может затруднить пропускную способность.
Постмодерн «без серверного» подхода удовлетворяет эти критерии, но за счет отказа от операционной ситом . Это очень незнакомый подход к разработке программного обеспечения, и выбрасывает множество инструментов, которые можно использовать для наблюдения и отладки приложения во время выполнения.
Двери включают новую (старую?) Модель разработки сетевых приложений, в которой разработчики несут ответственность за поддержание и понимание линейной синхронной задачи, в то время как операционная система + веб -сервер работает вместе над проблемой масштабирования
Эти качества позволяют нам решить нашу задачу, разработав сетевые приложения, которые кажутся инструментами командной строки однопоточных команд Unix, представляют минимальные расходы при простоя и линейно масштабируются по гранулярности за просмотр.
Конечно, только двери не будут обрабатывать масштабирование по границе одного экземпляра операционной системы, но сотрудничество в стиле реле с брандмауэром могло бы облегчить это, предполагая, что копии приложения доступны на нескольких хостах. Здесь входит portunusd .
Предварительный просмотр социальных сетей - Loudon Dodd - собственная работа, CC By -Sa 3.0.
На многие неясные вопросы Illumos / Rust / Doors ответили @jasonbking.