Content Delivery Network to sieć serwerów, które w sposób efektywny dostarczają zawartość stron webowych do użytkowników. Aby zminimalizować opóźnienia w dostarczaniu treści CDN cachuje kontent w serwerach brzegowych najbliższych użytkownikom.
Tworzenie profilu CDN przy pomocy portalu Azure odbywa się przez kliknięcia:
All resources -> Add -> Mobile -> CDN
Do wyboru mamy kilka opcji cen (Pricing tier). Tworzymy dla naszego CDNa od razu stosowne zakończenie (endpoint).
Tworzenie CDN i zakończenia przy pomocy PowerShella:
1 2 |
PS> New-AzureRmCdnProfile -ProfileName cdn01 -ResourceGroupName RG01 -Sku Standard_Akamai -Location "Central US" PS> New-AzureRmCdnEndpoint -ProfileName cdn01 -ResourceGroupName RG01 -Location "Central US" -EndpointName cdn01endpoint -OriginName "Contoso" -OriginHostName "www.contoso.com" |
To samo ale w jednej linii:
1 |
PS> New-AzureRmCdnProfile -ProfileName cdn01 -ResourceGroupName RG01 -Sku Standard_Akamai -Location "Central US" | New-AzureRmCdnEndpoint -EndpointName cdn01endpoint -OriginName "Contoso" -OriginHostName "www.contoso.com" |
Więcej o zarządzaniu CDN przez PowerShella:
https://docs.microsoft.com/pl-pl/azure/cdn/cdn-manage-powershell
Blobsy z publicznym dostępem składowane w kontenerach zostają replikowane do zakończeń CDN. Aby uzyskać dostęp do zawartości naszego CDNa zamieniamy adresy URL odnoszące się do blobsów na adresy zakończeń CDN.
Stary adres:
http://storageaccount.blob.core.windows.net/imgs/logo.png
zamieniamy na zakończenie CDN:
http://[CDN endpoint name].azureedget.net/imgs/logo.png
CDN cachuje pliki tak długo jak określa to parametr time-to-live (TTL) zawarty w nagłówkach CacheControl HTTP. Jeżeli oryginalny serwer, z którego pochodzi strona nie określa TTL to CDN domyślnie przyjmuje 7 dni.
CacheControl na plikach blob można ustawiać podczas wgrywania plików na storage przy pomocy:
- StorageExplorera
- PowerShella
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
PS C:\> $ResourceGroup = "RG01" PS C:\> $StorageAccountName = "mystorageaccount0002" PS C:\> $StorageAccountKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $ResourceGroup -AccountName $StorageAccountName).Value[0] PS C:\> $context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey PS C:\> $filesPath = "D:\Pictures" PS C:\> $container = "mycontainer03" PS C:\> New-AzureStorageContainer -Name $container -Context $context -Permission Blob Blob End Point: https://mystorageaccount0002.blob.core.windows.net/ Name PublicAccess LastModified ---- ------------ ------------ mycontainer03 Blob 2018-08-18 13:01:38 +00:00 PS C:\> Get-ChildItem $filesPath | foreach { PS C:\> $contentType = "img/png" PS C:\> $cacheControl = "public, max-age=86400" PS C:\> $blobProperties = @{ContentType=$contentType; CacheControl=$cacheControl} PS C:\> Set-AzureStorageBlobContent -File $_.FullName -Container $container -Context $context -Properties $blobProperties } |
Max-age
ustawiamy w sekundach, 86400 sek. to 24 h.
Są dwa sposoby na usunięcie kontentu z CDN zależne od tego w jaki sposób kontent został dodany do CDN:
- Kontent jest w storagu – można ustawić kontener jako prywatny albo wykasować kontent z konternera, czy też wykasować sam kontener.
- Kontent jest w usłudze lub stronie webowej Azure – można zmodyfikować aplikację aby już nie serwowała danego kontentu. Można także wyaksować zakończenie CDN (endpoint) ale stracimy wtedy dostęp do innych treści w nim zawartych.
Kontent usunięty ze storaga lub niedostępny z aplikacji webowej pozostaje w CDN aż do czasu określonego przez TTL. Za pośrednictwem portalu Azure istnieje możliwość natychmiastowego usunięcia kontentu:
All resources -> [Nazwa CDN] -> Purge
Pole Content path powyższego okna dialogowego wspiera wyrażenia regularne. Wyrażenia regularne i opcja Purge all nie jest jednak wspierana aktualnie przez CDN Akamai. Więcej o opcji Purge tutaj:
https://docs.microsoft.com/en-us/azure/cdn/cdn-purge-endpoint
Innym sposobem kontrolowania cachowanych w CDN treści są query strips (ciągi zapytań), o czy można poczytać tutaj:
https://docs.microsoft.com/en-us/azure/cdn/cdn-query-string
Dane są keszowane w CDN dopiero gdy po raz pierwsze pojawia się o nie zapytanie, co oznacza że za pierwszym razem czas dostępu do takich danych przez użytkownika końcowego jest większy, ponieważ dane muszą zostać pobrane z serwera, z którego pochodzą, nie mogą być odczytane z keszu. CDN Verizon umożliwia pre-ładowanie danych do keszu dzięki czemu możliwe jest uniiknięcie opóźnienia w dostępie do danych.
Configuring custom domains.
Konta Azure Storage oraz Azure CDN dają możliwość dostępu do danych przy pomocy specjalnych nazw domenowych zamiast używania URLi Azure (np. mystorageaccount.core.windows.net). Są na to dwie metody.
- Tworzymy odpowiedni rekord CNAME u dostawcy, który utrzymuje naszą domenę.
Rekord CNAME Cel www.nazwa.com
mystorageaccount.blob.core.windows.netTa metoda jest prostsza ale może spowodować krótki przestój podczas weryfikacji przez Azure czy domena jest zarejestrowana u dostawcy. W portalu Azure klikamy:
All resources
->mystorageaccount
->Custom domain
-> wpisujemy naszą nazwę domenową (www.nazwa.com
). - U rejestratora domen rejestrujemy domenę pośrednią, dając przedrostek
asverify
przed nazwą domenową. Dodając ten przedrostek do swojej nazwy domenowej pozwalasz Azure na rozpoznawanie Twojej nazwy domenowej bez modyfikowania rekordu DNS dla tej domeny.
Rekord CNAME | Cel |
asverify.www.nazwa.com |
asverify.mystorageaccount.blob.core.windows.net |
W portalu Azure klikamy: All resources
-> mystorageaccount
-> Custom domain
-> wpisujemy naszą nazwę domenową (bez asverify
tj. www.nazwa.com
). Zahaczamy Use indirect CNAME validation i klikamy SAVE.
Po tym jak rekordy asverify
zostaną zweryfikowane przez Azure dodajemy właściwą nazwę domenową do naszego DNS. Rekordy asverify
można skasować ponieważ nie są po weryfikacji już używane.
Rekord CNAME | Cel |
www.nazwa.com |
|
Aby usunąć z portalu Azure naszą nazwę domenową wystarczy wejść do All resources
-> mystorageaccount
-> Custom domain
i usunąć naszą nazwę domenową.
Można to także zrobić w PowerShellu:
1 |
PS C:\ Set-AzureRmStorageAccount -ResourceGroupName "<resource-group-name>" -AccountName "<storage-account-name>" -CustomDomainName "" |
Więcej informacji o własnych nazwach domenowych: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-custom-domain-name#register-a-custom-domain
Dla zakończeń Azure CDN (endpoint) procedura jest prawie identyczna ale zamiast przedrostka verify
korzystamy z przedrostka cdnverify
.
Więcej informacji o własnych nazwach domenowych dla zakończeń CDN: https://docs.microsoft.com/en-us/azure/cdn/cdn-map-content-to-custom-domain
Dokumentacja Microsoftu do CDN:
http://Więcej o CDN: https://docs.microsoft.com/en-us/azure/cdn/cdn-overview