Dostrajanie wydajności przekazywania i pobierania za pomocą języka Go
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 przekazywania
Prawidłowe dostrajanie opcji transferu danych jest kluczem do niezawodnej wydajności przekazywania. Transfery magazynu 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.
Ustawianie opcji transferu dla przekazywania
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 przekazywany we fragmentach przy użyciu serii wywołań Put Block, po których następuje umieszczanie listy bloków.
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 przekazywania blokowego obiektu 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 przekazywania 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 są zwykle wykonywane w środowisku centrum danych, ale prawdopodobnie nie będą odpowiednie dla środowisk użytkownika domowego. Ź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.
BlockSize
Argument BlockSize
jest maksymalną długością transferu w bajtach podczas przekazywania blokowego obiektu blob we fragmentach.
Aby wydajnie przenosić dane, biblioteki klienckie mogą nie zawsze osiągać BlockSize
wartość 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 Concurrency
pola . 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, obiekt blob jest przekazywany we fragmentach z maksymalnym rozmiarem fragmentu wynoszącym 8 MiB ustawionym Block_Size
przez pole.
Zagadnienia dotyczące wydajności przekazywania
Podczas przekazywania biblioteki klienta usługi Storage dzielą dany strumień przekazywania na wiele podciążeń na podstawie opcji konfiguracji zdefiniowanych podczas budowy 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
Blokowe obiekty blob mają maksymalną liczbę bloków wynoszącą 50 000 bloków. Maksymalny rozmiar blokowego obiektu blob to 50 000 razy Block_Size
.
Buforowanie podczas przekazywania
Warstwa REST magazynu nie obsługuje wybierania operacji przekazywania REST, w której została przerwana; indywidualne transfery są ukończone lub 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
skrócenia czasu buforowania i może spowodować lepszą wydajność.
Dostrajanie wydajności pobierania
Prawidłowe dostrajanie opcji transferu danych jest kluczem do niezawodnej wydajności pobierania. Transfery magazynu 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 obiektu blob. 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ć te opcje konfiguracji jako parametr 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 podpobierz ma 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.