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 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>
    
    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. Der Größenwert kann von 1Gi bis 16384Gi reichen.

    Die folgenden Felder sind optional:

    • blockConfig.initialContents.fromSnapshot: Gibt den Namen eines -Snapshots an (wird in den folgenden Abschnitten erläutert), der von einem anderen Volume stammt. Der Snapshot wird zur Initialisierung des Blockvolumens verwendet.

      Der Snapshot-Name kann ein vollqualifizierter 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.

    • 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.

      • Der unterstützte Bereich für AWS ist 3000-16000, mit einer Voreinstellung von 3000.

      • Der unterstützte Bereich für Azure ist 3000-80000, mit einer Voreinstellung von 3000.

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

      • Der unterstützte Bereich für AWS ist 125-1000, mit einer Voreinstellung von 125.

      • Der unterstützte Bereich für Azure ist 125-1200, mit einer Standardeinstellung von 125.

    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.

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.

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.

    • Der Größenwert des Blockspeicher-Volumes kann zwischen 1Gi und 16384Gi liegen.

    • Jeder Dienst kann bis zu drei Block-Volumes unterstützen. Dies bezieht sich auf spec.volumes in der Dienstspezifikation <label-snowpark_containers_spec_volume>.

    • Die Gesamtzahl der Blockspeicher-Volumes pro Snowflake-Konto ist auf 10 begrenzt.

    • Die Anzahl der erlaubten 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 oder throughput 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.

  • IOPS und durchsatzbezogene Richtlinien

    • 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

    • 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.

    • Für Azure:

      • Ab einer Volume-Größe von 6GB erhöht sich die unterstützte Anzahl von IOPS um 500 für jedes GB über 6GB hinaus (Datenträger-Typen). 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.