Saat ini kami sedang mengerjakan produk / proyek baru kami, ini adalah aplikasi server-klien yang diarahkan ke perusahaan industri / jasa tertentu. Kami sedang membangun server (Hanya Bahasa C dan Linux) yang menjalankan protokol khusus di atas TCP dengan Java front-end. Kami sekitar 20% dalam pekerjaan pengkodean dan dihadapkan pada situasi harus memilih antara Arsitektur Kernel Mikro atau Monolitik.
Saya sadar bahwa Micro vs. Monolithic biasanya terkait dengan arsitektur kernel, tetapi kita secara khusus berbicara tentang server.
Mengapa server khusus dan bukan sesuatu yang ada?
- Kebutuhan UI kami signifikan dan sangat dinamis, sehingga solusi berbasis Web / browser tidak sesuai.
- Pemrosesan statistik sangat penting di ujung klien dan oleh karena itu, sekali lagi, peramban tidak banyak membantu. (Tentu saja, kita bisa melakukan pemrosesan di ujung server dan meneruskan data yang diproses ke klien tapi itu akan menyiratkan banyak beban di server dan pemborosan sumber daya klien).
- Selain itu, dengan minimal tiga teknologi (JS / HTML / CSS) untuk mengelola bahkan satu peristiwa membuat seluruh pengalaman seperti menyapu rumah di tengah-tengah badai gurun - Anda menyapunya berkali-kali, debu menumpuk n + 1 kali.
Bagaimana dengan Server Mikro dan Monolitik? Apa yang kamu bicarakan?
Pertimbangkan permintaan klien (hipotetis) berikut:
request-id: 123
request-service: HistoricDataSets
request-message: Fetch all records upto the year 2010
Saat menerima permintaan seperti itu, server biasanya (kami mengabaikan teknik konkurensi seperti utas dan garpu untuk kesederhanaan):
- Parsing string permintaan
- Identifikasi tindakan (Ambil
HistoricDataSets LIMIT Year (2010)
dalam kasus kami) - Berinteraksi dengan lapisan persisten (Oracle, katakanlah, dalam contoh kita) dan ambil datanya.
Memformat data sesuai protokol. Ex:
response-id: 123
success: true
response-text: DataSetsTanggapi klien dengan data yang diformat seperti itu.
Inilah yang kami sebut Server Monolithic (mirip dengan kernel monolitik di mana semua pekerjaan OS dilakukan dalam ruang kernel).
Pertimbangkan permintaan yang sama lagi, saat diterima, kali ini server (kami mengasumsikan hanya memori bersama sebagai IPC, sekali lagi untuk kesederhanaan):
- Masukkan permintaan ke dalam memori bersama untuk
Parser
proses tersebut - The
Parser
mem-parsing string, mengidentifikasi tugas dan mengarahkanExecutioner
proses untuk melaksanakan tugas-tugas. - The
Executioner
kemudian melewati data keFomatter
proses yang, setelah memformat data menjadi string protokol, kembali ke server. - Server mengirimkannya ke klien (respons).
Tentu saja, alih-alih Parser
, Executioner
dan Formatter
itu bisa menjadi proses tunggal tetapi terpisah. Ini adalah apa yang kita sebut Server Mikro (mirip dengan kernel mikro melakukan hampir minimum yang diperlukan). Server secara efektif hanya mendengarkan dan merespons sedangkan semua langkah dijaga oleh berbagai proses.
Yang mana yang harus dipilih? Kami bingung! Sementara server monolitik dicoba dan diuji (sebagian besar HTTP-Web Server?) Dan lebih mudah diprogram dan dapat menangani concurrency dengan cukup baik. Server mikro, prima facie, tampak cepat dan sejalan dengan prinsip UNIX dari satu program untuk melakukan satu tugas, tetapi juga rumit untuk dikembangkan, khususnya. menjaga konkurensi dalam pikiran.
Pertanyaan
- Apa (mungkin bisa) pro dan kontra dari setiap pendekatan?
- Kapan menggunakan yang mana? (Bisa juga ditafsirkan sebagai pertanyaan umum: Kapan menggunakan IPC?)
- Jika Micro kernel dipilih, maka fungsi apa yang perlu menjadi bagian dari server inti dan apa yang tidak?
Pertanyaan serupa / Terkait
- Bahaya aplikasi monolitik besar
- Browser Vs Tertanam Eksternal (Tangensial)
- Saran untuk mengubah aplikasi Monolitik menjadi multithreaded (Tangential)
Beberapa informasi yang mungkin bermanfaat:
- Calon pelanggan kami dapat dibagi menjadi dua kategori:
- Besar: Sekitar 1.700 - 2.000 permintaan per menit
- Kecil: Sekitar 650 - 700 permintaan per menit
- Volume data per siklus permintaan (permintaan dan respons selanjutnya) dapat diasumsikan terdistribusi normal dengan rata-rata ~ 1,20 MB dan lebih buruk lagi sekitar 250-300 MB.
- Konsep produk relatif baru tetapi memiliki kemampuan untuk mempengaruhi operasi inti, oleh karena itu kami berharap anggaran pelanggan menjadi fleksibel hanya mengirim keterlambatan tertentu (9-12 bulan) pasca penempatan, ini membatasi jumlah perangkat keras yang diinginkan klien untuk melakukan esp. yang kecil.
- Setiap pelanggan akan memiliki tumpukan server klien. Server akan berjalan pada perangkat keras pelanggan yang dikelola oleh tim pelanggan, sementara klien akan ditempatkan pada mesin karyawan fungsional
- Pembaruan jarak jauh untuk aplikasi klien dan server adalah suatu keharusan
PUSH
Layanan waktu nyata oleh server mungkin 'sangat' diinginkan jika produk mengklik!