Network - Architecture


1. Architecture

  • 3 tier 아키텍처

개념

Presentation 계층, Application 계층, 데이터 계층으로 각 서버의 역할을 나누어 구성을 한 아키텍처를 의미한다.

Client는 최초에 Presentation 계층으로 요청을 하며 정적자원은 Presentation 계층에 있는 웹서버에서 응답을 준다.
하지만 정적 자원이 아닌 데이터를 필요로 하는 동적 자원인 경우에는 Application 계층에 있는 WAS서버로 요청을 하게 되며
WAS서버는 데이터가 필요한 경우 데이터 게층의 DB 서버로 부터 데이터를 읽고/쓰게 됩니다.


장점

  1. 계층을 분리하여 서버별 업무를 분담하므로써 업무 효울성 증가 및 서버의 부하를 감소 시킬 수 있다.
  2. 서로 다른 물리적인 서버를 구성하므로써 장애에 대한 리스크를 줄일 수 있다.
  3. 확장성 측면에서 좋다.
  4. 보안 측면에서 좋다.



  • 분산(Distributed), 확장(Scalable) 가능한 시스템 구성 시 고려할 요소

    매우 기초적인 의미에서 확장성 있는 웹 사이트란 사용자들이 인터넷을 통해 원격지의 자원에 연결할 때,자원이나 자원에 대한 접근 권한이 여러 개의 서버에 분산되어 있을 때를 말한다.

  1. 가용성 가용성적이고 유연한 아키텍처를 가지는 것은 가장 기본적인 비즈니스 요구사항이라 할 수 있다
    이중화에 실패할 경우 사업에 큰 손실을 가져올 수 있으므로 가용성에 대한 고민이 필요하며
    AWS환경에서는 가용성 측면에서 고려해야 할 것은 서버 이중화, 가용존 분리, 리전 분리 등을 통해 장애에 대한 대응을 할 수 있어야 한다.

    서버를 이중화할 때 필요한 것은 Shared Nothing 아키텍처를 만드는 것이다.

  2. 성능 빠른 응답과 낮은 Latency 위해서 최적화된 시스템을 만들어야 한다.

    CDN, WEB 서버 등의 캐시사용, DB 인덱스 사용

  3. 신뢰성 항상 똑같은 요청에 똑같은 결과를 제공해야 한다.

  4. 확장성 더 많은 부하를 처리할 수 있도록 처리량을 증가시키기 위해 필요한 노력

    Load Balancer 사용, 큐 사용

  5. 관리성 쉽게 운용할 수 있는 시스템을 설계하는 것도 중요한 고려사항이다.

  6. 비용 시스템 소유에 필요한 모든 비용



  • MSA 아키텍처 장단점

MSA - Micro Service Architecture 기존의 하나의 거대한 Monolithic 시스템을 여러개의 작은 Micro Service로 나누어 시스템을 구축하는 아키텍처

MSA는 API를 통해서만 상호작용할 수 있다. 즉, 마이크로 서비스는 서비스의 end-point(접근점)을 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화한다.
내부의 구현 로직, 아키텍처와 프로그래밍 언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다.

MSA의 장점 각각의 서비스는 모듈화가 되어있으며 이러한 모듈까리는 API등을 이용하여 통신한다. 이러한 MSA는 각각 개별의 서비스 개발을 빠르게 하며, 유지보수도 쉽게할 수 있도록 한다.
팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있다. 회사가 java의 spring 기반이라도 MSA를 적용하면 node.js로 블록체인 개발 모듈을 연동함에 무리가 없다.
마이크로서비스는 서비스별로 독립적 배포가 가능하다. 따라서 모놀로식에 비해서 가볍게 배포를 할 수 있다.
마이크로서비스는 각각 서비스의 부하에 따라 개별적으로 scale-out이 가능하다. 메모리, CPU적으로 상당부분 이득이 된다.

MSA의 단점 MSA는 모놀리식에 비해 상대적으로 많이 복잡하다. 서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 정해야한다.
또한, 통신의 장애와 서버의 부하 등이 있을 경우 어떻게 transaction을 유지할지 결정하고 구현해야한다.
모놀리식에서는 단일 트랜잭션을 유지하면 됐지만 MSA에서는 비즈니스에 대한 DB를 가지고 있는 서비스도 각기 다르고, 서비스의 연결을 위해서는 통신이 포함되기 때문에 트랜잭션을 유지하는게 어렵다.
통합 테스트가 어렵다. 개발 환경과 실제 운영환경을 동일하게 가져가는 것이 쉽지 않다.
실제 운영환경에 대해서 배포하는 것이 쉽지 않다. 마이크로서비스의 경우 서비스 1개를 재배포 한다고 하면 다른 서비스들과의 연계가 정상적으로 이루어지고 있는지도 확인해야한다.

Tag: [ architecture  ]