Ölçeklenebilir web uygulaması

ASP.NET
Azure
Content Delivery Network
DNS
Arayın
Depolama
.NET
GitHub
Visual Studio

Bu başvuru mimarisinde bir Azure App Service web uygulamasında ölçeklenebilirlik ve performansı artırmak için kanıtlanmış yöntemler gösterilmektedir.This reference architecture shows proven practices for improving scalability and performance in an Azure App Service web application.

GitHub logosu Bu mimari için bir başvuru uygulama GitHub'da kullanılabilir.GitHub logo A reference implementation for this architecture is available on GitHub.

Azure’da gelişmiş ölçeklenebilirlik ile web uygulaması

Bu mimarinin bir Visio dosyasını indirin.Download a Visio file of this architecture.

MimariArchitecture

Bu mimari için Temel web uygulaması makalesinde gösterilen mimari temel alınmıştır.This architecture builds on the one shown in Basic web application. Aşağıdaki bileşenleri içerir:It includes the following components:

  • Web uygulaması.Web app. Tipik bir modern uygulama hem bir web sitesi hem de bir veya daha fazla RESTful web API’si içerebilir.A typical modern application might include both a website and one or more RESTful web APIs. Bir web API’si AJAX üzerinden tarayıcı istemcileri tarafından, yerel istemci uygulamaları tarafından veya sunucu tarafı uygulamalar tarafından kullanılabilir.A web API might be consumed by browser clients through AJAX, by native client applications, or by server-side applications. Web API’leri tasarlama konusunda dikkat edilmesi gerekenler için bkz. API tasarım kılavuzu.For considerations on designing web APIs, see API design guidance.
  • Ön kapı.Front Door. Ön kapı , katman 7 yük dengeleyicidir.Front Door is a layer 7 load balancer. Bu mimaride HTTP isteklerini Web ön ucuna yönlendirir.In this architecture, it routes HTTP requests to the web front end. Ön kapı Ayrıca, uygulamayı yaygın güvenlik açıklarından ve güvenlik açıklarından koruyan bir Web uygulaması güvenlik duvarı (WAF) sağlar.Front Door also provides a web application firewall (WAF) that protects the application from common exploits and vulnerabilities.
  • İşlev uygulaması.Function App. Arka plan görevlerini çalıştırmak için Işlev uygulamalarını kullanın.Use Function Apps to run background tasks. İşlevler, bir zamanlayıcı olayı veya sıraya yerleştirilmiş bir ileti gibi bir tetikleyici tarafından çağrılır.Functions are invoked by a trigger, such as a timer event or a message being placed on queue. Uzun süreli durum bilgisi olan görevler için dayanıklı işlevlerkullanın.For long-running stateful tasks, use Durable Functions.
  • Kuyruk.Queue. Burada gösterilen mimaride, uygulama bir Azure Kuyruk depolaması kuyruğuna bir ileti ekleyerek arka plan görevlerini kuyruğa alır.In the architecture shown here, the application queues background tasks by putting a message onto an Azure Queue storage queue. İleti bir işlev uygulamasını tetikler.The message triggers a function app. Alternatif olarak, Service Bus kuyruklarını kullanabilirsiniz.Alternatively, you can use Service Bus queues. Bir karşılaştırma için bkz. Azure Kuyrukları ve Azure Service Bus kuyrukları - Benzerlikler ve karşıtlıklar.For a comparison, see Azure Queues and Service Bus queues - compared and contrasted.
  • Önbellek.Cache. Redsıs Için Azure önbelleğindeyarı statik verileri depolayın.Store semi-static data in Azure Cache for Redis.
  • CDN.CDN. Genel olarak kullanılabilir içeriği daha düşük gecikme süresi ve daha yüksek içerik hızı ile önbelleğe almak için Azure Content Delivery Network’ü (CDN) kullanın.Use Azure Content Delivery Network (CDN) to cache publicly available content for lower latency and faster delivery of content.
  • Veri depolama.Data storage. İlişkisel veriler için Azure SQL Veritabanı’nı kullanın.Use Azure SQL Database for relational data. İlişkisel olmayan veriler için Cosmos DBgöz önünde bulundurun.For non-relational data, consider Cosmos DB.
  • Azure bilişsel arama.Azure Cognitive Search. Arama önerileri, benzer arama ve dile özgü arama gibi arama işlevleri eklemek için Azure bilişsel arama kullanın.Use Azure Cognitive Search to add search functionality such as search suggestions, fuzzy search, and language-specific search. Azure Search özellikle birincil veri deposunun katı tutarlılık gerektirdiği durumlarda genellikle başka bir veri deposu ile birlikte kullanılır.Azure Search is typically used in conjunction with another data store, especially if the primary data store requires strict consistency. Bu yaklaşımda, yetkili verileri diğer veri deposunda ve arama dizinini Azure Search’te depolayın.In this approach, store authoritative data in the other data store and the search index in Azure Search. Azure Search ayrıca birden fazla veri deposundan tek bir arama dizinini birleştirmek için de kullanılabilir.Azure Search can also be used to consolidate a single search index from multiple data stores.
  • Azure DNS.Azure DNS. Azure DNS , Microsoft Azure altyapısı kullanılarak ad ÇÖZÜMLEMESI sağlayan DNS etki alanları için bir barındırma hizmetidir.Azure DNS is a hosting service for DNS domains, providing name resolution using Microsoft Azure infrastructure. Etki alanlarınızı Azure'da barındırarak DNS kayıtlarınızı diğer Azure hizmetlerinde kullandığınız kimlik bilgileri, API’ler, araçlar ve faturalarla yönetebilirsiniz.By hosting your domains in Azure, you can manage your DNS records using the same credentials, APIs, tools, and billing as your other Azure services.

ÖnerilerRecommendations

Gereksinimleriniz, burada açıklanan mimariden farklı olabilir.Your requirements might differ from the architecture described here. Bu bölümdeki önerileri bir başlangıç noktası olarak kullanın.Use the recommendations in this section as a starting point.

App Service uygulamalarıApp Service apps

Web uygulamasını ve web API’sini ayrı App Service uygulamaları olarak oluşturmanızı öneririz.We recommend creating the web application and the web API as separate App Service apps. Bu tasarım bağımsız olarak genişletilebilmeleri için ayrı App Service planlarında çalıştırmanıza olanak sağlar.This design lets you run them in separate App Service plans so they can be scaled independently. Başlangıçta bu ölçeklenebilirlik düzeyine ihtiyacınız yoksa, uygulamaları aynı plana dağıtabilir ve sonra gerekirse ayrı planlara taşıyabilirsiniz.If you don't need that level of scalability initially, you can deploy the apps into the same plan and move them into separate plans later if necessary.

Not

Temel, Standart ve Premium planlar için, uygulama başına değil plandaki VM örneği sayısı üzerinden faturalandırılırsınız.For the Basic, Standard, and Premium plans, you are billed for the VM instances in the plan, not per app. Bkz. App Service FiyatlandırmasıSee App Service Pricing

ÖnbellekCache

Redsıs Için Azure Cache 'i kullanarak bazı verileri önbelleğe almak için performansı ve ölçeklenebilirliği artırabilirsiniz.You can improve performance and scalability by using Azure Cache for Redis to cache some data. For Redfor için Azure Cache kullanmayı göz önünde bulundurun:Consider using Azure Cache for Redis for:

  • Yarı statik işlem verileri.Semi-static transaction data.
  • Oturum durumu.Session state.
  • HTML çıkışı.HTML output. Bu karmaşık HTML çıkışı işleyen uygulamalarda yararlı olabilir.This can be useful in applications that render complex HTML output.

Bir önbelleğe alma stratejisi tasarlama hakkında daha ayrıntılı yönergeler için bkz. Önbelleğe alma kılavuzu.For more detailed guidance on designing a caching strategy, see Caching guidance.

CDNCDN

Statik içeriği önbelleğe almak için Azure CDN kullanın.Use Azure CDN to cache static content. İçerik kullanıcıya coğrafi olarak yakın bir uç sunucuda önbelleğe alındığından, CDN’nin ana avantajı kullanıcılar için gecikme süresini azaltmaktır.The main benefit of a CDN is to reduce latency for users, because content is cached at an edge server that is geographically close to the user. Trafik uygulama tarafından işlenmediğinden, CDN ayrıca uygulama üzerindeki yükü de azaltabilir.CDN can also reduce load on the application, because that traffic is not being handled by the application.

Uygulamanız çoğunlukla statik sayfalardan oluşuyorsa, tüm uygulamayı önbelleğe almak için CDN kullanmayı düşünün.If your app consists mostly of static pages, consider using CDN to cache the entire app. Aksi takdirde, resimler, CSS ve HTML dosyaları gibi statik içerikleri Azure Depolama’ya yerleştirin ve bu dosyaları önbelleğe almak için CDN kullanın.Otherwise, put static content such as images, CSS, and HTML files, into Azure Storage and use CDN to cache those files.

Not

Azure CDN kimlik doğrulaması gerektiren içerikleri sunamaz.Azure CDN cannot serve content that requires authentication.

Daha ayrıntılı yönergeler için bkz. Content Delivery Network (CDN) kılavuzu.For more detailed guidance, see Content Delivery Network (CDN) guidance.

DepolamaStorage

Modern uygulamalar genellikle büyük miktarlarda veri işler.Modern applications often process large amounts of data. Bulut için ölçeklendirmek üzere, doğru depolama türünü seçmek önemlidir.In order to scale for the cloud, it's important to choose the right storage type. Bazı taban çizgisi önerileri aşağıdadır.Here are some baseline recommendations.

Depolamak istediklerinizWhat you want to store ÖrnekExample Önerilen depolamaRecommended storage
DosyalarFiles Resimler, belgeler, PDF dosyalarıImages, documents, PDFs Azure Blob DepolamaAzure Blob Storage
Anahtar/Değer çiftleriKey/Value pairs Kullanıcı kimliğine göre aranan kullanıcı profil verileriUser profile data looked up by user ID Azure Tablo depolamaAzure Table storage
Başka bir işlem tetiklemek için kullanılan kısa iletilerShort messages intended to trigger further processing Sipariş istekleriOrder requests Azure Kuyruk depolama, Service Bus kuyruğu veya Service Bus konusuAzure Queue storage, Service Bus queue, or Service Bus topic
Temel sorgulama gerektiren esnek bir şemaya sahip ilişkisel olmayan verilerNon-relational data with a flexible schema requiring basic querying Ürün kataloğuProduct catalog Azure Cosmos DB, MongoDB veya Apache CouchDB gibi belge veritabanıDocument database, such as Azure Cosmos DB, MongoDB, or Apache CouchDB
Daha zengin sorgu desteği, katı şema ve/veya güçlü tutarlılık gerektiren ilişkisel verilerRelational data requiring richer query support, strict schema, and/or strong consistency Ürün envanteriProduct inventory Azure SQL VeritabanıAzure SQL Database

Bkz. Doğru veri deposunu seçme.See Choose the right data store.

Maliyetle ilgili konularCost considerations

Sık değişmeyen içeriklere sahip sunuculardaki yükü azaltmak için önbelleğe alma özelliğini kullanın.Use caching to reduce the load on servers that serve content that doesn't change frequently. Bir sayfanın her oluşturma çevrimi, işlem, bellek ve bant genişliği tükettiği için maliyeti etkileyebilir.Every render cycle of a page can impact cost because it consumes compute, memory, and bandwidth. Bu maliyetler, özellikle JavaScript tek sayfalı uygulamalar ve medya akışı içeriği gibi statik içerik Hizmetleri için önbelleğe alma kullanılarak önemli ölçüde azaltılabilir.Those costs can be reduced significantly by using caching, especially for static content services, such as JavaScript single-page apps and media streaming content.

Uygulamanızda statik içerik varsa, ön uç sunucularındaki yükü azaltmak için CDN kullanın.If your app has static content, use CDN to decrease the load on the front end servers. Sık değişmeyen veriler için, Redsıs için Azure önbelleği kullanın.For data that doesn't change frequently, use Azure Cache for Redis.

Otomatik ölçeklendirme için yapılandırılmış durum bilgisi olmayan uygulamalar, durum bilgisiz uygulamalardan daha etkilidir.Stateless apps that are configured for autoscaling are more cost effective than stateful apps. Bir ASP.NET uygulaması için, oturum durumunu Redsıs için Azure önbelleğiyle bellekte saklayın.For an ASP.NET application, store your session state in-memory with Azure Cache for Redis. Daha fazla bilgi için bkz. ASP.net for redsıs for Azure Cache forThe.For more information, see ASP.NET Session State Provider for Azure Cache for Redis. Başka bir seçenek de Cosmos DB bir oturum durumu sağlayıcısı aracılığıyla arka uç durumu deposu olarak kullanmaktır.Another option is to use Cosmos DB as a backend state store through a session state provider. Bkz. destek Azure Cosmos DB ve Azure redin.See Support Azure Cosmos DB and Azure Redis.

Daha fazla bilgi için Microsoft Azure Well-Architected çerçevesindekimaliyet bölümüne bakın.For more information, see the cost section in the Microsoft Azure Well-Architected Framework.

Arka plan görevlerinin HTTP isteklerini işleyen örneklerde çalıştırılmaması için bir işlev uygulamasını adanmış bir App Service planına yerleştirmeyi düşünün.Consider placing a function app into a dedicated App Service plan so that background tasks don't run on the same instances that handle HTTP requests. Arka plan görevleri zaman aralıklı olarak çalışıyorsa, saatlik değil, yürütmeler sayısına göre faturalandırılan bir Tüketim planıkullanmayı göz önünde bulundurun.If background tasks run intermittently, consider using a consumption plan, which is billed based on the number of executions, rather than hourly.

Ücretleri tahmin etmek için fiyatlandırma hesaplayıcısını kullanın.Use the pricing calculator to estimate costs.

Ölçeklenebilirlik konusunda dikkat edilmesi gerekenlerScalability considerations

Azure App Service’in önemli bir avantajı uygulamanızı yüküne göre ölçeklendirebilmesidir.A major benefit of Azure App Service is the ability to scale your application based on load. Burada, uygulamanızı ölçeklendirmeyi planlarken göz önünde bulundurmanız gereken bazı noktalar verilmiştir.Here are some considerations to keep in mind when planning to scale your application.

App Service uygulamasıApp Service app

Çözümünüz birden fazla App Service uygulaması içeriyorsa, bunları ayrı App Service planlarına dağıtmayı göz önünde bulundurun.If your solution includes several App Service apps, consider deploying them to separate App Service plans. Ayrı örneklerde çalıştıkları için, bu yaklaşım uygulamaları birbirinden bağımsız olarak ölçeklendirmenizi sağlar.This approach enables you to scale them independently because they run on separate instances.

SQL VeritabanıSQL Database

SQL veritabanlarını parçalayarak veritabanının ölçeklenebilirliğini artırın.Increase scalability of a SQL database by sharding the database. Parçalamak, veritabanını yatay olarak bölümlemek anlamına gelir.Sharding refers to partitioning the database horizontally. Parçalamak, Elastik Veritabanı araçlarını kullanarak veritabanının ölçeğini genişletmenizi sağlar.Sharding allows you to scale out the database horizontally using Elastic Database tools. Parçalamanın olası avantajları şunları içerir:Potential benefits of sharding include:

  • Daha iyi işlem aktarım hızı.Better transaction throughput.
  • Sorgular verilerin bir alt kümesi üzerinde daha hızlı çalışabilir.Queries can run faster over a subset of the data.

Azure Front DoorAzure Front Door

Ön kapı, SSL yük boşaltma gerçekleştirebilir ve ayrıca arka uç Web uygulamasıyla yapılan TCP bağlantılarının toplam sayısını azaltır.Front Door can perform SSL offload and also reduces the total number of TCP connections with the backend web app. Bu, Web uygulaması daha küçük bir SSL el sıkıştıran ve TCP bağlantılarının bir düzeyini yönettiği için ölçeklenebilirliği geliştirir.This improves scalability because the web app manages a smaller volume of SSL handshakes and TCP connections. Bu performans kazançları, üst düzey bağlantı yeniden kullanımı nedeniyle istekleri Web uygulamasına HTTPS olarak iletseniz bile geçerlidir.These performance gains apply even if you forward the requests to the web app as HTTPS, due to the high level of connection reuse.

Azure Search karmaşık veri aramaları gerçekleştirme yükünü birincil veri deposundan kaldırır ve yükü işlemek için ölçeklendirilebilir.Azure Search removes the overhead of performing complex data searches from the primary data store, and it can scale to handle load. Bkz. Azure Search’te iş yüklerini sorgulama ve dizin oluşturma için kaynak düzeylerini ölçeklendirme.See Scale resource levels for query and indexing workloads in Azure Search.

Güvenlik konularıSecurity considerations

Bu bölümde, bu makalede açıklanan Azure hizmetlerine özel güvenlik konuları listelenmiştir.This section lists security considerations that are specific to the Azure services described in this article. Web uygulamaları için en iyi güvenlik yöntemlerinin bir listesi değildir.It's not a complete list of security best practices for web applications. Ek güvenlik konuları için bkz. Azure App Service bir uygulamayı güvenli hale getirme.For additional security considerations, see Secure an app in Azure App Service.

Gelen trafiği kısıtlaRestrict incoming traffic

Uygulamayı yalnızca ön kapıdan trafiği kabul edecek şekilde yapılandırın.Configure the application to accept traffic only from Front Door. Bu, tüm trafiğin uygulamaya ulaşmadan önce WAF üzerinden gelmesini sağlar.This ensures that all traffic goes through the WAF before reaching the app. Daha fazla bilgi için bkz . nasıl yaparım? arka ucuma erişimi yalnızca Azure ön kapısına kilitleme.For more information, see How do I lock down the access to my backend to only Azure Front Door?

Çıkış Noktaları Arası Kaynak Paylaşımı (CORS)Cross-Origin Resource Sharing (CORS)

Bir web sitesi ve web API’sini ayrı uygulamalar olarak oluşturursanız, CORS’yi etkinleştirmediğiniz sürece web sitesi API’ye istemci tarafı AJAX çağrıları gönderemez.If you create a website and web API as separate apps, the website cannot make client-side AJAX calls to the API unless you enable CORS.

Not

Tarayıcı güvenliği, bir web sitesinin başka bir etki alanına AJAX istekleri göndermesini engeller.Browser security prevents a web page from making AJAX requests to another domain. Bu kısıtlamaya aynı-Origin ilkesi adı verilir ve kötü amaçlı bir sitenin başka bir siteden hassas verileri okumasını önler.This restriction is called the same-origin policy, and prevents a malicious site from reading sensitive data from another site. CORS bir sunucunun daha gevşek bir aynı çıkış noktası ilkesi uygulamasına olanak sağlayarak çıkış noktaları arası bazı isteklere izin verirken diğerlerini engelleyen bir W3C standardıdır.CORS is a W3C standard that allows a server to relax the same-origin policy and allow some cross-origin requests while rejecting others.

Uygulama Hizmetleri herhangi bir uygulama kodu yazmaya gerek kalmadan yerleşik CORS desteği sunar.App Services has built-in support for CORS, without needing to write any application code. Bkz. CORS kullanarak JavaScript’ten bir API uygulaması kullanma.See Consume an API app from JavaScript using CORS. Web sitesini API için izin verilen çıkış noktaları listesine ekleyin.Add the website to the list of allowed origins for the API.

SQL Veritabanı şifrelemeSQL Database encryption

Veritabanında bekleyen verileri şifrelemeniz gerekiyorsa Saydam Veri Şifrelemesini kullanın.Use Transparent Data Encryption if you need to encrypt data at rest in the database. Bu özellik bütün bir veritabanı (yedekler ve işlem günlüğü dosyaları) için gerçek zamanlı şifreleme ve şifre çözme işlemlerini gerçekleştirir ve uygulamada değişiklik yapmayı gerektirmez.This feature performs real-time encryption and decryption of an entire database (including backups and transaction log files) and requires no changes to the application. Şifreleme biraz gecikme süresi ekler, bu nedenle kendi veritabanında güvenliği sağlanması gereken verileri ayırıp yalnızca bu veritabanı için şifrelemeyi etkinleştirmek iyi bir uygulamadır.Encryption does add some latency, so it's a good practice to separate the data that must be secure into its own database and enable encryption only for that database.

DevOps için dikkat edilmesi gerekenlerDevOps considerations

Ön uç dağıtımıFront-end deployment

Bu mimari temel Web uygulamasındagösterildiği gibi, DevOps önemli noktaları bölümünebakın.This architecture builds on the one shown in Basic web application, see the DevOps considerations section.

Sonraki adımlarNext steps