멀티 테넌시(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, 네트워크 리소스 등과 같은 경우 너무나도 많은 변수가 존재하며 이를 대응하기 위해서 효율적인 모니터링 툴이 필요하다.

 

 


최근 대세라고 할 수 있는 클라우드 기술의 중요한 개념들을 포스팅합니다. :)


 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드를 나누는 기준은 서비스 제공주체(Cloud Service Provider) 가 된다.


 Private Cloud 자체적으로 데이터 센터 안에 클라우드 환경을 구축해서 사용하는 방식이다.

회사 내 IT 리소스들을 이용하려는 사용자가 자유롭게 어플리케이션을 개발, 운용할 수 있는 환경을 제공하는 것이 목표이며 기존 IT 인프라를 재활용하고 IT 서비스를 원하는대로 직접 구성 및 제공함에 있어 내부 효율성이 뛰어나다.

 또한 내부 통제가 가능하고 보안성 자체가 확보 가능하다.


 Public Cloud 서비스 제공업체(Vendor)가 구축한 서버, 스토리지 등 IT 인프라를 기업들이 사용료를 내고 이용하는 방식이다. 이를 통해 서비스 엑세스 비용이 절감되며 구현속도와 서비스적인 융통성이 향상된다.


즉 사설 클라우드가 자체적으로 필요한 부분을 보유 및 구축하고 재사용한다면 공용 클라우드는 서비스 제공자가 구축한 서비스를 구매하는 방식으로 구성된다

사설 클라우드는 기존 IT 인프라를 활용가능하다. 소규모더라도 구축 비용이 높고 공용 클라우드는 대규모에 적합하며 구축 비용 자체가 낮다

또한 사설 클라우드는 자체 보안시스템을 운용해야 하나 공용 클라우드는 보안 시스템 역시 제공이 된다.


 Hybrid Cloud Public Cloud Private Cloud의 이점을 모두 제공한다. 최근에는 VM의 공유 및 사설과 공용 간의 동기화 등으로 인해 하이브리드 클라우드 생태계가 발달함에 따라 점점 구분이 모호해지고 있다.

 



최근 심심치 않게 들리는 소프트웨어 용어 중 하나가 프로비저닝(Provisioning) 이다. 


생각보다 오래사용되오던 단어인 것으로 보이나, 최근에 좀 더 각광을 받게 된 이유는 아무래도 클라우드 인프라가 도입되면서 부터지 않을까 생각된다.


프로비저닝(Provisioning) 이란 의미는 영어 직역한 그대로 "제공하는것" 이다. 

어떤 종류의 서비스든 사용자의 요구에 맞게 시스템 자체를 제공 하는 것 프로비저닝이라고 하며 제공해줄 수 있는 것은 인프라 자원이나 서비스, 또는 장비가 될 수도 있다.


좀더 실무적인 표현으로 보자면, IT 인프라 자원을 사용자 또는 비즈니스 Customer에게 Service Vendor 가 제공해주는 것을 말한다.


Server Resource Provisioning : CPU, Memory, IO 등과 같은 실제 서버의 자원을 할당해주고 운영할 수 있게 제공해주는 것을 말한다.


OS Provisioning : OS를 서버에 설치하고 구성작업을 해서 사용할 수 있도록 제공하는 것을 말한다.


Software Provisioning : WAS, DBMS 등의 소프트웨어를 설치하고 세팅하여 실행할 수 있도록 제공하는 것을 말한다.


Account Provisioning : 접근 권한을 가진 계정을 제공해주는 것을 말한다. 클라우드 인프라 쪽에서는 해당 업무를 담당하던 관리자가 변경된 경우 권한의 인계를 Account Provisioning 을 통해 하는 경우가 많다.


Storage Provisioning : 데이터를 저장하고 관리할 수 있는 Storage 를 제공할 수 있다. 특히 클라우드에서는 제공하는 Storage 의 종류와 용도에 따라 다양한 방식의 제공이 이루어진다.


클라우드를 도입하거나 클라우드 환경에서 사용하는 것은 클라우드 Vendor 로부터 서비스를 Provisioning 받아 사용한다고 보면 된다.


이처럼 클라우드 사용시 각 서비스들을 용도에 맞게 세팅을 하여 환경 구성을 자동화 하는 것을 자동화 Provisioning 이라고 하며, 


만약 온프레미스(On premise) 환경에서 클라우드 환경으로의 이식을 준비하고 있다면 이에 많은 신경을 써야 한다.



+ Recent posts