Pemisahan
Sempadan yang dijaga oleh pangkalan data, bukan kod
Setiap CRM mendakwa ia multi-tenant. Dakwaan itu murah; yang penting ialah lapisan mana yang menahan garisan itu. Jika jawapannya ialah "aplikasi kami sentiasa menambah penapis yang betul", maka jaminan itu hanya sebaik pembangun yang paling kurang rehat yang pernah menulis satu pertanyaan.
iKonekt telah menjadi multi-tenant sejak migrasi pertamanya dan bukan ditambah kemudian, yang kedengaran seperti bermegah tetapi sebenarnya satu pengakuan: menambahkannya kemudian hampir mustahil dilakukan secara meyakinkan, dan semua yang pernah mencubanya ada cerita sendiri.
Pemisahan hidup dalam pangkalan data. Setiap satu daripada dua puluh enam jadual membawa tenant yang dimilikinya, dan dasar yang menyemaknya berjalan pada setiap bacaan dan setiap penulisan, sepenuhnya di bawah aplikasi. Pertanyaan yang lupa sempadan itu tidak memulangkan pelanggan orang lain. Ia memulangkan tiada apa-apa.
Keselamatan tahap baris, dipaksa
Bukan konvensyen, bukan peraturan semakan kod. Pangkalan data menolak. Tujuh puluh dua dasar, ditulis satu demi satu dan bukan dijana — kerana dasar yang dijana ialah dasar yang tiada siapa membacanya.
Kunci komposit
Rekod anak merujuk tenant-nya dan induknya bersama, sebagai satu pasangan. Pengecam sesat daripada syarikat yang salah tidak akan selesai — ia semata-mata bukan rujukan yang sah.
Tiada tenant lalai, sesekali pun tidak
Permintaan tanpa skop tidak secara senyap menjadi permintaan untuk tenant sifar. Ia melontar ralat sebelum sampai ke pangkalan data. Tiada mod "tanpa skop" untuk dilupakan supaya dimatikan.
Pepijat yang tidak dapat mengumumkan dirinya
Semasa kerja tenancy sedang dijalankan, kebanyakan kesilapan adalah bising. Berikan dua syarikat domain pelanggan yang sama dan pangkalan data membantah serta-merta, dengan kod ralat dan jejak tindanan; anda membetulkannya sebelum makan tengah hari.
Satu tidak membantah. Jadual laluan prompt yang boleh disunting itu dikunci pada jenis prompt sahaja — bukan pada jenis dan tenant. Syarikat kedua yang menyunting salinan mereka sendiri akan secara senyap menulis ganti salinan syarikat pertama, melalui SQL yang sepenuhnya sah, tanpa ralat, tanpa amaran, dan tanpa ujian yang gagal. Ia ditemui dengan membaca setiap indeks unik yang berbaki selepas menukar satu kunci, satu demi satu, atas syak yang yang bising itu ada kawan.
Kami menyebutnya kerana itulah bentuk jujur kerja ini. Pemisahan bukan ciri yang anda hidupkan; ia tabiat membaca bahagian skema yang membosankan dengan andaian ada sesuatu di sana yang tidak bersetuju dengan anda.
Ujian-ujian itu, untuk rekod: 942 daripadanya, dijalankan ke atas pangkalan data yang dibina semula dari sifar pada setiap perubahan. Ia bukan untuk membuktikan reka bentuk itu bijak. Ia ada kerana mod kegagalan reka bentuk khusus ini adalah senyap, dan kegagalan senyap memerlukan seseorang melaungkan bagi pihaknya.
Apa yang pemisahan berikan kepada orang biasa
- Sekumpulan boleh mengendalikan beberapa syarikat daripada satu pemasangan, dan penjual dalam satu syarikat tidak akan pernah melihat pelanggan syarikat lain — bukan melalui dasar, melalui binaan.
- Program rakan kongsi, satu set prompt, tuntutan ke atas pelanggan: semuanya diskopkan mengikut syarikat, jadi konfigurasi satu tenant tidak boleh menjadi milik semua orang.
- Permintaan pemadaman dihormati dalam satu sempadan dan bukan merentas timbunan kongsi, dan itulah yang memungkinkan jawapan yang jujur.
- Dan tiada siapa perlu mengingati apa-apa daripadanya. Itulah intipatinya — jaminan yang bergantung pada diingati bukanlah jaminan.
Satu baris lagi yang bukan tentang pangkalan data
Setiap perkhidmatan adik-beradik dalam keluarga ini menyimpan kredensialnya sendiri yang bernama. Tiada apa-apa yang bercakap dengan kredensial kongsi, jadi tiada perkhidmatan boleh secara tidak sengaja bertindak sebagai perkhidmatan lain — disiplin kecil yang datang terus daripada pernah memiliki token kongsi dan tidak menikmatinya.
Ia naluri yang sama seperti peraturan pangkalan data itu. Jadikan perkara yang salah mustahil dan bukan sekadar tidak digalakkan, dan anda menghabiskan perhatian anda pada pelanggan dan bukan pada kewaspadaan.
- 126 jadualSetiap satu membawa tenant-nya, dengan semakan dipaksa hidup.
- 272 dasarDitulis satu demi satu, jadi setiap satu telah dibaca oleh seorang manusia.
- 3942 ujianKe atas pangkalan data yang dibina semula dari sifar, pada setiap perubahan.
- 40 tenant lalaiPermintaan tanpa skop tidak pernah sampai ke data.
Diukur pada binaan langsung

“Aplikasi kami sentiasa menapis mengikut syarikat.”
Perkataan sentiasa sedang bekerja keras dalam ayat itu.
Alihkan sempadan itu ke bawah ke dalam pangkalan data dan klausa WHERE yang dilupakan memulangkan tiada apa-apa dan bukannya pelanggan orang lain. Skrin kosong ialah kegagalan yang lebih baik daripada perkenalan yang canggung.
Untuk kumpulan yang mengendalikan beberapa jenama →