Giter VIP home page Giter VIP logo

pitt's Introduction

PITT

logo

Structure

logo

Implementation detail

remaining works

  • 헤더 처리 (connection, last-modified)
    • handle_connection 수정하기
  • socket close 제대로 하기
  • uri access 제한 maybe
  • Cache : memory 제한 필요
  • read buffer 확장, request timeout
  • Task의 결과가 새로운 event로 공급되어 event loop내에서 처리되도록 구현 (양방향 통신)
  • Benchmarking
    • AWS 열기
    • Node.js Server 구축
    • Apache Server 구축
    • JMeter로 benchmark

Documents

watch /Documents

Readings

Refer to Issue #1

TODOs : tentative

  • Step 1
    • implementing basic server-client model
    • Event Queue
    • HTTP parser : until 10/22
  • Step 2
    • Event definition: until 10/24
    • Event Loop Implementation : until 11/9
    • HTTP response composition & Interpreter : until 11/16 at 11/30
    • Main server execution? : until 11/23 at 11/30
    • debugging : until 11/30
  • Step 3
    • Cacheing : until 12/7?
    • Benchmark : until 12/14

Benchmark

AWS EC2 : 8GiB RAM, ubuntu 18.04 in AWS, java, node, apache2, jmeter installed apache server not yet structured

PITT Server

http://ec2-3-17-77-2.us-east-2.compute.amazonaws.com:1111

  • Directory location is data/
  • main page setting : data/index.html

Apache Server

http://ec2-3-17-77-2.us-east-2.compute.amazonaws.com/

  • Directory location is /var/www/html

Node.js Server

http://ec2-3-17-77-2.us-east-2.compute.amazonaws.com:3000

  • prerequisite : PITT/express_server$ npm install
  • Directory location is node_server/views/

AWS

ec2-3-17-77-2.us-east-2.compute.amazonaws.com

JMeter

Windows 10, 16GiB RAM. jmeter GUI mode

killing background

jobs
kill -9 %number (e.g. kill -9 %2)

pitt's People

Contributors

tjdans1114 avatar monchana avatar dungguk avatar

Stargazers

Woobin Park avatar

Forkers

monchana

pitt's Issues

References

기말 일정

최종발표는 중간 발표 때 공지했던대로 12월 17일 (월) 에 있을 예정입니다.

최종발표 장소는 중간발표와 동일한 302동 308호로 예정되어 있습니다.

시간은 오전 10시 부터 ~ (끝나는 시간은 모든 조의 평가가 끝날 때 까지입니다.) 
일정이 있으신 분들은 일정을 소화하고 다시 발표장으로 오시면 됩니다.

이번에는 시간별로 발표하는 세션을 두도록 하겠습니다. 자세한 사항은 추후에 공지하도록 하겠습니다.

최종 발표가 예정된 일정보다 미뤄졌지만 기존의 최종발표일인 14일 까지 프로젝트를 완료하시어 회사 담당자 분과 공유를 하셔야합니다.

회사 담당자 분께 회사 평가를 12월 19일 까지 받을 예정이기 때문에 반드시 프로젝트의 최종 성과를 회사 담당자 분과 최종발표 이전에 공유하도록 하시기 바랍니다.

최종발표 전 교수님과 면담을 원하는 조는 12월 7일 (금) 에 면담 일정을 잡으시면 됩니다. 면담이 필요하신 조들은 제게 메일을 주셔서 면담 일정을 잡으시기 바랍니다.

연구원님 문의 사항

  1. apache , node js 서버와 벤치마킹 할건데, 티맥스 측에서 만들어 둔 서버들로 진행하는지? 아니면 우리가 만드는지. (도움을 주실 수 있는지?)
  2. "read buffer 확장"이 뭔가요?? (평가표 참조)
  3. Task의 결과가 새로운 event로 공급되어 event loop내에서 처리되도록 구현 (양방향 통신)를 FINISHED를 enqueue해서 구현했는데, server에 적당히 log를 찍는 것 만으로 충분한지.
  4. 코드리뷰?
  5. ...

Progress

Markdown Less Pretty
Still renders nicely
1 2 3
event loop의 구현 Remote client (Web Browser)로 부터의 연결을 받아서 기본적인 Network Event를 처리할 수 있는 로직의 구현 Remote client의 연결을 받아들이고 거기에 읽거나 쓰기 위한 기본적인 구현이 되어있다. 15
  Remote client의 연결을 받아들이고 거기에 읽거나 쓰기 위한 구현이 되어있으나, event loop에 적절치 않은 방식으로 되어있다. 7
  Remote client의 연결을 받아들이지 못하거나 읽기/쓰기에 관한 구현이 되어있지 않다. 0
  다수의 client로부터의 연결을 동시에 처리하기 위해 필요한 selector와 event loop의 구조 이해 및 구현 selector를 사용한 multiplexing, non-blocking i/o, buffering 대해서 이해하고 이들이 모두 event loop에 구현되어있다. 15
  selector를 사용한 multiplexing 및 non-blocking i/o가 구현되어있다. 10
  selector를 사용한 multiplexing 및 i/o가 구현되어있으나 non-blocking 방식을 사용하지 않았다. 5
  비정상적인 client가 web-server의 동작에 악영향을 미치지 않게 하기 위해 필요한 기법들에 대한 이해 및 구현 비정상적인 client가 event loop에 미치는 영향에 대해서 이해하고 이것으로 인해 전체의 performance에 영향이 가지 않도록 하기 위한 몇가지 기법들에 대해 이해하고 구현한다. (read buffer 확장, request timeout) 2 + 구현 항목당 4점 (총 10점)
  비정상적인 client가 event loop에 미치는 영향에 대해서 이해하고 설명할 수 있다. 2
http 파싱 Web Browser가 보낸 http request를 해석 Web Browser가 보낸 http request header를 파싱하고 Method, URI, Protocol에 대한 정보를 추출하였으며 'Connection' header에 대한 동작을 구현하였다. 또한 http request header의 크기가 사실상 무한히 커질 수 있음을 이해하고 이를 적절히 제한하여 Memory 관련 문제를 회피하기 위한 구현을 하였다. 15
  Web Browser가 보낸 http request header를 파싱하고 Method, URI, Protocol에 대한 정보를 추출하였으며 'Connection' header에 대한 동작을 구현하였다. 12
  Web Browser가 보낸 http request header를 파싱하고 가장 기본적인 요소인 Method, URI, Protocol에 대한 정보를 추출하도록 구현하였다. 9
  Web Browser가 해석할 수 있는 http response를 구성 해석을 마친 http request에 대해서 올바른 http response의 형태가 무엇인지 이해하고 예외 상황들을 고려하여 Web Browser가 해석할 수 있는 응답을 내보낼 수 있다. 200 OK, 302 Not modified, 400 Bad request, 404 Not found, 500 Service unavailable 의 다섯가지 응답 형태를 올바로 구현했다. 구현 항목당 3점 (총 15점)
 
event loop와 thread pool간의 통신 event loop와 thread pool의 역할을 구분하고 필요한 경우에 양자간에 통신을 하는 방법에 대해서 이해하고 구현 event loop내에서 처리하기에 적절하지 않은 Task에 대해서 이해하고 이를 Thread pool에 맡겨서 처리하였고 Task의 결과가 새로운 event로 공급되어 event loop내에서 처리되도록 구현했다. (양방향 통신) 20
  event loop내에서 처리하기에 적절하지 않은 Task에 대해서 이해하고 이를 Thread pool에 맡겨서 처리할 수 있는 부분을 구현하였으나 Task의 완료가 event loop에 통지되지 않았다. (단방향 통신) 12
  event loop내에서 처리하기에 적절하지 않은 Task들에 대해서 이해하고 설명할 수 있으나 이를 구현은 하지 못했다. 4
cache의 구현 Web Browser가 요청한 File에 대해서 매번 디스크에서 이를 읽지 않고 Memory상에 가지고 있다가 바로 응답할 수 있는 cache를 구현 한정된 Memory 공간만을 효율적으로 사용하는 File cache를 구현했다. 5
  File cache를 구현했으나 Memory의 사용에 대한 제한을 두지 않았다. 3
event loop를 사용하는 기존 서비스와의 비교 event loop를 사용하는 대표적인 서비스인 node.js와의 비교 텍스트 형태의 html 페이지를 jmeter를 통하여 반복 호출하는 테스트를 수행하여 node.js와 성능을 비교 node.js보다 더 우수하거나 80% 이상의 성능을 낸다. 5
  40~80% 사이의 성능을 낸다. 3
  1~40% 사이의 성능을 낸다. 1
평가항목 세부평가항목 평가기준 배점 / 채점 평가
event loop의 구현 Remote client (Web Browser)로 부터의 연결을 받아서 기본적인 Network Event를 처리할 수 있는 로직의 구현 Remote client의 연결을 받아들이고 거기에 읽거나 쓰기 위한 기본적인 구현이 되어있다. 15  
  Remote client의 연결을 받아들이고 거기에 읽거나 쓰기 위한 구현이 되어있으나, event loop에 적절치 않은 방식으로 되어있다. 7
  Remote client의 연결을 받아들이지 못하거나 읽기/쓰기에 관한 구현이 되어있지 않다. 0
  다수의 client로부터의 연결을 동시에 처리하기 위해 필요한 selector와 event loop의 구조 이해 및 구현 selector를 사용한 multiplexing, non-blocking i/o, buffering 대해서 이해하고 이들이 모두 event loop에 구현되어있다. 15  
  selector를 사용한 multiplexing 및 non-blocking i/o가 구현되어있다. 10
  selector를 사용한 multiplexing 및 i/o가 구현되어있으나 non-blocking 방식을 사용하지 않았다. 5
  비정상적인 client가 web-server의 동작에 악영향을 미치지 않게 하기 위해 필요한 기법들에 대한 이해 및 구현 비정상적인 client가 event loop에 미치는 영향에 대해서 이해하고 이것으로 인해 전체의 performance에 영향이 가지 않도록 하기 위한 몇가지 기법들에 대해 이해하고 구현한다. (read buffer 확장, request timeout) 2 + 구현 항목당 4점 (총 10점)  
  비정상적인 client가 event loop에 미치는 영향에 대해서 이해하고 설명할 수 있다. 2
http 파싱 Web Browser가 보낸 http request를 해석 Web Browser가 보낸 http request header를 파싱하고 Method, URI, Protocol에 대한 정보를 추출하였으며 'Connection' header에 대한 동작을 구현하였다. 또한 http request header의 크기가 사실상 무한히 커질 수 있음을 이해하고 이를 적절히 제한하여 Memory 관련 문제를 회피하기 위한 구현을 하였다. 15  
  Web Browser가 보낸 http request header를 파싱하고 Method, URI, Protocol에 대한 정보를 추출하였으며 'Connection' header에 대한 동작을 구현하였다. 12
  Web Browser가 보낸 http request header를 파싱하고 가장 기본적인 요소인 Method, URI, Protocol에 대한 정보를 추출하도록 구현하였다. 9
  Web Browser가 해석할 수 있는 http response를 구성 해석을 마친 http request에 대해서 올바른 http response의 형태가 무엇인지 이해하고 예외 상황들을 고려하여 Web Browser가 해석할 수 있는 응답을 내보낼 수 있다. 200 OK, 302 Not modified, 400 Bad request, 404 Not found, 500 Service unavailable 의 다섯가지 응답 형태를 올바로 구현했다. 구현 항목당 3점 (총 15점)  
 
event loop와 thread pool간의 통신 event loop와 thread pool의 역할을 구분하고 필요한 경우에 양자간에 통신을 하는 방법에 대해서 이해하고 구현 event loop내에서 처리하기에 적절하지 않은 Task에 대해서 이해하고 이를 Thread pool에 맡겨서 처리하였고 Task의 결과가 새로운 event로 공급되어 event loop내에서 처리되도록 구현했다. (양방향 통신) 20  
  event loop내에서 처리하기에 적절하지 않은 Task에 대해서 이해하고 이를 Thread pool에 맡겨서 처리할 수 있는 부분을 구현하였으나 Task의 완료가 event loop에 통지되지 않았다. (단방향 통신) 12
  event loop내에서 처리하기에 적절하지 않은 Task들에 대해서 이해하고 설명할 수 있으나 이를 구현은 하지 못했다. 4
cache의 구현 Web Browser가 요청한 File에 대해서 매번 디스크에서 이를 읽지 않고 Memory상에 가지고 있다가 바로 응답할 수 있는 cache를 구현 한정된 Memory 공간만을 효율적으로 사용하는 File cache를 구현했다. 5  
  File cache를 구현했으나 Memory의 사용에 대한 제한을 두지 않았다. 3
event loop를 사용하는 기존 서비스와의 비교 event loop를 사용하는 대표적인 서비스인 node.js와의 비교 텍스트 형태의 html 페이지를 jmeter를 통하여 반복 호출하는 테스트를 수행하여 node.js와 성능을 비교 node.js보다 더 우수하거나 80% 이상의 성능을 낸다. 5  
  40~80% 사이의 성능을 낸다. 3
  1~40% 사이의 성능을 낸다. 1
      총합 0
평가항목 세부평가항목 평가기준 배점 / 채점 평가
event loop의 구현 Remote client (Web Browser)로 부터의 연결을 받아서 기본적인 Network Event를 처리할 수 있는 로직의 구현 Remote client의 연결을 받아들이고 거기에 읽거나 쓰기 위한 기본적인 구현이 되어있다. 15  
  Remote client의 연결을 받아들이고 거기에 읽거나 쓰기 위한 구현이 되어있으나, event loop에 적절치 않은 방식으로 되어있다. 7
  Remote client의 연결을 받아들이지 못하거나 읽기/쓰기에 관한 구현이 되어있지 않다. 0
  다수의 client로부터의 연결을 동시에 처리하기 위해 필요한 selector와 event loop의 구조 이해 및 구현 selector를 사용한 multiplexing, non-blocking i/o, buffering 대해서 이해하고 이들이 모두 event loop에 구현되어있다. 15  
  selector를 사용한 multiplexing 및 non-blocking i/o가 구현되어있다. 10
  selector를 사용한 multiplexing 및 i/o가 구현되어있으나 non-blocking 방식을 사용하지 않았다. 5
  비정상적인 client가 web-server의 동작에 악영향을 미치지 않게 하기 위해 필요한 기법들에 대한 이해 및 구현 비정상적인 client가 event loop에 미치는 영향에 대해서 이해하고 이것으로 인해 전체의 performance에 영향이 가지 않도록 하기 위한 몇가지 기법들에 대해 이해하고 구현한다. (read buffer 확장, request timeout) 2 + 구현 항목당 4점 (총 10점)  
  비정상적인 client가 event loop에 미치는 영향에 대해서 이해하고 설명할 수 있다. 2
http 파싱 Web Browser가 보낸 http request를 해석 Web Browser가 보낸 http request header를 파싱하고 Method, URI, Protocol에 대한 정보를 추출하였으며 'Connection' header에 대한 동작을 구현하였다. 또한 http request header의 크기가 사실상 무한히 커질 수 있음을 이해하고 이를 적절히 제한하여 Memory 관련 문제를 회피하기 위한 구현을 하였다. 15  
  Web Browser가 보낸 http request header를 파싱하고 Method, URI, Protocol에 대한 정보를 추출하였으며 'Connection' header에 대한 동작을 구현하였다. 12
  Web Browser가 보낸 http request header를 파싱하고 가장 기본적인 요소인 Method, URI, Protocol에 대한 정보를 추출하도록 구현하였다. 9
  Web Browser가 해석할 수 있는 http response를 구성 해석을 마친 http request에 대해서 올바른 http response의 형태가 무엇인지 이해하고 예외 상황들을 고려하여 Web Browser가 해석할 수 있는 응답을 내보낼 수 있다. 200 OK, 302 Not modified, 400 Bad request, 404 Not found, 500 Service unavailable 의 다섯가지 응답 형태를 올바로 구현했다. 구현 항목당 3점 (총 15점)  
 
event loop와 thread pool간의 통신 event loop와 thread pool의 역할을 구분하고 필요한 경우에 양자간에 통신을 하는 방법에 대해서 이해하고 구현 event loop내에서 처리하기에 적절하지 않은 Task에 대해서 이해하고 이를 Thread pool에 맡겨서 처리하였고 Task의 결과가 새로운 event로 공급되어 event loop내에서 처리되도록 구현했다. (양방향 통신) 20  
  event loop내에서 처리하기에 적절하지 않은 Task에 대해서 이해하고 이를 Thread pool에 맡겨서 처리할 수 있는 부분을 구현하였으나 Task의 완료가 event loop에 통지되지 않았다. (단방향 통신) 12
  event loop내에서 처리하기에 적절하지 않은 Task들에 대해서 이해하고 설명할 수 있으나 이를 구현은 하지 못했다. 4
cache의 구현 Web Browser가 요청한 File에 대해서 매번 디스크에서 이를 읽지 않고 Memory상에 가지고 있다가 바로 응답할 수 있는 cache를 구현 한정된 Memory 공간만을 효율적으로 사용하는 File cache를 구현했다. 5  
  File cache를 구현했으나 Memory의 사용에 대한 제한을 두지 않았다. 3
event loop를 사용하는 기존 서비스와의 비교 event loop를 사용하는 대표적인 서비스인 node.js와의 비교 텍스트 형태의 html 페이지를 jmeter를 통하여 반복 호출하는 테스트를 수행하여 node.js와 성능을 비교 node.js보다 더 우수하거나 80% 이상의 성능을 낸다. 5  
  40~80% 사이의 성능을 낸다. 3
  1~40% 사이의 성능을 낸다. 1
      총합 0

response Header 양식

Last-Modified: , :: GMT
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT

Connection: keep-alive
Connection: close

Keep-Alive: parameters

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Thu, 11 Aug 2016 15:23:13 GMT
Keep-Alive: timeout=5, max=1000
Last-Modified: Mon, 25 Jul 2016 04:32:39 GMT
Server: Apache

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.