대부분의 경우 응용 프로그램은 필요한 배율로 수행하기 위해 몇 대의 컴퓨터를 사용해야합니다. 기본 응용 프로그램 (마스터)은 다른 컴퓨터에 연결하여 작업자 프로세스를 실행합니다. 컴퓨터는 네트워크에 연결될 것으로 예상되지만 실제 연결은 순수한 이더넷을 통해 이루어질 수 있으며 별도의 인터넷을 통해 연결될 수 있습니다. 실행하는 동안 많은 메시지가 마스터와 각 작업자 프로세스간에 전송됩니다. 문제는 코드의 여러 부분에서 메시지를 보낼 수 있으며 사용자 정의 된 코드도 가능하다는 것입니다. 메시지 크기와 빈도를 예측하는 것은 불가능합니다. 사용자는 자신의 요구에 충분히 강한 네트워크를 연결할 것으로 예상되지만 가능한 한 성능을 최적화하려고합니다.성능을 위해 분산 응용 프로그램의 대기열 및 네트워크 메시지 버퍼링을 최적화하는 방법은 무엇입니까?
응용 프로그램의 모든 부분은 동일한 통신 모듈 API를 사용하여 메시지를 보냅니다.
내 질문에 : 너무 많은 별도의 작은 메시지를 자주 보내는 것과 관련하여 네트워크/인터넷 성능 문제가 있습니까? 이 경우, 통신 모듈이 여러 개의 메시지를 모아 하나의 큰 메시지로 보내야합니까? 큰 메시지를 작은 메시지로 나누어야합니까? 성능 문제를 일으킬 수있는 정확한 빈도와 크기는 무엇입니까 (네트워크/인터넷 성능을 의미합니까)? OS/하드웨어가이 모든 작업을 자동으로 수행합니까? 모듈이 그것을해야한다면, 저와 도울 수있는 C++ 라이브러리가 있습니까? (상업적 사용이 가능한 오픈 소스가 바람직 함) 메시지를 수집하는 것이 바람직하므로 대부분의 메시지는 프로세스가 요청할 때 바로 전송되지 않지만 나중에는 요청합니다. 메시지를 보낼 메시지를 보내는 응용 프로그램에서 메시지를 지연시킬 수있는 코드를 요구할 수 있습니다 (요구 사항을 방해하지 않고). 대부분의 메시지는 몇 초 지연 될 염려가 없습니다.
분명히 네트워크 구현에 대한 배경 지식이 많지는 않지만 분명히 사용해야 할 API가 있으면 모든 메시지가 성공해야한다는 것을 분명히해야한다는 것을 알고 있습니다. 실패하면 응용 프로그램을 중지하고 사용자에게 알립니다. 복구가 불가능합니다.
프로그램이 TCP를 통해 통신합니까? UDP? 다른 것? –
LBM (Latency Busters Messaging)을 사용 해본 적이 있습니까? –
@Jeremy Friesner - 통신 모듈을 다시 설계해야하기 때문에 사용할 수있는 기능을 파악하려고합니다. 대기 시간은 큰 문제는 아니지만 대부분의 메시지는 몇 초 내에 도달해야합니다. 문제는 많은 양의 메시지 일 수 있습니다. 어떤 경우 든 메시지가 목적지에 도달 할 것을 보장하는 모듈을 기반으로 할 것이고, 나는 UDP를 직접 사용하지 않을 것이다. – itaj