이것은 매우 단순 해답이지만 일반적인 아이디어를 제공합니다.
전화와 이메일의 관점에서 생각해 봅시다. 전자 메일이 존재하지 않는 분을 바로 잡으십시오. 일을 끝내려면 모두에게 전화해야합니다. 전화로 누군가와 의사 소통을 할 때, 그 사람을 만나기 위해 책상에 앉혀 야합니다 (공장에 있고 휴대폰 벨소리가 들릴 수 없다고 가정). 연락하려는 사람이 ' 책상에서, 당신은 그들이 당신의 전화를받을 때까지 기다린 채 붙어 있습니다. (또는 나중에 전화 할 가능성이 훨씬 큽니다.) 그것은 당신과 동일합니다 - 누군가 당신을 부를 때까지 할 일이 없습니다. 한 번에 여러 사람이 전화를 걸면 한 번에 한 사람 만 처리 할 수 있기 때문에 알지 못합니다.
그러나 전자 메일이있는 경우 다른 사람과 요청을 "대기열에 두어"편리하게 무시할 수 있습니다. 이메일을 무시하면 언제든지 다시 보낼 수 있습니다. 책상에있을 때까지 기다릴 필요가 없으며 전화를 끊을 때까지 기다릴 필요가 없습니다. 작업량이 줄어들고 모든 것이 원활하게 진행됩니다. 추가 보너스로, 당신이 당신의 peons에 거래하고 싶지 않은 메시지를 전달할 수 있습니다.
시스템 엔지니어링에서 위의 전화 시나리오처럼 작동하는 프로그램 (또는 프로그램의 일부)을 정의하기 위해 "밀접하게 결합 된"이라는 용어를 사용합니다. 이들은 서로 매우 밀접하게 의존하며 프로그램의 여러 부분에서 구현을 공유합니다. 이러한 프로그램에서 데이터는 한 번에 하나씩 순서대로 처리됩니다. 이러한 시스템은 일반적으로 구축하기 쉽지만 고려해야 할 몇 가지 중요한 단점이 있습니다. (1) 프로그램의 모든 부분을 변경하면 코드 전체에서 계단식 변경이 발생할 가능성이 있으며 이로 인해 버그가 발생합니다. (2) 시스템은 확장 성이 좋지 않으며 일반적으로 필요에 따라 폐기 및 재구성해야합니다. (3) 시스템의 모든 부분이 동시에 작동 중이어야하거나 전체 시스템이 작동하지 않아야합니다.
기본적으로 밀접하게 연결된 프로그램은 프로그램이 매우 간단하거나 밀접하게 연결된 프로그램을 사용하는 특별한 이유가있는 경우에 유용합니다.
현실 세계에서는 상황이 훨씬 더 복잡합니다. 프로그램은 그렇게 단순 할 수 없으며 밀접하게 결합 된 방식으로 엔터프라이즈 응용 프로그램을 개발하는 것은 악몽이됩니다. 따라서 우리는 "느슨하게 결합 된 (loosely-coupled)"이라는 용어를 사용하여 많은 작은 조각으로 구성된 대형 시스템을 정의합니다. 조각들은 매우 잘 정의 된 경계와 기능을 가지고있어 시스템 변경이보다 쉽게 이루어질 수 있습니다. 그것은 객체 지향 디자인의 핵심입니다. RabbitMQ와 같은 메시지 대기열을 사용하면 다양한 프로그램과 프로그램의 일부에서 이메일과 같은 통신이 가능하므로 워크 플로우가 사람과 훨씬 비슷합니다. 여분의 용량을 추가하면 필요할 때마다 컴퓨터를 시작하고 추가로 컴퓨터를 사용할 수 있습니다.
분명히 이것은 총체적인 단순화이지만, 일반적인 생각을 전달한다고 생각합니다. 메시지 대기열을 사용하는 응용 프로그램을 작성하면 클라우드 서비스 공급자를 활용하여 확장 성이 뛰어난 대규모 응용 프로그램을 배포 할 수 있습니다. 다음은 클라우드 설계에 대한 기사입니다. http://blogs.msdn.com/b/silverlining/archive/2011/08/23/designing-and-building-applications-for-the-cloud.aspx