reactor proactor 성능분석

22
1 차용빈 김기렴 Mobile Backend - Reactor - Proactor 성능분석 Mobile Backend - Reactor - Proactor 성능분석 차용빈 김기렴

Upload: -

Post on 19-Jul-2015

121 views

Category:

Technology


10 download

TRANSCRIPT

Page 1: Reactor Proactor 성능분석

1차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

차용빈����������� ������������������  김기렴

Page 2: Reactor Proactor 성능분석

2차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Reactor����������� ������������������  /����������� ������������������  Proactor

Page 3: Reactor Proactor 성능분석

3차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Reactor����������� ������������������  /����������� ������������������  Proactor����������� ������������������  Source����������� ������������������  Code����������� ������������������  Analysis

https://github.com/kimkr/Mobile_Server/tree/master/ProReActor

DATA

Reactor

Proactor

ServerInitializer.java Data Handler

Page 4: Reactor Proactor 성능분석

차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Reactor����������� ������������������  /����������� ������������������  Proactor����������� ������������������  Source����������� ������������������  Code����������� ������������������  Analysis

Dispatcher.java Demultiplexer.java EventHandler.javaReactorInterface

FileWriteEventHandler.java

StreamSayHelloEventHandler.java

StreamUpdateProfileEventHandler.java

ThreadPerDispatcher.java

ThreadPoolDispatcher.java

Interface

4

Page 5: Reactor Proactor 성능분석

차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Reactor����������� ������������������  /����������� ������������������  Proactor����������� ������������������  Source����������� ������������������  Code����������� ������������������  Analysis

Dispatcher.java Demultiplexer.java EventHandler.javaReactorInterface

FileWriteEventHandler.java

StreamSayHelloEventHandler.java

StreamUpdateProfileEventHandler.java

ThreadPerDispatcher.java

ThreadPoolDispatcher.java

Interface

한 연결(Socket)에 스레드를 하나씩 할당하여 Demultiplexing하도록 전달

스레드 풀을 생성하여 스레드를 미리 생성 스레드가 동작하는 개수를 제한

소켓으로 넘어온 메시지를 헤더사이즈만큼 읽어서 헤더에 맞는 이벤트 핸들러를 실행

0x5001

0x6001

0x9003

Reactor.java리엑터 방식으로 구현된 서버 구동 클래스 HandleMap과 ServerSocket을 관리 ThreadPer와 ThreadPool방식을 변경하여 적용 가능

5

Page 6: Reactor Proactor 성능분석

차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Reactor����������� ������������������  /����������� ������������������  Proactor����������� ������������������  Source����������� ������������������  Code����������� ������������������  Analysis

Nio- Dispatcher.java

Demultiplexer.java EventHandler.javaProactor

Interface

NioFileWriteEventHandler.java

NioStreamSayHelloEventHandler.java

NioStreamUpdateProfileEventHandler.java

Interface

6

Page 7: Reactor Proactor 성능분석

7차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Reactor����������� ������������������  /����������� ������������������  Proactor����������� ������������������  Source����������� ������������������  Code����������� ������������������  Analysis

Nio- Dispatcher.java

Demultiplexer.java NioEventHandler.javaProactor

Interface

NioFileWriteEventHandler.java

NioStreamSayHelloEventHandler.java

NioStreamUpdateProfileEventHandler.java

Interface

CompletionHandler로 accept를 받아 그 결과를 NioDemultiplexer가 Demultiplexing하도록 전달

CompletionHandler로 넘어온 메시지를 헤더사이즈만큼 읽어서 헤더에 맞는 이벤트 핸들러를 실행

0x5001

0x6001

0x7001

Async Socket channel, Async

Server channel을 사용

”OS에서 비동기 작업” 후 이벤트 통보

Nio Completion Handler

Page 8: Reactor Proactor 성능분석

8차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

JMeter를����������� ������������������  이용한����������� ������������������  성능분석

Page 9: Reactor Proactor 성능분석

9차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

JMeter를����������� ������������������  이용한����������� ������������������  성능분석����������� ������������������  방법

A 컴퓨터 B 컴퓨터

1SET

2SET

Server jmeter

jmeter Server

Page 10: Reactor Proactor 성능분석

10차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘1’

Latency Throughput

0

175

350

525

700

512byte 3kb 200kb 2mb 20mb

678

75662811 95181377

Reactor Proactor

0

35

70

105

140

512byte 3kb 200kb 2mb 20mb

3812

33

82

10

51

70

120123

Reactor Proactor

Page 11: Reactor Proactor 성능분석

11차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘1’

Latency Throughput

0

175

350

525

700

512byte 3kb 200kb 2mb 20mb

678

75662811 95181377

Reactor Proactor

0

35

70

105

140

512byte 3kb 200kb 2mb 20mb

3812

33

82

10

51

70

120123

Reactor Proactor

User Thread 가 1인 경우에는 데이터 크기와 상관없이 Reactor가 성능이 더 좋다. Proactor는 스레드가 적어 전체적으로 성능이 낮게 측정이 됬다.

Page 12: Reactor Proactor 성능분석

12차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Throughput

0

250

500

750

1000

512byte 3kb 200kb 2mb 20mb

975

125563610

372

63411518

Reactor Proactor

0

45

90

135

180

512byte 3kb 200kb 2mb 20mb

121521

69

164

738

7

175

119

Reactor Proactor

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘3’

Latency

Page 13: Reactor Proactor 성능분석

13차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Throughput

0

250

500

750

1000

512byte 3kb 200kb 2mb 20mb

975

125563610

372

63411518

Reactor Proactor

0

45

90

135

180

512byte 3kb 200kb 2mb 20mb

121521

69

164

738

7

175

119

Reactor Proactor

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘3’

Latency

User Thread 가 3인 경우에는 전체적으로 비슷한 성능을 보이고 있지만, 아직까지도 Reactor성능이 Proactor 성능보다 좋은 것을 알 수 있다.

Page 14: Reactor Proactor 성능분석

14차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Throughput

0

175

350

525

700

512byte 3kb 200kb 2mb 20mb

323

103347528

697

129131313

Reactor Proactor

0

75

150

225

300

512byte 3kb 200kb 2mb 20mb

15413058

140

634

227234240

Reactor Proactor

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘5’

Latency

Page 15: Reactor Proactor 성능분석

15차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Throughput

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘5’

Latency

0

175

350

525

700

512byte 3kb 200kb 2mb 20mb

323

103347528

697

129131313

Reactor Proactor

0

75

150

225

300

512byte 3kb 200kb 2mb 20mb

15413058

140

634

227234240

Reactor Proactor

User Thread 가 5인 경우에도 전체적으로 비슷한 성능을 보이고 있지만, 2MB, 20MB, 즉 데이터 크기가 커지면서 Proactor성능이 좋아지는 것을 볼 수 있다.

Page 16: Reactor Proactor 성능분석

16차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Throughput

0

1250

2500

3750

5000

512byte 3kb 200kb 2mb 20mb

4,623

203216176143

2,758

654272726

Reactor Proactor

0

150

300

450

600

512byte 3kb 200kb 2mb 20mb

19285451110

729

507516546

Reactor Proactor

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘20’

Latency

Page 17: Reactor Proactor 성능분석

17차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Throughput

0

150

300

450

600

512byte 3kb 200kb 2mb 20mb

19285451110

729

507516546

Reactor Proactor

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘20’

Latency

0

1250

2500

3750

5000

512byte 3kb 200kb 2mb 20mb

4,623

203216176143

2,758

654272726

Reactor Proactor

512byte ~ 200kb 구간에서는 Reactor 가 좋은 성능을 보여주고 있다. 2mb ~ 20mb 구간에서는 Proactor 가 좋은 성능을 보여주고 있음을 알 수 있다.

즉, User Thread가 크고 Data 크기가 클 수록 Proactor의 성능이 좋아짐을 알 수 있다.

Page 18: Reactor Proactor 성능분석

18차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Throughput

0

3500

7000

10500

14000

512byte 3kb 200kb 2mb 20mb

12,459

1,248721465387

4,587

1,1841205153

Reactor Proactor

0

200

400

600

800

512byte 3kb 200kb 2mb 20mb

2065

379

40115 3140

365

793776

Reactor Proactor

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘50’

Latency

Page 19: Reactor Proactor 성능분석

19차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Throughput

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘50’

Latency

0

3500

7000

10500

14000

512byte 3kb 200kb 2mb 20mb

12,459

1,248721465387

4,587

1,1841205153

Reactor Proactor

0

200

400

600

800

512byte 3kb 200kb 2mb 20mb

2065

379

40115 3140

365

793776

Reactor Proactor

512byte ~ 200kb 구간에서는 Reactor와 Proactor가 비슷한 성능을 보여주고 있다. 2mb는 근소하게 Proactor가 좋은 성능을 보여주다가 20mb에서는 엄청난 성능차이를 보여주고 있다.

Page 20: Reactor Proactor 성능분석

20차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Throughput

0

7500

15000

22500

30000

512byte 3kb 200kb 2mb 20mb

9,843

3,0182,4632,381570

26,468

1,950211186173

Reactor Proactor

0

75

150

225

300

512byte 3kb 200kb 2mb 20mb

35

95

285

41

168

3248

283254264

Reactor Proactor

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘100’

Latency

Page 21: Reactor Proactor 성능분석

21차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

Throughput

0

7500

15000

22500

30000

512byte 3kb 200kb 2mb 20mb

9,843

3,0182,4632,381570

26,468

1,950211186173

Reactor Proactor

User����������� ������������������  Thread����������� ������������������  Is����������� ������������������  ‘100’

Latency

0

75

150

225

300

512byte 3kb 200kb 2mb 20mb

35

95

285

41

168

3248

283254264

Reactor Proactor

512byte ~ 2mb 근소하게 Proactor가 좋은 성능을 보여주다가 20mb에서 역시 엄청난 성능차이를 보여주고 있다.

Page 22: Reactor Proactor 성능분석

17차용빈����������� ������������������  김기렴

Mobile����������� ������������������  Backend����������� ������������������  -����������� ������������������  Reactor����������� ������������������  -����������� ������������������  Proactor����������� ������������������  성능분석

END