Wskazówki dotyczące usługi CDN

Azure Storage
Azure Blob Storage

Sieć dostarczania zawartości (CDN, content delivery network) to rozproszona sieć serwerów, które pozwalają wydajnie dostarczać użytkownikom zawartość internetową. Sieci CDN przechowują zawartość buforowanej na serwerach brzegowych, które znajdują się blisko użytkowników końcowych, aby zminimalizować opóźnienie.

Sieci CDN są zwykle używane do dostarczania zawartości statycznej, takiej jak obrazy, arkusze stylów, dokumenty, skrypty po stronie klienta i strony HTML. Główne zalety korzystania z sieci CDN to mniejsze opóźnienie i szybsze dostarczanie zawartości użytkownikom, niezależnie od ich lokalizacji względem centrum danych, w którym jest hostowana aplikacja. Sieci CDN pomagają także zmniejszyć obciążenie aplikacji internetowej — nie musi ona obsługiwać żądań dotyczących zawartości hostowanej w sieci CDN.

Diagram sieci CDN

Usługa Azure Content Delivery Network to globalne rozwiązanie CDN, umożliwiające dostarczanie zawartości wymagającej wysokiej przepustowości, która jest hostowana na platformie Azure lub w dowolnej innej lokalizacji. Korzystając z usługi Azure CDN, można buforować publicznie dostępne obiekty załadowane z magazynu obiektów blob platformy Azure, aplikacji internetowej, maszyny wirtualnej lub dowolnego serwera internetowego.

W tym temacie opisano niektóre zagadnienia i najlepsze rozwiązania związane z używaniem sieci CDN. Aby uzyskać więcej informacji, zobacz Azure CDN.

Jak i dlaczego używane są sieci CDN

Typowe zastosowania sieci CDN obejmują:

  • Dostarczanie zasobów statycznych dla aplikacji klienckich, często z witryny internetowej. Mogą to być obrazy, arkusze stylów, dokumenty, pliki, skrypty po stronie klienta, strony HTML, fragmenty kodu HTML lub dowolna inna zawartość, której nie trzeba modyfikować na serwerze przy każdym żądaniu. Aplikacja może tworzyć elementy w czasie wykonywania i je udostępniać w sieci CDN (na przykład budując listę bieżących nagłówków wiadomości), ale operacje te nie są wykonywane przy każdym żądaniu.

  • Dostarczanie publicznej, statycznej i udostępnionej zawartości na urządzenia, takie jak telefony komórkowe i tablety. Sama aplikacja jest usługą internetową, która udostępnia interfejs API klientom uruchomionym na różnych urządzeniach. Sieć CDN może również dostarczać klientom statyczne zestawy danych (za pośrednictwem usługi internetowej), na przykład w celu wygenerowania interfejsu użytkownika klienta. Sieć CDN może służyć m.in. do dystrybucji dokumentów JSON lub XML.

  • Udostępnianie klientom całych witryn internetowych, które zawierają tylko publiczną, statyczną zawartość, bez korzystania z dedykowanych zasobów obliczeniowych.

  • Przesyłanie strumieniowe zawartości wideo na żądanie. Korzyści to małe opóźnienia i niezawodne połączenia, udostępniane przez centra danych usługi CDN znajdujące się na całym świecie. Usługi Microsoft Azure Media Services (AMS) są zintegrowane z usługą Azure CDN, co pozwala dostarczać zawartość bezpośrednio do sieci CDN w celu dalszej dystrybucji. Aby uzyskać więcej informacji, zobacz Streaming endpoints overview (Omówienie punktów końcowych przesyłania strumieniowego).

  • Ogólna poprawa komfortu pracy użytkowników, zwłaszcza w przypadkach, gdy mieszkają oni daleko od centrum danych hostującego aplikację. Tacy użytkownicy mogą doświadczać większych opóźnień. Duża część całkowitego rozmiaru zawartości w aplikacji internetowej jest często statyczna, a użycie sieci CDN może pomóc w utrzymaniu wydajności i ogólnego środowiska użytkownika, eliminując konieczność wdrażania aplikacji w wielu centrach danych. Aby wyświetlić listę lokalizacji węzłów usługi Azure CDN, zobacz Lokalizacje POP usługi Azure CDN.

  • Wspieranie rozwiązań IoT (Internetu rzeczy). Ze względu na ogromną liczbę różnych urządzeń należących do rozwiązania IoT aplikacja może łatwo ulec przeciążeniu w przypadku konieczności dystrybucji aktualizacji oprogramowania układowego bezpośrednio do każdego urządzenia.

  • Radzenie sobie ze szczytami i wzrostami zapotrzebowania bez konieczności skalowania aplikacji, co pozwala uniknąć wzrostu kosztów działania. Na przykład po wydaniu aktualizacji systemu operacyjnego urządzenia sprzętowego, takiego jak konkretny model routera, lub urządzenia konsumenckiego, takiego jak telewizor Smart TV, nastąpi gwałtowny wzrost zapotrzebowania, ponieważ w krótkim czasie aktualizacja ta zostanie pobrana przez miliony użytkowników i urządzeń.

Wyzwania

Planując korzystanie z sieci CDN, należy wziąć pod uwagę kilka kwestii.

  • Wdrożenie. Należy określić źródło zawartości pobieranej przez sieć CDN oraz ustalić, czy zawartość ma zostać wdrożona w kolejnych systemach magazynowych. Należy uwzględnić proces wdrażania zawartości statycznej i zasobów. Na przykład może być konieczne wdrożenie odrębnego etapu ładowania zawartości do magazynu obiektów blob platformy Azure.

  • Obsługa wersji i kontrola pamięci podręcznej. Należy zastanowić się nad aktualizowaniem zawartości statycznej i wdrażaniem nowych wersji. Pomocne będzie zrozumienie implementacji buforowania i czasu wygaśnięcia w sieci CDN. Aby uzyskać informacje o usłudze Azure CDN, zobacz Jak działa buforowanie.

  • Testowanie. Przeprowadzenie testów lokalnych ustawień sieci CDN podczas tworzenia i testowania aplikacji w środowisku lokalnym lub przejściowym może być trudne.

  • Optymalizacja wyszukiwarek (SEO). Podczas korzystania z sieci CDN taka zawartość, jak obrazy i dokumenty, jest udostępniana z innej domeny. Może to mieć wpływ na optymalizację wyszukiwania tej zawartości.

  • Bezpieczeństwo zawartości. Nie wszystkie sieci CDN udostępniają metody kontroli dostępu do zawartości. Niektóre usługi CDN, w tym Azure CDN, obsługują uwierzytelnianie oparte na tokenach, co pozwala chronić zawartość. Aby uzyskać więcej informacji, zobacz Securing Azure Content Delivery Network assets with token authentication (Zabezpieczanie zasobów usługi Azure Content Delivery Network za pomocą uwierzytelniania opartego na tokenach).

  • Zabezpieczenia klientów. Klienci mogą nawiązywać połączenia ze środowisk, które nie zezwalają na dostęp do zasobów w sieci CDN. Mogą to być środowiska w wdrożonymi zabezpieczeniami, w których dostęp został ograniczony tylko do zestawu znanych źródeł, lub takie, w których ładowanie zasobów jest możliwe tylko ze źródła strony. Obsługa tych przypadków wymaga implementacji rezerwowej.

  • Odporność. Sieć CDN stanowi potencjalny pojedynczy punkt awarii dla aplikacji.

Scenariusze, w których sieć CDN może być mniej przydatna, obejmują:

  • Jeśli zawartość ma niski wskaźnik trafień, w okresie ważności (określonym przez czas wygaśnięcia) może następować tylko kilka prób dostępu do niej.

  • Dane są prywatne, na przykład w dużych przedsiębiorstwach lub ekosystemach łańcucha dostaw.

Ogólne wskazówki i dobre rozwiązania

Korzystanie z sieci CDN to dobry sposób na ograniczenie obciążenia aplikacji oraz zwiększenie dostępności i wydajności. Należy rozważyć przyjęcie tego rozwiązania dla odpowiedniej zawartości i zasobów używanych przez aplikację. Projektując strategię korzystania z sieci CDN, należy uwzględnić kwestie opisane w poniższych sekcjach.

Wdrożenie

Jeśli zawartość statyczna nie zostanie dołączona w pakiecie wdrożeniowym lub procesie wdrożenia aplikacji, może być konieczne jej aprowizowanie i wdrożenie niezależnie od aplikacji. Należy zastanowić się, jak wpłynie to na rozwiązanie obsługi wersji, używane do zarządzania zarówno składnikami aplikacji, jak i statyczną zawartością zasobów.

Warto rozważyć użycie metod minifikacji i tworzenia pakietów, aby zmniejszyć czas ładowania. Tworzenie pakietów pozwala łączyć wiele plików w jeden plik. Minifikacja umożliwia usunięcie niepotrzebnych znaków ze skryptów i plików CSS bez zmiany funkcjonalności.

Wdrożenie zawartości w dodatkowej lokalizacji wymaga dodania kolejnego etapu w procesie wdrażania. Jeśli aplikacja aktualizuje zawartość w sieci CDN — w regularnych odstępach czasu lub w odpowiedzi na zdarzenie — zaktualizowana zawartość musi zostać zapisana nie tylko w punkcie końcowym sieci CDN, ale także we wszystkich dodatkowych lokalizacjach.

Należy rozważyć obsługę tworzenia i testowania w środowisku lokalnym w przypadku oczekiwania na udostępnienie zawartości statycznej z sieci CDN. Na przykład możesz wstępnie wdrożyć zawartość w usłudze CDN w ramach skryptu kompilacji. Można również sterować ładowaniem zasobów przez aplikację za pomocą flag lub dyrektyw kompilacji. Na przykład w trybie debugowania aplikacja może ładować zasoby statyczne z folderu lokalnego. W trybie przygotowania do wydania aplikacja będzie używać sieci CDN.

Dostępne są opcje kompresji plików, takie jak gzip (GNU zip). Kompresja może być przeprowadzana na serwerze źródłowym w warstwie hostowania aplikacji internetowych lub bezpośrednio na serwerach granicznych przez sieć CDN. Aby uzyskać więcej informacji, zobacz Poprawianie wydajności przez kompresowanie plików w usłudze Azure CDN.

Routing i obsługa wersji

Czasami trzeba użyć różnych wystąpień sieci CDN. Na przykład po wdrożeniu nowej wersji aplikacji może być konieczne użycie nowej sieci CDN, ale z zachowaniem starej sieci (przechowującej zawartość w starszym formacie) dla poprzednich wersji. Jeśli funkcję źródła zawartości pełni magazyn obiektów blob platformy Azure, można utworzyć oddzielny kontener lub konto magazynu, a następnie w punkcie końcowym sieci CDN ustawić wskazanie na ten kontener bądź konto magazynu.

Do oznaczania różnych wersji aplikacji w linkach do zasobów w sieci CDN nie należy używać ciągu zapytania, ponieważ podczas pobierania zawartości z magazynu obiektów blob platformy Azure ciąg zapytania staje się częścią nazwy zasobu (nazwy obiektu blob). Metoda ta może również wpływać na buforowanie zasobów przez klienta.

Wdrożenie nowych wersji zawartości statycznej po aktualizacji aplikacji może być trudne, jeśli poprzednie zasoby znajdują się w pamięci podręcznej w sieci CDN. Więcej informacji można znaleźć w poniższej sekcji dotyczącej kontroli pamięci podręcznej.

Rozważ ograniczenie dostępu do zawartości usługi CDN według kraju/regionu. Usługa Azure CDN umożliwia filtrowanie żądań na podstawie kraju lub regionu pochodzenia i ograniczania dostarczanej zawartości. Aby uzyskać więcej informacji, zobacz Ograniczanie dostępu do zawartości według kraju/regionu.

Kontrola pamięci podręcznej

Należy się zastanowić nad zarządzaniem pamięcią podręczną w systemie. Na przykład w usłudze Azure CDN można ustawić globalne reguły buforowania, a następnie ustawić niestandardowe buforowanie dla określonych punktów końcowych pochodzenia. Buforowaniem w sieci CDN można też sterować, wysyłając do źródła nagłówki z dyrektywami buforowania.

Aby uzyskać więcej informacji, zobacz Jak działa buforowanie.

Aby uniemożliwić dostęp do obiektów w sieci CDN, można je usunąć ze źródła lub usunąć punkt końcowy sieci CDN albo — w przypadku magazynu obiektów blob — ustawić kontener bądź obiekt blob jako prywatny. Jednak elementy nie są usuwane z sieci CDN, dopóki czas wygaśnięcia nie wygaśnie. Można też ręcznie wyczyścić punkt końcowy sieci CDN.

Zabezpieczenia

Sieć CDN umożliwia dostarczanie zawartości za pośrednictwem protokołu HTTPS (SSL) przy użyciu certyfikatu sieci CDN, a także za pośrednictwem standardowego protokołu HTTP. Aby uniknąć wyświetlania w przeglądarce komunikatów ostrzegawczych dotyczących mieszanej zawartości, do żądania zawartości statycznej, widocznej na stronach ładowanych za pośrednictwem protokołu HTTPS, może być konieczne użycie protokołu HTTPS.

W przypadku dostarczania statycznych zasobów, takich jak pliki czcionek, za pomocą sieci CDN mogą wystąpić problemy z zasadami tego samego źródła, jeśli do żądania tych zasobów z innej domeny jest używane wywołanie XMLHttpRequest. Wiele przeglądarek internetowych uniemożliwia współużytkowanie zasobów między źródłami (CORS, cross-origin resource sharing), chyba że konfiguracja serwera internetowego obejmuje ustawienie odpowiednich nagłówków odpowiedzi. Obsługę mechanizmu CORS w sieci CDN można skonfigurować za pomocą jednej z następujących metod:

Rezerwowa sieć CDN

Należy wziąć pod uwagę możliwość wystąpienia awarii lub tymczasowej niedostępności sieci CDN oraz zastanowić się, jak aplikacja może poradzić sobie z tym problemem. Aplikacje klienckie mogą używać kopii zasobów zapisanych w lokalnej pamięci podręcznej (na kliencie) i pochodzących z poprzednich żądań. Można również dołączyć kod, który w przypadku wykrycia awarii i niedostępności sieci CDN wysyła żądania dotyczące zasobów do źródła (folderu aplikacji lub kontenera obiektów blob platformy Azure, który zawiera zasoby).