이 페이지에서는 Spanner 방향성 읽기와 사용 방법을 설명합니다.
Spanner의 방향성 읽기는 멀티 리전 인스턴스 구성 또는 선택적 읽기 전용 리전이 있는 커스텀 리전 구성 내에서 읽기 전용 트랜잭션과 단일 읽기를 특정 복제본 유형 또는 리전으로 라우팅할 수 있는 유연성을 제공합니다.
일반 사용 사례
방향성 읽기의 일반적인 사용 사례는 다음과 같습니다.
- 여러 리전에 워크로드를 부하 분산하여 보다 균일한 CPU 사용률을 달성합니다.
- 트랜잭션 워크로드에 미치는 영향을 최소화하여 애플리케이션에서 분석을 격리합니다.
- 변경 내역 읽기에 부분적인 격리를 제공합니다. Spanner API를 사용하여 Spanner 데이터 변경사항을 스트리밍하는 경우 방향성 읽기를 사용하면 트랜잭션 워크로드에 미치는 영향을 최소화할 수 있습니다.
지원되는 쿼리 작업
쿼리 작업 | 방향성 읽기가 지원되나요? |
---|---|
비활성 읽기 | 예 |
강력한 읽기 | 예 |
읽기-쓰기 트랜잭션 | No |
방향성 읽기는 읽기-쓰기 트랜잭션 및 Partitioned DML 유형의 일괄 업데이트에서 지원되지 않습니다. 이는 읽기-쓰기 트랜잭션이 리더 리전에서 처리되어야 하기 때문입니다. 읽기-쓰기 트랜잭션에 방향성 읽기가 사용된 경우 BAD_REQUEST
오류와 함께 트랜잭션이 실패합니다.
제한사항
Spanner 방향성 읽기에는 다음과 같은 제한사항이 있습니다.
- 멀티 리전 인스턴스 구성에 있는 Spanner 인스턴스 또는 선택 사항인 읽기 전용 리전이 있는 커스텀 리전 구성에 있는 Spanner 인스턴스에서만 방향성 읽기를 사용할 수 있습니다.
- 쓰기 요청은 항상 리더 리전에서 제공되므로 읽기-쓰기 요청에 방향성 읽기를 사용할 수 없습니다.
- Google Cloud 콘솔 또는 Google Cloud CLI에서는 방향성 읽기를 사용할 수 없습니다. REST, RPC API, Spanner 클라이언트 라이브러리를 사용하여 사용할 수 있습니다.
- 단일 방향성 읽기에서 최대 10개의 복제본을 지정할 수 있습니다.
- 시스템 통계 대시보드 또는 측정항목 탐색기를 사용하는 경우 초당 작업 수, 데이터베이스별 초당 작업 수, API 메서드 차트별 초당 작업 수에 따라 지정된 위치가 아닌 다른 위치에 방향성 읽기 요청이 표시될 수 있습니다. 이 경우 차트의 정보가 잘못될 수 있습니다. CPU 사용률 측정항목을 사용하여 읽기 요청이 선택한 리전으로 라우팅되는지 확인할 수 있습니다. 이 측정항목은 방향성 읽기 트래픽이 라우팅되는 위치에 대한 가장 정확한 정보를 보여줍니다.
시작하기 전에
방향성 읽기를 사용하기 전에 다음 사항을 고려하세요.
- 애플리케이션에 가장 가까운 복제본 또는 리전이 아닌 다른 리전으로 읽기를 라우팅하는 경우 애플리케이션에 추가 지연 시간이 발생할 수 있습니다.
- 다음을 기준으로 트래픽을 라우팅할 수 있습니다.
- 리전 이름입(예:
us-central1
) - 복제본 유형(가능한 값:
READ_ONLY
및READ_WRITE
)
- 리전 이름입(예:
- 방향성 읽기의 자동 장애 조치 옵션은 기본적으로 사용 설정됩니다. 자동 장애 조치 옵션이 사용 설정되고 지정된 모든 복제본을 사용할 수 없거나 비정상이면 Spanner가
includeReplicas
목록 외부의 복제본으로 요청을 라우팅합니다. 자동 장애 조치 옵션을 사용 중지하고 지정된 모든 복제본을 사용할 수 없거나 비정상이면 방향성 읽기 요청이 실패합니다.
방향성 읽기 매개변수
REST 또는 RPC API를 사용하여 방향성 읽기를 수행하는 경우 directedReadOptions
매개변수에 이러한 필드를 정의해야 합니다. includeReplicas
또는 excludeReplicas
중 하나만 포함할 수 있으며, 둘 다 포함할 수는 없습니다.
includeReplicas
: 반복되는replicaSelections
집합을 포함합니다. 이 목록은 특정 리전 또는 복제본 유형에 대한 방향성 읽기를 고려해야 하는 순서를 나타냅니다. 최대 10개의includeReplicas
를 지정할 수 있습니다.replicaSelections
: 방향성 읽기 요청을 제공하는location
또는 복제본type
으로 구성됩니다.includeReplicas
를 사용하는 경우에는 다음 필드 중 하나 이상을 제공해야 합니다.location
: 방향성 읽기 요청을 처리하는 위치입니다. 이 위치는 데이터베이스의 멀티 리전 구성에 있는 리전 중 하나여야 합니다. 위치가 데이터베이스의 멀티 리전 구성 내 리전 중 하나가 아닌 경우 요청이 예상대로 라우팅되지 않습니다. 대신 가장 가까운 리전에서 제공됩니다. 예를 들어 멀티 리전 인스턴스 구성nam6
의 데이터베이스에 있는us-central1
위치로 읽기를 전달할 수 있습니다.type
: 방향성 읽기 요청을 제공하는 복제본 유형입니다. 가능한 유형은READ_WRITE
,READ_ONLY
입니다.
autoFailoverDisabled
: 기본적으로False
로 설정됩니다. 즉, 자동 장애 조치가 사용 설정됩니다. 자동 장애 조치 옵션이 사용 설정되고 지정된 모든 복제본을 사용할 수 없거나 비정상이면 Spanner는 요청을includeReplicas
목록 외부의 복제본으로 라우팅합니다. 자동 장애 조치 옵션을 사용 중지하고 지정된 모든 복제본을 사용할 수 없거나 비정상이면 방향성 읽기 요청이 실패합니다. 가능한 값은 사용 중지된 경우TRUE
이고 사용 설정된 경우FALSE
입니다.
excludeReplicas
: 제공 요청에서 제외되는 반복되는replicaSelections
집합을 포함합니다. Spanner는 이 목록의 복제본으로 요청을 라우팅하지 않습니다.replicaSelections
: 방향성 읽기 요청을 처리하는 데 제외된 위치 또는 복제본 유형입니다.excludeReplicas
를 사용하는 경우에는 다음 필드 중 하나 이상을 제공해야 합니다.location
: 방향성 읽기 요청 처리에서 제외되는 위치입니다.type
: 방향성 읽기 요청 처리에서 제외되는 복제본 유형입니다. 가능한 유형은READ_WRITE
,READ_ONLY
입니다.
REST 요청 본문의 예시를 보려면 방향성 읽기 사용 섹션에서 REST 탭을 클릭합니다.
방향성 읽기 사용
Spanner 클라이언트 라이브러리와 REST 및 RPC API를 사용하여 방향성 읽기를 수행할 수 있습니다.
클라이언트 라이브러리
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
REST
다음 REST API를 사용하여 방향성 읽기를 수행할 수 있습니다.
예를 들어 executeSQL
을 사용하여 us-central1
에서 방향성 읽기를 수행하려면 다음을 수행합니다.
세션에 다음을 입력합니다.
projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-ID</VAR>/databases/<VAR>DATABASE-ID</VAR>/sessions/<VAR>SESSION-ID</VAR>
다음을 바꿉니다.
- PROJECT-ID: 프로젝트 ID
- INSTANCE-ID: 인스턴스 ID
- DATABASE-ID: 데이터베이스 ID
- SESSION-ID: 세션 ID.
세션 만들기에서
SESSION-ID
값을 받습니다.
요청 본문에 다음을 사용합니다.
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
실행을 클릭합니다. 이에 대한 응답으로, 쿼리 결과가 표시됩니다.
RPC
다음 RPC API를 사용하여 방향성 읽기를 수행할 수 있습니다.
다음 단계
- 트랜잭션 외부에서 읽기를 수행하는 방법 알아보기