Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy aplikacja przesyła dane przy użyciu biblioteki klienta usługi Azure Storage dla języka Go, istnieje kilka czynników, które mogą mieć wpływ na szybkość, użycie pamięci, a nawet powodzenie lub niepowodzenie żądania. Aby zmaksymalizować wydajność i niezawodność transferów danych, ważne jest, aby aktywnie konfigurować opcje transferu biblioteki klienta w oparciu o środowisko, w których działa aplikacja.
W tym artykule przedstawiono kilka zagadnień dotyczących dostrajania opcji transferu danych. Odpowiednio dostrojona biblioteka klienta może efektywnie dystrybuować dane między wieloma żądaniami, co może spowodować zwiększenie szybkości działania, użycia pamięci i stabilności sieci.
Dostrajanie wydajności przesyłania plików
Prawidłowe dostrajanie opcji transferu danych jest kluczem do niezawodnej wydajności przekazywania. Transfery przechowywania są podzielone na kilka podtransferów na podstawie wartości tych właściwości. Maksymalny obsługiwany rozmiar transferu różni się w zależności od wersji operacji i usługi, dlatego zapoznaj się z dokumentacją, aby określić limity. Aby uzyskać więcej informacji na temat limitów rozmiaru transferu dla usługi Blob Storage, zobacz Skalowanie obiektów docelowych dla usługi Blob Storage.
Ustaw opcje transferu dla przesyłania
Jeśli łączny rozmiar obiektu blob jest mniejszy lub równy 256 MB, dane są przekazywane za pomocą pojedynczego żądania put blob . Jeśli rozmiar obiektu blob jest większy niż 256 MB lub jeśli rozmiar obiektu blob jest nieznany, obiekt blob jest przesyłany we fragmentach przy użyciu serii wywołań Put Block, a następnie Put Block List.
Następujące właściwości można skonfigurować i dostosować w zależności od potrzeb aplikacji:
-
BlockSize: maksymalna długość transferu w bajtach podczas przesyłania bloku blob we fragmentach. Wartość domyślna to 4 MB. -
Concurrency: maksymalna liczba podtransferów, które mogą być używane równolegle. Wartość domyślna to 5.
Te opcje konfiguracji są dostępne podczas ładowania przy użyciu następujących metod:
Metoda Upload nie obsługuje tych opcji i przekazuje dane w jednym żądaniu.
Uwaga
Biblioteki klienckie używają wartości domyślnych dla każdej opcji transferu danych, jeśli nie zostanie podana. Te wartości domyślne zazwyczaj działają efektywnie w środowisku centrum danych, ale prawdopodobnie nie będą odpowiednie dla środowisk domowych. Źle dostrojone opcje transferu danych mogą spowodować zbyt długie operacje, a nawet przekroczenia limitu czasu żądania. Najlepiej proaktywnie testować te wartości i dostrajać je w zależności od potrzeb aplikacji i środowiska.
RozmiarBloku
Argument BlockSize określa maksymalną długość transferu w bajtach podczas przesyłania obiektu blob w częściach.
Aby wydajnie przenosić dane, biblioteki klienckie mogą nie zawsze osiągnąć wartość BlockSize dla każdego transferu. W zależności od operacji maksymalna obsługiwana wartość rozmiaru transferu może się różnić. Aby uzyskać więcej informacji na temat limitów rozmiaru transferu dla usługi Blob Storage, zobacz wykres w temacie Skalowanie obiektów docelowych dla usługi Blob Storage.
Przykład kodu
Poniższy przykład kodu pokazuje, jak zdefiniować wartości dla wystąpienia UploadFileOptions i przekazać te opcje konfiguracji jako parametr do uploadFile.
Wartości podane w tym przykładzie nie są przeznaczone do zalecenia. Aby prawidłowo dostosować te wartości, należy wziąć pod uwagę konkretne potrzeby aplikacji.
func uploadBlobWithTransferOptions(client *azblob.Client, containerName string, blobName string) {
// Open the file for reading
file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
handleError(err)
defer file.Close()
// Upload the data to a block blob with transfer options
_, err = client.UploadFile(context.TODO(), containerName, blobName, file,
&azblob.UploadFileOptions{
BlockSize: int64(8 * 1024 * 1024), // 8 MiB
Concurrency: uint16(2),
})
handleError(err)
}
W tym przykładzie ustawiliśmy liczbę równoległych procesów roboczych transferu na 2, przy użyciu pola Concurrency. Ta konfiguracja otwiera maksymalnie dwa połączenia jednocześnie, co pozwala na równoległe przekazywanie. Jeśli rozmiar obiektu blob jest większy niż 256 MB, jest on przekazywany we fragmentach z maksymalnym rozmiarem 8 MiB określonym przez pole Block_Size.
Zagadnienia dotyczące wydajności przesyłania danych
Podczas przesyłania biblioteki klienta usługi Storage dzielą dany strumień przesyłania na wiele pomniejszych przesyłek na podstawie opcji konfiguracji zdefiniowanych w trakcie tworzenia klienta. Każdy podładunek ma własne dedykowane wywołanie operacji REST. Biblioteka klienta usługi Storage zarządza tymi operacjami REST równolegle (w zależności od opcji transferu), aby ukończyć pełne przekazywanie.
Możesz dowiedzieć się, jak biblioteka klienta obsługuje buforowanie w poniższych sekcjach.
Uwaga
Bloby mają maksymalną liczbę 50 000 bloków. Maksymalny możliwy rozmiar blokowego obiektu blob to 50 000 razy Block_Size.
Buforowanie podczas przekazywania
Warstwa REST w magazynie nie umożliwia kontynuacji operacji przesyłania REST od miejsca, w którym została zatrzymana; poszczególne transfery są albo dokończone, albo utracone. Aby zapewnić odporność na przekazywanie strumienia, biblioteki klienckie usługi Storage buforują dane dla każdego wywołania REST przed rozpoczęciem przekazywania. Oprócz ograniczeń szybkości sieci zachowanie buforowania jest powodem, dla którego należy wziąć pod uwagę mniejszą wartość BlockSize, nawet w przypadku przekazywania w sekwencji. Zmniejszenie wartości BlockSize zmniejsza maksymalną ilość danych buforowanych dla każdego żądania i ponawianie próby żądania, które zakończyło się niepowodzeniem. Jeśli występują częste przekroczenia limitu czasu podczas transferów danych o określonym rozmiarze, zmniejszenie wartości BlockSize skraca czas buforowania, co może poprawić wydajność.
Dostrajanie wydajności pobierania
Prawidłowe dostrajanie opcji transferu danych jest kluczem do niezawodnej wydajności pobierania. Transfery przechowywania są podzielone na kilka podtransferów na podstawie wartości tych właściwości.
Ustawianie opcji transferu dla pobierania
Na podstawie potrzeb aplikacji można dostroić następujące właściwości:
-
BlockSize: maksymalny rozmiar fragmentu używany do pobierania blobu. Wartość domyślna to 4 MB. -
Concurrency: maksymalna liczba podtransferów, które mogą być używane równolegle. Wartość domyślna to 5.
Te opcje są dostępne podczas pobierania przy użyciu następujących metod:
Metoda DownloadStream nie obsługuje tych opcji i pobiera dane w jednym żądaniu.
Przykład kodu
Poniższy przykład kodu pokazuje, jak zdefiniować wartości dla wystąpienia DownloadFileOptions i przekazać je jako parametry konfiguracji do DownloadFile.
Wartości podane w tym przykładzie nie są przeznaczone do zalecenia. Aby prawidłowo dostosować te wartości, należy wziąć pod uwagę konkretne potrzeby aplikacji.
func downloadBlobTransferOptions(client *azblob.Client, containerName string, blobName string) {
// Create or open a local file where we can download the blob
file, err := os.Create("path/to/sample/file")
handleError(err)
// Download the blob to the local file
_, err = client.DownloadFile(context.TODO(), containerName, blobName, file,
&azblob.DownloadFileOptions{
BlockSize: int64(4 * 1024 * 1024), // 4 MiB
Concurrency: uint16(2),
})
handleError(err)
}
Zagadnienia dotyczące wydajności pobierania
Podczas pobierania biblioteki klienckie usługi Storage dzielą dane żądanie pobierania na wiele podpobierze na podstawie opcji konfiguracji zdefiniowanych podczas budowy klienta. Każde pobieranie podrzędne ma swoje własne dedykowane wywołanie operacji REST. W zależności od opcji transferu biblioteki klienckie zarządzają tymi operacjami REST równolegle w celu ukończenia pełnego pobierania.
Powiązana zawartość
- Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla języka Go. Zobacz pełną listę artykułów z przewodnika dla deweloperów na stronie Tworzenie aplikacji.
- Aby dowiedzieć się więcej na temat czynników, które mogą mieć wpływ na wydajność operacji usługi Azure Storage, zobacz Opóźnienie w usłudze Blob Storage.
- Aby zapoznać się z listą zagadnień projektowych dotyczących optymalizacji wydajności aplikacji korzystających z usługi Blob Storage, zobacz Lista kontrolna wydajności i skalowalności dla usługi Blob Storage.