Saya mencoba membangun solusi SaaS berbasis web, dan saya menemukan jalan di mana saya tidak yakin untuk menggunakan multi tenancy atau multi instance. Saya akan mencoba menggambarkan apa yang saya coba capai, dan masing-masing pendekatan kelebihan dan kekurangan (pendapat saya, sesuai dengan apa yang saya baca). Harap sertakan saran Anda jika saya melewatkan sesuatu dalam satu pendekatan di atas yang lain.
Aplikasi yang saya coba bangun adalah, seperti yang saya sebutkan, solusi SaaS di mana perusahaan dapat membuat akun mereka, dan setiap akun / perusahaan memiliki pengguna, pelanggan, produk, layanan ... dll. Setiap pengguna; yang merupakan karyawan perusahaan; terkait dengan satu akun / perusahaan hanya akan memiliki akses ke pelanggan, produk, dan layanan perusahaannya. Perusahaan dapat memiliki jumlah pelanggan, produk dan layanan yang tidak terbatas, sehingga setiap perusahaan harus memiliki pusat data sendiri.
Untuk itu saya memutuskan untuk membuat database bersama (menyimpan semua kredensial pengguna untuk keperluan login) dan beberapa skema bersama database (database per akun / perusahaan). Pada dasarnya, Multi Tenancy .
Kemudian seseorang menyarankan untuk menggunakan Multi Instance sebagai gantinya, di mana masing-masing perusahaan akan memiliki contoh aplikasi sendiri (yaitu kode, perpustakaan, database, kerangka kerja ... dll) benar-benar terpisah dari perusahaan lain. Ini kedengarannya lebih baik karena saya tidak harus mengurus lapisan tambahan di mana saya perlu memastikan bahwa setiap pengguna penyewa hanya memiliki akses ke data perusahaan mereka. Saya pikir itu baik untuk menyebutkan bahwa saya bergantung pada Docker untuk mencapai pendekatan ini (saya belum pernah menggunakannya sebelumnya), tapi saya pikir itu tidak memiliki fitur (lebih lanjut tentang itu nanti) yang akan saya butuhkan di masa depan (setidaknya saya tidak dapat menemukannya dengan sedikit pencarian).
Namun, setiap pendekatan datang dengan pro dan kontra, jadi saya tidak bisa membuat keputusan dengan pendekatan mana yang harus dilakukan. Berikut adalah daftar, tetapi terbuka dengan saya karena saya tidak memiliki pengetahuan di keduanya, sehingga mungkin ada sesuatu yang saya tidak sadari, atau solusi untuk masalah yang tidak saya temukan di web: [Setiap pendekatan memiliki daftar terurut yang saya ikuti perbandingan satu per satu]
Multi Tenancy :
- Host bersama / perangkat keras, kode bersama, dan multi basis data.
- Lebih mudah untuk memperluas fungsionalitas kode dan memperbaiki bug (kode bersama).
- Lebih sulit untuk memperluas perangkat keras (bisa menggunakan layanan cloud), atau memindahkan basis data penyewa individu ke sistem lain tanpa melakukan perubahan pada kode.
- Yang paling penting, seperti yang saya sebutkan sebelumnya, saya perlu menambahkan lapisan tambahan ke sistem untuk memastikan bahwa pengguna benar-benar milik perusahaannya, dan tidak mengakses informasi perusahaan lain.
Multi Instance :
- Host / perangkat keras yang dibagikan atau tidak digunakan bersama, kode per instance, dan database per instance.
- Lebih sulit untuk memperluas fungsionalitas atau memperbaiki bug (Saya tidak yakin apakah ada cara untuk melakukannya di Docker di mana Anda dapat menambahkan fungsionalitas / fitur ke satu instance atau wadah Docker, dan menyebarkannya ke yang lain).
- Lebih mudah untuk memindahkan seluruh instance ke host / perangkat keras yang berbeda.
- Sebagai contoh, saya tidak perlu mengurus layer itu karena setiap instance akan memiliki database sendiri.
Semua kelebihan dan kekurangannya berlebihan jika saya ingin melakukan sesuatu secara manual (seperti membuat contoh untuk setiap penyewa secara manual), dan itulah mengapa saya meragukan solusi Docker, kecuali ada cara untuk menyelesaikannya, yang mungkin merupakan masalah utama alasan pertanyaan. Saya akan sangat menghargai jika Anda akan menjawab pertanyaan dengan referensi untuk solusi, dan mengapa menurut Anda pendekatan ini lebih baik daripada yang lain.
Dalam hal itu akan membantu (mungkin?), Kami menggunakan Laravel sebagai kerangka kerja utama untuk back-end (semua TETAP).