5. 본론에 들어가기 전에
• App Service 구조를 깊게 살펴봅시다
• https://youngjaekim.wordpress.com/2017/04/03/번역-azure-
앱서비스-구조를-깊게-살펴봅시다/
• App Service Environment의 네트워크 구성
• https://msdn.microsoft.com/en-us/magazine/mt797651
• 왜 이것을 아는 것이 중요한가?
• 장애 또는 특이 상황에 대해 보다 정교한 이해와 대응이 가능
Thanks to Youngjae Kim
슬라이드
동영상
6. App Service 구조
•PaaS를 만드는 PaaS가 있음
• 내부는 Azure Cloud Service (classic)으로 구현됨
• 약 1,000개의 서버를 하나의 ‘확장 단위’로 관리함
•확장단위 내에 구성요소 및 역할
• 프론트엔드: Layer-7 로드밸런서 + SSL 핸들링
• 웹 작업자(worker): 유저의 앱을 구동하는 런타임
• 파일 서버: Azure Blob Storage를 네트워크디스크로 마운트하는 역할
• API 콘트롤러: 앱의 실행/정지 등의 명령을 처리
• Publisher: 앱 배포용 FTP 프로토콜을 제공 (서비스용 아님)
• SQL: 앱 구동 메타데이터 저장
• Data Role: 내부 캐시 (유저가 쓰는게 아님)
8. App Service 구조
•Worker(앱 런타임)가 이미 돌고 있는 상태에서 확장
명령에 따라 앱을 복제하여 순식간에 확장
•확장/축소 완료 후 트래픽을 분산하므로 유실 없음
9. App Service의 네트워크 특성
•1개의 인/아웃바운드 겸용 + 4개의 아웃바운드 전용
= 총 5개의 IP
•고정IP 할당 가능. 앱을 정지하면 다른 IP로 바뀔 수
있음.
•네트워크주소변환(Network Address Translation; NAT) 테이블의 한계
• B1/S1/P1 인스턴스 당 1,920 연결
• B2/S2/P2 인스턴스 당 3,968 연결
• B3/S3/P3 인스턴스 당 8,064 연결
• 앱 서비스 환경(ASE) 당 최대 64K 연결
10. 왜 아웃바운드 전용 IP가 있나요?
•Azure 네트워크는 아래와 같이 조건에 따라 SNAT를
사용하지 않음
•https://docs.microsoft.com/ko-kr/azure/load-
balancer/load-balancer-outbound-connections
시나리오 메서드 참고
독립 실행형 VM(부하 분산 장치 없음,
인스턴스 수준 공용 IP 주소 없음)
기본 SNAT Azure에서는 SNAT에 공용 IP 주소를
연결합니다.
부하 분산 VM(VM에 인스턴스 수준
공용 IP 주소 없음)
부하 분산 장치를
사용하는 SNAT
Azure에서는 SNAT에 부하 분산
장치의 공용 IP 주소를 사용합니다.
인스턴스 수준 공용 IP 주소를 가진
VM(부하 분산 장치 있음 또는 없음)
SNAT를 사용하지
않습니다.
Azure에서는 VM에 할당된 공용 IP를
사용합니다.
13. Azure Database
•Azure에서 제공하는 관리형 데이터베이스
•Azure Database는 SQL Server로 구성되어 있음
•MySQL용 Azure SQL과 PostgreSQL용 Azure SQL이
프리뷰 진행 중
•파트너사에서 제공하는 관리형 데이터베이스도
존재(ClearDB, 권장하지 않음)
•Public 자원이며, Premium 사용시 vNet에 연결 가능
14. DTU(Database Transaction Unit)
•CPU, 메모리, I/O(데이터 및 트랜잭션 로그 I/O)의
혼합된 측정치
•리소스를 지정하는 것이 아닌 트랜젝션을 기준으로
성능을 측정하여 제공
•Azure는 DTU 계산기를
제공하고 있으며, 모니터링
수치도 제공
DTU 계산기 : http://dtucalculator.azurewebsites.net/
16. MySQL용 Azure Database
•기본 Azure Database보다 기능은 많지 않음
•현재 지원되는 버전은 5.6.35, 5.7.18
•Preview이기 때문에 버전 업그레이드는 지원하지 않음
17. 서버 로그
•로그는 최대 7일간 보존하며, 7.5GB 초과시
여유공간이 생길 때 까지 오래된 파일 삭제
•Slow query는 기본적으로 비활성화 되어있으며,
slow_query_log를 ON으로 설정해야 함
18. 고가용성
•트랜젝션이 커밋될 때 Azure Storage에 동기화
•HA시 처리중이던 트랜젝션은 커밋되지 않음
•HA 발생 시 응용 프로그램에서는 커밋되지 않은 쿼리에
대해 재시도는 필수적
•확장 및 축소 도중 Connection은 끊기며 커밋되지 않은
트랜잭션은 취소
20. 제한
최대 연결
기본 50 Compute 단위 50개 연결
기본 100 Compute 단위 100개 연결
표준 100 Compute 단위 200개 연결
표준 200 Compute 단위 400개 연결
표준 400 Compute 단위 400개 연결
표준 800 Compute 단위 1600개 연결
최대 Compute 단위
기본 서비스 계층 100 Compute 단위
표준 서비스 계층 800 Compute 단위
최대 저장소
기본 서비스 계층 1TB
표준 서비스 계층 1TB
21. Azure SQL Database SLA
•월 99.99% SLA 보장 (단일 또는 탄력적 기본 이상)
• 99.99% = 한달 약 4분 23초
• 99% = 한달 약 7시간 18분 17.5초
•가용성 99.99%~ 10% 크래딧 보상
•가용성 99%~ 25% 크래딧 보상
•웹, 비즈니스 계층은 월 99.9% SLA 보장
• 99.9% = 한달 약 43분 49.7초
https://azure.microsoft.com/ko-kr/support/legal/sla/sql-database/v1_1/
24. 배포 자격 증명
•웹앱 로컬 git 또는 FTP 등 웹앱에 응용 프로그램
배포 시 사용할 자격 증명 생성
•자격 증명은 모든 구독의 모든 앱에 적용
•사용자 이름은 ‘웹앱 이름자격 증명 이름’
25. 배포 슬롯
•Web Hosting을 하나 더 만들 수 있는 기능
•완벽한 WebApp이 하나 더 생성됨
•보통 개발, QA, 프로덕션 테스트 등에 사용
•Swap이 가능하며, 동일한 지역의 리소스 그룹
내에서 App Service Plan 이동 가능
•표준 이상 계층부터 사용 가능
30. MySQL In App
•App Service머신에서 MySQL을 지원하는 기능
•Scale out은 불가능
•테스트 용도로만 사용 권장
•Data Migration 가능
31. Azure 백업
•Azure 백업은 기본적으로 VM백업을 의미함
•여기서 설명할 Azure 백업은 웹앱 백업
•App Service Plan이 표준 이상이어야 활성화
•웹앱의 모든 것을 Blob으로 백업
•연결된 Database의 연결문자열 기준으로 데이터
백업 가능
•배포 슬롯에 복구 가능
32. Blob
Korea Central
Async
Korea Central Korea South
Async
Korea Central Korea South
LRS GRS RA-GRS
• 단일 Region내 3개 복제본
• Disk와 Node, Rack단위 장애
요소 분리하여 보호
• 쓰는 즉시 복제
• 매우 우수한 듀얼 RAID
• 두개 Region내 6개 복제본
• Region 단위 데이터를 보호
• 두번째 복제는 Async로 일어
남
• GRS + Read Access
• 별도의 Read Endpoint가 존
재
33. WebJob
•동일한 컨텍스트에서 프로그램이나 스크립트를
실행할 수 있도록 하는 기능
•.cmd, .bat, .exe, .ps1, .sh, .php, .py, .js, .jar
•연속 실행과 트리거 실행 두가지 유형
•트리거 실행은 수동과 스케줄(corn식)로 가능
36. 고급 도구 Project Kudu
•탐색창과 CMD/PowerShell을 실행할 수 있는 창 제공
•직접 편집 및 삭제, 다운로드 가능
•환경설정, 프로세스 등
확인 가능
37. 웹앱에서 사용하는 시스템변수
•웹앱에서는 응용 프로그램 설정에서 시스템변수를
지정할 수 있음
•고급 도구에서 사용할 환경변수를 확인할 수 있음
•데이터베이스의 경우 아래와 같이 접두사가 붙음
• Sql Server: SQLCONNSTR_
• MySql: MYSQLCONNSTR_
• Sql Azure: SQLAZURECONNSTR_
• Custom: CUSTOMCONNSTR_
https://blogs.msdn.microsoft.com/silverlining/2012/10/23/getting-database-
connection-information-in-windows-azure-web-sites/
43. 기타 네트워크 기능
•vNet 통합
• 표준 이상 가능, 웹앱 → VM 통신만 가능
• 가상 네트워크 게이트웨이가 자동으로 생성됨
•하이브리드 연결
• 하이브리드 연결 관리자를 통해 웹앱과 통신 가능
•Azure CDN
•IP 제한
• Black List 형식의 IP 차단 정책 적용
51. 가상 네트워크 란?
•Azure 데이터센터에
가상의 네트워크를 만들어
네트워크 기반 통신을
가능하게 해 줍니다.
•Azure 지역에 종속되며
가상의 네트워크이기 때문에
생성에 제한이 없습니다.
•다른 계정의 가상
네트워크와는 기본적으로
차단되는 독립적인 네트워크
입니다.
52. 가상 컴퓨터 란?
•IaaS의 대표적인 리소스
•Azure에서 Infra단위까지 관리를 해주고 OS 위의
부분은 전부 사용자가 관리해야 합니다.
•가상 컴퓨터 크기에 따라 성능이 달라집니다.
•가상 컴퓨터를 REST API 호출로 생성할 수 있으며
대량의 트래픽을 받았을 때 증설이 쉽습니다.
53. 가상 컴퓨터 크기
구분 크기 설명
일반 사항 DSv2, Dv2, DS, D, Av2, A0-7 CPU와 메모리 비율이 적절합니다.
컴퓨팅 최적화 Fs, F CPU가 메모리에 비해 높은 비율을 가집니다.
메모리 최적화 GS, G, DSv2, DS, Dv2, D 메모리가 CPU에 비해 높은 비율을 가집니다.
저장소 최적화 Ls 디스크 처리량이 높습니다.
GPU NV, NC GPU가 연결되어 있는 가상 컴퓨터 입니다.
높은 성능 컴퓨팅 H, A8-11 RDMA를 갖춘 가장 빠른 가상 컴퓨터입니다.
54. 가용성 집합
• Fault Domain(FD)은
공통 전원 및 네트워크
스위치를 공유하는
논리적인 그룹입니다.
• Update Domain(UD)은
동시에 유지 관리를
진행하거나 재부팅이 될
수 있는 논리적인
그룹입니다.https://blogs.technet.microsoft.com/koalra/2014/08/06/micro
soft-azure-vm-availability-set-load-bala/
55. 가상 컴퓨터 SLA
•기준 : 고 가용성(최소 2대 이상) 설정 시
Compute SLA Azure AWS GCP
99.9%~99.95%
(7시간 18분~22분)
10% - 10% 10%
> 99.9%
(7시간 18분 이상)
25% 10% 30% -
95%~99%
(36시간 31분~7시간 18분)
- 25% - 25%
> 95%
(36시간 31분 이상)
100% 100% - 50%
2017년 4월 20일 기준
https://azure.microsoft.com/ko-kr/support/legal/sla/virtual-machines/v1_6/
56. 네트워크 보안 그룹
•네트워크 보안그룹은 Subnet과 NIC에
연결할 수 있습니다.
•현재는 TCP와 UDP만 지원되며
ICMP는 지원되지 않습니다.
•대상은 NSG이 연결된 리소스 이며,
소스는 Any, CIDR, Tag로 구분됩니다.
•Tag는 Internet, 가상 네트워크, 애저
부하 분산이 있습니다.
•허용(Allow)와 거부(Deny)를 설정할 수
있고 우선순위가 있습니다.
InboundInbound
outboundoutbound
57. 관리 디스크
•관리 디스크를 사용하면 Azure에서 디스크를 직접
관리해줍니다.
•저장소 계정의 종속을 받지 않습니다.
•스냅샷 또는 가상 컴퓨터 이미지를 만들 수 있습니다.
•가상 컴퓨터 크기 집합을 사용할 때 최대 10,000개의
가상 컴퓨터 개수를 조절할 수 있습니다.
58. 가상 컴퓨터 리소스 종속 지도
네트워크 대역폭 저장소 대역폭
공인 IP
네트워크 보안 그룹
저장 디스크NIC VM
저장소 계정
관리디스크가아닐시
가상 네트워크
60. Azure Backup 파일 분석
압축 meta
mysql.sql
fs .ssh
data
LogFiles
site
SiteExtensions
deployments
diagnostics
locks
repository
siteextensions
wwwroot
61. Wordpress 구성 사전조건
•웹앱 백업파일과 압축해제 Tools
•apache2, php7.0, mysql 5.7
•php 확장모듈 필요
• php-curl php-gd php-mbstring php-mcrypt php-xml php-
xmlrpc
•라이선스
• 우리는 라이선스 없이 갑니다.
67. 자주 쓰는 Docker 명령어들
•docker run
•docker ps
•Docker search
•docker images
•docker rm, docker rmi
•docker build
•docker pull, docker push
68. Dockerfile 구성
•FROM # 기본이 되는 Docker image
•WORKDIR # 작업 폴더
•ADD/COPY # 파일 복사
•RUN # Image 생성에 필요한 명령어 실행
•EXPOSE # 실행되는 Port 지정
•ENV # 환경변수 지정
•CMD [""] # 컨테이너가 실행될 때 실행할 명령어
69. Docker for Windows and MAC
https://www.docker.com/docker-windows https://www.docker.com/docker-mac
70. 막간을 이용한 책 팔이...
•12월이 될지 내년이 될지 모르지만
Windows Container책이 나옵니다.
•백승주, 최정현, 최한홍, 김세준 번역
•Windows Container책이지만
Docker이야기만 가득
71. Docker의 개발은 ...ing
•1.13.1도 최신이라고 생각했는데... (Docker CE, EE)
•매우 빠른 속도로 Release
•https://docs.docker.com/release-notes/docker-
ce/#stable-releases
•https://docs.docker.com/enterprise/17.03/release-
notes/#docker-ee-17032-ee-7
72. Dockerizing
•일반 Application을 Docker화 시키는 작업을 뜻함
•Dockerizing 시 Dockerfile을 이용하여 docker build를
실행하게 되며 각 단계별로 Docker Layer가 생성됨
•RUN 명령은 최대한 한 줄로
사용할 수 있도록 &&을
이용하여 연장하는 것이
Docker Image 용량을
줄이는데에 도움을 줌
73. Linux의 웹앱
•Linux의 웹앱은 기존 웹앱처럼 FTP, Git 등을
이용하여 소스파일을 Deploy하는 방식
•기존 방식과 다르게 Container 기반의 배포를 사용할
수 있는 Linux의 웹앱
•UI상 배포방식이 다를 뿐 실제 동작하는 App Service
Plan은 하나로 동작하며, 기능도 동일
79. Azure Container Registry
•Azure에서 제공하는 Container Registry
•Windows, Linux용 전부 저장 가능
•Azure CLI 2.0을 이용하여 로그인 가능
•프리미엄 사용 시 지역 복제 사용 가능
•https://azure.microsoft.com/ko-kr/services/container-
registry/