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


Válaszfal minta

Azure

A válaszfalminta egy olyan alkalmazástervezési típus, amely tolerálja a meghibásodást. A válaszfalas architektúrákban, más néven cellaalapú architektúrákban az alkalmazás elemei készletekbe vannak elkülönítve, így ha az egyik meghibásodik, a többi továbbra is működni fog. A hajótest szakaszos partícióiról (válaszfalairól) kapta a nevét. Ha a hajótest megsérül, csak a sérült szakasz telik meg vízzel, így a hajó nem süllyed el.

Kontextus és probléma

A felhőalapú alkalmazások több szolgáltatást is tartalmazhatnak, és mindegyik szolgáltatás egy vagy több felhasználóval rendelkezik. A szolgáltatás túlzott terhelése vagy meghibásodása a szolgáltatás minden fogyasztóját érinti.

Emellett a fogyasztó egyszerre több szolgáltatásnak is küldhet kéréseket, az egyes kérések erőforrásait használva. Ha a fogyasztó olyan szolgáltatásnak küld kérést, amely helytelenül van konfigurálva vagy nem válaszol, előfordulhat, hogy az ügyfél kérése által használt erőforrások nem lesznek időben felszabadítva. A szolgáltatásra irányuló kérések folytatódása esetén előfordulhat, hogy ezek az erőforrások elfogynak. Előfordulhat például, hogy az ügyfél kapcsolatkészlete kimerült. Ezen a ponton a fogyasztó más szolgáltatásokra irányuló kérelmei is érintettek. Végül a fogyasztó már más szolgáltatásoknak sem fog tudni kéréseket küldeni, nem csak az eredeti nem válaszoló szolgáltatásnak.

Ugyanez az erőforrásfogyás a több fogyasztóval rendelkező szolgáltatásokat is érinti. Az egyik ügyféltől érkező kérések nagy száma kimerítheti a szolgáltatásban rendelkezésre álló erőforrásokat. Így a többi fogyasztó tudja igénybe venni a szolgáltatást, ez pedig lépcsőzetesen terjedő hibákhoz vezet.

Megoldás

Particionálja a szolgáltatáspéldányokat különböző csoportokba a fogyasztók mennyisége és a rendelkezésre állási követelmények alapján. Ez a tervezés segít a hibák elkülönítésében, és meghibásodás esetén is biztosítja, hogy a szolgáltatás bizonyos fogyasztók számára elérhető legyen.

A fogyasztók szintén particionálhatják az erőforrásokat, így az egyik szolgáltatás hívásához használt erőforrások nem befolyásolják a másik szolgáltatás hívásához használtakat. Előfordulhat például, hogy egy több szolgáltatást hívó fogyasztó minden szolgáltatáshoz hozzárendel egy kapcsolatkészletet. Ha egy szolgáltatás kezd meghibásodni, ez csak az adott szolgáltatáshoz hozzárendelt kapcsolatkészletet érinti, így a fogyasztó tovább használhatja a többi szolgáltatást.

A minta használata többek között a következő előnyökkel jár:

  • Elkülöníti a fogyasztókat és szolgáltatásokat a lépcsőzetesen terjedő hibáktól. A fogyasztókat vagy szolgáltatásokat érintő hibák elkülöníthetők a saját válaszfalukon belül, így megakadályozható a teljes megoldás meghibásodása.
  • Lehetővé teszi a működésképesség bizonyos szintű fenntartását a szolgáltatás meghibásodása esetén is. Az alkalmazás többi szolgáltatása és funkciója továbbra is működhet.
  • Lehetővé teszi olyan szolgáltatások üzembe helyezését, amelyek eltérő minőségű szolgáltatást biztosítanak a felhasználó alkalmazások számára. Beállítható egy magas prioritású fogyasztókészlet a magas prioritású szolgáltatások használatához.

Az alábbi ábra a különálló szolgáltatásokat hívó kapcsolatkészletek köré strukturált válaszfalakat ábrázol. Ha az A szolgáltatás meghibásodik vagy egyéb hibát okoz, a kapcsolatkészlet elkülönítése miatt a hiba csak azokat a számítási feladatokat érinti, amelyek az A szolgáltatáshoz hozzárendelt szálkészletet használják. A B és a C szolgáltatást használó számítási feladatokra nincs hatással, és megszakítás nélkül folytathatja a munkát.

A válaszfal mintájának első diagramja

A következő diagram több ügyfelet ábrázol, amelyek ugyanazt a szolgáltatást hívják. Minden ügyfélhez különálló szolgáltatáspéldány van hozzárendelve. Az 1. ügyfél túl sok kérést küldött, és túlterhelte a példányát. Mivel minden szolgáltatáspéldány külön van választva a többitől, a többi ügyfél továbbra is küldhet hívásokat.

Az egyetlen szolgáltatást hívó ügyfeleket ábrázoló diagram.

Problémák és megfontolandó szempontok

  • Határozza meg a partíciókat az alkalmazás üzleti és műszaki követelményei alapján.
  • Ha taktikai DDD-t használ a mikroszolgáltatások tervezéséhez, a partícióhatároknak igazodniuk kell a határolt környezetekhez.
  • Amikor válaszfalakkal particionálja a szolgáltatásokat vagy fogyasztókat, vegye figyelembe a technológia által nyújtott elkülönítési szinteket és a terhelést (költségek, teljesítmény és kezelhetőség) is.
  • Vegye fontolóra a válaszfalak újrapróbálkozási, áramkör-megszakító és szabályozási mintákkal történő kombinálását a kifinomultabb hibakezelés biztosítása érdekében.
  • A fogyasztók válaszfalakkal történő particionálása esetén érdemes megfontolni a folyamatok, szálkészletek és szemaforok használatát. Az olyan projektek, mint a resilience4j és a Polly , keretrendszert kínálnak a fogyasztói válaszfalak létrehozásához.
  • A szolgáltatások válaszfalakkal történő particionálása esetén érdemes megfontolni a különálló virtuális gépeken, tárolókban vagy folyamatokban történő üzembe helyezést. A tárolók viszonylag csekély többletterhelés mellett biztosítják az erőforrások elkülönítését.
  • Az aszinkron üzenetekkel kommunikáló szolgáltatások különböző üzenetsor-készletekkel különíthetők el. Minden üzenetsor rendelkezhet egy dedikált példánykészlettel, amely feldolgozza az üzenetsorban található üzeneteket, vagy egyetlen példánycsoporttal, amely egy algoritmussal eltávolítja az üzeneteket a sorból, és kiosztja őket feldolgozásra.
  • Határozza meg a választófalak részletességi szintjét. Ha például a bérlőket partíciók között szeretné elosztani, az egyes bérlőket külön partícióba helyezheti, vagy több bérlőt helyezhet egy partícióba.
  • Monitorozza az egyes partíciók teljesítményét és SLA-ját.

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

Ez a minta a következőkre használható:

  • Elkülönítheti a háttérszolgáltatások egy csoportjának felhasználásához használt erőforrásokat, különösen akkor, ha az alkalmazás bizonyos szintű funkciókat tud biztosítani akkor is, ha az egyik szolgáltatás nem válaszol.
  • kritikus fontosságú fogyasztók különválasztása a standard fogyasztóktól;
  • az alkalmazás védelme a lépcsőzetesen terjedő hibákkal szemben.

Ez a minta nem feltétlenül megfelelő, ha:

  • Előfordulhat, hogy az erőforrások kevésbé hatékony használata nem elfogadható a projektben.
  • A hozzáadott összetettség nem szükséges

Számítási feladatok tervezése

Az építészeknek értékelniük kell, hogyan használható a válaszfal-minta 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 megbízhatósági tervezési döntések segítenek a számítási feladatnak ellenállóvá válni a hibás működéssel szemben, és biztosítani, hogy a hiba bekövetkezése után teljesen működőképes állapotba kerüljön. A hibaelkülönítési stratégia, amelyet az összetevők közötti szándékos és teljes szegmentálással vezetnek be, megpróbálják csak a problémát tapasztaló válaszfal hibáit tartalmazni, megakadályozva a többi válaszfalra gyakorolt hatást.

- RE:02 Kritikus folyamatok
- RE:07 Önmegőrzés
A biztonsági tervezési döntések segítenek biztosítani a számítási feladatok adatainak és rendszereinek titkosságát, integritását és rendelkezésre állását. Az összetevők közötti szegmentálás segít a biztonsági incidensek korlátozásában a sérült válaszfalra.

- SE:04 Szegmentálás
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 . Minden válaszfal egyenként méretezhető, hogy hatékonyan megfeleljen a válaszfalba ágyazott feladat igényeinek.

- PE:02 Kapacitástervezés
- PE:05 Skálázás és particionálás

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 alábbi Kubernetes konfigurációs fájl egy egyetlen szolgáltatást futtató elkülönített tárolót hoz létre, amely saját processzor- és memória-erőforrásokkal, valamint korlátokkal rendelkezik.

apiVersion: v1
kind: Pod
metadata:
  name: drone-management
spec:
  containers:
  - name: drone-management-container
    image: drone-service
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "1"

Következő lépések