우리는 현재 새로운 제품 / 프로젝트를 진행하고 있으며 특정 산업 / 서비스 기업을 대상으로하는 클라이언트-서버 애플리케이션입니다. 우리는 Java 프론트 엔드를 사용하여 TCP 위에서 사용자 정의 프로토콜을 실행하는 서버 (C 언어 및 Linux 전용)를 구축하고 있습니다. 우리는 약 20 %의 코딩 작업을 수행하고 있으며 Micro 또는 Monolithic Kernel Architecture 중 하나를 선택해야하는 상황에 직면 해 있습니다.
Micro vs. Monolithic은 일반적으로 커널 아키텍처와 관련이 있지만 서버에 대해 구체적으로 이야기하고 있습니다.
왜 기존 서버가 아닌 사용자 정의 서버입니까?
- 우리의 UI 요구는 중요하고 매우 역동적이므로 웹 / 웹 브라우저 기반 솔루션은 적합하지 않습니다.
- 통계 처리는 클라이언트 측에서 중요하므로 브라우저는 거의 도움이되지 않았습니다. (물론, 우리는 서버 측에서 처리를 수행하고 처리 된 데이터를 클라이언트에 전달할 수 있지만 서버에 많은로드가 발생하고 클라이언트 리소스가 낭비 될 수 있습니다).
- 또한, 단일 이벤트로도 관리 할 수있는 최소한 3 가지 기술 (JS / HTML / CSS)을 사용하면 사막 폭풍 속에서 집을 쓸어 버리는 것과 같은 전체 경험을 할 수 있습니다. n 번 청소하면 먼지가 n + 1 배가됩니다.
마이크로 및 모 놀리 식 서버는 어떻습니까? 당신은 무엇을 이야기?
다음과 같은 (가설적인) 클라이언트 요청을 고려하십시오.
request-id: 123
request-service: HistoricDataSets
request-message: Fetch all records upto the year 2010
이러한 요청을 받으면 서버는 일반적으로 수행합니다 (단순화를 위해 스레드 및 포크와 같은 동시성 기술은 무시합니다).
- 요청 문자열 구문 분석
- 조치를 식별하십시오 (이
HistoricDataSets LIMIT Year (2010)
경우 가져 오기 ). - 지속성 계층 (Oracle, 예를 들어 설명하자)과 상호 작용하고 데이터를 가져옵니다.
프로토콜에 따라 데이터를 포맷하십시오. 전의:
응답 ID : 123
성공 : 실제
응답 텍스트 : DataSet이렇게 형식이 지정된 데이터를 사용하여 클라이언트에 응답하십시오.
이것이 우리가 모 놀리 식 서버 (모두 OS 작업이 커널 공간에서 수행되는 모 놀리 식 커널 이라고 함)라고 부르는 것입니다.
이번에 서버가 수신되면 동일한 요청을 다시 고려하십시오 (우리는 단순성을 위해 공유 메모리 만 IPC로 가정했습니다).
Parser
프로세스 의 공유 메모리에 요청을 넣습니다.- 는
Parser
작업을 식별 문자열을 구문 분석하고 지시Executioner
작업을 실행하는 과정을. - 그런
Executioner
다음Fomatter
데이터를 프로토콜 문자열로 형식화 한 후 서버로 리턴하는 처리 할 데이터를 전달 합니다. - 서버는이를 클라이언트에 발송합니다 (응답).
물론, 대신에 Parser
, Executioner
그리고 Formatter
그것은 하나의 그러나 별도의 프로세스 수 있었다. 이것이 우리가 마이크로 서버 라고 부르는 것입니다 (최소한 최소한의 마이크로 커널이 필요합니다). 서버는 효과적으로 듣고 응답하는 반면 모든 단계는 다른 프로세스에 의해 처리됩니다.
어느 것을 고를까요? 우리는 혼란스러워합니다! 모 놀리 식 서버는 (대부분의 HTTP- 웹 서버?) 시도되고 테스트되었지만 프로그래밍하기 쉽고 동시성을 매우 잘 처리 할 수 있습니다. 초소형 서버 인 마이크로 서버는 하나의 작업을 수행하는 하나의 프로그램의 UNIX 원칙과 신속하고 일치하는 것처럼 보이지만 esp 개발도 복잡합니다. 동시성을 염두에 두십시오.
질문
-각 접근법의 장단점은 무엇입니까?
-언제 사용합니까? (또한 일반적인 질문으로 해석 될 수 있습니다 : IPC 사용시기?)
-마이크로 커널을 선택하면 어떤 기능이 코어 서버의 일부가되어야합니까?
유사 / 관련 질문
- 거대한 모 놀리 식 응용의 위험
- 외부 대 임베디드 브라우저 (접선)
- 모 놀리 식 앱을 멀티 스레드 (Tangential) 로 변환하기위한 조언
도움이 될만한 정보 :
- 우리의 잠재 고객은 두 가지 범주로 나눌 수 있습니다.
- 대규모 : 분당 약 1,700-2,000 건의 요청
- 작음 : 분당 약 650-700 건의 요청
- 요청주기 당 데이터 볼륨 (요청 및 후속 응답)은 평균 ~ 1.20MB, 더 나쁜 경우는 약 250-300MB로 분배되는 것으로 가정 할 수 있습니다.
- 제품 개념은 비교적 새롭지 만 핵심 운영에 영향을 줄 수있는 기능을 갖추고 있으므로 배포 후 특정 지연 (9-12 개월) 후에 만 고객 예산이 유연해질 것으로 예상됩니다. esp. 작은 것들.
- 각 고객은 자신의 클라이언트-서버 스택을 갖게됩니다. 서버는 고객 팀이 관리하는 고객의 하드웨어에서 실행되고 클라이언트는 기능 직원의 컴퓨터에 배포됩니다.
- 클라이언트 및 서버 응용 프로그램 모두에 대한 원격 업데이트는 필수입니다
PUSH
제품이 클릭하는 경우 서버의 실시간 서비스가 '높을'원할 수 있습니다!