Cassandra Go 클라이언트를 사용하여 Spanner Omni에 연결

Spanner용 Cassandra Go 클라이언트는 Apache Cassandra 데이터베이스용으로 작성된 애플리케이션을 Spanner에 연결합니다. 클라이언트는 Spanner와 마찬가지로 Spanner Omni와 상호작용합니다. Spanner는 Cassandra v4 유선 프로토콜을 기본적으로 지원하므로 이 클라이언트를 사용하면 gocql 드라이버를 사용하는 Go 애플리케이션이나 cqlsh와 같은 Go 이외의 애플리케이션 및 도구가 Spanner 데이터베이스에 연결할 수 있습니다.

이 클라이언트는 로컬 TCP 프록시 역할을 합니다. 드라이버 또는 클라이언트 도구가 전송하는 원시 Cassandra 프로토콜 바이트를 가로챕니다. 그런 다음 이러한 바이트와 필요한 메타데이터를 gRPC 메시지로 래핑하여 Spanner Omni와 통신합니다. 클라이언트는 Spanner Omni의 응답을 Cassandra 와이어 형식으로 다시 변환하고 원래 드라이버 또는 도구로 다시 전송합니다.

이 문서에서는 다음 방법 중 하나를 사용하여 클라이언트를 Spanner Omni와 통합하는 방법을 보여줍니다.

  • 인프로세스 종속 항목: 이미 gocql 드라이버를 사용하는 Go 애플리케이션에 이 방법을 사용합니다. 이 접근 방식은 최소한의 코드 수정으로 클라이언트를 애플리케이션 프로세스 내에 삽입합니다.

  • 사이드카 프록시: Go 이외의 애플리케이션에 사용하거나 cqlsh와 같은 외부 Cassandra 도구를 사용하는 경우 이 방법을 사용합니다. 이 접근 방식은 클라이언트를 독립형 프로세스로 실행합니다.

Apache Cassandra가 Spanner와 작동하는 방식에 대한 자세한 내용은 Cassandra 인터페이스를 참고하세요.

Spanner Cassandra Go 클라이언트를 사용해야 하는 경우

이 클라이언트는 다음과 같은 시나리오에서 유용합니다.

  • 최소한의 리팩터링으로 Spanner 사용 Go 애플리케이션의 백엔드로 Spanner를 사용하고 싶지만 데이터 액세스에는 익숙한 gocql API를 계속 사용하고 싶습니다.

  • Go 이외의 Cassandra 도구 사용 cqlsh와 같은 표준 Cassandra 도구나 Cassandra 드라이버를 사용하는 다른 언어로 작성된 애플리케이션을 사용하여 Spanner에 연결하려고 합니다.

클라이언트를 인프로세스 종속 항목으로 사용

Go 애플리케이션은 Spanner Cassandra Go 클라이언트를 처리 중 종속 항목으로 통합하여 Spanner Omni에 연결합니다. 이 접근 방식은 프록시 로직을 애플리케이션 내에 직접 삽입하므로 별도의 프로세스가 필요하지 않아 배포 아키텍처가 간소화됩니다. 이 구성은 추가 네트워크 홉과 데이터의 추가 직렬화 및 역직렬화를 방지하여 최적의 성능을 제공합니다.

클라이언트를 인프로세스 종속 항목으로 사용하려면 다음을 실행하세요.

  • Go 애플리케이션에서 Spanner 패키지를 가져옵니다.

    import spanner "github.com/googleapis/go-spanner-cassandra/cassandra/gocql"
    
  • 클러스터 생성 코드를 수정합니다. gocql.NewCluster를 사용하는 대신 spanner.NewCluster를 사용하고 다음 Spanner Omni 관련 옵션을 제공합니다.

    일반 텍스트 통신

    다음 예시에서는 Spanner Omni에 일반 텍스트 연결을 설정하는 방법을 보여줍니다.

    func main() {
      opts := &spanner.Options{
          // Required: Specify the Spanner database URI
          DatabaseUri: "DATABASE_ID",
      }
      // Optional: Configure Spanner Omni cluster settings as needed
      opts.ExperimentalHost = true
      opts.UsePlainText = true
    
      cluster := spanner.NewCluster(opts)
      // ...
    }
    

    TLS 연결

    다음 예시는 Spanner Omni에 TLS 연결을 설정하는 방법을 보여줍니다.

    func main() {
      opts := &spanner.Options{
          // Required: Specify the Spanner database URI
          DatabaseUri: "DATABASE_ID",
      }
      // Optional: Configure Spanner Omni cluster settings as needed
      opts.ExperimentalHost = true
      opts.CaCertificate = "PATH_TO_CA_CRT"
    
      cluster := spanner.NewCluster(opts)
      // ...
    }
    

    mTLS 연결

    다음 예시에서는 Spanner Omni에 대한 mTLS 연결을 설정하는 방법을 보여줍니다.

    func main() {
      opts := &spanner.Options{
          // Required: Specify the Spanner database URI
          DatabaseUri: "DATABASE_ID",
      }
      // Optional: Configure Spanner Omni cluster settings as needed
      opts.ExperimentalHost = true
      opts.CaCertificate = "PATH_TO_CA_CRT"
      opts.ClientCertificate = "PATH_TO_CLIENT_CERT"
      opts.ClientKey = "PATH_TO_CLIENT_KEY"
    
      cluster := spanner.NewCluster(opts)
      // ...
    }
    

클라이언트를 사이드카 프록시로 배포

Spanner Cassandra Go 클라이언트를 사이드카 프록시로 배포하는 것은 Go가 아닌 애플리케이션과 도구(예: cqlsh)가 표준 Cassandra 드라이버를 사용하여 Spanner Omni에 연결하는 효과적인 옵션입니다. 이 메서드는 Cassandra 유선 프로토콜 트래픽을 가로채고 이를 gRPC로 변환하여 Spanner Omni와 통신하는 독립형 TCP 프록시로 클라이언트를 실행합니다.

이 구성은 외부 Cassandra 도구를 사용해야 하거나 애플리케이션의 코드를 직접 수정하지 않아야 하는 경우에 유용합니다.

다음과 같은 방법으로 사이드카 프록시를 실행할 수 있습니다.

Go run 명령어로 로컬에서 실행

소스 코드에서 사이드카 프록시를 로컬 프로세스로 실행하는 것은 애플리케이션과 프록시 구성을 빠르게 반복하려는 개발 및 테스트 환경에 유용합니다.

  1. 저장소를 클론합니다.

    git clone https://github.com/googleapis/go-spanner-cassandra.git

  2. 저장소 디렉터리로 변경합니다.

    cd go-spanner-cassandra

  3. 필수 -db 플래그와 다음 Spanner Omni 특정 플래그를 사용하여 cassandra_launcher.go를 실행합니다. -db 값을 Spanner Omni 데이터베이스 이름으로 바꿉니다.

  • 일반 텍스트 통신의 경우 다음을 실행합니다.
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -usePlainText
  • TLS 연결의 경우 다음을 실행합니다.
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT
  • mTLS 연결의 경우 다음을 실행합니다.
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT -clientCertificate PATH_TO_CLIENT_CERT -clientKey PATH_TO_CLIENT_KEY

사전 빌드된 Docker 이미지로 실행

일관되고 격리된 런타임 환경을 제공하므로 프로덕션 환경에서는 사전 빌드된 Docker 이미지를 사용하여 사이드카 프록시를 컨테이너화된 애플리케이션으로 실행하는 것이 좋습니다.

  1. 공식 레지스트리 저장소에서 이미지를 가져옵니다.

    docker pull gcr.io/cloud-spanner-adapter/cassandra-adapter

  2. 필수 플래그를 사용하여 이미지를 실행합니다.

    일반 텍스트 통신

    일반 텍스트 통신의 경우 다음 명령어를 실행합니다.

    docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -usePlainText
    

    TLS 연결

    TLS 연결의 경우 다음 명령어를 실행합니다.

    docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT
    

    mTLS 연결

    mTLS 연결의 경우 다음 명령어를 실행합니다.

    docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT -clientCertificate PATH_TO_CLIENT_CERT -clientKey PATH_TO_CLIENT_KEY