Tweet Roadmap Dokter Peti
portunusd adalah server aplikasi jaringan yang terinspirasi oleh relayd OpenBSD dan Heirloom Unix inetd . Ini mendengarkan koneksi jaringan yang masuk, meneruskan data yang masuk melalui pintu Illumos ke aplikasi yang dimaksud, dan mengembalikan respons dengan cara yang sama. portunusd memetakan setiap port yang terhubung ke pintu pada sistem file yang disediakan oleh aplikasi target.
Sequencediagram
klien peserta
peserta portunusd
pintu peserta
aplikasi peserta
Aplikasi->> pintu: buat /var/run/app.door
PortunUsd->> pintu: Buka
PortunUsd->> PortunUsd: Dengarkan di port 80
Permintaan pegangan loop
Klien->>+PortunUsd: Kirim Permintaan HTTP
PortunUsd->>+Aplikasi: Permintaan maju melalui Door_Call
Aplikasi->>-PortunUsd: Kirim respons melalui Door_Return
PortunUsd->>-Klien: Kirim Respons HTTP
akhir
Tujuan utama portunusd adalah untuk memfasilitasi penskalaan aplikasi satu utamanya. Di bawah model inetd , proses baru dibuat untuk menangani setiap permintaan. Dengan memanfaatkan pintu, portunusd dapat membuat utas baru dalam proses aplikasi hanya ketika tanda konkurensi air tinggi baru telah tercapai; Jika tidak, utas yang ada akan digunakan kembali untuk menangani permintaan berikutnya.
Kami ingin aplikasi yang menghadap jaringan kami berskala sesuai dengan permintaan pengguna. Kami ingin meminimalkan biaya sumber daya dari aplikasi kami ketika mereka menganggur, dan kami ingin menjaga biaya kami linier dalam hal permintaan. Kami ingin meminimalkan sejauh mana pengembang aplikasi bertanggung jawab atas manajemen sumber daya, dan kami ingin mempertahankan (sejauh mungkin) lingkungan pengembangan yang akrab dari alat -alat jalur perintah UNIX.
Memilih rel sebagai contoh, aplikasi Ruby on Rails tunggal dapat menangani satu permintaan pengguna sekaligus. Beberapa permintaan simultan tidak dapat ditangani tanpa beberapa salinan dari aplikasi yang ada di memori (pada penerjemah Ruby yang terpisah). Model ini mengkonsumsi banyak memori bahkan ketika ada sedikit permintaan pengguna, sehingga sulit bagi host untuk menjalankan beban kerja lainnya. Banyak paging dan kertakan disk akan terjadi.
Lingkungan seperti Node.js menangani masalah ini dengan membuat asinkronisitas lebih transparan terhadap programmer. Meskipun dapat bermanfaat untuk merangkul sifat komputer yang tidak sinkron, ia juga telah memperkenalkan perubahan pada bahasa yang mendukungnya; Ini bukan hanya perubahan sintaks, tetapi juga perubahan nontrivial pada model mental yang digunakan untuk membaca, menulis, dan memahami program.
Di ujung lain dari spektrum, aplikasi CGI memerlukan proses yang unik dan ruang alamat untuk setiap permintaan. Aplikasi ini dapat skala secara linear dengan permintaan pengguna, termasuk penskalaan ke nol memori / penggunaan CPU saat menganggur, tetapi biaya memohon execv(2) untuk setiap permintaan dapat menghambat throughput.
Pendekatan "serverless" postmodern memenuhi kriteria ini, tetapi dengan biaya meninggalkan sistem operasi . Ini adalah pendekatan yang sangat tidak dikenal untuk mengembangkan perangkat lunak, dan membuang banyak alat yang dapat digunakan untuk mengamati dan men -debug aplikasi saat runtime.
Pintu Mengaktifkan model pengembangan aplikasi jaringan baru (lama?)
Kualitas-kualitas ini memungkinkan kami untuk membahas pernyataan masalah kami dengan mengembangkan aplikasi jaringan yang terasa seperti alat garis perintah unix tunggal, menyajikan biaya minimal saat menganggur, dan skala linier pada granularitas per-request.
Tentu saja, pintu saja tidak akan menangani penskalaan melintasi batas instance sistem operasi tunggal, tetapi kolaborasi gaya relayd dengan firewall dapat memfasilitasi ini, dengan asumsi salinan aplikasi tersedia di beberapa host. Di sinilah portunusd masuk.
Gambar pratinjau media sosial adalah oleh Loudon Dodd - karya sendiri, CC BY -SA 3.0.
Banyak pertanyaan Illumos / Rust / Doors yang tidak jelas dijawab oleh @jasonbking.