Bulut uygulamaları için performans kötü modelleriPerformance antipatterns for cloud applications

Performans kötü modeli, bir uygulama baskı altındayken ölçeklenebilirlik sorunlarına yol açabilen yaygın bir uygulamadır.A performance antipattern is a common practice that is likely to cause scalability problems when an application is under pressure.

İşte sık karşılaşılan bir senaryo: Bir uygulama, performans testi sırasında iyi davranış gösteriyor.Here is a common scenario: An application behaves well during performance testing. Daha sonra üretime geçirilen uygulama, gerçek iş yüklerini işlemeye başlıyor.It's released to production, and begins to handle real workloads. Bu noktada performansı düşmeye (kullanıcı isteklerini reddetmeye, kilitlenmeye veya özel durumlar oluşturmaya) başlıyor.At that point, it starts to perform poorly—rejecting user requests, stalling, or throwing exceptions. Geliştirme ekibi iki soruyla yüzleşmek zorunda kalıyor:The development team is then faced with two questions:

  • Bu davranış neden test sırasında ortaya çıkmadı?Why didn't this behavior show up during testing?
  • Nasıl düzeltiriz?How do we fix it?

İlk sorunun yanıtı basit.The answer to the first question is straightforward. Bir test ortamında gerçek kullanıcıların, bunların davranış desenlerinin ve gerçekleştirebilecekleri iş hacimlerinin simülasyonunu yapmak zordur.It's difficult to simulate real users in a test environment, along with their behavior patterns and the volumes of work they might perform. Bir sistemin yük altında nasıl davrandığını anlamanın tek kesin yolu, sistemi üretimde gözlemlemektir.The only completely sure way to understand how a system behaves under load is to observe it in production. Bu dediklerimizden performans testini tamamen atlamanızı önerdiğimiz anlamını çıkarmayın.To be clear, we aren't suggesting that you should skip performance testing. Temel performans ölçümlerinin yapılması için performans testleri hayati öneme sahiptir.Performance tests are crucial for getting baseline performance metrics. Bununla birlikte, canlı sistemde ortaya çıkan performans sorunlarını gözlemlemeye ve düzeltmeye hazırlıklı olmalısınız.But you must be prepared to observe and correct performance issues when they arise in the live system.

Sorunun nasıl çözüleceğiyle ilgili ikinci sorunun yanıtı biraz daha karmaşık.The answer to the second question, how to fix the problem, is less straightforward. Bunda birçok faktörün rolü vardır ve bazen sorun yalnızca belirli koşullarda ortaya çıkar.Any number of factors might contribute, and sometimes the problem only manifests under certain circumstances. Kök nedenin bulunmasında püf nokta izleme ve günlük kaydıdır. Tabii önce ne aradığınızı bilmeniz gerekiyor.Instrumentation and logging are key to finding the root cause, but you also have to know what to look for.

Microsoft Azure müşterileriyle yaşadığımız deneyimlerden yola çıkarak müşterilerin üretimde karşılaştığı en yaygın performans sorunlarından bazılarını belirledik.Based on our engagements with Microsoft Azure customers, we've identified some of the most common performance issues that customers see in production. Her kötü model için kötü modelin neden gerçekleştiğini, belirtilerini ve sorunun çözümüne yönelik teknikleri açıkladık.For each antipattern, we describe why the antipattern typically occurs, symptoms of the antipattern, and techniques for resolving the problem. Ayrıca, hem kötü modeli gösteren hem de çözüm önerisinde bulunan örnek kodlar sağladık.We also provide sample code that illustrates both the antipattern and a suggested solution.

Açıklamaları okurken bu kötü modellerden bazılarının çok basit olduğunu düşünebilirsiniz, ancak tahmin edebileceğinizden çok daha sık gerçekleşiyorlar.Some of these antipatterns may seem obvious when you read the descriptions, but they occur more often than you might think. Bazen uygulamalar şirket içinde sorunsuzca çalışan bir tasarımı devralmasına rağmen bulutta doğru biçimde ölçeklendirilemiyor.Sometimes an application inherits a design that worked on-premises, but doesn't scale in the cloud. Bazı uygulamalar ise çok temiz bir tasarımla çalışmaya başlıyor, ancak yeni özellikler eklendikçe bu kötü modellerden birkaçı uygulamaya sızıyor.Or an application might start with a very clean design, but as new features are added, one or more of these antipatterns creeps in. Ne olursa olsun, bu kılavuz kötü modelleri tanımlamanıza ve gidermenize yardımcı olacak.Regardless, this guide will help you to identify and fix these antipatterns.

Kötü model kataloğuCatalog of antipatterns

İşte tanımladığımız kötü modellerin listesi:Here is the list of the antipatterns that we've identified:

Kötü ModelAntipattern AçıklamaDescription
Meşgul VeritabanıBusy Database Bir veri deposuna çok fazla işleme yükü boşaltma.Offloading too much processing to a data store.
Meşgul Ön UçBusy Front End Yoğun kaynak tüketimi gerektiren görevleri arka plan iş parçacıklarına kaydırma.Moving resource-intensive tasks onto background threads.
Geveze G/ÇChatty I/O Sürekli olarak çok sayıda küçük ağ isteği gönderme.Continually sending many small network requests.
Fazlalık GetirmeExtraneous Fetching Gerekenden fazla veri getirerek gereksiz G/Ç işlemlerine yol açma.Retrieving more data than is needed, resulting in unnecessary I/O.
Yanlış Örnek OluşturmaImproper Instantiation Paylaşılacak ve yeniden kullanılacak şekilde tasarlanan nesneleri tekrar tekrar oluşturma ve yok etme.Repeatedly creating and destroying objects that are designed to be shared and reused.
Tek Parça KalıcılıkMonolithic Persistence Çok farklı kullanım desenlerine sahip veriler için aynı veri deposunu kullanma.Using the same data store for data with very different usage patterns.
ÖnbelleksizlikNo Caching Verileri önbelleğe almama.Failing to cache data.
Zaman Uyumlu G/ÇSynchronous I/O G/Ç tamamlanırken çağıran iş parçacığını engelleme.Blocking the calling thread while I/O completes.

Sonraki adımlarNext steps

Performans ayarlama hakkında daha fazla bilgi için bkz. Dağıtılmış bir uygulamada performans ayarlama.For more about performance tuning, see Performance tuning a distributed application.