Upload
-
View
122
Download
10
Embed Size (px)
Citation preview
1차용빈����������� ������������������ 김기렴
Mobile����������� ������������������ Backend����������� ������������������ -����������� ������������������ Reactor����������� ������������������ -����������� ������������������ Proactor����������� ������������������ 성능분석
Mobile����������� ������������������ Backend����������� ������������������ -����������� ������������������ Reactor����������� ������������������ -����������� ������������������ Proactor����������� ������������������ 성능분석
차용빈����������� ������������������ 김기렴
2차용빈����������� ������������������ 김기렴
Mobile����������� ������������������ Backend����������� ������������������ -����������� ������������������ Reactor����������� ������������������ -����������� ������������������ Proactor����������� ������������������ 성능분석
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
차용빈����������� ������������������ 김기렴
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
차용빈����������� ������������������ 김기렴
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
차용빈����������� ������������������ 김기렴
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
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
8차용빈����������� ������������������ 김기렴
Mobile����������� ������������������ Backend����������� ������������������ -����������� ������������������ Reactor����������� ������������������ -����������� ������������������ Proactor����������� ������������������ 성능분석
JMeter를����������� ������������������ 이용한����������� ������������������ 성능분석
9차용빈����������� ������������������ 김기렴
Mobile����������� ������������������ Backend����������� ������������������ -����������� ������������������ Reactor����������� ������������������ -����������� ������������������ Proactor����������� ������������������ 성능분석
JMeter를����������� ������������������ 이용한����������� ������������������ 성능분석����������� ������������������ 방법
A 컴퓨터 B 컴퓨터
1SET
2SET
Server jmeter
jmeter Server
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
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는 스레드가 적어 전체적으로 성능이 낮게 측정이 됬다.
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
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 성능보다 좋은 것을 알 수 있다.
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
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성능이 좋아지는 것을 볼 수 있다.
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
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의 성능이 좋아짐을 알 수 있다.
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
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에서는 엄청난 성능차이를 보여주고 있다.
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
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에서 역시 엄청난 성능차이를 보여주고 있다.
17차용빈����������� ������������������ 김기렴
Mobile����������� ������������������ Backend����������� ������������������ -����������� ������������������ Reactor����������� ������������������ -����������� ������������������ Proactor����������� ������������������ 성능분석
END