멀티 테넌시(Multi Tenancy) : 다중 소유 라는 뜻으로, 자주 언급되는 단어임에도 생각보다 정리가 잘 되어있는 곳이 별로 없어서 정리해보았다.



 소프트웨어 멀티 테넌시란 소프트웨어 아키텍처의 한 종류로 하나의 Software Instance 가 하나의 서버 위에서 여러 개의 Tenant 를 서비스 한다는 의미이다.


여기서 테넌트란 소프트웨어 인스턴스에 대해 공통이 되는 특정 접근 권한을 공유하는 사용자들을 말한다. 멀티 테넌트 구조에서 Software 들은 모든 테넌트들에 대해 인스턴스의 일부분을 단독적으로 제공하기 위하여 설계되어 있다.


이는 개개의 소프트웨어 들이 각기 다른 테넌트들을 위해 서비스되는 멀티 인스턴스 구조와 상반된다.


 멀티 테넌시 환경에서 복수의 고객들은 동일한 데이터 스토리지 매커니즘과 함께 동일한 하드웨어의 동일한 OS에서 실행되는 동일한 Application 을 공유한다. 이는 구성 요소가 이양됨으로써 각 고객이 별도의 VM에서 구동되는 것처럼 보이게 하는 가상화와의 차이점이다.


 Multi Tenancy 란 하나의 소프트웨어를 여러 사용자가 함께 사용하는 것을 말한다. 사용자들은 프로그램을 수정하는 것이 아니라 서비스 제공자가 제공하는 설정 기능을 통해 자신에 맞게 커스터마이징해서 이용한다.


하나의 시스템으로 여러 고객이 사용하는데 고객마다 관리할 필요가 없기 때문에 관리비용도 적게 들고 유지보수가 간편하다. 하지만 하나의 DB로 관리한다는 것은 그만큼 위험도가 높다는 뜻이다.


 클라우드 컴퓨팅의 기본이 아키텍쳐를 공유하는 멀티 테넌시 시트템이다 라는 의견이 있으나 보안 문제가 우려가 되기 때문에 강력한 데이터 암호화 같은 기술이 병행되어야 한다. 많은 경우에 멀티 테넌시 시스템의 예시는 SaaS 의 형태라고 생각하면 된다

(SaaS 에 대해선 다음 링크 참조 : http://jins-dev.tistory.com/entry/%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EA%B3%84%EC%B8%B5-%EB%B0%8F-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%93%A4%EC%97%90-%EB%8C%80%ED%95%9C-%EC%86%8C%EA%B0%9C-IaaS-PaaS-SaaS?category=759992)

 

설명이 매우 추상적이라서 보충하자면 일반적인 멀티 테넌시란 하나의 소프트웨어 인스턴스로 여러 고객에게 서비스를 제공하기 위한 아키텍쳐 그 자체를 말한다


이 개념이 클라우드 컴퓨팅에 적용되면서 제공하는 서비스가 가상머신이라면, 서비스 Provider 는 하나의 컴퓨터에 여러 개의 독립된 가상 머신을 만들어 다수의 테넌트에게 이 컴퓨팅 리소스를 서비스 할 수 있게 된다. 그리고 이게 클라우드 서비스 개념의 출발이다.



 클라우드에서 공유 인프라 구축은 까다로운 문제이다. 전통적인 데이터센터 구조는 실 사용량에 비해 과도한 인프라가 구축되어 있어 리소스 활용률이 낮으며 이 때문에 클라우드 컴퓨팅을 통해 개별 어플리케이션, 그룹 또는 고객 간의 리소스가 공유되는 Multi tenant 환경을 이해하는 것이 중요하다.


 많은 기업들(Client)이 보안과 QoS(Quality Of Service) 를 염려하여 클라우드 인프라 구축 및 서비스에 대한 계약을 망설이고 있다. 이러한 이유로 개발된 Secure Multi tenant architecture의 멀티 테넌시의 4대 요소는 다음과 같다.


(1)   가용성 : 공유 인프라 한대에 장애가 발생하는 경우 다른 클라이언트에 영향을 줄 수 있기 때문에 장애가 발생할 수 있는 상황에서도 필요한 컴퓨팅, 네트워크 및 스토리지 리소스를 이용할 수 있도록 이중화 및 기타 메커니즘을 제공한다.


(2)   안전한 분리 : 한 테넌트는 어떤 상황에서도 다른 테넌트의 VM, 네트워크 또는 스토리지 리소스에 접근할 수 없어야 한다. 각 테넌트는 안전하게 분리되어 있어야 한다.


(3)   서비스 보장 : 정상적으로 운영되는 동안이나 장애가 발생했을 때나 특정 테넌트에서 비정상적인 부하가 발생했을 때에도 컴퓨팅, 네트워크, 스토리지가 분리되어 성능이 보장되어야 한다.


(4)   관리 : 모든 리소스를 빠르게 프로비저닝, 관리 및 모니터링할 수 있는 기능이 매우 중요하다. 관리를 단순화 함과 동시에 고객이 특정 벤더에 얽매이지 않도록 하는 것이 중요하다. 타사 어플리케이션 벤더 도 전체 환경에 대한 관리를 제공할 수 있도록 모든 단계에서 API 통합 지점과 Work flow를 상세히 기술하는 것이 중요하다.



Public Cloud에서 대부분의 서비스 제공자(Provider)들은 Multi tenant 모델을 사용한다. 하나의 서버 인스턴스의 사용을 제공하고 유지보수 및 배포가 용이하며 비용면에서 효율적이다.


이 때 public cloud provider는 당연히 각 Client에게 Hypervisor 레벨로의 접근을 허용하지 않으며 당연히 host-level utility (예를 들어 안티바이러스 등의 보안 프로그램들 또는 백업 프로그램들)의 설치 및 사용이 허용되지 않는다.

이러한 특성은 보안상의 영향 뿐 아니라 잠재적인 WAN / Cloud 에서의 Failure 을 포함한다.


 또한 Public Cloud Provider 들은 그들의 하드웨어를 소유하고 Software들을 제어할 수 있기 때문에 Tenant 들의 동의를 구하지 않고도 저수준의 업데이트를 하는 것이 가능하다. 일반적으로는 OS 에 대한 업그레이드 이전에 광범위한 테스트가 수반되나 이런 종류의 업데이트가 Client 들의 소프트웨어에 영향이 미치지 않는다고 장담할 수 없다.


 퍼블릭 클라우드 사용시 비용은 예측할 수 없는 경우가 많다. CPU, 메모리, I/O, 네트워크 리소스 등과 같은 경우 너무나도 많은 변수가 존재하며 이를 대응하기 위해서 효율적인 모니터링 툴이 필요하다.

 

 

+ Recent posts