확장성이 뛰어난 GraphQL 솔루션 배포

이 참조 아키텍처는 워크로드 수요에 맞게 쉽게 확장할 수 있는 GraphQL 기반 솔루션을 배포하는 방법을 보여줍니다.

API에 대한 오픈 소스 데이터 질의 및 조작 언어인 GraphQL와 기존 데이터로 질의를 이행하기 위한 런타임은 필수 속성을 명시적으로 정의하는 모바일 애플리케이션과 같은 구현에 이상적인 구성요소입니다. 또한 클라이언트가 요청 및 응답 플로우를 최적화하기 위해 관련 엔티티 간에 데이터를 요청할 수 있는 API(예: 모바일 애플리케이션에 대한 모바일 네트워크 트래픽 최소화)를 제공합니다. 또한 GraphQL는 다양한 백엔드 서비스를 지원할 수 있는 단일 스키마를 제공하여 API 소비자의 백엔드 솔루션을 구현할 수 있는 방법을 추상화하는 효과적인 방법을 제공합니다.

구조

이 아키텍처는 정적 및 동적 API 컨텐츠에 대해 서로 다른 경로를 정의합니다. 이 접근 방식을 사용하면 로드 밸런서에서 CDN(콘텐츠 전달 네트워크) 사용, 콘텐츠를 로드하고 제공하는 백엔드 서비스 내에서 등 여러 계층에서 캐싱 옵션을 구성하여 정적 콘텐츠에 대한 접근을 보다 쉽게 최적화할 수 있습니다.

백엔드 서비스는 이 아키텍처에서 마이크로서비스로 구현됩니다. 또한 이러한 서비스는 오픈 소스 CMS 옵션을 통해 Oracle Content and Experience와 같은 CMS 솔루션을 배포할 수 있습니다. 컨텐츠가 정적이면 보안 위험이 상당히 낮습니다.

API 컨텐츠의 경로는 API 게이트웨이를 통해 지정되므로 API 요청을 검증하고 제어할 수 있습니다(예: 제한 속도). 그런 다음 트래픽이 Oracle Kubernetes 엔진 로드 밸런서(수신 지점)로 전송되어 클러스터로 전송되고, 이 로드 밸런서는 GraphQL 서버로 지정됩니다. 마이크로서비스를 사용하여 정적 콘텐츠를 제공하는 것이 이상적입니다. GraphQL 및 정적 콘텐츠를 지원하는 서비스는 향상된 격리 및 제어를 위해 별도의 네임스페이스에 보관됩니다.

이 구현에서는 오픈 소스 Apollo GraphQL 서버를 채택하여 호출을 수신하고 해결자 및 변경자 논리를 호스트하는 별도의 마이크로서비스로 작업을 분해합니다. 별도의 서비스를 사용하여 데이터 모델 내에서 여러 하위 도메인을 구현함으로써 보다 효율적으로 구현을 확장할 수 있습니다. 따라서 인메모리 캐싱으로 솔루션을 쉽게 튜닝할 수 있습니다.

다음 다이어그램은 이 참조 구조를 보여 줍니다.

deploy-hs-graphql.png에 대한 설명은 다음과 같습니다.
deploy-hs-graphql.png 그림에 대한 설명

deploy-hs-graphql.zip 배포

예제 서비스를 포함한 아키텍처를 구현하는 코드 및 설명서는 관련 GitHub 저장소에서 찾을 수 있습니다(아래의 배포 항목 참조). API 경로는 각 하위 도메인에 대해 Apollo GraphQL Server 및 Python 서비스를 사용합니다. 자세한 내용은 제공된 GitHub 설명서에 나와 있습니다.

이 아키텍처에는 다음 구성요소가 있습니다.
  • 테넌시

    테넌시에서는 사용 중인 모든 지역에 대해 다룹니다. 최고의 성능과 복원성을 위해 전 세계 여러 다른 지역에서 배포를 복제하고 공용 DNS 라우팅을 결합하여 클라이언트가 가장 가까운 지역으로 가서 대기 시간을 최소화합니다. 따라서 영역 간에 백엔드 데이터를 복제해야 합니다.

  • 지역

    Oracle Cloud Infrastructure 지역은 가용성 도메인이라고 하는 하나 이상의 데이터 센터를 포함하는 지역화된 지리적 영역입니다. 지역은 다른 지역과 독립적이며, 방대한 거리로 이들을 분리할 수 있습니다(국가 또는 대륙 간).

  • 구획

    구획은 Oracle Cloud Infrastructure 테넌시 내의 여러 지역 논리적 파티션입니다. 구획을 사용하여 Oracle Cloud에서 리소스를 구성하고, 리소스에 대한 액세스를 제어하고, 사용량 할당량을 설정합니다. 제공된 구획의 리소스에 대한 액세스를 제어하려면 리소스에 액세스할 수 있는 사용자 및 수행할 수 있는 작업을 지정하는 정책을 정의합니다. 이 아키텍처에 대한 구획 제어를 추가하여 공용 접근 계층과 백엔드를 구분함으로써 보안 계층에 대한 직접 경로를 실수로 생성하는 위험을 최소화할 수 있습니다.

  • 가용성 도메인

    가용성 도메인은 한 지역 내의 독립형 데이터 센터입니다. 각 가용성 도메인의 물리적 리소스는 내결함성을 제공하는 다른 가용성 도메인의 리소스와 분리됩니다. 가용성 도메인은 전원, 냉각 등의 인프라 또는 내부 가용성 도메인 네트워크를 공유하지 않으므로 따라서 하나의 가용성 도메인에서 장애가 발생하면 해당 영역의 다른 가용성 도메인에 영향을 주지 않습니다. 이 참조 아키텍처에서 Kubernetes 작업자 노드는 복원성을 최대화하기 위해 장애 도메인과 가용성 도메인 모두에 분산됩니다.

  • 결함 도메인

    장애 도메인은 한 가용성 도메인 내 하드웨어 및 인프라의 그룹입니다. 각 가용성 도메인에는 독립된 전원 및 하드웨어로 3개의 장애 도메인이 있습니다. 여러 장애 도메인에 리소스를 분산하면 애플리케이션은 장애 도메인 내에서 물리적 서버 장애, 시스템 유지보수 및 전원 장애를 허용할 수 있습니다.

  • VCN(가상 클라우드 네트워크) 및 서브넷

    VCN은 Oracle Cloud Infrastructure 지역에서 설정한 커스터마이징 가능한 소프트웨어 정의 네트워크입니다. 기존의 데이터 센터 네트워크와 마찬가지로 VCN도 네트워크 환경을 완벽하게 제어할 수 있습니다. VCN에는 VCN을 생성한 후 변경할 수 있는 겹치지 않는 여러 CIDR 블록이 있을 수 있습니다. VCN을 서브넷으로 분할할 수 있으며, 지역 또는 가용성 도메인으로 범위가 지정될 수 있습니다. 각 서브넷은 VCN의 다른 서브넷과 겹치지 않는 연속적인 주소 범위로 구성됩니다. 서브넷을 생성한 후 크기를 변경할 수 있습니다. 서브넷은 공용 또는 전용일 수 있습니다.

  • 로드 밸런서

    Oracle Cloud Infrastructure Load Balancing Service는 단일 시작점에서 백엔드에 있는 여러 서버로 트래픽을 자동으로 배포합니다. 이 참조 아키텍처의 로드 밸런서에는 동적 데이터 및 정적 콘텐츠(예: 이미지, 웹 페이지 등)를 위해 API 게이트웨이로 보내는 트래픽을 분리하는 라우팅 정책이 포함됩니다. 그런 다음 로드 밸런서의 WAA(Web Application Acceleration) 기능을 활용할 수 있습니다.

  • 보안 목록

    각 서브넷에 대해 서브넷에 들어오고 나가야 하는 트래픽의 소스, 대상, 유형을 지정하는 보안 규칙을 생성할 수 있습니다.

  • NAT 게이트웨이

    NAT 게이트웨이를 사용하면 VCN의 전용 리소스가 수신 인터넷 연결에 리소스를 노출하지 않고도 인터넷의 호스트에 접근할 수 있습니다.

  • 서비스 게이트웨이

    서비스 게이트웨이는 VCN에서 Oracle Cloud Infrastructure Object Storage와 같은 다른 서비스로의 접근을 제공합니다. VCN에서 Oracle 서비스로의 트래픽은 Oracle 네트워크 패브릭을 통해 이동하며 인터넷을 경유하지 않습니다.

  • Cloud Guard

    Oracle Cloud Guard를 사용하여 Oracle Cloud Infrastructure에 있는 리소스의 보안을 모니터링하고 유지보수할 수 있습니다. Cloud Guard는 정의 가능한 감지기 레시피를 사용하여 보안 취약점에 대한 리소스를 검사하고 운영자와 사용자가 위험한 작업을 모니터합니다. 잘못된 구성 또는 비보안 작업이 감지되면 Cloud Guard는 수정 조치를 권장하고 사용자가 정의할 수 있는 응답기 레시피를 기반으로 이러한 작업을 수행할 수 있도록 지원합니다.

  • 보안 영역

    보안 영역은 데이터 암호화와 같은 정책을 적용하고 전체 구획의 네트워크에 대한 공용 액세스를 방지하여 Oracle의 최적의 보안 방법을 처음부터 보장합니다. 보안 영역은 동일한 이름의 구획과 연관되어 있으며, 보안 영역 정책 또는 구획과 해당 하위 구획에 적용되는 "감소"를 포함합니다. 표준 구획을 추가하거나 보안 영역 구획으로 이동할 수 없습니다.

  • 독립 데이터베이스

    Oracle Cloud Infrastructure 자율운영 데이터베이스는 전담 관리되는 사전 구성된 데이터베이스 환경으로, 트랜잭션 처리 및 데이터 웨어하우징 워크로드에 사용할 수 있습니다. 하드웨어를 구성 또는 관리하거나 소프트웨어를 설치할 필요가 없습니다. Oracle Cloud Infrastructure는 데이터베이스 생성과 데이터베이스 백업, 패치, 업그레이드 및 조정을 처리합니다.

  • Container Engine for Kubernetes

    Oracle Cloud Infrastructure Container Engine for Kubernetes는 컨테이너화된 애플리케이션을 클라우드에 배포하는 데 사용할 수 있는 전담 관리 및 확장성이 뛰어난 고가용성 서비스입니다. 애플리케이션에 필요한 컴퓨트 리소스를 지정하면 Container Engine for Kubernetes가 기존 테넌시의 Oracle Cloud Infrastructure에서 이 리소스를 프로비저닝합니다. Container Engine for Kubernetes는 Kubernetes를 사용하여 호스트 클러스터 전체에서 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화합니다. Kubernetes 클러스터에는 복원성과 가용성을 극대화하기 위해 여러 저장소 영역 및 가용성 영역에 노드가 할당됩니다. Kubernetes 클러스터는 마이크로서비스를 관리하고 모니터링할 수 있는 Istio 또는 다른 서비스 메시 기능을 사용하는 것이 이상적입니다. GraphQL 서비스는 Kubernetes 클러스터에 자체 마이크로서비스로 배포되는 다양한 분석기와 변형기를 통해 자체 포드에 존재합니다.

  • 레지스트리

    Oracle Cloud Infrastructure Registry는 개발-운영 워크플로우를 간소화하는 Oracle 관리 레지스트리입니다. 이 레지스트리를 사용하면 Docker 이미지와 같은 개발 아티팩트 저장, 공유 및 관리를 쉽게 수행할 수 있습니다. Oracle Cloud Infrastructure의 가용성과 확장성이 뛰어난 아키텍처를 통해 안정적인 애플리케이션을 배포하고 관리할 수 있습니다.

권장 사항

다음 권장 사항을 시작점으로 사용합니다.요구 사항은 여기에 설명된 아키텍처와 다를 수 있습니다.
  • VCN

    VCN을 생성할 때 VCN의 서브넷에 연결할 리소스의 수에 따라 필요한 CIDR 블록 수 및 각 블록의 크기를 결정합니다. 표준 전용 IP 주소 공간 내에 있는 CIDR 블록을 사용합니다.

    전용 접속을 설정하려는 다른 네트워크(Oracle Cloud Infrastructure, 온프레미스 데이터 센터 또는 다른 클라우드 제공자)와 겹치지 않는 CIDR 블록을 선택합니다.

    VCN을 생성한 후 해당 CIDR 블록을 변경, 추가 및 제거할 수 있습니다.

    서브넷을 설계할 때는 트래픽 플로우와 보안 요구사항을 고려하십시오. 특정 계층 또는 역할 내의 모든 리소스를 보안 경계로 사용할 수 있는 동일한 서브넷에 연결합니다.

  • 보안

    Oracle Cloud Guard를 사용하여 Oracle Cloud Infrastructure의 리소스 보안을 사전 모니터링하고 유지보수합니다. Cloud Guard는 정의 가능한 감지기 레시피를 사용하여 보안 취약점에 대한 리소스를 검사하고 운영자와 사용자가 위험한 작업을 모니터합니다. 잘못된 구성 또는 비보안 작업이 감지되면 Cloud Guard는 수정 조치를 권장하고 사용자가 정의할 수 있는 응답기 레시피를 기반으로 이러한 작업을 수행할 수 있도록 지원합니다. 최대 보안이 필요한 리소스의 경우 Oracle은 보안 영역을 사용할 것을 권장합니다. 보안 영역은 모범 사례를 기반으로 하는 Oracle 정의 보안 정책 레시피와 연관된 구획입니다. 예를 들어, 보안 영역의 리소스는 공용 인터넷에서 액세스할 수 없으며 고객 관리 키를 사용하여 암호화되어야 합니다. 보안 영역에서 리소스를 생성 및 업데이트하면 Oracle Cloud Infrastructure는 보안 영역 레시피의 정책에 대해 작업을 검증하고 모든 정책을 위반하는 작업을 거부합니다.

  • Cloud Guard

    Oracle에서 제공하는 기본 레시피를 복제하고 사용자정의하여 사용자정의 감지기 및 응답기 레시피를 생성합니다. 이러한 레시피를 사용하면 경고를 생성하는 보안 위반 유형과 이에 대해 수행할 수 있는 작업을 지정할 수 있습니다. 예를 들어 가시성이 공용으로 설정된 오브젝트 스토리지 버킷을 감지할 수 있습니다. 테넌시 레벨에서 Cloud Guard를 적용하여 가장 광범위한 범위를 포괄하고 다중 구성 유지 관리에 대한 관리 부담을 줄입니다. 관리 목록 기능을 사용하여 감지기에 특정 구성을 적용할 수도 있습니다.

  • NSG(네트워크 보안 그룹)

    NSG를 사용하여 특정 VNIC에 적용되는 일련의 수신 및 송신 규칙을 정의할 수 있습니다. NSG를 사용하면서 VCN 서브넷 아키텍처를 애플리케이션의 보안 요구사항과 분리할 수 있으므로 보안 목록이 아닌 NSG를 사용하는 것이 좋습니다.

    NSG를 사용하여 특정 VNIC에 적용되는 일련의 수신 및 송신 규칙을 정의할 수 있습니다. NSG를 사용하면서 VCN 서브넷 아키텍처를 애플리케이션의 보안 요구사항과 분리할 수 있으므로 보안 목록이 아닌 NSG를 사용하는 것이 좋습니다.

  • 로드 밸런서 대역폭

    로드 밸런서를 생성하는 동안 고정 대역폭을 제공하는 사전 정의된 구성을 선택하거나, 대역폭 범위를 설정하고 서비스에서 트래픽 패턴을 기반으로 대역폭을 자동으로 확장하도록 하는 커스터마이징(가변형) 구성을 지정할 수 있습니다. 어느 접근 방식이든 로드 밸런서를 생성한 후에는 언제든지 구성을 변경할 수 있습니다.

  • API 게이트웨이
    API 게이트웨이는 다음과 같은 초기 수준의 심사 및 사용 제어를 제공하는 데 사용할 수 있습니다.
    • 서비스 인증 및 승인
    • 속도 제한과 같은 서비스 제어
    • 서비스 이용 분석 캡처
    또한 API 게이트웨이(방화벽 또는 로드 밸런서 아님)는 솔루션 인식 라우팅을 수행하여 GraphQL 기능이 충족되지 않는 모든 엔드포인트를 올바른 위치로 지정할 수 있습니다. 이를 고려할 때 백엔드 솔루션에서 지원하는 최대 성능 기능과 단일 서비스 사용자의 최대 권한에 따라 합리적인 요금 제한을 고려해야 합니다.

고려 사항

이 참조 구조를 배치할 때는 다음 사항을 고려하십시오.

  • 성능

    이 아키텍처는 수직 및 수평 모두 성능을 위해 용량을 구축하는 방법을 제공합니다. 가장 최적화된 마이크로서비스를 사용하는 경우에도 새 노드를 도입할 때까지 지연 시간이 발생하므로 수동 또는 동적으로 확장을 처리할 때 이를 허용해야 합니다. 이는 솔루션의 지속성 계층에 특히 해당됩니다.

  • 보안

    API 게이트웨이에서 애플리케이션 레벨 보안을 처리해야 합니다. 그러나 @auth와 같은 GraphQL 지시어를 사용하여 세분화된 GraphQL 특정 보안(예: 속성 레벨 액세스)을 해결할 수 있습니다.

  • 가용성
    • Kubernetes

      장애 도메인은 한 가용성 도메인 내에서 복원성을 제공합니다. Kubernetes 작업자 노드를 여러 가용성 영역에 배치하도록 구성할 수 있습니다.

    • API 게이트웨이, 로드 밸런서 등

      API 게이트웨이와 같은 관리 서비스의 가용성은 지역 내에서 처리됩니다. 로드 밸런서를 구성하여 가용성 영역 간의 조정을 보장할 수 있습니다.

    필요한 경우 다중 영역 배치 모델을 채택하여 가용성을 더욱 향상시킬 수 있습니다. 이렇게 하면 복잡성과 조정이 증가합니다.
  • 비용

    필요한 가용성 및 복원성이 클수록 운영 비용이 높아집니다. 이는 필요한 볼륨의 중복 컴퓨트 리소스가 증가하기 때문입니다. 사용할 GraphQL 구현과 라이센스 제약 조건(있는 경우) 및 제공자가 구현을 지원하는지 여부를 고려하십시오.

배치

Oracle DevRel Github 저장소의 지침에 따라 수동으로 이 구조를 배치합니다. 컨테이너 이미지를 레지스트리에 로드하고 Kubernetes를 배포하는 것은 수동 프로세스이거나 GitHub 문서에 포함된 구현 세부 정보에 설명된 프로세스를 따르면 됩니다.

수락

작성자: Phil Wilkins