Czy lepiej jest mieć wiele małych kontenerów obiektów blob usługi Azure Storage (każdy z kilkoma obiektami blob) czy jeden naprawdę duży kontener z mnóstwem obiektów blob?

81

Scenariusz jest więc następujący:

Mam wiele wystąpień usługi internetowej, która zapisuje obiekt blob danych w usłudze Azure Storage. Muszę mieć możliwość grupowania obiektów blob w kontenerze (lub katalogu wirtualnym) w zależności od tego, kiedy zostały odebrane. Raz na jakiś czas (w najgorszym przypadku codziennie) starsze obiekty blob będą przetwarzane, a następnie usuwane.

Mam dwie możliwości:

opcja 1

Tworzę jeden kontener o nazwie „blobs” (na przykład), a następnie przechowuję w nim wszystkie blogi. Każdy obiekt blob będzie używał nazwy stylu katalogu z nazwą katalogu będącą datą jego otrzymania (np. „Hr0min0 / data.bin”, „hr0min0 / data2.bin”, „hr0min30 / data3.bin”, „hr1min45 / data.bin ", ...," hr23min0 / dataN.bin ", etc - nowy katalog co X minut). To, co przetwarza te obiekty BLOB, najpierw przetworzy hr0min0, następnie hr0minX i tak dalej (a obiekty blob są nadal zapisywane podczas przetwarzania).

Opcja 2

Mam wiele kontenerów, z których każdy ma nazwę opartą na czasie przybycia (więc najpierw będzie to kontener o nazwie blobs_hr0min0, a następnie blobs_hr0minX itd.), A wszystkie obiekty blob w kontenerze to te obiekty blob, które przybyły w określonym czasie. To, co przetwarza te blogi, będzie przetwarzać jednocześnie jeden kontener.

Więc moje pytanie brzmi: która opcja jest lepsza? Czy opcja 2 zapewnia lepszą równoległość (ponieważ kontenery mogą znajdować się na różnych serwerach), czy też opcja 1 jest lepsza, ponieważ wiele kontenerów może powodować inne nieznane problemy?

encee
źródło

Odpowiedzi:

61

Nie sądzę, że to naprawdę ma znaczenie (z punktu widzenia skalowalności / równoległości), ponieważ partycjonowanie w magazynie obiektów blob platformy Win Azure odbywa się na poziomie obiektów blob, a nie kontenera. Powody rozproszenia się w różnych kontenerach mają więcej wspólnego z kontrolą dostępu (np. SAS) lub całkowitym rozmiarem pamięci.

Więcej informacji można znaleźć tutaj: http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-azure-storage-abstractions-and-their-scalability-targets.aspx

(Przewiń w dół do „Partycji”).

Cytowanie:

Obiekty BLOB - ponieważ klucz partycji zależy od nazwy obiektu BLOB, możemy równoważyć obciążenie dostępu do różnych obiektów blob na dowolnej liczbie serwerów, aby skalować w poziomie dostęp do nich. Dzięki temu kontenery mogą rosnąć tak duże, jak ich potrzebujesz (w ramach limitu miejsca na koncie magazynu). Wadą jest to, że nie zapewniamy możliwości wykonywania niepodzielnych transakcji na wielu obiektach blob.

Eugenio Pace
źródło
Proszę, czy istnieje potrzeba, aby nazwa obiektu blob była jak najkrótsza? (Mam „jeden naprawdę duży pojemnik z tonami plamek”, opcja 1 w pytaniu.)
nmit026
60

Każdy udzielił Ci doskonałych odpowiedzi dotyczących bezpośredniego dostępu do obiektów blob. Jeśli jednak musisz wyświetlić listę obiektów blob w kontenerze, prawdopodobnie zobaczysz lepszą wydajność w modelu z wieloma kontenerami. Właśnie rozmawiałem z firmą, która przechowuje ogromną liczbę obiektów blob w jednym kontenerze. Często wymieniają obiekty w kontenerze, a następnie wykonują akcje na podzbiorze tych obiektów blob. Widzą wzrost wydajności, ponieważ czas na pobranie pełnej listy rośnie.

Może to nie mieć zastosowania w Twoim scenariuszu, ale warto to rozważyć ...

David Makogon
źródło
1
To jest dobra uwaga. W chwili pisania tego tekstu (czerwiec 2016 r.) Uważam, że nadal nie ma innego sposobu na uzyskanie liczby obiektów blob w kontenerze niż pobranie listy wszystkich obiektów blob w tym kontenerze i sprawdzenie właściwości listy Count.
Steven Rands
Czy istnieje potrzeba, aby nazwa obiektu blob była jak najkrótsza? (Mam „jeden naprawdę duży pojemnik z tonami plamek”, opcja 1 w pytaniu.)
nmit026
Dokładnie scenariusz, którego staramy się uniknąć
Glenit
21

Teoretycznie nie powinno być różnicy między wieloma kontenerami lub mniejszą liczbą kontenerów z większą liczbą obiektów typu blob. Dodatkowe kontenery mogą być przydatne jako dodatkowe granice bezpieczeństwa (na przykład dla publicznego anonimowego dostępu lub różnych podpisów SAS). Dodatkowe kontenery mogą również nieco ułatwić porządkowanie podczas przycinania (usuwanie pojedynczego kontenera zamiast kierowania na każdy obiekt blob). Z tych powodów używam więcej kontenerów (nie ze względu na wydajność).

Teoretycznie wpływ na wydajność nie powinien istnieć. Sam obiekt BLOB (pełny adres URL) jest kluczem partycji w systemie Windows Azure (był przez długi czas). To najmniejsza rzecz, która będzie równoważona obciążeniem z serwera partycji. Tak więc możesz (i często będziesz) mieć dwa różne obiekty blob w tym samym kontenerze, które są obsługiwane przez różne serwery.

Jeremy wskazuje, że istnieje różnica w wydajności między większą a mniejszą liczbą kontenerów. Nie zagłębiłem się w te testy porównawcze wystarczająco, aby wyjaśnić, dlaczego tak się dzieje, ale podejrzewam inne czynniki (takie jak rozmiar, czas trwania testu itp.), Aby wyjaśnić wszelkie rozbieżności.

Dunnry
źródło
4

Jest jeszcze jeden czynnik, który ma na to wpływ. Cena £!

Obecnie operacje Lista i Utwórz kontener są w tej samej cenie: 0,054 USD / 10 000 połączeń

Ta sama cena jest faktycznie za napisanie obiektu blob.

Więc w skrajnych przypadkach możesz zapłacić znacznie więcej, jeśli utworzysz i usuniesz wiele kontenerów

  • usuwanie jest bezpłatne

kalkulator możesz zobaczyć tutaj: https://azure.microsoft.com/en-us/pricing/calculator/

Jiří Herník
źródło