SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
서버/인프라를 지탱하는 기술
           Ch. 2 한 단계 높은 서버 인프라 기술

                         아꿈사
                        chois79




13년 4월 7일 일요일
2.1. 리버스 프록시 도입
                     (아파치 모듈)




13년 4월 7일 일요일
부하 분산
                      (Load Balancing)

           앞 장에서는?
            L4를 사용하여 TCP 패킷 레벨의 부하를 분산

           이 장에서는?
            Proxy를 사용하여 좀 더 높은 수준(L7: 어플리케이션)으로
            부하를 분산



13년 4월 7일 일요일
Proxy?
                사전적 의미: 대리, 대리인, 대용물




13년 4월 7일 일요일
HTTP Proxy?



                PC 사용자와 인터넷 사이에서 중계자 역할을 수행


13년 4월 7일 일요일
Why to use HTTP Proxy?

                    보안, 성능, 전후 처리 ...




13년 4월 7일 일요일
Reverse Proxy?



                인터넷과 서버 사이에 놓여서 요청을 대리로 처리


13년 4월 7일 일요일
Reverse Proxy 도입의 이점


                 • HTTP 요청의 내용에 따라 시스템의 동작 제어
                 • 시스템 전체의 메모리 사용효율 향상
                 • 웹 서버가 응답하는 데이터의 버퍼링 역할



13년 4월 7일 일요일
요청의 내용에 따라 시스템의 동작 제어




                • 요청 URL에 각기 다른 서버에 분배 가능
                • IP주소를 이용한 제어
                  ex) 접속 IP에 따라 특정 경로 접속 제한
                • User-Agent에 의한 제어
                  ex) 수집 봇의 경우 캐쉬된 페이지 사용
                • URL 다시 쓰기
                  ex) short url
13년 4월 7일 일요일
시스템 전체의 메모리 사용효율 향상


           동적 컨텐츠를 생성하는 AP Server(Application Server)와
          웹 서버를 분리하여 사용함으로써 메모리 효율성을 향상 시킴




13년 4월 7일 일요일
일반적인 AP 서버의 특징
           • AP Server 는 많은 메모리를 사용
                 사용된 프로그램을 메모리에 상주시켜 응답 시간을 높임
                ex) Java, mod_perl, mod_php

           • 일반적으로 하나의 요청당 하나의 프로세스/스레드를 사용
                어플리케이션 설계가 쉽고 편함




13년 4월 7일 일요일
AP 서버에서 모든 요청 처리
                동적으로 생성된 페이지 내에 이미지가 30개 정도일 경우
                      동적 요청 1회 + 정적 요청 30회




                    30회의 정적 요청에도 대량의 메모리 소비
                        - 동일한 프로세스 및 스레드로 처리 됨


13년 4월 7일 일요일
서버를 분할할 경우
                정적 컨텐츠는 메모리 소비량이 적은 웹 서버가 처리
                   시스템 전체의 메모리 사용 효율이 높아짐.




                   • 요청된 URL이 정적 컨텐츠 경로일 경우 웹 서버로
                   • 그 밖의 URL일 경우 동적 컨텐츠 요청이므로 AP 서버로


13년 4월 7일 일요일
2대의 서버로 서비스할 경우




                  Reverse Proxy가 웹 서버이므로
                     정적 컨텐츠를 직접 처리


13년 4월 7일 일요일
웹 서버가 응답하는 데이터의 버퍼링 역할

                      HTTP Keep-alive?

                특정 클라이언트가 한번에 다수의 컨텐츠를
                 동일한 서버로 부터 얻고자 할 경우 사용

                • 장점: Connection에 대한 오버헤드를 줄임
                • 단점: 웹 서버에 부하를 야기
                 프로세스가 일정시간 동안 클라이언트의 응답을 위해서 점유됨




13년 4월 7일 일요일
Keep-Alive를 ON할 경우
                  다수의 스레드가 Keep-Alive를 위해 소비되어
                   추가적인 클라이언트의 요청을 처리 못함




                OFF 할 경우 클라이언트에서 볼때 체감 속도가 저하 됨

13년 4월 7일 일요일
Keep-Alive를 처리를 분리
                Reverse Proxy 역할을 하는 서버는 프로세스당
                         메모리 소비량이 많지 않음




                     • 클라이언트와 Reverse Proxy: Keep Alive ON
                     • Reverse Proxy와 AP 서버: Keep Alive OFF

13년 4월 7일 일요일
아파치 모듈을 이용한 처리의 제어

                  Reverse Proxy 로 아파치를 선택한 경우
                    모듈을 내장해서 전후 처리가 가능




                     • mod_deflate: AP 서버의 응답을 압축
                     • mode_ssl: AP 서버의 응답을 SSL로 암호화



13년 4월 7일 일요일
서버가 1대일 경우

                     동일한 호스트 내에 Reverse Proxy와
                AP 서버를 실행해서 역할 분담하여 리소스 효율을 높임




13년 4월 7일 일요일
서버가 1대일 경우

                     동일한 호스트 내에 Reverse Proxy와
                AP 서버를 실행해서 역할 분담하여 리소스 효율을 높임


                     Reverse Proxy를 도입하지
                       않아야할 이유는 없다!


13년 4월 7일 일요일
아파치를 사용한
                      Reverse Proxy의 도입
                • Pre-fork 모델보다 Work 모델 사용
                • 시스템 사양을 고려한 최대 프로세스/스레드
                  수 결정

                • Keep-Alive 설정
                • 필요한 모듈 로드
                • Rewrite Rule 설정
13년 4월 7일 일요일
ETC.

                • 진보된 Re-write Rule 설정
                 • 특정 호스트로부터 요청 금지
                 • 로봇으로부터의 요청에 대해 캐시 서버 경유
                • AP 서버가 여러대인 경우 부하 분산
                 • mod_proxy_balancer를 사용하여 분산
                 • Reverse Proxy와 AP 사이에 LVS를 사용
13년 4월 7일 일요일
2.2. 캐시 서버 도입
                  (Squid, Memcached)




13년 4월 7일 일요일
HTTP 프로토콜

                • 느슨한 프로토콜
                • State-less
                • 프로토콜 레벨에서 캐시 기능을 내장
                 • Client: If-Modified-Since
                 • Server: 304 Not modified

13년 4월 7일 일요일
Squid 캐시 서버

                • HTTP, HTTPS, FTP 등에서 이용되는 오픈소
                 스 캐시 서버

                • Squid를 사용할 경우 임의의 웹 시스템에 캐시
                 를 내장 가능

                • 일반적으로 클라이언트가 서버의 문서를 다운
                 로드한 것을 캐시할 목적으로 사용



13년 4월 7일 일요일
Squid의 사용 - Proxy




                클라이언트가 다운로드한 문서를 Squid가 캐싱한 후,
                 또 다른 클라이언트가 같은 문서를 수신할때 사용
                - 네트워크 대역이 절감되고, 클라이언트에서 고속으로 이용 가능
                  ex) CDN ...


13년 4월 7일 일요일
Squid의 사용 -
                        Reverse Proxy



                                서버의 부하를 분산
                1. Squid는 클라이언트의 요청이 있으면 백엔드 서버로 질의
                2. 서버로부터 수신한 문서를 Squid가 자신의 로컬 영역에 캐시
                3. 다른 클라이언트로부터 요청이 있으면 캐시의 유효성을 확인 후 캐시를 반환
                 - 단 시간 내에 클라리언트들로부터 동일한 요청이 있을 경우 백엔드 서버에는 하나의 요청만 도달


13년 4월 7일 일요일
Squid는 무엇을
                            캐싱 하는가?
                •   HTTP 프로토콜의 캐시 기능을 전제

                    •   URL이 주어진 문서는 기본적으로 캐싱 가능

                •   동작

                    •   정적인 문서: 상당히 좋은 효율로 캐시, 원본 문서가 변경되면 캐시를 갱신

                    •   동적인 문서: 일정 주기로 캐시를 갱신

                •   이슈: 상태를 갖는 동적 문서의 캐싱이 어려움

                    •   같은 URL이라도 쿠키에 따라 사용자의 출력이 다름

                    •   state-less를 기반으로 하기 때문에 이를 해결 하기 어렵다

                    •   HTTP 레벨에서 캐시가 어려울 경우, 애플리케이션 프로그램 레벨에서 캐
                        시를 사용 (Ex: Memcached)




13년 4월 7일 일요일
Memcached에 의한
                             캐시
                •   C언어로 작성된 고속 네트워크에 알맞은 분산 캐시 서버

                •   스토리지로 OS 메모리를 이용

                •   서버에서 Memcached를 실행하고 전용 클라이언트 라이브러리를 이
                    용해서 캐시 서버와 통신

                    •   다수의 언어 지원: Java, C, C++, Perl, Ruby, PHP ...

                •   프로그램 내부에서 이용하는 방식

                    •   Squid는 HTTP 프로토콜을 사용한 완성된 솔루션

                    •   프로그램 내에서 코딩 절차 필요

                •   key-value 구조로 저장하며, key만 알고 있으면 다른 프로그램에서도
                    접근 가능



13년 4월 7일 일요일

Contenu connexe

Tendances

Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability흥배 최
 
Redis basicandroadmap
Redis basicandroadmapRedis basicandroadmap
Redis basicandroadmapDaeMyung Kang
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션흥배 최
 
다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화Choonghyun Yang
 
[2B5]nBase-ARC Redis Cluster
[2B5]nBase-ARC Redis Cluster[2B5]nBase-ARC Redis Cluster
[2B5]nBase-ARC Redis ClusterNAVER D2
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술NAVER D2
 
Apache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloopsApache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloopsSungMin OH
 
Kafka introduce kr
Kafka introduce krKafka introduce kr
Kafka introduce krJung soo Ahn
 
Journey for provisioning 20k over rbd volumes to kubernetes with openstack
Journey for provisioning 20k over rbd volumes to kubernetes with openstackJourney for provisioning 20k over rbd volumes to kubernetes with openstack
Journey for provisioning 20k over rbd volumes to kubernetes with openstackJunyoung Sung
 
KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론Hyunjik Bae
 
[오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기 [오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기 Chanyeol yoon
 
DNS Express
DNS ExpressDNS Express
DNS Expressitian-f5
 
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민Hyunjik Bae
 
웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드Hyunjik Bae
 
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)Hyunmin Lee
 

Tendances (20)

Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 
Redis basicandroadmap
Redis basicandroadmapRedis basicandroadmap
Redis basicandroadmap
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화
 
Redis on AWS
Redis on AWSRedis on AWS
Redis on AWS
 
[2B5]nBase-ARC Redis Cluster
[2B5]nBase-ARC Redis Cluster[2B5]nBase-ARC Redis Cluster
[2B5]nBase-ARC Redis Cluster
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술
 
Redis edu 3
Redis edu 3Redis edu 3
Redis edu 3
 
Apache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloopsApache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloops
 
Kafka introduce kr
Kafka introduce krKafka introduce kr
Kafka introduce kr
 
Journey for provisioning 20k over rbd volumes to kubernetes with openstack
Journey for provisioning 20k over rbd volumes to kubernetes with openstackJourney for provisioning 20k over rbd volumes to kubernetes with openstack
Journey for provisioning 20k over rbd volumes to kubernetes with openstack
 
KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
[오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기 [오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기
 
DNS Express
DNS ExpressDNS Express
DNS Express
 
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
 
Redis edu 4
Redis edu 4Redis edu 4
Redis edu 4
 
Gfs Kyu
Gfs KyuGfs Kyu
Gfs Kyu
 
웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드
 
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
 

En vedette

자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9HyeonSeok Choi
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트HyeonSeok Choi
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6HyeonSeok Choi
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템HyeonSeok Choi
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3HyeonSeok Choi
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1HyeonSeok Choi
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9HyeonSeok Choi
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatHyeonSeok Choi
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화HyeonSeok Choi
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14HyeonSeok Choi
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다HyeonSeok Choi
 
자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2HyeonSeok Choi
 
컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7HyeonSeok Choi
 
HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HyeonSeok Choi
 
Abstract factory petterns
Abstract factory petternsAbstract factory petterns
Abstract factory petternsHyeonSeok Choi
 

En vedette (20)

HTTPS
HTTPSHTTPS
HTTPS
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9
 
C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
Code1_2
Code1_2Code1_2
Code1_2
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.Microformat
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다
 
자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2
 
컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6
 
실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7
 
HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HTTP 완벽가이드 16장
HTTP 완벽가이드 16장
 
Abstract factory petterns
Abstract factory petternsAbstract factory petterns
Abstract factory petterns
 

Similaire à 서버인프라를지탱하는기술2_1-2

확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안 확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안 IMQA
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인VMware Tanzu Korea
 
600.Troubleshooting Patterns
600.Troubleshooting Patterns600.Troubleshooting Patterns
600.Troubleshooting PatternsOpennaru, inc.
 
[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How ToJi-Woong Choi
 
20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈ymtech
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약kidoki
 
Scalable web architecture and distributed systems
Scalable web architecture and distributed systemsScalable web architecture and distributed systems
Scalable web architecture and distributed systemseva
 
Scalable web architecture and distributed systems
Scalable web architecture and distributed systemsScalable web architecture and distributed systems
Scalable web architecture and distributed systems현종 김
 
build a linux webhosting server
build a linux webhosting serverbuild a linux webhosting server
build a linux webhosting server정현 윤
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?nexusz99
 
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XpressEngine
 
spark database Service
spark database Servicespark database Service
spark database Service창언 정
 
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Kyunghun Jeon
 
[JCO 13th] 클라우드 서버를 활용한 서비스 개발 실습 V1.3
[JCO 13th] 클라우드 서버를 활용한 서비스 개발 실습 V1.3[JCO 13th] 클라우드 서버를 활용한 서비스 개발 실습 V1.3
[JCO 13th] 클라우드 서버를 활용한 서비스 개발 실습 V1.3Kenu, GwangNam Heo
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03Changyol BAEK
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템tcaesvk
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. InfinispanHyeonSeok Choi
 

Similaire à 서버인프라를지탱하는기술2_1-2 (20)

확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안 확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
 
600.Troubleshooting Patterns
600.Troubleshooting Patterns600.Troubleshooting Patterns
600.Troubleshooting Patterns
 
[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To
 
20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약
 
Scalable web architecture and distributed systems
Scalable web architecture and distributed systemsScalable web architecture and distributed systems
Scalable web architecture and distributed systems
 
Scalable web architecture and distributed systems
Scalable web architecture and distributed systemsScalable web architecture and distributed systems
Scalable web architecture and distributed systems
 
build a linux webhosting server
build a linux webhosting serverbuild a linux webhosting server
build a linux webhosting server
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
 
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
 
spark database Service
spark database Servicespark database Service
spark database Service
 
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
 
[JCO 13th] 클라우드 서버를 활용한 서비스 개발 실습 V1.3
[JCO 13th] 클라우드 서버를 활용한 서비스 개발 실습 V1.3[JCO 13th] 클라우드 서버를 활용한 서비스 개발 실습 V1.3
[JCO 13th] 클라우드 서버를 활용한 서비스 개발 실습 V1.3
 
L4교육자료
L4교육자료L4교육자료
L4교육자료
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03
 
CDN overview
CDN overviewCDN overview
CDN overview
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan
 
LTM
LTMLTM
LTM
 

Plus de HyeonSeok Choi

밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05HyeonSeok Choi
 
밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2HyeonSeok Choi
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2HyeonSeok Choi
 
알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04HyeonSeok Choi
 
딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04HyeonSeok Choi
 
밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05HyeonSeok Choi
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성HyeonSeok Choi
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8HyeonSeok Choi
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaHyeonSeok Choi
 
실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1HyeonSeok Choi
 
HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HyeonSeok Choi
 
HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HyeonSeok Choi
 
HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HyeonSeok Choi
 

Plus de HyeonSeok Choi (20)

밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05
 
밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2
 
알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04
 
딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04
 
밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
Bounded Context
Bounded ContextBounded Context
Bounded Context
 
DDD Repository
DDD RepositoryDDD Repository
DDD Repository
 
DDD Start Ch#3
DDD Start Ch#3DDD Start Ch#3
DDD Start Ch#3
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, Kibana
 
실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1
 
HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HTTP 완벽가이드 21장
HTTP 완벽가이드 21장
 
HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.
 
HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.
 
Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
 
Pair RDD - Spark
Pair RDD - SparkPair RDD - Spark
Pair RDD - Spark
 

서버인프라를지탱하는기술2_1-2

  • 1. 서버/인프라를 지탱하는 기술 Ch. 2 한 단계 높은 서버 인프라 기술 아꿈사 chois79 13년 4월 7일 일요일
  • 2. 2.1. 리버스 프록시 도입 (아파치 모듈) 13년 4월 7일 일요일
  • 3. 부하 분산 (Load Balancing) 앞 장에서는? L4를 사용하여 TCP 패킷 레벨의 부하를 분산 이 장에서는? Proxy를 사용하여 좀 더 높은 수준(L7: 어플리케이션)으로 부하를 분산 13년 4월 7일 일요일
  • 4. Proxy? 사전적 의미: 대리, 대리인, 대용물 13년 4월 7일 일요일
  • 5. HTTP Proxy? PC 사용자와 인터넷 사이에서 중계자 역할을 수행 13년 4월 7일 일요일
  • 6. Why to use HTTP Proxy? 보안, 성능, 전후 처리 ... 13년 4월 7일 일요일
  • 7. Reverse Proxy? 인터넷과 서버 사이에 놓여서 요청을 대리로 처리 13년 4월 7일 일요일
  • 8. Reverse Proxy 도입의 이점 • HTTP 요청의 내용에 따라 시스템의 동작 제어 • 시스템 전체의 메모리 사용효율 향상 • 웹 서버가 응답하는 데이터의 버퍼링 역할 13년 4월 7일 일요일
  • 9. 요청의 내용에 따라 시스템의 동작 제어 • 요청 URL에 각기 다른 서버에 분배 가능 • IP주소를 이용한 제어 ex) 접속 IP에 따라 특정 경로 접속 제한 • User-Agent에 의한 제어 ex) 수집 봇의 경우 캐쉬된 페이지 사용 • URL 다시 쓰기 ex) short url 13년 4월 7일 일요일
  • 10. 시스템 전체의 메모리 사용효율 향상 동적 컨텐츠를 생성하는 AP Server(Application Server)와 웹 서버를 분리하여 사용함으로써 메모리 효율성을 향상 시킴 13년 4월 7일 일요일
  • 11. 일반적인 AP 서버의 특징 • AP Server 는 많은 메모리를 사용 사용된 프로그램을 메모리에 상주시켜 응답 시간을 높임 ex) Java, mod_perl, mod_php • 일반적으로 하나의 요청당 하나의 프로세스/스레드를 사용 어플리케이션 설계가 쉽고 편함 13년 4월 7일 일요일
  • 12. AP 서버에서 모든 요청 처리 동적으로 생성된 페이지 내에 이미지가 30개 정도일 경우 동적 요청 1회 + 정적 요청 30회 30회의 정적 요청에도 대량의 메모리 소비 - 동일한 프로세스 및 스레드로 처리 됨 13년 4월 7일 일요일
  • 13. 서버를 분할할 경우 정적 컨텐츠는 메모리 소비량이 적은 웹 서버가 처리 시스템 전체의 메모리 사용 효율이 높아짐. • 요청된 URL이 정적 컨텐츠 경로일 경우 웹 서버로 • 그 밖의 URL일 경우 동적 컨텐츠 요청이므로 AP 서버로 13년 4월 7일 일요일
  • 14. 2대의 서버로 서비스할 경우 Reverse Proxy가 웹 서버이므로 정적 컨텐츠를 직접 처리 13년 4월 7일 일요일
  • 15. 웹 서버가 응답하는 데이터의 버퍼링 역할 HTTP Keep-alive? 특정 클라이언트가 한번에 다수의 컨텐츠를 동일한 서버로 부터 얻고자 할 경우 사용 • 장점: Connection에 대한 오버헤드를 줄임 • 단점: 웹 서버에 부하를 야기 프로세스가 일정시간 동안 클라이언트의 응답을 위해서 점유됨 13년 4월 7일 일요일
  • 16. Keep-Alive를 ON할 경우 다수의 스레드가 Keep-Alive를 위해 소비되어 추가적인 클라이언트의 요청을 처리 못함 OFF 할 경우 클라이언트에서 볼때 체감 속도가 저하 됨 13년 4월 7일 일요일
  • 17. Keep-Alive를 처리를 분리 Reverse Proxy 역할을 하는 서버는 프로세스당 메모리 소비량이 많지 않음 • 클라이언트와 Reverse Proxy: Keep Alive ON • Reverse Proxy와 AP 서버: Keep Alive OFF 13년 4월 7일 일요일
  • 18. 아파치 모듈을 이용한 처리의 제어 Reverse Proxy 로 아파치를 선택한 경우 모듈을 내장해서 전후 처리가 가능 • mod_deflate: AP 서버의 응답을 압축 • mode_ssl: AP 서버의 응답을 SSL로 암호화 13년 4월 7일 일요일
  • 19. 서버가 1대일 경우 동일한 호스트 내에 Reverse Proxy와 AP 서버를 실행해서 역할 분담하여 리소스 효율을 높임 13년 4월 7일 일요일
  • 20. 서버가 1대일 경우 동일한 호스트 내에 Reverse Proxy와 AP 서버를 실행해서 역할 분담하여 리소스 효율을 높임 Reverse Proxy를 도입하지 않아야할 이유는 없다! 13년 4월 7일 일요일
  • 21. 아파치를 사용한 Reverse Proxy의 도입 • Pre-fork 모델보다 Work 모델 사용 • 시스템 사양을 고려한 최대 프로세스/스레드 수 결정 • Keep-Alive 설정 • 필요한 모듈 로드 • Rewrite Rule 설정 13년 4월 7일 일요일
  • 22. ETC. • 진보된 Re-write Rule 설정 • 특정 호스트로부터 요청 금지 • 로봇으로부터의 요청에 대해 캐시 서버 경유 • AP 서버가 여러대인 경우 부하 분산 • mod_proxy_balancer를 사용하여 분산 • Reverse Proxy와 AP 사이에 LVS를 사용 13년 4월 7일 일요일
  • 23. 2.2. 캐시 서버 도입 (Squid, Memcached) 13년 4월 7일 일요일
  • 24. HTTP 프로토콜 • 느슨한 프로토콜 • State-less • 프로토콜 레벨에서 캐시 기능을 내장 • Client: If-Modified-Since • Server: 304 Not modified 13년 4월 7일 일요일
  • 25. Squid 캐시 서버 • HTTP, HTTPS, FTP 등에서 이용되는 오픈소 스 캐시 서버 • Squid를 사용할 경우 임의의 웹 시스템에 캐시 를 내장 가능 • 일반적으로 클라이언트가 서버의 문서를 다운 로드한 것을 캐시할 목적으로 사용 13년 4월 7일 일요일
  • 26. Squid의 사용 - Proxy 클라이언트가 다운로드한 문서를 Squid가 캐싱한 후, 또 다른 클라이언트가 같은 문서를 수신할때 사용 - 네트워크 대역이 절감되고, 클라이언트에서 고속으로 이용 가능 ex) CDN ... 13년 4월 7일 일요일
  • 27. Squid의 사용 - Reverse Proxy 서버의 부하를 분산 1. Squid는 클라이언트의 요청이 있으면 백엔드 서버로 질의 2. 서버로부터 수신한 문서를 Squid가 자신의 로컬 영역에 캐시 3. 다른 클라이언트로부터 요청이 있으면 캐시의 유효성을 확인 후 캐시를 반환 - 단 시간 내에 클라리언트들로부터 동일한 요청이 있을 경우 백엔드 서버에는 하나의 요청만 도달 13년 4월 7일 일요일
  • 28. Squid는 무엇을 캐싱 하는가? • HTTP 프로토콜의 캐시 기능을 전제 • URL이 주어진 문서는 기본적으로 캐싱 가능 • 동작 • 정적인 문서: 상당히 좋은 효율로 캐시, 원본 문서가 변경되면 캐시를 갱신 • 동적인 문서: 일정 주기로 캐시를 갱신 • 이슈: 상태를 갖는 동적 문서의 캐싱이 어려움 • 같은 URL이라도 쿠키에 따라 사용자의 출력이 다름 • state-less를 기반으로 하기 때문에 이를 해결 하기 어렵다 • HTTP 레벨에서 캐시가 어려울 경우, 애플리케이션 프로그램 레벨에서 캐 시를 사용 (Ex: Memcached) 13년 4월 7일 일요일
  • 29. Memcached에 의한 캐시 • C언어로 작성된 고속 네트워크에 알맞은 분산 캐시 서버 • 스토리지로 OS 메모리를 이용 • 서버에서 Memcached를 실행하고 전용 클라이언트 라이브러리를 이 용해서 캐시 서버와 통신 • 다수의 언어 지원: Java, C, C++, Perl, Ruby, PHP ... • 프로그램 내부에서 이용하는 방식 • Squid는 HTTP 프로토콜을 사용한 완성된 솔루션 • 프로그램 내에서 코딩 절차 필요 • key-value 구조로 저장하며, key만 알고 있으면 다른 프로그램에서도 접근 가능 13년 4월 7일 일요일