iKonekt

Rozdzielenie

Granica, keryj trzime baza danych, a niy kod

Kożdy CRM twiyrdzi, że je wielodostympowy. Takŏ deklaracyjo je taniŏ; ważne je, kera warstwa trzime liniy. Jeli ôdpowiydź brzmi „nasz aplikacyjo zawsze dodaje dobry filtr”, to gwarancyjo je ino tak dobro jak najsłabiej wypoczynty programista, co kedykolwiek napisoł zapytanie.

iKonekt bōł wielodostympowy ôd piyrszyj migracyje, a niy dorobiany potym — to brzmi jak chwalynie, a naprawde je przyznaniym: dorobić to potym je prawie niymożebne zrobić przekōnujōncy, a kożdy, kto prōboł, mo swojŏ historyjka.

Rozdzielniyńcie mieszko we bazie danych. Kożdŏ z dwudziestu sześciu tabel nosi tenant, do kerego nŏleży, a polityka, co to sprŏwdzŏ, dziołŏ przy kożdym czytaniu i kożdym zapisie, cołkym poniżej aplikacyje. Zapytanie, co zapōmni o granicy, niy zwrōci czyjś cudzych klijentōw. Niy zwrōci niczego.

Bezpieczyństwo na poziomie wierszōw, wymuszōne

Niy to je kōnwencyjo, niy to je reguła code review. Baza danych ôdmowiŏ. Siedymdziesiōnt dwie polityki, napisane po jednyj, a niy wygenerowane — bo wygenerowanŏ polityka to polityka, keryj nikt niy czytoł.

Klucze złożōne

Rekord potomny wskazuje na swojego tenanta i na swojego rodzica razem, jako para. Obcy identyfikator ôd złej firmy niy rozwiōnże sie — po prostu niy je poprawnym wskazaniym.

Żodnego domyślnego tenanta, nigdy

Zapytanie bez zakresu niy stŏwŏ sie cichaczem zapytaniym do tenanta zero. Wywŏłŏ błōnd, zanim dôjdzie do bazy danych. Niy ma trybu „bez zakresu”, kery można zapōmnioć wyłōnczyć.

Bug, kery niy mōgł sie pokazać

Kiedy robiło sie prace nad tenantami, wiynkszość błynndōw bōła głośno. Dŏw dwōm firmom ta samŏ domena klijenta i baza danych ôd razu protestuje, z kodym błynndu i śladym stogu; poprawisz to przed ôbiadym.

Jedyn niy protestowoł. Tabela edytowalnych nadpisań promptōw bōła kluczowano ino po rodzaju prompta — a niy po rodzaju i tenancie. Drugŏ firma, edytujōnc swojŏ kopiyo, cichaczem nadpisōłaby piyrszõ firmã, przez cołkym poprawny SQL, bez błynndu, bez ôstrzeżyniŏ, bez padajōncego testu. Znŏleźli to, czytajōc kożdy ôstŏwajōncy unikalny indeks po zmianie klucza, jedyn po drugim, z podejrzyniym, że te głośne majōm towarzystwo.

Wspōminŏmy to, bo to je uczciwy kształt tyj roboty. Rozdzielniyńcie niy je funkcjōm, keryōm sie włōnczŏ; to je nawyk czytania nudnych tajlōw schematu z założyniym, że coś tam sie z tobōm niy zgadzŏ.

Testy, dlo porzōndku: 942, uruchamiane na bazie danych stawianyj ôd zera przy kożdyj zmianie. Niy sōm tukej, coby dowodzić, że projekt je sprytny. Sōm tukej, bo tryb awaryje tego projektu je cichy, a ciche awaryje potrzebujōm kogoś, kto krzyczy za nie.

Co rozdzielniyńcie daje zwykłym człowiekowi

  • Grupa może prowadzić kilka firm z jednyj instalacyje, a sprzedŏwca w jednyj nigdy niy zobŏczy klijenta drugij — niy przez politykã, przez kōnstrukcyjõ.
  • Program partnerski, zbiōr promptōw, roszczyniŏ do klijenta: wszystko w zakresie per firma, coby kōnfiguracyjo jednego tenanta niy mogła stŏć sie kōnfiguracyjōm wszystkich.
  • Prośba ô wykasowaniu je respektowanŏ w granicach, a niy we wspōlnej hałdzie — i to włŏśnie czyni možebne ôdpowieć uczciwie.
  • A nikt niy musi tego pamiyntać. To je punkt — gwarancyjo, kera zależy ôd pamiyntaniŏ, niy je gwarancyjōm.

Jeszcze jedyn wers, kery niy je ô bazach danych

Kożdy siostrzany serwis we familiji nosi własne, nazwane poświadczenie. Nic niy gado ze wspōlnym, coby żodny serwis niy mōgł przypodkowo dźołać za inny — mało dyscypliny, co prziszła prosto z tego, że kedyś mioł my wspōlny token i niy podobało sie to.

To ta sama intuicyjŏ co reguła bazy danych. Zrōb złe rzecz niymożebnõ, a niy ino niypochylanõ, a twojŏ uwaga idzie na klijentōw, a niy na czujność.

GranicaPoniżej aplikacyje
  • 126 tabelKożdŏ nosi swojego tenanta, ze wymuszōnym sprŏwdzaniym.
  • 272 politykiNapisane pojedynczo, coby kożdõ przeczytoł człowiek.
  • 3942 testyNa bazie stawianyj ôd zera, przy kożdyj zmianie.
  • 40 bazowych najymcōwProśba bez scope niy dochodzi do danych.

Zmierzōne na żywym buildzie

„Naszo aplikacyjo zawdy filtruje po firmie.”

To „zawdy” robi we tyj zdaniu niy mało roboty.

Przesuń grańica niżej, do bazy danych, a zapōmniany WHERE zwroci nic zamiast cudzych klientōw. Pusty ekran to lepszy feler jak nieznośne poznanie.

Dla grup, co majōm kilka marek →