오픈소스 소프트웨어 성능 최적화 보고서 2장
Post on 20-May-2015
212 Views
Preview:
TRANSCRIPT
!
오픈소스����������� ������������������ 소프트웨어����������� ������������������ 성능����������� ������������������ 최적화����������� ������������������ 보고서����������� ������������������ Ch.2����������� ������������������ SocialCalc에서����������� ������������������ EtherCalc로
아꿈사����������� ������������������ cecil
EtherCalc
동시����������� ������������������ 편집에����������� ������������������ 최적화된����������� ������������������ 온라인����������� ������������������ 스프레드����������� ������������������ 시트����������� ������������������
!
•Socialtext����������� ������������������ 플랫폼:����������� ������������������ 기업����������� ������������������ 사용자를����������� ������������������ 위한����������� ������������������ Social����������� ������������������ 협동����������� ������������������ 도구����������� ������������������ 모음����������� ������������������
•SocialCalc:����������� ������������������ Socialtext����������� ������������������ 플랫폼의����������� ������������������ 일부로,����������� ������������������ EtherCalc가����������� ������������������ 사용하는����������� ������������������
브라우저����������� ������������������ 내����������� ������������������ 스프레드시트����������� ������������������ 엔진
초기����������� ������������������ SocialCalc
•클라이언트����������� ������������������ 측:����������� ������������������ Javascript����������� ������������������
•서버����������� ������������������ 측:����������� ������������������ Perl
Javascript로����������� ������������������ 수행되는����������� ������������������ 클라이언트����������� ������������������ 측����������� ������������������ 계산이����������� ������������������ Perl로����������� ������������������ 수행되는����������� ������������������ 서버����������� ������������������ 측����������� ������������������ 계산보다����������� ������������������ 느렸지만,����������� ������������������ 네트워크����������� ������������������ 속도보다����������� ������������������ 빠름.(2005����������� ������������������ ->����������� ������������������ 2006)
이����������� ������������������ 장에서����������� ������������������ 주요����������� ������������������ 내용
•SocialCalc를����������� ������������������ 실제����������� ������������������ 배치할때����������� ������������������ 발생한����������� ������������������ 이슈����������� ������������������
•이를����������� ������������������ 개선하기����������� ������������������ 위해����������� ������������������ 적용한����������� ������������������ 아키텍처와����������� ������������������ 그����������� ������������������ 과정
설계상의����������� ������������������ 제약����������� ������������������ 조건
•메모리����������� ������������������
•Event����������� ������������������ 기반����������� ������������������ 서버에서����������� ������������������ 작은����������� ������������������ 용량의����������� ������������������ RAM으로도����������� ������������������ 수천개의����������� ������������������ 동시����������� ������������������ 연결을����������� ������������������ 처리����������� ������������������
•CPU����������� ������������������
•대부분의����������� ������������������ 계산과����������� ������������������ 콘텐츠����������� ������������������ 렌더링은����������� ������������������ 클라이언트쪽����������� ������������������ JavaScript를����������� ������������������ 사용����������� ������������������
•네트워크����������� ������������������
•스프레드����������� ������������������ 시트의����������� ������������������ 내용이����������� ������������������ 아니라����������� ������������������ 연산들을����������� ������������������ 전송함을써����������� ������������������ 네트워크����������� ������������������ 사용량을����������� ������������������ 줄임����������� ������������������
•불안정한����������� ������������������ 네트워크����������� ������������������ 연결을����������� ������������������ 복구할����������� ������������������ 수����������� ������������������ 있어야����������� ������������������ 함.
초기����������� ������������������ 원형•비동기����������� ������������������ 웹서버인����������� ������������������ Feersum����������� ������������������ 기반����������� ������������������
•Feersum����������� ������������������ 위에서����������� ������������������ PocketIO����������� ������������������ •Socket.io����������� ������������������ 기반����������� ������������������
•동작����������� ������������������ •클라이언트는����������� ������������������ 각����������� ������������������ 명령을����������� ������������������ 서버로����������� ������������������ 전송����������� ������������������
•서버는����������� ������������������ 명령을����������� ������������������ 시간값과����������� ������������������ 같이����������� ������������������ 저장����������� ������������������
•클라이언트����������� ������������������ 접속시����������� ������������������ 단절����������� ������������������ 이후의����������� ������������������ 모든����������� ������������������ 명령을����������� ������������������ 담은����������� ������������������
명령을����������� ������������������ 전송����������� ������������������ (복구����������� ������������������ 가능)
장점:����������� ������������������ 서버쪽����������� ������������������ CPU와����������� ������������������ RAM����������� ������������������ 요구사항을����������� ������������������ 최소화,����������� ������������������ 장애에����������� ������������������ 대한����������� ������������������ 적당한����������� ������������������ 복원����������� ������������������ 능력����������� ������������������ 제공����������� ������������������
단점:����������� ������������������ 명령이����������� ������������������ 많아질����������� ������������������ 경우����������� ������������������ 클라이언트는����������� ������������������ 접속시����������� ������������������ 수천개의����������� ������������������ 명령을����������� ������������������ 재생해야함.
스냅샵����������� ������������������ 메커니즘����������� ������������������ 도입
•동작����������� ������������������ •명령이����������� ������������������ 100개����������� ������������������ 전송될����������� ������������������ 때����������� ������������������ 마다����������� ������������������ 활성화된����������� ������������������ 클
라이언트의����������� ������������������ 상태를����������� ������������������ 점검하여,����������� ������������������ 스냅샷을����������� ������������������ 기록����������� ������������������
•명령은����������� ������������������ 스냅샷����������� ������������������ 이후를����������� ������������������ 기록
장점:����������� ������������������ 새로이����������� ������������������ 접속하는����������� ������������������ 클라이언트는����������� ������������������ 많아야����������� ������������������ 100개의����������� ������������������ 명령을����������� ������������������ 재성����������� ������������������
이슈:클라이언트의����������� ������������������ 업로드����������� ������������������ 대역폭의����������� ������������������ 증가로����������� ������������������ 네트워크����������� ������������������ 성능����������� ������������������ 이슈����������� ������������������ 발생����������� ������������������
원인:����������� ������������������ 서버가����������� ������������������ 스프레드����������� ������������������ 시트����������� ������������������ 명령을����������� ������������������ 실행할����������� ������������������ 능력이����������� ������������������ 없음.����������� ������������������ (스냅샷을����������� ������������������ 클라이언트에서����������� ������������������ 생성)
Node.js로����������� ������������������ 이식•엔진을����������� ������������������ perl로����������� ������������������ 재����������� ������������������ 작성하는����������� ������������������ 것은����������� ������������������ 코드를����������� ������������������
2개����������� ������������������ 유지해야����������� ������������������ 함.����������� ������������������ (비용����������� ������������������ 문제)����������� ������������������
•Node.js로����������� ������������������ 서버를����������� ������������������ 재����������� ������������������ 작성����������� ������������������ •ZappaJS를����������� ������������������ 사용����������� ������������������
•동일한����������� ������������������ 엔진을����������� ������������������ 서버에서����������� ������������������ 사용����������� ������������������
•기능적으로����������� ������������������ 동등한����������� ������������������ 서버를����������� ������������������ 80줄로����������� ������������������ 완성����������� ������������������
•서버에서����������� ������������������ 스프레드����������� ������������������ 시트����������� ������������������ 명령을����������� ������������������ 실행
단점:����������� ������������������ 최대����������� ������������������ Throughput이����������� ������������������ 절반으로����������� ������������������ 줄어듬.����������� ������������������ (서버����������� ������������������ 측에서����������� ������������������ 하는����������� ������������������ 역할이����������� ������������������ 증가)����������� ������������������
����������� ������������������ Feersum:����������� ������������������ 5000����������� ������������������ tps,����������� ������������������ Node.js����������� ������������������ +����������� ������������������ Express:����������� ������������������ 2500����������� ������������������ tps����������� ������������������ ����������� ������������������
But,����������� ������������������ 받아����������� ������������������ 들일만����������� ������������������ 함.����������� ������������������
����������� ������������������ ����������� ������������������ 이후,����������� ������������������ 서버쪽����������� ������������������ SocialCalc����������� ������������������ 스프레드����������� ������������������ 시트����������� ������������������ 갱신에����������� ������������������ 쓰이는����������� ������������������ 대역폭을����������� ������������������ 최소화����������� ������������������ 하는데����������� ������������������ 주력
서버측����������� ������������������ SocialCalc
•jsdom을����������� ������������������ 사용하여����������� ������������������ 클라이언트쪽����������� ������������������ Javascript����������� ������������������ 라이브러리를����������� ������������������ 시뮬레이션����������� ������������������ 된����������� ������������������
브라우저����������� ������������������ 환경에����������� ������������������ 적재����������� ������������������
•각����������� ������������������ 명령은����������� ������������������ 서버의����������� ������������������ SocialCalc����������� ������������������ 컨트롤러에서����������� ������������������ 실행됨����������� ������������������
•서버는����������� ������������������ 갱신된����������� ������������������ 제어기의����������� ������������������ 상태를����������� ������������������ 새로����������� ������������������ 접속한����������� ������������������ 클라이언트에게����������� ������������������ 전송
Node.js����������� ������������������ ����������� ������������������ 프로파일링
•신규����������� ������������������ 요구사항����������� ������������������
•스프레드����������� ������������������ 시트를����������� ������������������ 실시간����������� ������������������ 웹����������� ������������������ 소통량����������� ������������������ 감시����������� ������������������ 시스템을����������� ������������������ 위한����������� ������������������ 프로그래밍����������� ������������������ 가능한����������� ������������������ 시각화����������� ������������������ 엔진으로����������� ������������������ 개조����������� ������������������
•개별칸����������� ������������������ 및����������� ������������������ 스프레트����������� ������������������ 시트에����������� ������������������ 명령을����������� ������������������ 실행할����������� ������������������ 수����������� ������������������ 있는����������� ������������������ REST����������� ������������������ API����������� ������������������ ����������� ������������������ 도입����������� ������������������
•초당����������� ������������������ 수백개의����������� ������������������ REST����������� ������������������ API����������� ������������������ 호출로����������� ������������������ 이슈����������� ������������������ 발생����������� ������������������
•jsdom을����������� ������������������ 사용한����������� ������������������ RenderSheet에서����������� ������������������ 많은����������� ������������������ 시간을����������� ������������������ 소요함,����������� ������������������ 결과적으로����������� ������������������ 서버����������� ������������������ 멈춤.����������� ������������������
•프로파일링에����������� ������������������ 사용한����������� ������������������ 도구����������� ������������������
•Node����������� ������������������ Webkit����������� ������������������ Agent:����������� ������������������ 리모트����������� ������������������ 프로파일링을����������� ������������������ 제공하는����������� ������������������ node.js����������� ������������������ 모듈����������� ������������������
•Apache����������� ������������������ ab:����������� ������������������ 아파치����������� ������������������ 웹서버����������� ������������������ 성능����������� ������������������ 검사����������� ������������������ 도구(Rest����������� ������������������ API호출)����������� ������������������
•Zombie.js:����������� ������������������ 브라우저의����������� ������������������ Action을����������� ������������������ 시뮬레이팅����������� ������������������
•개선:����������� ������������������ jsdom을����������� ������������������ 제거하고,����������� ������������������ HTML����������� ������������������ 내보내기를����������� ������������������ 위한����������� ������������������ 최소한의����������� ������������������ DOM을����������� ������������������ 구현
다중����������� ������������������ 코어����������� ������������������ 규모����������� ������������������ 확장
•신규����������� ������������������ 요구사항����������� ������������������
•다중����������� ������������������ 입주����������� ������������������ 호스팅을����������� ������������������ 위한����������� ������������������ 하나의����������� ������������������ 큰����������� ������������������ 서버로����������� ������������������ 더����������� ������������������ 많은����������� ������������������ 요청을����������� ������������������ 처리����������� ������������������ 해야����������� ������������������ 함.����������� ������������������
•Node.js����������� ������������������ 사용으로����������� ������������������ 인한����������� ������������������ 이슈����������� ������������������
•Node.js는����������� ������������������ 단일����������� ������������������ 프로세스����������� ������������������ 기반이기����������� ������������������ 여분의����������� ������������������ CPU를����������� ������������������ 활용하지����������� ������������������ 못함����������� ������������������
•해결책����������� ������������������
•프로세스����������� ������������������ 기반의����������� ������������������ 멀티����������� ������������������ 코어����������� ������������������ 활용����������� ������������������
•스레드����������� ������������������ 기반의����������� ������������������ 멀티����������� ������������������ 코어����������� ������������������ 활용
프로세스����������� ������������������ 기반의����������� ������������������ 멀티����������� ������������������ 코어����������� ������������������ 활용
•사전����������� ������������������ 분기����������� ������������������ 클러스터����������� ������������������ 서버를����������� ������������������ 이용하여����������� ������������������ 각����������� ������������������ CPU마다����������� ������������������ 프로세스����������� ������������������ 생성����������� ������������������
•단점����������� ������������������ •Socket.io����������� ������������������ 클러스터링과����������� ������������������ RedisStore����������� ������������������ 연동을����������� ������������������ 하려면����������� ������������������ 논리가����������� ������������������ 복잡해����������� ������������������ 짐.����������� ������������������
•모든����������� ������������������ 프로세스가����������� ������������������ CPU를����������� ������������������ 많이����������� ������������������ 소비하는����������� ������������������ 처리에����������� ������������������ 묶여����������� ������������������ 있으면����������� ������������������ 연결이����������� ������������������ 여전히����������� ������������������ 차단됨.
스레드����������� ������������������ 기반의����������� ������������������ 멀티����������� ������������������ 코어����������� ������������������ 활용
•서버쪽����������� ������������������ 스프레드����������� ������������������ 시트마다����������� ������������������ 하나씩의����������� ������������������ 백그라운드����������� ������������������ 스레드를����������� ������������������ 생성����������� ������������������
•이를����������� ������������������ 위해����������� ������������������ W3C의����������� ������������������ Web����������� ������������������ Worker����������� ������������������ API를����������� ������������������ 구현����������� ������������������ •Web����������� ������������������ Worker����������� ������������������ API:����������� ������������������ 스크립트들을����������� ������������������ 백그라운드에서����������� ������������������ 독립적으로����������� ������������������ 실행하는����������� ������������������ 방법을����������� ������������������ 정의
Lessons����������� ������������������ Learned
•구속은����������� ������������������ 자유����������� ������������������
•최악이����������� ������������������ 최선����������� ������������������
•LiveScript의����������� ������������������ 재등장����������� ������������������
•결론
Reference• 테이비시����������� ������������������ 암스트롱����������� ������������������ 엮음.����������� ������������������ 오픈소스����������� ������������������ 소프트웨어����������� ������������������ 성능����������� ������������������ 최적화����������� ������������������ 보고서.����������� ������������������ (류광����������� ������������������ 옮김).����������� ������������������ 경기도����������� ������������������ 파주:����������� ������������������ 제이펍,����������� ������������������ 2014
top related