오픈소스 소프트웨어 성능 최적화 보고서 2장

15
오픈소스 소프트웨어 성능 최적화 보고서 Ch.2 SocialCalc에서 EtherCalc로 아꿈사 cecil

Upload: hyeonseok-choi

Post on 20-May-2015

210 views

Category:

Technology


11 download

TRANSCRIPT

Page 1: 오픈소스 소프트웨어 성능 최적화 보고서 2장

!

오픈소스����������� ������������������  소프트웨어����������� ������������������  성능����������� ������������������  최적화����������� ������������������  보고서����������� ������������������  Ch.2����������� ������������������  SocialCalc에서����������� ������������������  EtherCalc로

아꿈사����������� ������������������  cecil

Page 2: 오픈소스 소프트웨어 성능 최적화 보고서 2장

EtherCalc

동시����������� ������������������  편집에����������� ������������������  최적화된����������� ������������������  온라인����������� ������������������  스프레드����������� ������������������  시트����������� ������������������  

!

•Socialtext����������� ������������������  플랫폼:����������� ������������������  기업����������� ������������������  사용자를����������� ������������������  위한����������� ������������������  Social����������� ������������������  협동����������� ������������������  도구����������� ������������������  모음����������� ������������������  

•SocialCalc:����������� ������������������  Socialtext����������� ������������������  플랫폼의����������� ������������������  일부로,����������� ������������������  EtherCalc가����������� ������������������  사용하는����������� ������������������  

브라우저����������� ������������������  내����������� ������������������  스프레드시트����������� ������������������  엔진

Page 3: 오픈소스 소프트웨어 성능 최적화 보고서 2장

초기����������� ������������������  SocialCalc

•클라이언트����������� ������������������  측:����������� ������������������  Javascript����������� ������������������  

•서버����������� ������������������  측:����������� ������������������  Perl

Javascript로����������� ������������������  수행되는����������� ������������������  클라이언트����������� ������������������  측����������� ������������������  계산이����������� ������������������  Perl로����������� ������������������  수행되는����������� ������������������  서버����������� ������������������  측����������� ������������������  계산보다����������� ������������������  느렸지만,����������� ������������������  네트워크����������� ������������������  속도보다����������� ������������������  빠름.(2005����������� ������������������  ->����������� ������������������  2006)

Page 4: 오픈소스 소프트웨어 성능 최적화 보고서 2장

이����������� ������������������  장에서����������� ������������������  주요����������� ������������������  내용

•SocialCalc를����������� ������������������  실제����������� ������������������  배치할때����������� ������������������  발생한����������� ������������������  이슈����������� ������������������  

•이를����������� ������������������  개선하기����������� ������������������  위해����������� ������������������  적용한����������� ������������������  아키텍처와����������� ������������������  그����������� ������������������  과정

Page 5: 오픈소스 소프트웨어 성능 최적화 보고서 2장

설계상의����������� ������������������  제약����������� ������������������  조건

•메모리����������� ������������������  

•Event����������� ������������������  기반����������� ������������������  서버에서����������� ������������������  작은����������� ������������������  용량의����������� ������������������  RAM으로도����������� ������������������  수천개의����������� ������������������  동시����������� ������������������  연결을����������� ������������������  처리����������� ������������������  

•CPU����������� ������������������  

•대부분의����������� ������������������  계산과����������� ������������������  콘텐츠����������� ������������������  렌더링은����������� ������������������  클라이언트쪽����������� ������������������  JavaScript를����������� ������������������  사용����������� ������������������  

•네트워크����������� ������������������  

•스프레드����������� ������������������  시트의����������� ������������������  내용이����������� ������������������  아니라����������� ������������������  연산들을����������� ������������������  전송함을써����������� ������������������  네트워크����������� ������������������  사용량을����������� ������������������  줄임����������� ������������������  

•불안정한����������� ������������������  네트워크����������� ������������������  연결을����������� ������������������  복구할����������� ������������������  수����������� ������������������  있어야����������� ������������������  함.

Page 6: 오픈소스 소프트웨어 성능 최적화 보고서 2장

초기����������� ������������������  원형•비동기����������� ������������������  웹서버인����������� ������������������  Feersum����������� ������������������  기반����������� ������������������  

•Feersum����������� ������������������  위에서����������� ������������������  PocketIO����������� ������������������  •Socket.io����������� ������������������  기반����������� ������������������  

•동작����������� ������������������  •클라이언트는����������� ������������������  각����������� ������������������  명령을����������� ������������������  서버로����������� ������������������  전송����������� ������������������  

•서버는����������� ������������������  명령을����������� ������������������  시간값과����������� ������������������  같이����������� ������������������  저장����������� ������������������  

•클라이언트����������� ������������������  접속시����������� ������������������  단절����������� ������������������  이후의����������� ������������������  모든����������� ������������������  명령을����������� ������������������  담은����������� ������������������  

명령을����������� ������������������  전송����������� ������������������  (복구����������� ������������������  가능)

장점:����������� ������������������  서버쪽����������� ������������������  CPU와����������� ������������������  RAM����������� ������������������  요구사항을����������� ������������������  최소화,����������� ������������������  장애에����������� ������������������  대한����������� ������������������  적당한����������� ������������������  복원����������� ������������������  능력����������� ������������������  제공����������� ������������������  

단점:����������� ������������������  명령이����������� ������������������  많아질����������� ������������������  경우����������� ������������������  클라이언트는����������� ������������������  접속시����������� ������������������  수천개의����������� ������������������  명령을����������� ������������������  재생해야함.

Page 7: 오픈소스 소프트웨어 성능 최적화 보고서 2장

스냅샵����������� ������������������  메커니즘����������� ������������������  도입

•동작����������� ������������������  •명령이����������� ������������������  100개����������� ������������������  전송될����������� ������������������  때����������� ������������������  마다����������� ������������������  활성화된����������� ������������������  클

라이언트의����������� ������������������  상태를����������� ������������������  점검하여,����������� ������������������  스냅샷을����������� ������������������  기록����������� ������������������  

•명령은����������� ������������������  스냅샷����������� ������������������  이후를����������� ������������������  기록

장점:����������� ������������������  새로이����������� ������������������  접속하는����������� ������������������  클라이언트는����������� ������������������  많아야����������� ������������������  100개의����������� ������������������  명령을����������� ������������������  재성����������� ������������������  

이슈:클라이언트의����������� ������������������  업로드����������� ������������������  대역폭의����������� ������������������  증가로����������� ������������������  네트워크����������� ������������������  성능����������� ������������������  이슈����������� ������������������  발생����������� ������������������  

원인:����������� ������������������  서버가����������� ������������������  스프레드����������� ������������������  시트����������� ������������������  명령을����������� ������������������  실행할����������� ������������������  능력이����������� ������������������  없음.����������� ������������������  (스냅샷을����������� ������������������  클라이언트에서����������� ������������������  생성)

Page 8: 오픈소스 소프트웨어 성능 최적화 보고서 2장

Node.js로����������� ������������������  이식•엔진을����������� ������������������  perl로����������� ������������������  재����������� ������������������  작성하는����������� ������������������  것은����������� ������������������  코드를����������� ������������������  

2개����������� ������������������  유지해야����������� ������������������  함.����������� ������������������  (비용����������� ������������������  문제)����������� ������������������  

•Node.js로����������� ������������������  서버를����������� ������������������  재����������� ������������������  작성����������� ������������������  •ZappaJS를����������� ������������������  사용����������� ������������������  

•동일한����������� ������������������  엔진을����������� ������������������  서버에서����������� ������������������  사용����������� ������������������  

•기능적으로����������� ������������������  동등한����������� ������������������  서버를����������� ������������������  80줄로����������� ������������������  완성����������� ������������������  

•서버에서����������� ������������������  스프레드����������� ������������������  시트����������� ������������������  명령을����������� ������������������  실행

단점:����������� ������������������  최대����������� ������������������  Throughput이����������� ������������������  절반으로����������� ������������������  줄어듬.����������� ������������������  (서버����������� ������������������  측에서����������� ������������������  하는����������� ������������������  역할이����������� ������������������  증가)����������� ������������������  

����������� ������������������   Feersum:����������� ������������������  5000����������� ������������������  tps,����������� ������������������  Node.js����������� ������������������  +����������� ������������������  Express:����������� ������������������  2500����������� ������������������  tps����������� ������������������  ����������� ������������������  

But,����������� ������������������  받아����������� ������������������  들일만����������� ������������������  함.����������� ������������������  

����������� ������������������   ����������� ������������������  이후,����������� ������������������  서버쪽����������� ������������������  SocialCalc����������� ������������������  스프레드����������� ������������������  시트����������� ������������������  갱신에����������� ������������������  쓰이는����������� ������������������  대역폭을����������� ������������������  최소화����������� ������������������  하는데����������� ������������������  주력

Page 9: 오픈소스 소프트웨어 성능 최적화 보고서 2장

서버측����������� ������������������  SocialCalc

•jsdom을����������� ������������������  사용하여����������� ������������������  클라이언트쪽����������� ������������������  Javascript����������� ������������������  라이브러리를����������� ������������������  시뮬레이션����������� ������������������  된����������� ������������������  

브라우저����������� ������������������  환경에����������� ������������������  적재����������� ������������������  

•각����������� ������������������  명령은����������� ������������������  서버의����������� ������������������  SocialCalc����������� ������������������  컨트롤러에서����������� ������������������  실행됨����������� ������������������  

•서버는����������� ������������������  갱신된����������� ������������������  제어기의����������� ������������������  상태를����������� ������������������  새로����������� ������������������  접속한����������� ������������������  클라이언트에게����������� ������������������  전송

Page 10: 오픈소스 소프트웨어 성능 최적화 보고서 2장

Node.js����������� ������������������  ����������� ������������������  프로파일링

•신규����������� ������������������  요구사항����������� ������������������  

•스프레드����������� ������������������  시트를����������� ������������������  실시간����������� ������������������  웹����������� ������������������  소통량����������� ������������������  감시����������� ������������������  시스템을����������� ������������������  위한����������� ������������������  프로그래밍����������� ������������������  가능한����������� ������������������  시각화����������� ������������������  엔진으로����������� ������������������  개조����������� ������������������  

•개별칸����������� ������������������  및����������� ������������������  스프레트����������� ������������������  시트에����������� ������������������  명령을����������� ������������������  실행할����������� ������������������  수����������� ������������������  있는����������� ������������������  REST����������� ������������������  API����������� ������������������  ����������� ������������������  도입����������� ������������������  

•초당����������� ������������������  수백개의����������� ������������������  REST����������� ������������������  API����������� ������������������  호출로����������� ������������������  이슈����������� ������������������  발생����������� ������������������  

•jsdom을����������� ������������������  사용한����������� ������������������  RenderSheet에서����������� ������������������  많은����������� ������������������  시간을����������� ������������������  소요함,����������� ������������������  결과적으로����������� ������������������  서버����������� ������������������  멈춤.����������� ������������������  

•프로파일링에����������� ������������������  사용한����������� ������������������  도구����������� ������������������  

•Node����������� ������������������  Webkit����������� ������������������  Agent:����������� ������������������  리모트����������� ������������������  프로파일링을����������� ������������������  제공하는����������� ������������������  node.js����������� ������������������  모듈����������� ������������������  

•Apache����������� ������������������  ab:����������� ������������������  아파치����������� ������������������  웹서버����������� ������������������  성능����������� ������������������  검사����������� ������������������  도구(Rest����������� ������������������  API호출)����������� ������������������  

•Zombie.js:����������� ������������������  브라우저의����������� ������������������  Action을����������� ������������������  시뮬레이팅����������� ������������������  

•개선:����������� ������������������  jsdom을����������� ������������������  제거하고,����������� ������������������  HTML����������� ������������������  내보내기를����������� ������������������  위한����������� ������������������  최소한의����������� ������������������  DOM을����������� ������������������  구현

Page 11: 오픈소스 소프트웨어 성능 최적화 보고서 2장

다중����������� ������������������  코어����������� ������������������  규모����������� ������������������  확장

•신규����������� ������������������  요구사항����������� ������������������  

•다중����������� ������������������  입주����������� ������������������  호스팅을����������� ������������������  위한����������� ������������������  하나의����������� ������������������  큰����������� ������������������  서버로����������� ������������������  더����������� ������������������  많은����������� ������������������  요청을����������� ������������������  처리����������� ������������������  해야����������� ������������������  함.����������� ������������������  

•Node.js����������� ������������������  사용으로����������� ������������������  인한����������� ������������������  이슈����������� ������������������  

•Node.js는����������� ������������������  단일����������� ������������������  프로세스����������� ������������������  기반이기����������� ������������������  여분의����������� ������������������  CPU를����������� ������������������  활용하지����������� ������������������  못함����������� ������������������  

•해결책����������� ������������������  

•프로세스����������� ������������������  기반의����������� ������������������  멀티����������� ������������������  코어����������� ������������������  활용����������� ������������������  

•스레드����������� ������������������  기반의����������� ������������������  멀티����������� ������������������  코어����������� ������������������  활용

Page 12: 오픈소스 소프트웨어 성능 최적화 보고서 2장

프로세스����������� ������������������  기반의����������� ������������������  멀티����������� ������������������  코어����������� ������������������  활용

•사전����������� ������������������  분기����������� ������������������  클러스터����������� ������������������  서버를����������� ������������������  이용하여����������� ������������������  각����������� ������������������  CPU마다����������� ������������������  프로세스����������� ������������������  생성����������� ������������������  

•단점����������� ������������������  •Socket.io����������� ������������������  클러스터링과����������� ������������������  RedisStore����������� ������������������  연동을����������� ������������������  하려면����������� ������������������  논리가����������� ������������������  복잡해����������� ������������������  짐.����������� ������������������  

•모든����������� ������������������  프로세스가����������� ������������������  CPU를����������� ������������������  많이����������� ������������������  소비하는����������� ������������������  처리에����������� ������������������  묶여����������� ������������������  있으면����������� ������������������  연결이����������� ������������������  여전히����������� ������������������  차단됨.

Page 13: 오픈소스 소프트웨어 성능 최적화 보고서 2장

스레드����������� ������������������  기반의����������� ������������������  멀티����������� ������������������  코어����������� ������������������  활용

•서버쪽����������� ������������������  스프레드����������� ������������������  시트마다����������� ������������������  하나씩의����������� ������������������  백그라운드����������� ������������������  스레드를����������� ������������������  생성����������� ������������������  

•이를����������� ������������������  위해����������� ������������������  W3C의����������� ������������������  Web����������� ������������������  Worker����������� ������������������  API를����������� ������������������  구현����������� ������������������  •Web����������� ������������������  Worker����������� ������������������  API:����������� ������������������  스크립트들을����������� ������������������  백그라운드에서����������� ������������������  독립적으로����������� ������������������  실행하는����������� ������������������  방법을����������� ������������������  정의

Page 14: 오픈소스 소프트웨어 성능 최적화 보고서 2장

Lessons����������� ������������������  Learned

•구속은����������� ������������������  자유����������� ������������������  

•최악이����������� ������������������  최선����������� ������������������  

•LiveScript의����������� ������������������  재등장����������� ������������������  

•결론

Page 15: 오픈소스 소프트웨어 성능 최적화 보고서 2장

Reference• 테이비시����������� ������������������  암스트롱����������� ������������������  엮음.����������� ������������������  오픈소스����������� ������������������  소프트웨어����������� ������������������  성능����������� ������������������  최적화����������� ������������������  보고서.����������� ������������������  (류광����������� ������������������  옮김).����������� ������������������  경기도����������� ������������������  파주:����������� ������������������  제이펍,����������� ������������������  2014