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


Szolgáltatás affinitásának konfigurálása és használata a Service Fabricben

Az affinitás olyan vezérlő, amely elsősorban a nagyobb monolitikus alkalmazások felhőbeli és mikroszolgáltatások világába való átmenetének megkönnyítésére szolgál. A szolgáltatások teljesítményének javítására is használják optimalizálásként, bár ennek mellékhatásai lehetnek.

Tegyük fel, hogy egy nagyobb, vagy csak nem mikroszolgáltatásokkal tervezett alkalmazást hoz a Service Fabricbe (vagy bármilyen elosztott környezetbe). Az ilyen típusú áttűnés gyakori. Első lépésként emelje a teljes alkalmazást a környezetbe, csomagolja be, és győződjön meg arról, hogy zökkenőmentesen fut. Ezután elkezdi szétbontani különböző kisebb szolgáltatásokra, amelyek mind beszélnek egymással.

Végül előfordulhat, hogy az alkalmazás problémákat tapasztal. A problémák általában az alábbi kategóriák egyikébe tartoznak:

  1. A monolitikus alkalmazás egyes X összetevőjének nincs dokumentált függősége az Y összetevőhöz, és ezeket az összetevőket külön szolgáltatásokká alakította. Mivel ezek a szolgáltatások most már a fürt különböző csomópontjaikon futnak, megszakadtak.
  2. Ezek az összetevők a (helyi nevesített csövek | megosztott memória | lemezen lévő fájlok) keresztül kommunikálnak, és teljesítménybeli okokból most tényleg képesnek kell lenniük arra, hogy egy megosztott helyi erőforrásba írjanak. Ezt a kemény függőséget később eltávolítják, talán.
  3. Minden rendben van, de kiderül, hogy ez a két összetevő valójában beszédes / teljesítményérzékeny. Amikor külön szolgáltatásokba helyezték át őket, az alkalmazás teljesítménye növekedett vagy nőtt. Ennek eredményeképpen a teljes alkalmazás nem felel meg az elvárásoknak.

Ezekben az esetekben nem akarjuk elveszíteni az újrabontási munkánkat, és nem szeretnénk visszamenni a monolithoz. Az utolsó feltétel akár egyszerű optimalizálásként is kívánatos lehet. Azonban amíg újra nem tervezzük az összetevőket, hogy természetes módon működjenek szolgáltatásként (vagy amíg nem oldjuk meg a teljesítményre vonatkozó elvárásokat valamilyen más módon), szükségünk lesz némi területi érzékre.

Mi a teendő? Megpróbálhatja bekapcsolni az affinitást.

Affinitás konfigurálása

Az affinitás beállításához két különböző szolgáltatás közötti affinitási kapcsolatot kell meghatároznia. Az affinitás úgy is felfogható, hogy "rámutat" az egyik szolgáltatásra egy másikra, és azt mondja: "Ez a szolgáltatás csak ott fut, ahol a szolgáltatás fut". Néha szülő-gyermek kapcsolatként hivatkozunk az affinitásra (ahol a gyermek a szülőre mutat). Az affinitás biztosítja, hogy az egyik szolgáltatás replikái vagy példányai ugyanazon a csomóponton legyenek elhelyezve, mint egy másik szolgáltatásé.

ServiceCorrelationDescription affinityDescription = new ServiceCorrelationDescription();
affinityDescription.Scheme = ServiceCorrelationScheme.Affinity;
affinityDescription.ServiceName = new Uri("fabric:/otherApplication/parentService");
serviceDescription.Correlations.Add(affinityDescription);
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);

Feljegyzés

A gyermekszolgáltatás csak egyetlen affinitási kapcsolatban vehet részt. Ha azt szeretné, hogy a gyermek egyszerre két szülőszolgáltatáshoz legyen affinitva, van néhány lehetősége:

  • A kapcsolatok megfordítása (a parentService1 és a parentService2 ponttal rendelkezik az aktuális gyermekszolgáltatásban), vagy
  • Az egyik szülőt konvenció szerint központként jelölheti ki, és minden szolgáltatási ponttal rendelkezik ezen a szolgáltatáson.

A fürtben az eredményként kapott elhelyezési viselkedésnek meg kell egyeznie.

Különböző affinitási lehetőségek

Az affinitás több korrelációs séma egyikén keresztül jelenik meg, és két különböző móddal rendelkezik. Az affinitás leggyakoribb módja a NonAlignedAffinity. A NonAlignedAffinity szolgáltatásban a különböző szolgáltatások replikái vagy példányai ugyanazon a csomóponton vannak elhelyezve. A másik mód az AlignedAffinity. Az igazított affinitás csak állapotalapú szolgáltatások esetén hasznos. Ha két állapotalapú szolgáltatást konfigurál úgy, hogy igazodjon az affinitáshoz, az biztosítja, hogy a szolgáltatások elsődlegességei ugyanazon a csomóponton legyenek elhelyezve, mint egymással. Azt is eredményezi, hogy az egyes másodfokú másodfokú szolgáltatások ugyanazon a csomóponton lesznek elhelyezve. A NonAlignedAffinity állapotalapú szolgáltatásokhoz való konfigurálása (bár kevésbé gyakori) is lehetséges. A NonAlignedAffinity esetében a két állapotalapú szolgáltatás különböző replikái ugyanazon a csomóponton futnának, de az előválasztásuk különböző csomópontokon végződhet.

Affinitási módok és hatásaik

A legjobb munka a kívánt állapotban

Az affinitási kapcsolat a legjobb erőfeszítés. Nem biztosítja ugyanazokat a garanciákat az összejátszásra vagy a megbízhatóságra, mint az ugyanabban a végrehajtható folyamatban. Az affinitási kapcsolatban lévő szolgáltatások alapvetően különböző entitások, amelyek sikertelenek lehetnek, és egymástól függetlenül áthelyezhetők. Egy affinitási kapcsolat is megszakadhat, bár ezek a törések ideiglenesek. A kapacitáskorlátozások például azt jelenthetik, hogy az affinitási kapcsolatban csak néhány szolgáltatásobjektum fér el egy adott csomóponton. Ezekben az esetekben annak ellenére, hogy affinitási kapcsolat van érvényben, a többi korlátozás miatt nem kényszeríthető ki. Ha lehetséges, a szabálysértés később automatikusan ki lesz javítva.

Láncok és csillagok

A fürterőforrás-kezelő ma nem tudja modellezheti az affinitási kapcsolatok láncait. Ez azt jelenti, hogy egy olyan szolgáltatás, amely egy affinitási kapcsolatban lévő gyermek, nem lehet szülő egy másik affinitási kapcsolatban. Ha ilyen típusú kapcsolatot szeretne modelleztetni, akkor gyakorlatilag csillagként kell modelleznie, nem pedig láncként. Ha láncról csillagra szeretne váltani, a legalsó gyermek az első gyermek szülője lesz. A szolgáltatások elrendezésétől függően előfordulhat, hogy ezt többször is meg kell tennie. Ha nincs természetes szülőszolgáltatás, előfordulhat, hogy létre kell hoznia egy olyan szolgáltatást, amely helyőrzőként szolgál. A követelményektől függően érdemes lehet az alkalmazáscsoportokat is megvizsgálni.

Láncok és csillagok az affinitási kapcsolatok kontextusában

Egy másik dolog, amit érdemes megjegyezni az affinitás kapcsolatok ma, hogy ezek iránya alapértelmezés szerint. Ez azt jelenti, hogy az affinitási szabály csak azt kényszeríti ki, hogy a gyermek a szülőhöz kerüljön. Nem biztosítja, hogy a szülő a gyermeknél legyen. Ezért, ha van affinitási szabálysértés, és valamilyen okból nem lehet áthelyezni a gyermeket a szülőcsomópontra, akkor - még ha a szülőt a gyermek csomópontjára is áthelyezték volna , akkor is kijavították volna a szabálysértést - a szülő nem lesz áthelyezve a gyermek csomópontjára. Ha igazra állítja a MoveParentToFixAffinityViolation konfigurációt, az eltávolítja az irányt. Azt is fontos megjegyezni, hogy az affinitási kapcsolat nem lehet tökéletes vagy azonnal kikényszeríthető, mivel a különböző szolgáltatások különböző életciklussal rendelkeznek, és egymástól függetlenül meghiúsulhatnak és mozoghatnak. Tegyük fel például, hogy a szülő hirtelen átesik egy másik csomóponton, mert összeomlott. A fürterőforrás-kezelő és a feladatátvétel-kezelő kezeli először a feladatátvételt, mivel a szolgáltatások folyamatos, konzisztens és elérhető állapotban tartása a prioritás. Miután a feladatátvétel befejeződött, az affinitási kapcsolat megszakadt, de a fürterőforrás-kezelő úgy véli, hogy minden rendben van, amíg nem veszi észre, hogy a gyermek nem található a szülővel. Ezeket a fajta ellenőrzéseket rendszeres időközönként hajtják végre. A fürterőforrás-kezelő a korlátozások kiértékelésének módjáról ebben a cikkben talál további információt, és ez a cikk részletesebben ismerteti, hogyan konfigurálhatja a korlátozások kiértékelésének ütemezését.

Particionálás támogatása

Az affinitással kapcsolatban az utolsó dolog, hogy az affinitási kapcsolatok nem támogatottak ott, ahol a szülő particionált. Előfordulhat, hogy a particionált szülőszolgáltatások végül támogatottak, de ma már nem engedélyezett.

Következő lépések