본문 바로가기

Distributed System/이론 공부

분산시스템) 미들웨어(Middleware)

Middleware

  • Distributed systems are often organized by means of a layer of software logically placed between a higher-level layer consisting of users and applications, and layers underneath consisting of operating systems and basic communication facilities such a system is sometimes called middleware

미들웨어와 계층적 구조

분산 시스템은 보통 서비스로 제공될 때 미들웨어 형태로 제공되는 경우가 많다. 그렇다면 미들웨어는 무엇인가. 미들웨어 또한 소프트웨어이다. 계층적으로 봤을 때 중간에 있는 소프트웨어를 미들웨어라 한다. 여기서 계층은 크게 어플리케이션 레벨의 소프트웨어와 그 아래 OS 레벨의 소프트웨어가 있다. 미들웨어는 그 사이에 위치한 소프트웨어다. 미들웨어 자체도 사실 애플리케이션 레벨의 소프트웨어이지만 이 미들웨어 위에서 다른 애플리케이션 소프트웨어들이 미들웨어에서 제공하는 서비스를 이용한다. 물리적으로 미들웨어도 애플리케이션 레벨의 소프트웨어이지만 개념적으로 봤을 때 미들웨어에서 제공하는 서비스를 애플리케이션에서 이용하므로 계층적으로 애플리케이션이 위에 있다 보고 서비스를 제공하는 것이 밑에 있다고 본다. OS는 하드웨어 리소스를 이용하므로 컴퓨터 시스템에서 가장 아래에는 하드웨어가 가장 밑에 있다고 본다.

미들웨어와 인터페이스

출처: Distributed Systems - Principles and Paradigms

위 그림에서 미들웨어가 네 대의 컴퓨터를 관통해서 있는데, 이는 네 대의 컴퓨터에서 동일한 미들웨어 소프트웨어가 돌고 있다는 의미이다.
그림에서 각 컴퓨터의 OS가 다르게 표시되어 있는데, 분산 시스템을 구성하는 컴포넌트는 헤테로지니어스할 수 있으므로 하드웨어나 OS가 다를 수 있다. 사실은 같은 OS를 사용하는 것이 편하다.

 

애플리케이션의 경우 컴퓨터 1은 A, 컴퓨터 2,3은 B, 컴퓨터 4는 C를 돌리고 있다. A,B,C라는 서로 다른 애플리케이션이 서로 다른 네 대의 컴퓨터에서 돌고 있는데, 분산 시스템 서비스 미들웨어를 이용하면 세 개의 어플리케이션이 인터렉션이 가능하다. 심지어 각 컴퓨터의 OS가 다르더라도 미들웨어의 도움을 받아 서로 다른 세 애플리케이션의 인터렉션이 가능해진다.

 

A는 서비스를 요청하고 나머지는 서비스를 제공하는 입장이라고 가정해보자. A는 미들웨어가 제공하는 API를 통해 서비스를 요청한다. 미들웨어가 일종의 라이브러리라 생각하면 된다. 제공하는 서비스 종류에 따라 미들웨어가 동일한 인터페이스로 동일한 API를 제공한다.

  • Each application is offered the same interface – To let different applications communicate
  • Distributed systems hide as best and reasonable as possible, the differences in hardware and operating systems from each application

미들웨어라는 중간 레이어를 통해 분산 시스템의 목적 중 하나인 분산된 사실을 숨기는 것이 가능해진다. 미들웨어 밑에 분산되어있는 컴포넌트들 끼리 필요한 프로세싱, 커뮤니케이션 같은 것을 두고 미들웨어 단에서 처리한다. 이런 방식으로 분산 시스템의 인터페이스 역할을 한다.

미들웨어의 단점

미들웨어는 사용자 입장에서 일관(consistency)되게 분산 시스템 서비스를 편하게 이용할 수 있도록 인터페이스를 제공해준다. 그렇다면 미들웨어의 단점은 없을까?

 

그림에도 나와있지만 미들웨어는 어떻게 보면 자바 가상머신과 비슷하다. 자바는 어느 OS든 다 돌아간다. 동일한 자바만 설치해두면 자바로 짜여진 프로그램은 자바 가상머신이 실행시켜준다. 자바의 장점은 플랫폼 독립적(platform independent)이다. 대신 약점은 느리다는 것이다. 요새는 많이 좋아져서 대규모 고성능 프로그램도 자바로 많이 짜여진다. 이렇게 느려지는 주된 원인은 중간에 레이어가 더 있어서이다. OS에서 바로 실행되는 것이 아니고 OS 위에 있는 가상머신이 프로그램을 돌리기 때문에 느려진다. 미들웨어도 동일한 단점이 있다. 미들웨어 없이 애플리케이션 A, B, C가 직접 커뮤니케이션하는 것이 속도가 더 빠르지만 미들웨어를 둠으로서 한 단계 더 거쳐간다. 그래서 퍼포먼스가 떨어지는 약점이 있다. 좋은 분산 시스템을 만드려면 퍼포먼스 생각도 해야한다.