server

27
서버 만들기 [email protected] 대용량 고속 서버?

Upload: dae-myung-kang

Post on 26-May-2015

889 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Server

서버 만들기 [email protected]

대용량 고속 서버?

Page 2: Server

WARNING! • 해당 문서의 내용은 다음과 같은 사이트에서 얻은 내용입니다.

– http://pl.atyp.us/content/tech/servers.html

– http://www.powerbox.pe.kr/312

Page 3: Server

TIP VS Baseline

첫번째 경기는 39점

두번째 경기는 95점

욲빨!

Page 4: Server

TIP을 알면 점수가 오를 수 있지만, BaseLine 이 없으면 기복이 심해지고,

진짜 실력이 아니다!

Page 5: Server

여기는 BaseLine

Page 6: Server

서버 만들기의 BaseLine

• 모든 근본은 소프트웨어 개발의 근본! • 소프트웨어 개발의 5대 원칙

– SRP(단일 책임 법칙) • 클래스가 하나의 책임만 가진다. 변경되는 이유가 하나의 책임과 연관된다.

– OCP(개방 폐쇄 법칙) • 기능을 추가하기는 쉽게!, 기존 기능을 변경하게 만드는 것은 어렵게.

– LSP(리스코프 치홖 법칙) • 하위 타입은 그것의 Base Type 에 대해서 치홖 가능해야 한다.

– ISP(인터페이스 격리 법칙) • 자신이 필요한 인터페이스만 존재

– DIP(의존 관계 역젂 법칙) • 상위 모듈이 하위 모듈에 의존하지 않도록 Concrete Class 대신에 Interface를 써라!

Page 7: Server

서버 만들기의 BaseLine 2

• Pattern?

– 우리가 POSA2를 공부하려는 이유

– POSA2는 ACE의 구조다!

– 결국 변하는 부분과 그렇지 않은 부분의 분리

Page 8: Server

서버 모델

• 서버 모델이 뭐예요?

– 서버의 목적과, 성능, 안젂성 등의 요구사항에 따라 달라집니다.

Page 9: Server

threading Model?

• Single Process Model

• Multi Process Model

– Preforked Model

– Dynamic

• Multi Thread Model

– Preforked Model

– Dynamic

Page 10: Server

Server Model?

• 의사소통의 수단으로 사용합니다.

• Worker Crew Model

– 하나의 작업을 나눠서 여려명이서!!!, 계산 작업?

• Boss/Worker Model

– Channel(Queue)

– Producer-Consumer

• Consumer 가 하나면 Pipeline Model

• Consumer 가 여러 개면 Boss/Worker

Page 11: Server

Reactor/Proactor 모델은요?

• 가장 많이 듣는 이야기!

– 주로 앞단에서 Event Handling 을 위한 구조

– 목적에 따라서 여러가지 패턴이 조합될 수 있다.

• 특정 패턴이 모든 것을 얘기하지 않습니다.

Page 12: Server

다시 Server 모델

Reactor EH EH

Processor Processor

Page 13: Server

다시 Server 모델

Reactor

ITEM

ITEM

ITEM

ITEM

Worker Worker Worker Worker

Worker EH EH

Reactor EH EH

Processor Processor

Page 14: Server

Server Pattern With POSA2

• Event Handling Patterns – Reactor

– Proactor

– Asynchronous Completion Token

– Acceptor-Connector

• Concurrency Patterns – Active Object

– Monitor Object

– Half-Sync/Half-Async

– Reader-Followers

Page 15: Server

간략한 ACE 소개

• POSA2 저자가 만들었어요.

• OPEN SOURCE

Page 16: Server

여기부터는 TIP

Page 17: Server

서버 만들기의 TIP

• Data Copies

• Context Switches

• Memory Allocation

• Lock Contention

Page 18: Server

Data Copies

• Data Copy가 많을 수록 괜히 CPU를 낭비하게 된다.

• 그럼 어떻게?

– Socket Zero Buffer?(효과는 미비?)

– 최소한의 데이터 복사만 일어나도록 사용

Page 19: Server

Context Switches

• Thread는 Light Weight Process?

• 그러나 Thread의 Context Switch 가 자주 일어나면 점점 성능은 떨어진다.

• 2n+1 등의 공식이 있지만, 실제로는 해당 수치는 테스트로 검증해야 한다.

Page 20: Server

Memory Allocation

• 메모리 Pool을 이용하는 것이 좋다.

• 아니면 미리 할당, 한방에 필요한 만큼 모두 할당 한다.

• 자주 할당하는 것을 피하는 것이 좋다.

Page 21: Server

Lock Contention

• Lock이 빈번하면 속도가 느리다.

• 그러나 안정성을 위해서 필요

• 최대한 락이 필요없는 구조로 설계

• 하지만 필요하다면 써야한다.

• Lock-Free, Wait-Free 방식도 알아보자

Page 22: Server

서버 만들기의 TIP 2 - 1

• Just Network, Memory, CPU

– HDD is slow!( Not use Slow I/O )

– HDD -> SSD

• Thread and Process Count

– 적젃한 비율은 실험으로 발견

• Use Resource POOL

• Use Cache( Be Higher Cache Hit )

• Use Compression( Low CPU Using and High Memory Use)

Page 23: Server

놓치기 쉬운 것들! 그리고 개발자들이 잘 신경 쓰지 않는 것들!

Page 24: Server

코드가 전부는 아니다.

• 서버의 물리적 구조

• 얼마 만큼의 트래픽이 발생할 까?

– 스위치의 밴드위스?

• 당신의 서버에 사용자가 많다면 스위치가 못버틸 수도 있다.

– 안정성(스위치, 라우터 2중화)

– FailOver 는 어떻게?

Page 25: Server

물리적 Deploy: 장애에 대한 이중화

외부 인터넷

ROUTE ROUTE

Switch Switch

Server Server Server Server

Page 26: Server

적절한 로그가 필요하다.

• 버그를 확인하기 위해서!!!

• 더욱 더 중요한!!!

– 사용자의 요청 처리용!!!(많은 정보가 필요하다)

• Log4j 등과 같은 툴의 이용

– Log4plus, Log4cxx, Log4cpp

Page 27: Server

적절한 로그가 필요하다.

• [2010/11/20 08:30:12] 127.0.0.1 charsyam LOGIN

• [2010/11/20 08:30:13] 127.0.0.1 charsyam GET_ITEM SWORD 100

• [2010/11/20 08:30:15] 127.0.0.1 charsyam GET_ITEM GOLD 100

• [2010/11/20 08:32:12] 127.0.0.1 charsyam CHANGE_ITEM jinuki79 SWORD 100 GOLD 2000

• [2010/11/20 08:35:12] 127.0.0.1 charsyam LOGOUT

• 너무 많으면 중요한 작업이라도 꼭 남겨야 합니다.(이건 기획과 협의)