Szerkesztés

Megosztás a következőn keresztül:


Statikus tartalom üzemeltetési minta

Azure Storage

A statikus tartalmakat egy felhőalapú társzolgáltatásban helyezheti üzembe, amely közvetlenül az ügyfélnek közvetíti azt. Ezzel csökkenthető a potenciálisan drága számítási példányok igénye.

Kontextus és probléma

A Webalkalmazások rendszerint tartalmazzák a statikus tartalom néhány elemét. A statikus tartalom magában foglalhat HTML-lapokat és más erőforrásokat, például az ügyfél számára hozzáférhető lemezképeket, amelyek vagy a HTML-lapok részei (például a beágyazott képek, a stíluslapok és az ügyféloldali JavaScript-fájlok), vagy külön letölthetőek (például PDF-dokumentumok).

Bár a webkiszolgálók dinamikus renderelésre és kimeneti gyorsítótárazásra vannak optimalizálva, továbbra is kezelniük kell a statikus tartalom letöltésére vonatkozó kéréseket. Ez lefoglalja a feldolgozási ciklusokat, amelyek gyakran végezhetnének hasznosabb feladatokat.

Megoldás

A legtöbb felhőalapú üzemeltetési környezetben egy alkalmazás erőforrásainak és statikus lapjainak egy részét elhelyezheti egy tárolási szolgáltatásban. A tárolási szolgáltatás képes kiszolgálni az ilyen erőforrásokra vonatkozó kéréseket, csökkentve a más webes kéréseket kezelő számítási erőforrások terhelését. A felhőben üzemeltetett tárolás költsége általában sokkal alacsonyabb, mint a számítási példányoké.

Amikor egy alkalmazás egyes részeit egy tárolási szolgáltatásban üzemelteti, a fő szempontok az alkalmazás telepítésével és az olyan erőforrások védelmével kapcsolatosak, amelyekhez a névtelen felhasználóknak nem szabad hozzáférniük.

Problémák és megfontolandó szempontok

A minta megvalósítása során az alábbi pontokat vegye figyelembe:

  • Az üzemeltetett társzolgáltatásnak fel kell fednie egy HTTP-végpontot, amelyhez a felhasználók hozzáférhetnek a statikus erőforrások letöltéséhez. Bizonyos tárolási szolgáltatások támogatják a HTTPS-t is, így lehetséges olyan erőforrásokat üzemeltetni az adattárolási szolgáltatásokban, amelyek megkövetelik az SSL használatát.

  • A legjobb teljesítmény és rendelkezésre állás érdekében érdemes egy tartalomkézbesítési hálózatot (CDN-t) használni, amellyel a tároló tartalmát több különböző adatközpontban gyorsítótárazhatja világszerte. A CDN használatáért azonban általában díjat kell fizetni.

  • A tárfiókok gyakran alapértelmezés szerint georeplikáltak, ami olyan események ellen biztosít védelmet, amelyek hatással lehetnek az adatközpontra. Ez azt jelenti, hogy az IP-cím változhat, de az URL-cím ugyanaz marad.

  • Ha egy tartalom egy tárfiókban található, más tartalmak pedig egy üzemeltetett számítási példányban találhatók, az alkalmazás üzembe helyezése és frissítése nagyobb kihívást jelent. Előfordulhat, hogy külön üzembe helyezéseket kell végrehajtania, és az alkalmazás és a tartalom verziószámát kell elvégeznie a könnyebb kezeléshez – különösen akkor, ha a statikus tartalom szkriptfájlokat vagy felhasználói felületi összetevőket tartalmaz. Ha azonban csak statikus erőforrásokat kell frissítenie, akkor egyszerűen feltöltheti őket a tárfiókra anélkül, hogy újból üzembe helyezné az alkalmazáscsomagot.

  • Előfordulhat, hogy a tárolási szolgáltatások nem támogatják az egyéni tartománynevek használatát. Ebben az esetben meg kell adnia az erőforrások teljes URL-címét a hivatkozásokban, mert azok más tartományban lesznek, mint a hivatkozásokat tartalmazó dinamikusan létrehozott tartalom.

  • A tárolókat nyilvános olvasási hozzáféréssel kell konfigurálni, de elengedhetetlen az is, hogy azok ne legyenek nyilvános írási hozzáférésre konfigurálva, hogy a felhasználók ne tudjanak tartalmat feltölteni.

  • Érdemes lehet egy értékkulcsot vagy jogkivonatot használni az olyan erőforrásokhoz való hozzáférés szabályozásához, amelyek névtelenül nem érhetők el. További információkért tekintse meg a Valet Key mintát .

Mikor érdemes ezt a mintát használni?

Ez a minta az alábbi esetekben hasznos:

  • A statikus erőforrásokat tartalmazó webhelyek és alkalmazások üzemeltetési költségeinek csökkentése.

  • A csak statikus tartalomból és erőforrásokból álló webhelyek üzemeltetési költségeinek csökkentése. A tárhelyszolgáltató tárolási rendszerének képességeitől függően lehetséges lehet teljesen statikus webhelyet üzemeltetni egy tárfiókban.

  • Más üzemeltetési környezetben vagy helyszíni kiszolgálókon futó alkalmazások statikus erőforrásainak és tartalmainak felfedése.

  • Több földrajzi területen található adatok megkeresése egy tartalomkézbesítési hálózattal (CDN), amely világszerte több adatközpontban gyorsítótárazza a tároló tartalmát.

  • A költségek és a sávszélesség-használat monitorozása. Egy külön tárfiók használata az összes vagy csak bizonyos statikus tartalmakhoz lehetővé teszi, hogy a költségek könnyebben elkülönüljenek az üzemeltetési és futtatási költségektől.

Nem érdemes ezt a mintát használni a következő helyzetekben:

  • Az alkalmazásnak fel kell dolgoznia a statikus tartalmat, mielőtt elküldené az ügyfélnek. Szükség lehet például egy dokumentum időbélyeggel való ellátására.

  • A statikus tartalom mennyisége elenyésző. A különálló tárolóról érkező tartalom fogadásával járó terhelés meghaladja a számítógép erőforrásaitól való elkülönítés előnyeit.

Számítási feladatok tervezése

Az építészeknek értékelniük kell, hogy a statikus tartalom-üzemeltetési minta hogyan használható a számítási feladat kialakításában az Azure Well-Architected Framework pilléreiben foglalt célok és alapelvek kezelésére. Példa:

Pillér Hogyan támogatja ez a minta a pillércélokat?
A költségoptimalizálás a számítási feladatok megtérülésének fenntartására és javítására összpontosít. A dinamikus alkalmazás gazdagépei általában drágábbak, mint a statikus gazdagépek, mivel a dinamikus gazdagépek futtathatják a kódolt üzleti logikát. Nem költséghatékony, ha alkalmazásplatformot használ statikus tartalom biztosítására.

- CO:09 Flow-költségek
- CO:10 Adatköltségek
A teljesítményhatékonyság a skálázás, az adatok és a kód optimalizálásával segíti a számítási feladatok hatékony kielégítését . A külső gazdagépek felelősségének kiszervezése segít csökkenteni a torlódást, és lehetővé teszi, hogy az alkalmazásplatformot csak az üzleti logika megvalósítására használja.

- PE:07 Infrastruktúra kódolása

Mint minden tervezési döntésnél, fontolja meg az ezzel a mintával bevezethető többi pillér céljaival szembeni kompromisszumokat.

Példa

Az Azure Storage támogatja a statikus tartalom közvetlen tárolási tárolóból való kiszolgálását. A fájlok kézbesítése névtelen hozzáférési kérelmeken keresztül történik. Alapértelmezés szerint a fájlok url-címe a következő altartományban core.windows.nettalálható: például https://contoso.z4.web.core.windows.net/image.png. Egyéni tartománynevet konfigurálhat, és az Azure CDN használatával https-en keresztül érheti el a fájlokat. További információ: Statikus webhely üzemeltetése az Azure Storage-ban.

Az alkalmazás statikus részeinek továbbítása közvetlenül egy tárolási szolgáltatásból

A statikus webhely üzemeltetése a fájlokat névtelen hozzáférésre teszi elérhetővé. Ha szabályoznia kell, hogy ki férhet hozzá a fájlokhoz, tárolhatja a fájlokat az Azure Blob Storage-ban, majd időt és hatókört korlátozott közös hozzáférésű jogosultságkódokat hozhat létre a hozzáférés korlátozásához. A létrehozott hozzáférési aláírásoknak Microsoft Entra felhasználó által delegált jogkivonatokat kell használniuk, és rövid élettartamúnak kell lenniük .

Az ügyfélnek kézbesített lapok hivatkozásainak meg kell adniuk az erőforrás teljes URL-címét. Ha az erőforrást valet kulccsal( például közös hozzáférésű jogosultságkóddal) védik, ezt az aláírást fel kell venni az URL-címbe.

A GitHubon elérhető egy mintaalkalmazás, amely bemutatja, hogy külső tárolót használnak statikus erőforrásokhoz. Ez a minta egy konfigurációs fájl használatával adja meg a tárfiók URL-címét és a nyilvános, statikus tartalmat tartalmazó tárolót.

A StaticContentUrlHtmlHelper.cs fájl StaticContentUrlHtmlHelper osztálya tartalmaz egy StaticContentUrl nevű metódust, amely létrehoz egy, a felhőalapú tárfiók útvonalát tartalmazó URL-címet, ha az általa fogadott URL-cím az ASP.NET gyökérútvonal-karakterével (~) kezdődik.

public static class StaticContentUrlHtmlHelper
{
  public static string StaticContentUrl(this HtmlHelper helper, string contentPath)
  {
    if (contentPath.StartsWith("~"))
    {
      contentPath = contentPath.Substring(1);
    }

    contentPath = string.Format("{0}/{1}", Settings.StaticContentBaseUrl.TrimEnd('/'),
                                contentPath.TrimStart('/'));

    var url = new UrlHelper(helper.ViewContext.RequestContext);

    return url.Content(contentPath);
  }
}

A Views\Home mappa Index.cshtml fájlja tartalmaz egy képet, amely a StaticContentUrl metódus használatával létrehoz egy URL-címet az src attribútumához.

<img src="@Html.StaticContentUrl("~/media/orderedList1.png")" alt="Test Image" />

Következő lépések

  • Pótkulcs minta. Ha a célerőforrásoknak nem kellene névtelen felhasználók számára elérhetőnek lenniük, ezzel a mintával korlátozhatja a közvetlen hozzáférést.
  • Kiszolgáló nélküli webalkalmazás az Azure-ban. Referenciaarchitektúra, amely az Azure Functions szolgáltatással üzemeltetett statikus webhelyet használja egy kiszolgáló nélküli webalkalmazás implementálásához.