iKonekt
Консольді ашу

Бөлу

Код емес, дерекқор сақтайтын шекара

Әрбір CRM өзін көп tenantты деп мәлімдейді. Бұл мәлімдеме арзан; маңыздысы — шекарады қай қабат ұстап тұрғаны. Егер жауап «біздің қосымша әрқашан дұрыс сүзгіні қосады» болса, онда кепілдік сұрау жазған ең шаршаған әзіршіден де жақсы емес.

iKonekt бірінші миграциясынан бастап көп tenantты болды, кейіннен қосылған жоқ — бұл мақтаныш сияқты көрінеді, бірақ шын мәнінде мойындау: оны кейіннен сенімді түрде қосу іс жүзінде мүмкін емес, ал бұған тырысқан әркімнің өз оқиғасы бар.

Бөлінгендік дерекқорда тұрады. Жиырма алты кестенің әрқайсысы өзі тиесілі tenantты алып жүреді, ал оны тексеретін саясат әр оқу және әр жазу кезінде, қосымшадан мүлде төменде орындалады. Шекарады ұмытқан сұрау басқа компанияның клиенттерін қайтармайды. Ол ештеңе қайтармайды.

Жол деңгейіндегі қауіпсіздік, мәжбүрлі түрде

Бұл келісім де емес, кодты шолу ережесі де емес. Дерекқор бас тартады. Жетпіс екі саясат, әрқайсысы бөлек жазылған, генерацияланбаған — өйткені генерацияланған саясатты ешкім оқымаған саясат.

Құрама кілттер

Еншілі жазба өз tenantын және өз ата-жазбасын жұп ретінде бірге көрсетеді. Басқа компаниядан келген бөтен идентификатор шешілмейді — ол жай ғана жарамды сілтеме емес.

Әдепкі tenant ешқашан болмайды

Ауқымы жоқ сұрау үнсіз нөлінші tenantқа арналған сұрауға айналмайды. Ол дерекқорға жетпей тұрып қате тастайды. Өшіруді ұмытуға болатын «ауқымсыз» режим жоқ.

Өзін жариялай алмаған қате

Жалға (tenant) жұмыстары жүріп жатқанда, қателердің көбі шу шығаратын. Екі компанияға бірдей тұтынушы доменін берсеңіз, дерекқор нысандары бірден қате коды мен стек трассировкасымен көрінеді; оны түскі асқа дейін түзетесіз.

Біреуі қарсылық білдірмеді. Өңделетін prompt ауыстыруларының кестесі тек prompt түрі бойынша кілттелген еді — түр және tenant бойынша емес. Екінші компания өз көшірмесін өңдегенде, бірінші компанияныңін біржола жаңғыртып жіберер еді — мүлдем дұрыс SQL арқылы, қате жоқ, ескерту жоқ, сәтсіз тест жоқ. Оны кілт өзгерткеннен кейін қалған әрбір бірегей индексті бір-бірлеп оқу арқылы таптық: шу шығарғандары жалғыз емес деген күдікпен.

Мұны айтамыз, себебі бұл жұмыстың адал пішіні осы. Бөлу — қосатын функция емес; бұл схеманың көңілсіз бөліктерін, ішінде сізбен келіспейтін бірдеңе бар деген болжаммен оқу дағдысы.

Тесттер, жазып қояйық: олардың саны 942, әрбір өзгеріс кезінде нөлден қайта құрылған дерекқорға қарсы іске қосылады. Олар дизайныңыздың тапқырлығын дәлелдеу үшін емес. Осы нақты дизайнның сәтсіздік түрі үнсіз болғандықтан, ал үнсіз сәтсіздіктерге біреудің орнынан дауыстап айтуы керек.

Бөлу қарапайым адамға не береді

  • Топ бір орнатудан бірнеше компанияны жүргізе алады, және біреуіндегі сатушы екіншісінің тұтынушысын ешқашан көрмейді — ережемен емес, құрылыммен.
  • Серіктестік бағдарлама, prompt жиынтығы, тұтынушыға құқық: бәрі компания бойынша шектелген, сондықтан бір tenantтың баптауы барлығыныңіне айнала алмайды.
  • Деректерді жою сұрауы ортақ үйінді арқылы емес, шекара ішінде орындалады — дәл осы оны шынайы жауап беруге мүмкін етеді.
  • Және ешкім ештеңені есте сақтауы керек емес. Міне, мәні осыда — есте сақтауға тәуелді кепілдік кепілдік емес.

Дерекқорлар туралы емес, тағы бір жол

Отбасындағы әрбір туыстық сервис өзінің аталған тіркелгі дерегін (credential) сақтайды. Ешбір сервис ортақ дегенмен сөйлемейді, сондықтан бір сервис басқасының орнына кездейсоқ әрекет ете алмайды — бір кездері ортақ токен болған және ол ұнаған емес деген тәжірибеден тікелей шыққан кішкентай тәртіп.

Бұл дерекқор ережесімен бірдей инстинкт. Бұрыс нәрсені тыйу емес, мүмкін емес етіңіз, сонда назарыңызды сақтыққа емес, тұтынушыларға жұмсайсыз.

ШекараҚолданбаның астында
  • 126 кестеӘрқайсысы өз tenantын алып жүреді, тексеру мәжбүрлі түрде қосулы.
  • 272 саясатЖеке-жеке жазылған, сондықтан әрқайсысын бір адам оқыған.
  • 3942 тестНөлден қайта құрылған дерекқорға, әрбір өзгеріс кезінде.
  • 40 әдепкі tenantАуқымы жоқ сұрау деректерге ешқашан жетпейді.

Жанды құрылымда өлшенген

«Біздің қолданба әрқашан компания бойынша сүзеді.»

Осы сөйлемде «әрқашан» сөзі ауыр жұмыс атқарады.

Шекарады дерекқорға төмен қарай жылжытсаңыз, ұмытылған WHERE шарты біреудің тұтынушыларының орнына ештеңе қайтарады. Бос экран — ыңғайсыз танысудан жақсы сәтсіздік.

Бірнеше бренд жүргізетін топтар үшін →