Próbuję zbudować oparte na sieci rozwiązanie SaaS i ruszam w drogę, w której nie jestem pewien, czy będę używać wielu dzierżawców lub wielu instancji. Postaram się opisać, co próbuję osiągnąć, a każde podejście ma zalety i wady (moja opinia, zgodnie z tym, co czytam). Podaj swoje sugestie na wypadek, gdyby coś przeoczyłem w jednym podejściu w stosunku do drugiego.
Aplikacja, którą próbuję zbudować, to, jak wspomniałem, rozwiązanie SaaS, w którym firmy mogą tworzyć swoje konta, a każde konto / firma ma własnych użytkowników, klientów, produkty, usługi ... itd. Każdy użytkownik; kto jest pracownikiem firmy; powiązane z jednym kontem / firmą będą miały dostęp tylko do swoich klientów, produktów i usług swojej firmy. Firmy mogą mieć nieograniczoną liczbę klientów, produktów i usług, dlatego każda firma powinna mieć własne centrum danych.
W tym celu zdecydowałem się utworzyć wspólną bazę danych (zapisując poświadczenia wszystkich użytkowników do celów logowania) i wiele wspólnych schematów baz danych (baza danych na konto / firmę). Zasadniczo Multi Tenancy .
Następnie ktoś zasugerował użycie zamiast tego Multi Multi Instance , gdzie każda firma będzie miała własną instancję aplikacji (tj. Kod, biblioteki, bazy danych, frameworki itp.) Całkowicie oddzieloną od innych firm. Brzmi to lepiej, ponieważ nie muszę dbać o dodatkową warstwę, w której muszę upewnić się, że użytkownicy każdego najemcy mają dostęp tylko do danych swojej firmy. Myślę, że warto wspomnieć, że zależy mi na Dockerze, aby osiągnąć to podejście (nigdy wcześniej go nie używałem), ale myślę, że brakuje mu funkcji (więcej o nich później) będę potrzebować w przyszłości (przynajmniej nie znajdź je przy odrobinie wyszukiwania).
Jednak każde podejście ma swoje zalety i wady, więc nie mogłem podjąć decyzji, które podejście wybrać. Oto lista, ale odsłonię się ze względu na brak wiedzy na ich temat, więc może być coś, czego nie jestem świadomy, lub rozwiązanie problemu, którego nie znalazłem w Internecie: [Każde podejście ma uporządkowana lista, której śledziłem jeden po drugim]
Wiele najemców :
- Współdzielony host / sprzęt, wspólny kod i wiele baz danych.
- Jest to łatwiejsze do rozszerzenia funkcjonalności kodu i naprawienia błędów (kod współdzielony).
- Jest to trudniejsze do rozszerzenia sprzętowe (można skorzystać z usługi cloud) lub przenieść bazę indywidualnego najemcy do innego systemu bez wykonywania zmian w kodzie.
- Co najważniejsze, jak wspomniałem wcześniej, muszę dodać dodatkową warstwę do systemu, aby upewnić się, że użytkownik faktycznie należy do jego firmy i nie ma dostępu do informacji innych firm.
Wiele wystąpień :
- Udostępniony lub nieudostępniony host / sprzęt, kod na instancję i baza danych na instancję.
- Jest to trudniejsze do rozszerzenia funkcjonalności lub poprawiać błędy (nie jestem pewien, czy istnieje sposób, aby zrobić to w Döcker gdzie można dodać funkcje / funkcji do jednej instancji lub Docker pojemnika i wdrożyć go do innych).
- Jest to łatwiejsze , aby przenieść całe wystąpienie do innego hosta / sprzętu.
- Jako instancja nie muszę zajmować się tą warstwą, ponieważ każda instancja będzie miała własną bazę danych.
Wszystkie zalety i wady są zbędne w przypadku, gdy chcę zrobić coś ręcznie (jako ręczne tworzenie instancji dla każdego dzierżawcy), i dlatego wątpię w rozwiązanie Docker, chyba że istnieje sposób na rozwiązanie tego, co może być głównym powód pytania. Byłbym wdzięczny, gdybyś odpowiedział na pytanie, odnosząc się do rozwiązań, i dlaczego uważasz, że to podejście jest lepsze od drugiego.
W przypadku, gdyby to pomogło (może?), Używamy Laravela jako głównego frameworka back-endu (wszystkie RESTfully).