웹 기반 SaaS 솔루션을 구축하려고하는데 다중 테넌시 또는 다중 인스턴스를 사용하지 않을지 모르는 길에 섰습니다. 나는 달성하려는 목표와 각각의 장단점 (내 의견, 내가 읽은 것에 따라)을 설명하려고 노력할 것이다. 하나의 접근 방식에서 다른 방법으로 누락 된 경우 제안을 포함하십시오.
필자가 언급 한 애플리케이션은 회사에서 계정을 만들 수있는 SaaS 솔루션이며 각 계정 / 회사마다 자체 사용자, 고객, 제품, 서비스 등이 있습니다. 각 사용자; 회사 직원은 누구입니까? 한 계정 / 회사와 관련이있는 고객은 회사 고객, 제품 및 서비스에만 액세스 할 수 있습니다. 회사는 고객, 제품 및 서비스를 무제한으로 가질 수 있으므로 각 회사마다 자체 데이터 센터가 있어야합니다.
이를 위해 공유 데이터베이스 (로그인 목적으로 모든 사용자 자격 증명 저장)와 여러 데이터베이스 공유 스키마 (계정 / 회사 별 데이터베이스)를 만들기로 결정했습니다. 기본적으로 다중 테넌시 .
그런 다음 누군가가 멀티 인스턴스를 대신 사용하도록 제안했습니다 . 각 회사는 다른 회사와 완전히 분리 된 자체 응용 프로그램 인스턴스 (예 : 코드, 라이브러리, 데이터베이스, 프레임 워크 등)를 갖습니다. 각 테넌트 사용자가 회사 데이터에만 액세스 할 수 있도록 추가 계층을 관리 할 필요가 없기 때문에 더 잘 들립니다. 나는 이 접근법을 달성하기 위해 Docker 에 의존하고 있다고 언급하는 것이 좋다고 생각하지만 (이전에 사용하지는 않았지만) 나중에 필요한 기능이 부족하다고 생각합니다 (적어도 나는하지 않았습니다) 약간의 검색만으로는 찾을 수 없습니다).
그러나 각 접근 방식에는 장단점이 있으므로 어떤 접근 방식을 결정할 수 없었습니다. 여기에 목록이 있지만 둘 다에 대한 지식이 없기 때문에 나에게 알지 못합니다. 알지 못하는 것이 있거나 웹에서 찾지 못한 문제에 대한 해결책이있을 수 있습니다. 순서대로 비교 한리스트
멀티 테넌시 :
- 공유 호스트 / 하드웨어, 공유 코드 및 다중 데이터베이스
- 그것은이다 쉽게 코드와 수정 버그의 기능 (공유 코드)를 확장 할 수 있습니다.
- 코드를 변경하지 않고 하드웨어를 확장하거나 (클라우드 서비스를 사용할 수 있음) 개별 테넌트의 데이터베이스를 다른 시스템으로 옮기기 가 더 어렵 습니다.
- 가장 중요한 것은 앞에서 언급했듯이 사용자가 실제로 자신의 회사에 속하고 다른 회사의 정보에 액세스하지 못하도록 시스템에 추가 계층을 추가해야합니다.
다중 인스턴스 :
- 공유 또는 비공유 호스트 / 하드웨어, 인스턴스 당 코드 및 인스턴스 당 데이터베이스
- 그건 힘들어 (나는 당신이 하나 개의 인스턴스 또는 도커 용기에 기능 / 기능을 추가하고, 다른 사람에게 배포 할 수있는 부두 노동자에 그것을 할 수있는 방법이 있는지 모르겠어요) 기능 또는 수정 버그를 확장 할 수 있습니다.
- 그건 쉽게 다른 호스트 / 하드웨어로 전체 인스턴스를 이동합니다.
- 인스턴스로서, 각 인스턴스마다 고유 한 데이터베이스가 있으므로 해당 계층을 관리 할 필요가 없습니다.
수동으로 작업을 수행하려는 경우 (각 테넌트에 대한 인스턴스를 수동으로 작성하는 경우) 모든 장점과 단점이 중복되므로 해결할 수있는 방법이 없다면 Docker 솔루션을 의심합니다. 질문의 이유. 솔루션에 대한 참조로 질문에 대답 하고이 접근법이 다른 방법보다 낫다고 생각하는 이유에 대해 감사드립니다.
도움이 될 것 같으면 Laravel 을 백엔드 의 기본 프레임 워크로 사용합니다 (모두 RESTfully).