Teljesítménytesztek és antiminták a felhőalapú alkalmazásokhozPerformance testing and antipatterns for cloud applications

A teljesítmény-mintázatok, hasonlóan a tervezési mintákhoz, gyakori hibás folyamatok és implementációk a szervezeteken belül.Performance antipatterns, much like design patterns, are common defective processes and implementations within organizations. Ezek olyan általános eljárások, amelyek valószínűleg méretezhetőségi problémákat okoznak, amikor egy alkalmazás nyomás alatt áll.These are common practices that are likely to cause scalability problems when an application is under pressure. Ezen gyakorlatok ismerete segít leegyszerűsíteni a szoftveres szakemberek magas szintű fogalmait.Awareness of these practices can help simplify communication of high-level concepts amongst software practitioners.

Íme egy gyakori forgatókönyv: Az alkalmazás jól teljesít a teljesítményteszt során.Here is a common scenario: An application behaves well during performance testing. Azután kikerül az éles rendszerre, és elkezd valós számítási feladatokkal foglalkozni.It's released to production, and begins to handle real workloads. Ezen a ponton elkezd gyengén teljesíteni—– elutasítja a felhasználói kéréseket, elakad vagy kivételeket dob.At that point, it starts to perform poorly—rejecting user requests, stalling, or throwing exceptions. A fejlesztőcsapat két kérdéssel néz szembe:The development team is then faced with two questions:

  • Miért nem került elő ez a működési probléma a tesztelés során?Why didn't this behavior show up during testing?
  • Hogyan lehet kijavítani?How do we fix it?

Az első kérdésre adott válasz egyértelmű.The answer to the first question is straightforward. A tesztkörnyezetekben nehéz a valós felhasználókat, a viselkedésmintáikat és az általuk végzett munkamennyiségeket megfelelően szimulálni.It's difficult to simulate real users in a test environment, along with their behavior patterns and the volumes of work they might perform. Az egyetlen biztos módja a rendszerek terhelés alatti működésének megértésére, ha éles környezetben vetjük őket vizsgálat alá.The only completely sure way to understand how a system behaves under load is to observe it in production. Ezzel nem azt állítjuk, hogy nem érdemes teljesítménytesztelést végezni.To be clear, we aren't suggesting that you should skip performance testing. A teljesítmény tesztelése elengedhetetlen az alapkonfiguráció teljesítménymutatóinak beszerzéséhez.Performance testing is crucial for getting baseline performance metrics. Emellett azonban az éles környezetben fellépő teljesítményproblémák megfigyelésére és korrigálására is fel kell készülni.But you must be prepared to observe and correct performance issues when they arise in the live system.

A második kérdés, a probléma megoldása azonban nem ilyen egyértelmű.The answer to the second question, how to fix the problem, is less straightforward. Itt rengeteg tényező közrejátszhat, és néha a probléma csak bizonyos körülmények között jelentkezik.Any number of factors might contribute, and sometimes the problem only manifests under certain circumstances. A rendszerállapot figyelése és a naplózás kulcsfontosságú a kiváltó okok kimutatásához, azonban nem árt tudni, hogy mit keressünk.Instrumentation and logging are key to finding the root cause, but you also have to know what to look for.

A Microsoft Azure-ügyfelekkel folytatott együttműködés során azonosítottunk néhány gyakori teljesítményproblémát, amelyekkel az ügyfelek az éles környezetekben találkoznak.Based on our engagements with Microsoft Azure customers, we've identified some of the most common performance issues that customers see in production. Mindegyik ilyen kizárási minta esetében leírjuk, hogy az adott minta jellemzően miért jelenik meg, mik a tünetei, és milyen technikákkal lehet megoldani a problémát.For each antipattern, we describe why the antipattern typically occurs, symptoms of the antipattern, and techniques for resolving the problem. Emellett olyan mintakód is elérhető, amely a antipattern és a javasolt skálázhatósági megoldást is szemlélteti.We also provide sample code that illustrates both the antipattern and a suggested scalability solution.

Egyes kizárási minták a leírásukat olvasva nyilvánvalónak tűnhetnek, mégis sokkal gyakrabban fordulnak elő, mint gondolnánk.Some of these antipatterns may seem obvious when you read the descriptions, but they occur more often than you might think. Néha előfordul, hogy az alkalmazás kialakítása a helyi környezetben működött, a felhőben azonban nem sikerül megfelelően a méretezése.Sometimes an application inherits a design that worked on-premises, but doesn't scale in the cloud. Az is megtörténhet, hogy az alkalmazás kialakítása kezdetben letisztult és problémamentes, az új funkciók hozzáadásával azonban beférkőzik egy vagy több kizárási minta.Or an application might start with a very clean design, but as new features are added, one or more of these antipatterns creeps in. Ez az útmutató segíthet azonosítani és korrigálni ezeket a mintákat, bármi legyen is a kiváltó okuk.Regardless, this guide will help you to identify and fix these antipatterns.

Kizárási minták katalógusaCatalog of antipatterns

Az alábbi lista az általunk azonosított kizárási mintákat sorolja fel:Here is the list of the antipatterns that we've identified:

Kizárási mintaAntipattern LeírásDescription
Foglalt adatbázisBusy Database Túl sok feldolgozás van kiszervezve egy adattárba.Offloading too much processing to a data store.
Foglalt előtérBusy Front End Az erőforrás-igényes feladatok áthelyezése a háttérszálakra.Moving resource-intensive tasks onto background threads.
Forgalmas I/OChatty I/O Sok kisebb hálózati kérés folyamatos küldése.Continually sending many small network requests.
Felesleges beolvasásokExtraneous Fetching A szükségesnél több adat lekérése, ami szükségtelen I/O működést eredményez.Retrieving more data than is needed, resulting in unnecessary I/O.
Nem megfelelő példányosításImproper Instantiation Olyan objektumok ismételt létrehozása és megsemmisítése, amelyeket amúgy megosztani és újrahasználni kellene.Repeatedly creating and destroying objects that are designed to be shared and reused.
Monolitikus adatmegőrzésMonolithic Persistence Egyazon adattár használata nagyon eltérő használati mintákkal rendelkező adatokhoz.Using the same data store for data with very different usage patterns.
Nincs gyorsítótárazásNo Caching Az adatok gyorsítótárazása nem valósul meg.Failing to cache data.
Újrapróbálkozási StormRetry Storm A sikertelen kérések újrapróbálása egy kiszolgálóra túl gyakran.Retrying failed requests to a server too often.
Szinkron I/OSynchronous I/O A hívó szál blokkolása az I/O végrehajtása során.Blocking the calling thread while I/O completes.

További lépésekNext steps

További információ a teljesítmény-finomhangolásról: Elosztott alkalmazások teljesítményének finomhangolásaFor more about performance tuning, see Performance tuning a distributed application