웹 컨테이너 디자인
웹 컨테이너를 개발하려면 커뮤니케이션 계층에 대한 지식, 프로그램 언어 수준에 대한 지식 등과 같은 다양한 수준의 많은 기술이 포함되며 사용 가능한 웹 컨테이너는 비교적 큰 시스템이며 명확하게 설명하는 데 오랜 시간이 걸립니다. 이 기사는 웹 컨테이너를 설계하고 구현 아이디어에 대해서만 논의하는 방법을 소개하는 것을 목표로하며 특정 구현이 너무 많지 않습니다. 여러 모듈과 구성 요소로 나눕니다. 각 구성 요소 모듈은 다른 기능을 담당합니다. 다음 그림은 몇 가지 기본 구성 요소를 나열하고 각 구성 요소를 소개합니다.
수신기에 연결하십시오
주요 책임은 클라이언트 소켓 연결이 있는지 듣고 소켓을 수신 한 다음 소켓을 작업 실행자 (스레드 풀)로 넘겨 실행을 수행하는 것입니다. 시스템 하단에서 소켓을 지속적으로 읽고 가능한 한 적은 처리를 한 다음 스레드 풀에 버립니다. 가능한 한 적은 비용을 다룰 필요성을 강조하는 이유는 무엇입니까? 이는 시스템 성능 문제와 관련이 있으며 과도한 처리는 처리량에 심각한 영향을 미칩니다. 일반적으로 하나의 수신기 만 있으므로 (하나의 스레드는 소켓 수신을 담당합니다) 각 수신 프로세스의 길이에 영향을 줄 수 있습니다. 따라서 수신기는 몇 가지 상태 변수 만 유지하고, 유량 제어 게이트의 축적 작동, 서버 소켓의 수신 작업, 수신 된 소켓의 일부 속성을 설정하고, 수신 된 소켓을 스레드 풀에 배치하고, 일부 예외 처리를 유지하는 경우가 거의없고 간단한 작업을 수행합니다. 처리하는 데 시간이 오래 걸리는 다른 논리는 소켓의 기본 데이터를 읽고 HTTP 프로토콜 패킷을 구문 분석하고 클라이언트의 일부 작업에 응답하는 등 스레드 풀에 넘겨집니다.
연결 번호 컨트롤러
기계의 경우 액세스 요청의 총 트래픽은 피크 기간이 있고 서버는 물리적 제한이 있습니다. 웹 서버가 씻겨지지 않도록하려면 보호하고 방지하기 위해 몇 가지 조치를 취해야합니다. 여기의 트래픽은 소켓 연결 수를 제어하여 트래픽을 제어하는 소켓 연결 수에 대해 약간 더 설명해야합니다. 효과적인 방법 중 하나는 흐름 제어를 채택하는 것입니다. 이는 흐름 입구에 게이트를 추가하는 것과 같습니다. 게이트의 크기는 흐름의 크기를 결정합니다. 최대 흐름에 도달하면 게이트가 닫히고 유휴 채널이있을 때까지 수신이 중지됩니다. 카운터는 JDK의 AQS 프레임 워크를 사용하여 구현할 수 있습니다.
소켓 공장
다른 사용 시간마다 다른 보안 수준이 필요할 수 있습니다. 예를 들어, 결제 관련 거래를 할 때는 송금하기 전에 정보를 암호화해야하며, 여기에는 주요 협상 프로세스가 포함되지만 다른 일반적인 경우에는 패킷을 암호화 할 필요가 없습니다. 애플리케이션 계층에 반영하는 것은 HTTP 및 HTTPS를 사용하는 문제입니다.
간단히 말해서, TLS/SSL 프로토콜은 각 통신에 대한 인증 서비스를 제공 하여이 세션의 엔티티 아이덴티티의 합법성을 인증합니다. ② 암호화 서비스를 제공하면 강력한 암호화 메커니즘은 커뮤니케이션 중 메시지가 해독되지 않도록 보장 할 수 있습니다. tamper 변조 방지 서비스를 제공하고 해시 알고리즘을 사용하여 메시지에 서명하고 서명의 확인에 의해 커뮤니케이션 컨텐츠가 변조되지 않도록하십시오.
HTTP 프로토콜은 소켓에 해당하는 반면 HTTPS는 SSLSocket에 해당합니다. 소켓과 SSLSockets를 생성하는 방법은 소켓 공장에 넘겨집니다.
작업 정의기 - 작업
실행할 작업을 정의하고 스레드 풀에 실행할 작업의 종류를 알려줍니다. 이 작업은 주로 소켓 처리 및 클라이언트에 대한 응답, 연결 카운트 카운터 감소 및 소켓을 닫는 세 가지 점으로 나뉩니다. 그 중에서도 소켓 가공이 가장 중요하고 가장 복잡합니다. 여기에는 기본 소켓 바이트 스트림 읽기, HTTP 프로토콜 요청 메시지 (요청 라인 분석, 요청 헤더, 요청 본문 및 기타 정보), 해당 호스트에서 웹 프로젝트의 리소스를 찾아서 처리 결과에 따라 HTTP 프로토콜 응답 메시지를 조립하고 클라이언트에 대한 출력을 조립하는 경로를 얻습니다.
작업 집행자
최대 및 최소 수의 스레드 수를 가진 스레드 풀을 "작업 실행자"라고합니다. 스레드 풀이 작업 대기열을 지속적으로 감지하기 위해 여러 스레드를 시작하는 것으로 간주 될 수 있으며 일단 작업을 실행 해야하는 경우 실행됩니다. 스레드 제한의 최대 및 최소 수 및 최소 스레드 복구 시간 제한, 스레드 풀에 의해 이루어진 거부 조치가 최대 스레드 수가 초과 될 때 등을 거부합니다.
메시지 읽기
클라이언트에서 기본 운영 체제로 패킷을 읽고 버퍼링 메커니즘을 제공하는 데 사용됩니다. 메시지를 Desbuf에 복사하십시오.
메시지 출력
웹 컨테이너로 가공 한 패킷을 운영 체제에 작성하고 버퍼링 메커니즘을 제공하는 데 사용됩니다. 버퍼를 통해 메시지 outputBuf를 운영 체제에 쓰십시오.
입력 필터
이 읽기 과정에서 일부 추가 처리가 필요하며, 이러한 추가 처리는 다른 조건에 따라 다르게 수행 될 수 있습니다. 프로그램 분리 및 확장 프로그램을 고려하면 필터가 소개됩니다. 필터링 작업 후에 만 필터 계층을 통해 Desbuf에 도달 할 수 있습니다. 이 프로세스는 처리 수준을 추가하는 것과 같습니다. 해당 작업은 레벨을 통과 한 후에 수행되며 최종적으로 대상 데이터에 대한 소스 데이터가 완료됩니다.
출력 필터
입력 필터 기능과 유사하며 메시지 출력시 사용됩니다.
메시지 파서
HTTP 프로토콜의 다양한 부분을 구문 분석 할 수있는 기능을 제공합니다.
요청 생성기
객체 지향 아이디어에 따르면, 각 요청 프로세스의 요청과 관련된 속성 및 프로토콜 필드는 요청 객체로 추상화됩니다. 요청 행, 요청 헤더 및 요청 본문의 세 부분이 포함됩니다. 처리 중에 필요한 값은 요청 객체에서 직접 얻을 수 있습니다. 서블릿 표준 구현을위한 편의성을 제공합니다.
응답 생성기
요청에 해당하면 응답 객체 생성기가 필요합니다. 응답 행, 응답 헤더 및 응답 본문의 세 부분이 포함됩니다. 처리 결과의 관련 값은 응답 객체로 직접 설정할 수 있습니다. 서블릿 표준 구현을위한 편의성을 제공합니다.
주소 매퍼
주소 매퍼는 요청 및 리소스를 요구하는 라우터입니다. 요청 된 액세스는 요청하는 클라이언트에 대한 응답 자원을 찾기 위해 경로에 따라 매핑됩니다.
수명주기
추가 모듈화를 위해, 전체 컨테이너에는 많은 구성 요소가 있으며, 이는 다른 순간에 다른 이벤트가 필요할 수 있으며 통합 된 방식으로 모든 구성 요소를 관리하기 위해 수명주기가 필요합니다. 예를 들어, 모든 구성 요소의 시작, 정지 및 종료는 수명주기의 통합 관리와 분리되어 이러한 구성 요소의 수명주기의 관리를 용이하게 할 수 있습니다. 나는 특정 상태에서 무언가가 일어나기 전과 후에 무언가를하고 싶습니까? 수명주기 리스너를 추가하여 우아하게 달성하십시오.
JMX 관리자
시스템 작동 상태 모니터링 및 관리, 서버 성능, 서버 관련 매개 변수 수집, JVM로드, 웹 연결 번호, 스레드 풀, 데이터베이스 연결 풀, 캐시 관리, 구성 파일 리로딩 등의 실시간 성능이 높은 원격 시각적 관리를 제공 할 수 있습니다. 또한 분산 시스템 관리를위한 솔루션을 제공합니다.
웹 로더
Webloader는 웹 응용 프로그램 프로젝트를로드하는 데 사용됩니다. 웹 컨테이너에는 여러 웹 응용 프로그램이 포함될 수 있습니다. LIB와 Servlet 간의 격리를 달성하기 위해서는 다른 클래스 로더, 클래스 로더가 각 웹 애플리케이션에 사용되어야하며, 이러한 클래스 로더는 부모-자식 관계가 아니기 때문에 클래스 격리 효과를 달성하기 위해, 즉 웹 응용 프로그램의 LIB는 다른 웹 애플리케이션에서 사용되지 않습니다.
세션 관리자
세션 관리자는 주로 다음을 포함하여 세션을 관리합니다. 일반적으로 쿠키 또는 URL에는 jssessionID 값이 없으며 SessionID는 SessionID로 재생되어야합니다. ② 많은 클라이언트 세션이 서버에 저장됩니다. 시간 초과 세션의 경우 서버 메모리가 낭비되지 않도록 정기적으로 정리해야합니다. ③ 몇 가지 중요한 세션의 경우 디스크로 지속될 수 있으며 필요할 때 사용하기 위해 메모리에 다시로드 할 수 있습니다.
로그를 실행하십시오
런타임시 경고, 예외 및 오류를 기록하십시오.
액세스 로그
액세스 로그는 일반적으로 클라이언트 IP, 요청 시간, 요청 프로토콜, 요청 방법, 요청 바이트 번호, 응답 코드, 세션 ID, 처리 시간 등을 포함한 클라이언트의 액세스 관련 정보를 기록합니다. 액세스 로그는 방문 사용자 수, 액세스 시간 배포 규칙, 개인 취미 등을 계산할 수 있으며 이러한 데이터가 운영 전략에서 결정을 내릴 수 있습니다.
보안 관리자
웹 프로젝트는 웹 컨테이너 플랫폼에서 실행되며, 이는 플랫폼에 응용 프로그램을 포함시키는 것과 같습니다. 임베디드 프로그램을 정상적으로 실행하려면 플랫폼이 안전하고 정상적으로 실행할 수 있어야합니다. 플랫폼이 임베디드 애플리케이션에 의해 가장 큰 영향을받지 않도록하기 위해, 두 사람은 어느 정도 분리의 영향을 달성합니다. 시작시 정책 파일은 -djava.security.manager -djava.security.policy == web.policy로 지정됩니다.
운영 모니터링 및 원격 관리
웹 컨테이너의 실행 상태를 실시간으로 모니터링하고 원격으로 관리 할 수있는 플랫폼을 제공합니다.
무리
클러스터에는 일반적으로 두 가지 유형의 클러스터가 있습니다. ② 고 가용성 클러스터, 클러스터 통신은 여러 기계를 연결합니다. 이러한 종류의 클러스터는 클러스터의 기계가 실패한 후 자동 전환 또는 트래픽 전송을 통해 전체 클러스터의 외부 가용성을 보장하는 데 더 중점을 둡니다.
일반적으로 웹 요청은 무국적이며 직접 클러스터링 될 수 있지만 세션에는 상태가 포함되며 세션을 복사하려면 클러스터 통신 기술을 사용해야합니다. 관련 기술에는 멀티 캐스트 및 유니 캐스트가 포함됩니다.
서블릿 엔진
서블릿 엔진은 반사를 사용하여 웹 애플리케이션에서 서블릿과 JSP에서 객체를 생성하여 서블릿 객체 풀에 넣고 실제 상황에 따라 해당 방법을 호출합니다. 웹 응용 프로그램은 비즈니스 로직 처리를 Dopost 또는 Dog Method에 배치합니다. 웹 컨테이너가 요청을 처리하면 여기에 정의 된 처리 로직에 따라 요청을 처리하고 응답 클라이언트가 응답합니다.
JSP 컴파일러
사양에 따르면 JSP는 결국 서블릿 실행에 컴파일되므로 사양에 따라 JSP 파일을 컴파일해야합니다. JSP 컴파일러는 실제로 JSP 구문을 변환하고 JSP 구문에 따라 처리합니다.
웹 컨테이너에는 기본적으로 위에서 소개 된 구성 요소의 기능이 포함되어 있습니다. 각 구성 요소 모듈의 구현에 따라 웹 컨테이너를 구축 할 수 있습니다.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!