이 페이지에서는 Spanner 방향성 읽기와 사용 방법을 설명합니다.
Spanner의 방향성 읽기는 멀티 리전 인스턴스 구성 또는 선택적 읽기 전용 리전이 있는 커스텀 리전 구성 내에서 읽기 전용 트랜잭션과 단일 읽기를 특정 복제본 유형 또는 리전으로 라우팅할 수 있는 유연성을 제공합니다.
이점
방향성 읽기에는 다음과 같은 이점이 있습니다.
- 여러 리전에서 부하 분산 워크로드를 더 효과적으로 제어하여 보다 균일한 CPU 사용률을 달성하고 Spanner 인스턴스의 오버프로비저닝을 방지합니다.
- 워크로드 격리를 사용 설정합니다. 분석 워크로드와 변경 내역 읽기를 특정 Spanner 복제본으로 전달하여 동일한 Spanner 데이터베이스에서 실행되는 트랜잭션 워크로드에 미치는 영향을 최소화할 수 있습니다.
지원되는 쿼리 작업
쿼리 작업 | 방향성 읽기가 지원되나요? |
---|---|
비활성 읽기 | 예 |
강력한 읽기 | 예 |
읽기-쓰기 트랜잭션 | 아니요 |
방향성 읽기는 읽기-쓰기 트랜잭션 및 Partitioned DML 유형의 일괄 업데이트에서 지원되지 않습니다. 읽기-쓰기 트랜잭션은 리더 리전에서 처리되어야 하기 때문입니다. 읽기-쓰기 트랜잭션에 방향성 읽기가 사용된 경우 BAD_REQUEST
오류와 함께 트랜잭션이 실패합니다.
제한사항
Spanner 방향성 읽기에는 다음과 같은 제한사항이 있습니다.
- 멀티 리전 인스턴스 구성에 있는 Spanner 인스턴스 또는 선택 사항인 읽기 전용 리전이 있는 커스텀 리전 구성에 있는 Spanner 인스턴스에서만 방향성 읽기를 사용할 수 있습니다.
- 쓰기 요청은 항상 리더 리전에서 제공되므로 읽기-쓰기 요청에 방향성 읽기를 사용할 수 없습니다.
- Google Cloud 콘솔 또는 Google Cloud CLI에서는 방향성 읽기를 사용할 수 없습니다. REST 및 RPC API와 Spanner 클라이언트 라이브러리 사용이 가능합니다.
- 단일 방향성 읽기에서 최대 10개의 복제본을 지정할 수 있습니다.
시작하기 전에
방향성 읽기를 사용하기 전에 다음을 고려하세요.
- 애플리케이션에 가장 가까운 복제본 또는 리전이 아닌 복제본이나 리전으로 읽기를 라우팅하는 경우 애플리케이션에 추가 지연 시간이 발생할 수 있습니다.
- 다음을 기준으로 트래픽을 라우팅할 수 있습니다.
- 리전 이름입(예:
us-central1
) - 복제본 유형(가능한 값:
READ_ONLY
및READ_WRITE
)
- 리전 이름입(예:
- 방향성 읽기의 자동 장애 조치 옵션은 기본적으로 사용 설정되어 있습니다. 자동 장애 조치 옵션이 사용 설정되어 있고 지정된 모든 복제본을 사용할 수 없거나 비정상인 경우 Spanner는 요청을
includeReplicas
목록 외부의 복제본으로 라우팅합니다. 자동 장애 조치 옵션을 사용 중지하고 지정된 모든 복제본을 사용할 수 없거나 비정상이면 방향성 읽기 요청이 실패합니다.
방향성 읽기 파라미터
REST 또는 RPC API를 사용하여 지정된 읽기를 실행하는 경우 directedReadOptions
파라미터에서 이러한 필드를 정의해야 합니다. includeReplicas
또는 excludeReplicas
중 하나만 포함할 수 있으며 둘 다 포함하는 것은 불가능합니다.
includeReplicas
: 반복되는replicaSelections
집합을 포함합니다. 이 목록은 특정 리전 또는 복제본 유형에 대한 방향성 읽기를 고려해야 하는 순서를 나타냅니다.includeReplicas
는 최대 10개까지 지정할 수 있습니다.replicaSelections
: 방향성 읽기 요청을 처리하는location
또는 복제본type
로 구성됩니다.includeReplicas
를 사용하는 경우 다음 필드 중 하나 이상을 제공해야 합니다.location
: 방향성 읽기 요청을 처리하는 위치입니다. 위치는 데이터베이스의 멀티 리전 구성에 있는 리전 중 하나여야 합니다. 위치가 데이터베이스의 멀티 리전 구성에 있는 리전 중 하나가 아닌 경우 요청이 예상대로 라우팅되지 않습니다. 대신 가장 가까운 리전에서 제공됩니다. 예를 들어 멀티 리전 인스턴스 구성nam6
의 데이터베이스에서us-central1
위치로 읽기를 전달할 수 있습니다.leader
또는non-leader
문자열 리터럴로location
파리미터를 지정할 수도 있습니다.leader
값을 입력하면 Spanner는 요청을 데이터베이스의 리더 복제본으로 전달합니다. 반대로non-leader
값을 입력하면 Spanner는 가장 가까운 비리더 복제본에서 요청을 처리합니다.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
자바
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를 사용하여 방향성 읽기를 실행할 수 있습니다.
모니터링
Spanner는 인스턴스의 지정된 읽기 활동을 모니터링하는 데 도움이 되는 지연 시간 측정항목을 제공합니다. 이 측정항목은 Cloud Monitoring에서 사용할 수 있습니다.
spanner.googleapis.com/api/read_request_latencies_by_serving_location
/serving_location
또는 /is_directed_read
필드를 사용하여 이 측정항목을 필터링할 수 있습니다. /serving location
필드는 요청이 제공되는 Spanner 서버의 위치를 나타냅니다. /is_directed_read
필드는 지정된 읽기 옵션이 사용 설정되어 있는지 나타냅니다.
사용 가능한 측정항목의 전체 목록은 Spanner 측정항목 목록을 참조하세요.
다음 단계
- 트랜잭션 외부에서 읽기를 실행하는 방법을 알아보세요.