Utwórz partycje w okolicy limitów

Używanie partycji w celu obejścia ograniczeń dotyczących bazy danych, sieci i obliczeń

W chmurze wszystkie usługi mają limity skalowania w górę. Dokumentację limitów usług platformy Azure można znaleźć w temacie Azure subscription and service limits, quotas, and constraints (Ograniczenia i limity przydziału, usług i subskrypcji platformy Azure). Limity dotyczą liczby rdzeni, rozmiaru bazy danych oraz przepływności zapytań i sieci. Jeśli rozmiar systemu znacznie się zwiększy, może dojść do przekroczenia tych limitów. Partycjonowanie umożliwia ich obejście.

Istnieje wiele sposobów partycjonowania systemu:

  • Partycjonowanie bazy danych pozwala uniknąć limitów dotyczących rozmiaru bazy danych, operacji we/wy na danych lub liczby równoczesnych sesji.

  • Partycjonowanie kolejki lub magistrali komunikatów pozwala uniknąć limitów dotyczących liczby żądań lub liczby połączeń współbieżnych.

  • Partycjonowanie aplikacji internetowej App Service pozwala uniknąć limitów dotyczących liczby wystąpień na plan usługi App Service.

Można zastosować różne sposoby partycjonowania bazy danych: poziome, pionowe lub funkcjonalne.

  • Partycjonowanie poziome, nazywane również fragmentowaniem, polega na tym, że w poszczególnych partycjach znajdują się dane podzestawu danych. Partycje korzystają z jednego schematu danych. Na przykład klienci, których nazwy zaczynają się od A–M, przechodzą do jednej partycji, N–Z do innej partycji.

  • W przypadku użycia partycjonowania pionowego każda partycja zawiera podzestaw pól z elementów przechowywanych w magazynie danych. Na przykład często używane pola mogą zostać umieszczone w jednej partycji, a rzadziej używane pola — w innej.

  • W przypadku użycia partycjonowania funkcjonalnego dane są agregowane zgodnie ze sposobem ich użycia w poszczególnych kontekstach ograniczonych w systemie. Na przykład dane dotyczące faktur mogą być przechowywane w jednej partycji, a dane dotyczące spisu produktów — w innej. Schematy są niezależne.

Aby uzyskać szczegółowe wskazówki, zobacz Partycjonowanie danych.

Zalecenia

Podziel na partycje różne części aplikacji. Bazy danych w oczywisty sposób nadają się do partycjonowania, ale zastanów się również nad podzieleniem magazynu, pamięci podręcznej, kolejek i wystąpień obliczeniowych.

Zaprojektuj klucz partycji, aby uniknąć hotspotów. Jeśli po utworzeniu partycji w bazie danych większość żądań wciąż będzie kierowana do jednego fragmentu, oznacza to, że problem nie został rozwiązany. Najlepsze rozwiązanie polega na równomiernym rozłożeniu obciążenia na wszystkich partycjach. Na przykład algorytm wyznaczania wartości skrótu powinien uwzględniać identyfikator klienta, a nie pierwszą literę nazwy klienta, ponieważ niektóre litery powtarzają się częściej. Ta sama zasada dotyczy partycjonowania kolejki komunikatów. Wybierz taki klucz partycji, który prowadzi do równomiernego rozłożenia komunikatów w zestawie kolejek. Aby uzyskać więcej informacji, zobacz Fragmentowanie.

Utwórz partycje w okolicy limitów subskrypcji i usług platformy Azure. Poszczególne składniki i usługi mają swoje limity, ale dotyczy to również subskrypcji i grup zasobów. W przypadku bardzo dużych aplikacji może być konieczne utworzenie partycji w okolicy tych limitów.

Utwórz partycje na różnych poziomach. Rozważmy przypadek serwera bazy danych wdrożonego na maszynie wirtualnej. Maszyna wirtualna ma wirtualny dysk twardy obsługiwany przez usługę Azure Storage. Konto magazynu należy do subskrypcji platformy Azure. Zwróć uwagę na to, że limity występują na każdym kroku tej hierarchii. Serwer bazy danych może mieć limit puli połączeń. Maszyny wirtualne mają limity procesora CPU i sieci. Magazyn ma limity liczby operacji we/wy na sekundę. Subskrypcja ma limity liczby rdzeni maszyn wirtualnych. Ogólnie rzecz biorąc, łatwiej jest partycjonować na niższych poziomach hierarchii. Konieczność partycjonowania na poziomie subskrypcji powinna dotyczyć tylko dużych aplikacji.