마이크로소프트의 Windows Azure Platform을 사용하기 위해서 Live ID가 필수이며, 모든 빌링은 이 계정 기반으로 청구가 된다. 하나의 계정을 통해 Windows Azure, SQL Azure, AppFabric 등 다양한 서비스를 Subscription할 수 있으며, SQL Azure인 경우 몇 가지 주의 사항이 있어서 두서 없이 정리하고자 한다.
1. 하나의 계정으로 다수의 SQL Azure를 Subscription할 수 있다.
2. 하나의 Subscription에는 하나의 SQL Azure Server만 생성할 수 있다.
3. 하나의 SQL Azure Server에는 최대 150개의 SQL Azure database를 생성할 수 있다. (master database는 필수이므로 사용자는 149개의 database를 생성할 수 있다.)
4. database 생성시 MAXSIZE로 지정한 한계에 다다르면 더 이상의 insert, update 등 실행시 에러를 발생시킨다. 하지만, read, truncate, drop 등은 가능하며, 공간 확보 후 insert, update 등은 약 15분 가량 후에 시도하여야 한다.
5. 이전과 다르게 이제는 SQL Azure database를 생성한 이후에, database 이름, database 크기, database 에디션을 변경할 수 있다.
ALTER DATABASE database_name
{
MODIFY NAME = new_database_name
|MODIFY (MAXSIZE = {1 | 5 | 10 | 20 | 30 | 40 | 50} GB)
|MODIFY (EDITION = {'web' | 'business'})
}
6. SQL Azure는 database 단위로 과금이 되고 날마다 요금 계산이 이루어져 매달 청구가 되는 구조로 되어 있다. 즉, 하루에 같은 이름의 database를 만들고 삭제하고 또 만들고 삭제하고 반복하면 만들 때마다 에디션에 따라 요금이 계산되어 한달 후에 청구가 된다. 즉, 같은 이름의 database일지라도 하루에 여러 번 만들면 궁극적으로 남은 건 하나의 database일지라도 요금은 만들 때마다 추가됨을 명심하자.
7. 현재 버전의 SQL Azure에서 cross-database 쿼리를 지원하지 않으며 USE (database) 명령어를 지원하지 않는다.
8. SQL Azure 구독시 사용자가 만든 database는 한 벌의 primary, 두 벌의 secondary replica로 복제되어 하나의 Azure 데이터센터 내에서 (Geolocation) 물리적으로 다른 세 대의 서버에, 세 개의 SQL Server database에 각각 분산되어 저장된다. SQL Azure Server란 이러한 분산 데이터베이스의 논리적인 묶음을 의미한다. 모든 사용자의 활동 등 가령, 읽고 쓰는 작업은 모두 Primary replica에서 발생하고, 나머지 secondary replica에 비동기로 싱크된다. 아래 그림에서 화살표가 있는 것은 사용자가 만든 Primary replica이며, 같은 색깔의 화살표가 없는 database가 바로 secondary replica를 의미한다. 만약 USE 명령을 허용한다면, USE를 써서 database를 바꾸는 순간 원하는 database가 물리적으로 다른 서버에 있을 가능성이 있기 때문에 그곳으로 연결이 재설정되어야 한다. 따라서 SQL Azure에서 USE를 허용하지 않는다.
9. SQL Azure는 대규모 data node로 구성된 분산 시스템으로 SQL Server 기반으로 구성되어 있으며, 각 data node는 하나의 SQL Server 인스턴스가 구동된다. 이 SQL Server 인스턴스에는 하나의 커다란 데이터테이스가 존재하는데, 이는 다시 650개의 파티션으로 구분되고, 아래 그림에서 처럼 각 파티션에는 SQL Azure에서 사용자가 생성한 primary replica 혹은 secondary replica가 하나씩 배정된다. 하나의 data node에 호스팅되는 650개의 파티션은 하나의 로그 파일을 공유한다.
10. SQL Azure에서 commit은 quorum commit 정책을 따른다. 즉, 모든 사용자의 읽고 쓰는 활동은 primary replica에 이루어지며 트랜잭션 커밋을 결정할 때는 primary replica와 적어도 하나의 secondary replica가 트랜잭션 로그가 정상적으로 기록되었다는 것을 보장해야만 트랜잭션이 commit된다. (거의 실시간으로 2PC가 이루어진다는 것인지... HA를 위해서 최소 두 개 머신에 로그를 남기는 것은 알겠는데, 실시간 2PC라면 부하가 만만치 않을 듯....)
11. 2010년 11월 기준 SQL Azure의 data node에 사용되는 서버 사양은 32GB RAM, 8 cores, 12 disks 으로 약 $3,500 짜리 중간 정도의 성능을 가진 머신으로 구성되어 있으며, 이는 Windows Azure에 사용되는 머신과 동일하여 서로 호환된다.
12. 고장된 하드웨어를 다른 것으로 교체하면서 그 안에 들어 있는 수많은 replica를 다른 머신에 살려내는 작업을 Reconfiguration이라고 하는데, 이를 위해 노드에 문제가 발생했다는 사실을 감지하는 체계가 있다. SQL Azure에 저장되는 사용자의 데이터는 한 개의 primary replica와 두 개의 secondary replica로 복제되는 데, HA를 위해서 이들 세 replica는 모두 서로 rack 스위치를 공유하지 않는 머신에 할당된다. 더 나아가 노드의 문제 발생을 감지하기 위해서 주변의 여섯 노드들이 서로를 감시하도록 되어 있는데, 이들 역시 rack 스위치를 공유하지 않도록 설계되어 있다. 즉, 특정 노드에서 문제가 발생할 시 주변 여섯 노드 (Neighbor) 중 어떤 것이라도 문제 발생을 보고하게 되며 이때 Partition Manager가 개입되어 해당 노드에 저장되어 있는 사용자의 replica들을 하나 하나 살려내는 작업이 진행된다. (하나 노드에 최대 650개의 파티션이 있으니, 작업량을 추측할 수 있다.)
13. SQL Azure는 HA를 위해 두 가지 기능을 제공한다. 하나는 Engine Throttling이며, 다른 하나는 Load Balancer이다. Throttling을 통해 SQL Azure는 하나의 SQL Server에 들어있는 수많은 replica들이 하나의 SQL Server 자원을 효율적으로 활용할 수 있도록 제한을 둔다. Engine Throttling 기능은 각 replica가 사용하는 로그 사이즈, 로깅 시간, CPU 사용률, 물리적인 database 사이즈 제한 등을 모니터링하게 된다. 특정 replica가 이 제한을 넘어서게 되면, 리소스를 공유하는 다른 replica를 위해 해당 replica의 읽기, 쓰기 접근을 10초간 거부한다.
14. SQL Azure의 디폴트 Isolation Level은 SQL Server와 마찬가지로 READ_COMMITTED이다. 또한, READ_COMMITTED_SANPSHOT과 ALLOW_SNAPSHOT_ISOLATION 옵션을 허락함으로써 SQL Azure는 READ_COMMITTED with Optimistic Concurrency가 디폴트 값으로 지정되어 있다. SQL Server의 디폴트 값인 READ_COMMITTED with Pessimistic Concurrency로 변경은 불가능하다. Isolation Level 변경은 커넥션에 대해 SET TRANSACTION ISOLATION LEVEL 명령을 통해 가능하다.
좀 더 상세한 정보는 아래 원문에서 확인할 수 있다.
http://social.technet.microsoft.com/wiki/contents/articles/inside-sql-azure.aspx
기타 아래 정보도 한번쯤 둘러볼 필요가 있다.
SQL Azure에서 지원하지 않는 SQL Server 기능들 : http://msdn.microsoft.com/en-us/library/ff394115(v=MSDN.10).aspx
SQL Azure 보안 가이드라인 : http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=4322517e-9d80-4ad3-8a75-bf0a10aa64d9
댓글을 달아 주세요