Verwenden von Blockspeicher-Volumes mit Diensten

Snowflake unterstützt die folgenden Speicher-Volume-Typen für Ihre containerisierten Anwendungen: interner Snowflake-Stagingbereich, lokaler Speicher, Arbeitsspeicher-Volumes und Blockspeicher-Volumes.

Angeben von Blockspeicher in Dienstspezifikation

Um einen Dienst (einschließlich Jobdienst) zu erstellen, der Blockspeicher verwendet, stellen Sie die erforderliche Konfiguration in der Dienstspezifikation wie folgt bereit:

  1. Geben Sie das Feld spec.volumes an, um die zu erstellenden Blockspeicher-Volumes zu definieren.

    volumes:
      - name: <name>
        source: block
        size: <size-in-Gi>
        blockConfig:                             # optional
          initialContents:
            fromSnapshot: <snapshot-name>
          iops: <number-of-operations>
          throughput: <MiB-per-second>
          encryption: SNOWFLAKE_SSE | SNOWFLAKE_FULL
    
    Copy

    Die folgenden Felder sind erforderlich:

    • name: Eindeutiger Name des Volumes.

    • source: Typ des Volumens. Bei Blockspeicher-Volumes ist der Wert block.

    • size: Speicherkapazität des Blockspeicher-Volumes, gemessen in Bytes. Der Wert muss immer eine Ganzzahl (Integer) sein, die mit dem Suffix „Gi“ für die Einheit angegeben wird. Beispiel: 5Gi bedeutet 5*1024*1024*1024 Bytes. Die Größenwerte für Cloud-Anbieter:

      • 1Gi bis 16384Gi für AWS und Azure.

      • 4Gi bis 16384Gi für Google Cloud.

    Die folgenden Felder sind optional:

    • blockConfig.initialContents.fromSnapshot: Gibt einen zuvor erstellten Snapshot eines anderen Volumes an, um das Blockspeicher-Volume zu initialisieren. Der Snapshot-Name kann ein vollständig qualifizierter Bezeichner sein, wie z.B. TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT. Außerdem wird der Snapshot-Name relativ zur Datenbank und dem Schema des Dienstes aufgelöst. Wenn Sie Ihren Dienst zum Beispiel in TUTORIAL_DB.DATA_SCHEMA erstellt haben, dann entspricht fromSnapshot: MY_SNAPSHOT fromSnapshot: TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT.

      Beachten Sie Folgendes:

      • Der Snapshot muss sich im Status CREATED befinden, bevor er zur Erstellung eines Volumes verwendet werden kann, da sonst die Erstellung des Dienstes fehlschlägt.

      • Der Verschlüsselungstyp des Snapshots muss mit dem des zu erstellenden Volumes übereinstimmen.

      Verwenden Sie den Befehl DESCRIBE SNAPSHOT, um den Status und den Verschlüsselungstyp des Snapshots abzurufen.

    • blockConfig.iops: Gibt die unterstützte Höchstzahl von Operationen für die Eingabe/Ausgabe pro Sekunde an. Beachten Sie, dass die Datengröße pro Operation auf 256 KiB begrenzt ist.

      • Für AWS: Der unterstützte Bereich ist 3000–16000, mit einer Voreinstellung von 3000.

      • Für Azure: Der unterstützte Bereich ist 3000–80000, mit einer Voreinstellung von 3000.

      • Für Google Cloud:

        • Google Cloud CPU-Instanzen: Der unterstützte Bereich ist 2000–160000 mit den folgenden Standardwerten:

          • 2000 IOPS für eine 4-Gi-Laufwerksgröße

          • 2500 IOPS für eine 5-Gi-Laufwerksgröße

          • 3000 IOPS für alle anderen Laufwerksgrößen

        • Google Cloud GPU-Instanzen: Snowflake empfiehlt, nur den Durchsatz anzugeben. blockConfig.iops muss 16 * blockConfig.throughput für GPU-Instanzen in Google Cloud sein.

    • blockConfig.throughput: Gibt den Spitzendurchsatz in MiB/Sekunde an, der für das Volume bereitgestellt werden soll.

      • Für AWS: Der unterstützte Bereich ist 125–1000, mit einer Voreinstellung von 125.

      • Für Azure: Der unterstützte Bereich ist 125–1200, mit einer Voreinstellung von 125.

      • Für Google Cloud:

        • Google Cloud CPU-Instanzen: Der unterstützte Bereich liegt zwischen 140 und 2400, wobei die Voreinstellung 140 ist.

        • Google Cloud GPU-Instanzen: Der unterstützte Bereich liegt zwischen 400 und 1.200.000, wobei der Standardwert 400 beträgt, aber nicht weniger als 0,12 pro GB der Volume-Größe.

    • blockConfig.encryption: Geben Sie den Verschlüsselungstyp des Volumes an: SNOWFLAKE_SSE oder SNOWFLAKE_FULL. Weitere Informationen dazu finden Sie unter Unterstützung für Verschlüsselung.

    Beispiel:

    volumes:
      - name: vol-1
        source: block
        size: 200Gi
        blockConfig:
          initialContents:
            fromSnapshot: snapshot1
          iops: 3000
          throughput: 125
    
    Copy
  2. Geben Sie das Feld spec.containers.volumeMount an, um zu beschreiben, wo in Ihren Anwendungscontainern die Blockspeicher-Volumes gemountet werden sollen. Die Angaben, die Sie in diesem Feld machen, sind für alle unterstützten Speichervolumes gleich.

Über IOPS und Durchsatz

Wenn die Leistung Ihres DienstesIO nicht Ihren Erwartungen entspricht und der Dienst durch das Blockspeicher-Volume IO oder den Durchsatz beeinträchtigt wird, sollten Sie in Erwägung ziehen, IOPS oder den Durchsatz zu erhöhen. In der aktuellen Implementierung müssen Sie bei solchen Änderungen den Dienst neu erstellen.

Sie können diese verfügbaren Plattformmetriken überprüfen, um festzustellen, ob Ihr Dienst auf dem Blockspeicher einen Engpass hat:

  • container.cpu.usage

  • volume.read.iops

  • volume.write.iops

  • volume.read.throughput

  • volume.write.throughput

Je nach Cloud-Anbieter gelten die folgenden Überlegungen:

  • Konfigurieren von iops und Durchsatz für AWS:

    • Die maximale Konfiguration von IOPS beträgt 500 IOPS pro GiB Volume-Größe, bis zu einem Maximum von 16.000 IOPS. Zum Beispiel kann die maximale IOPS eines 10 GiB Volumes 500 * 10 = 5000 sein. Beachten Sie daher, dass die maximale IOPS von 16.000 nur konfiguriert werden kann, wenn Ihr Volume 32 GiB oder größer ist.

    • Der maximale Durchsatz, der konfiguriert werden kann, ist 1 MiB/Sekunde für jeweils 4 IOPS, bis zu einem Maximum von 1000 MiBs/Sekunde. Mit der Standardeinstellung 3000 IOPS können Sie beispielsweise einen Durchsatz von bis zu 750 MiB/Sekunde (3000/4=750) konfigurieren.

  • Konfigurieren von iops und Durchsatz für Azure:

    • Ab einer Volume-Größe von 6 GB erhöht sich die unterstützte Anzahl von IOPS um 500 für jedes GB über 6 GB (Datenträger-Typen) hinaus. Die maximale IOPS eines 10GB-Volumes kann 500 * 4 + 3000 = 5000 betragen. Beachten Sie daher, dass die maximale IOPS von 80.000 nur konfiguriert werden kann, wenn Ihr Volume 160 GiB oder größer ist.

    • Nach 6 GB beträgt der maximale Durchsatz, der konfiguriert werden kann, 0,25 MiB/Sekunde für jede IOPS, bis zu einem Maximum von 1200 MiBs/Sekunde. Mit der Standardeinstellung 3000 IOPS können Sie beispielsweise einen Durchsatz von bis zu 750 MiB/Sekunde (3000*0,25=750) konfigurieren.

  • Konfigurieren von iops und Durchsatz für Google Cloud:

    • Für CPU-Instanzen:

      • IOPS sind konfigurierbar bis zu 500 IOPS pro Gi Volumengröße, mit einem Maximum von 160.000 IOPS. Ein 10-Gi-Volume kann zum Beispiel maximal 5.000 IOPS (500 IOPS * 10 Gi) erreichen. Um das Maximum von 160.000 IOPS zu erreichen, ist eine Volumengröße von 320 Gi oder größer erforderlich.

      • Ein maximaler Durchsatz von 2400 MiB/Sekunde kann konfiguriert werden, mit einer Rate von 1 MiB/Sekunde für jeweils 4 IOPS. Zum Beispiel ermöglicht 3000 IOPS einen Durchsatz von bis zu 750 MiB/Sekunde (3000 / 4 = 750).

    • Für GPU-Instanzen:

      • IOPS können nicht unabhängig vom Durchsatz festgelegt werden; IOPS werden als 16 multipliziert mit dem Durchsatzwert berechnet. Daher bestimmt die Angabe des Durchsatzes automatisch die IOPS. Es wird nicht empfohlen, IOPS für Festplatten zu konfigurieren, die mit GPU-Instanzen verwendet werden.

      • Sie müssen einen Mindestdurchsatz konfigurieren. Er muss mindestens 400 MiB/s betragen, oder 0,12 MiB/s pro GiB Volumengröße, je nachdem, welcher Wert höher ist.

      • Die konfigurierbare Durchsatzrate beträgt 1600 MiB/s pro GiB der Volumengröße, mit einem Maximum von 1.200.000 MiB/s. Zum Beispiel kann ein 10 GiB Volumen einen maximalen Durchsatz von 16.000 MiB/s (1600 * 10) erreichen. Beachten Sie, dass die Obergrenze von 1.200.000 MiB/s nur mit einem Volumen von 750 GiB oder mehr erreicht werden kann.

Anforderungen an die Zugriffssteuerung

Wenn Sie einen vorhandenen Snapshot (fromSnapshot ist in der Spezifikation) zur Initialisierung des Volumes verwenden möchten, muss die Eigentümerrolle des Dienstes die Berechtigung USAGE für den Snapshot haben.

Die Eigentümerrolle des Dienstes muss die Berechtigung USAGE für die Datenbank und das Schema haben, die den Snapshot enthalten.

Verwalten von Snapshots

Sie können Snapshots von Ihrem Blockspeicher-Volume erstellen und das Backup später wie folgt verwenden:

  • Verwenden Sie das Snapshot-Backup, um ein vorhandenes Blockspeicher-Volume wiederherzustellen.

  • Verwenden Sie die Snapshot-Sicherung als Startdaten, um ein neues Blockspeicher-Volume zu initialisieren, wenn Sie einen neuen Dienst erstellen.

Sie sollten sich vergewissern, dass alle Aktualisierungen auf der Festplatte gespeichert sind, bevor Sie den Snapshot erstellen.

Snowflake bietet die folgenden Befehle zum Erstellen und Verwalten von Snapshots:

Um einen Snapshot auf einem vorhandenen Blockspeicher-Volume wiederherzustellen, können Sie außerdem den Befehl ALTER SERVICE … RESTORE VOLUME ausführen. Beachten Sie, dass Sie den Dienst erst anhalten müssen, bevor Sie einen Snapshot wiederherstellen können. Nach Wiederherstellung eines Volumes wird der Dienst automatisch fortgesetzt.

Kosten für Blockspeicher

Weitere Informationen finden Sie in der Snowflake Service Consumption Table.

Wenn ein Blockspeicher-Volume mit einem Jobdienst verwendet wird, stellt Snowflake die Berechnung der Blockspeicherkosten ein, nachdem der Jobdienst entweder vom Benutzer beendet oder von Snowflake nach Abschluss bereinigt wurde.

Unterstützung für Verschlüsselung

Blockspeicher-Volumes und Snapshots unterstützen die gleichen beiden Verschlüsselungsmodi, die auch für andere von Snowflake verwaltete Speicher verwendet werden:

  • SNOWFLAKE_SSE: Nur serverseitige Verschlüsselung. Dies ist die Standardkonfiguration für Kunden, die Tri-Secret-Secure nicht auf ihren Snowflake-Konten aktiviert haben.

    Snowflake verwendet die Verschlüsselung des Clouddienstanbieters (CSP) für Blockspeicher-Volumes und Snapshots.

  • SNOWFLAKE_FULL: Clientseitige und serverseitige Verschlüsselung. Dies ist die Standardkonfiguration für Kunden, die Tri-Secret-Secure in ihren Snowflake-Konten aktiviert haben.

    Die Daten werden zunächst auf dem Client (Snowpark Container Services host) verschlüsselt, bevor sie zur Speicherung an eine CSP gesendet werden. Jedes Volume wird mit einem eindeutigen Volume-Schlüssel verschlüsselt. Derselbe Schlüssel wird für die Verschlüsselung von Snapshots verwendet, die Sie von diesem Volume erstellen.

    Da Snowflake eine zusätzliche Verschlüsselung der Daten vornimmt, wirkt sich die Verwendung von SNOWFLAKE_FULL-Volumes auf die Leistung und Ressourcennutzung aus. Snowflake verwendet die vom Linux-Kernel bereitgestellten Verschlüsselungsmechanismen, sodass der Effekt nicht signifikant sein sollte. Jede Auswirkung auf die Leistung ist wahrscheinlich Workload-spezifisch, daher empfehlen wir Ihnen, Engpässe bei Diensten oder Aufträgen zu identifizieren, den Volumendurchsatz zu erhöhen oder einen leistungsfähigeren Server bereitzustellen.

    Derzeit wird die Schlüsselrotation oder Wiederverschlüsselung für Blockspeicher-Volumes und Snapshots in Snowflake nicht unterstützt. Um den Verschlüsselungsschlüssel eines Volumes zu ändern, erstellen Sie ein neues Volume und kopieren die Daten vom ursprünglichen Volume.

    Für Kunden, die Tri-Secret Secure auf ihren Konten aktiviert haben, ist zu beachten, dass bei Entzug des Zugriffs auf einen vom Kunden verwalteten Schlüssel die Volume-Daten für die derzeit laufenden Dienste, die das Volume verwenden, verfügbar bleiben. Wir empfehlen Ihnen, diese Dienste abzuschalten, wenn Sie den Zugriff auf den vom Kunden verwalteten Schlüssel widerrufen, damit die Daten nicht verfügbar sind. Nachdem Sie den Schlüssel widerrufen haben, können die Dienste mit verschlüsselten Volumes nicht mehr starten.

Volume-Snapshots behalten die Verschlüsselungsart ihres Quellvolumes bei. Ein Snapshot eines SNOWFLAKE_SSE-Volumes verwendet zum Beispiel auch SNOWFLAKE_SSE-Verschlüsselung. Wenn ein Snapshot als anfänglicher Inhalt eines Volumes oder mit dem Befehl ALTER SERVICE … RESTORE VOLUME verwendet wird, muss sein Verschlüsselungstyp mit dem Verschlüsselungstyp des Volumes übereinstimmen. Andernfalls schlägt der Befehl fehl.

Beispiel

Ein Beispiel dazu finden Sie im Tutorial. Das Tutorial bietet eine schrittweise Anleitung zum Erstellen eines Dienstes mit einem eingebundene Blockspeicher-Volume.

Richtlinien und Einschränkungen

Die folgenden Einschränkungen gelten für Dienste, die Blockspeicher-Volumes verwenden:

  • Allgemeine Beschränkungen. Sollten Sie Probleme mit diesen Beschränkungen haben, wenden Sie sich bitte an Ihren Kontobeauftragten.

    • Die maximale Anzahl von Blockspeicher-Volumes pro Service beträgt 3.

    • Die maximale Anzahl von Blockspeicher-Volumes pro Snowflake-Konto beträgt 100.

    • In der folgenden Tabelle ist die maximale Anzahl der Blockspeicher-Volumes aufgeführt, die pro Computepool-Knoten gemountet werden können, abhängig vom Instanztyp des Knotens. Snowflake stellt sicher, dass Dienstinstanzen, die Blockspeicher-Volumes verwenden, in Übereinstimmung mit diesen Grenzen platziert werden. Dies kann dazu führen, dass Dienste im Zustand PENDING auf zusätzliche Ressourcen warten.

      Instanzfamilie

      AWS-Limit

      Azure-Limit

      CPU_X64_XS

      22

      3

      CPU_X64_S

      22

      8

      CPU_X64_M

      22

      16

      CPU_X64_L

      22

      32

      HIGHMEM_X64_S

      22

      16

      HIGHMEM_X64_M

      22

      32

      HIGHMEM_X64_L

      22

      32

      GPU_NV_XS (nur Azure)

      k.A.

      8

      GPU_NV_S (nur AWS)

      22

      k.A.

      GPU_NV_SM (nur Azure)

      k.A.

      32

      GPU_NV_M (nur AWS)

      21

      k.A.

      GPU_NV_2M (nur Azure)

      k.A.

      32

      GPU_NV_3M (nur Azure)

      k.A.

      16

      GPU_NV_SL (nur Azure)

      k.A.

      32

      GPU_NV_L (nur AWS)

      14

      k.A.

    • Die maximale Anzahl von Snapshots pro Snowflake-Konto beträgt 100.

  • Der Dienst, der Blockspeicher-Volumes verwendet, muss die gleiche minimale und maximale Anzahl von Instanzen haben.

  • Nachdem der Dienst erstellt wurde, gilt Folgendes:

    • Sie können die Anzahl der Dienstinstanzen nicht mit dem Befehl ALTER SERVICE… SET … ändern, wenn ein Service Blockspeicher-Volumes verwendet.

    • Sie können die Felder size, iops, throughput oder encryption von Blockspeicher-Volumes nicht ändern.

    • Es können keine neuen Blockspeicher-Volumes hinzugefügt und keine bestehenden Blockspeicher-Volumes entfernt werden.

    • Blockspeicher-Volumes bleiben erhalten, wenn ein Dienst aktualisiert oder angehalten und fortgesetzt wird. Wenn ein Dienst angehalten wird, zahlen Sie weiterhin für das Volumen, da es erhalten bleibt. Nachdem Sie einen Dienst aktualisiert oder fortgesetzt haben, ordnet Snowflake jedes Blockspeicher-Volume der gleichen Dienstinstanz-ID zu wie zuvor.

    • Blockspeicher-Volumes werden gelöscht, wenn der Dienst gelöscht wird. Um die Daten auf den Volumes zu erhalten, können Sie von den Volumens Snapshots erstellen. Sie können die Snapshots später verwenden, um neue Volumes zu initialisieren.

    • Blockspeicher-Volumes unterstützen Tri-Secret Secure und Periodische Wiederverschlüsselung nicht. Das bedeutet, dass bei Konten, bei denen Tri-Secret Secure oder die periodische Wiederverschlüsselung aktiviert ist, zwar alle anderen Snowflake-Daten weiterhin mit zusätzlicher Sicherheit ausgestattet sind, die in Ihren Blockspeicher-Volumes von Snowpark Container Services gespeicherten Images jedoch nicht.

      Wenn Sie ein Blockspeicher-Volume in einem Konto mit Tri-Secret Secure oder periodischer Wiederverschlüsselung erstellen möchten, müssen Sie daher zunächst bestätigen, dass Sie verstehen und damit einverstanden sind, dass Ihnen die Vorteile dieser zusätzlichen Sicherheit für Ihre Blockspeicher-Volumes nicht zur Verfügung stehen. Zur Bestätigung der Vereinbarung muss ein Kontoadministrator (Benutzer mit der Rolle ACCOUNTADMIN) den Parameter ENABLE_TRI_SECRET_AND_REKEY_OPT_OUT_FOR_SPCS_BLOCK_STORAGE auf Kontoebene auf TRUE setzen.