Ulepszanie skalowalności w aplikacji internetowej na platformie AzureImprove scalability in an Azure web application

W tej architekturze referencyjnej przedstawiono sprawdzone metody zwiększania skalowalności i wydajności w aplikacji internetowej w usłudze Azure App Service.This reference architecture shows proven practices for improving scalability and performance in an Azure App Service web application.

Logo usługi GitHub — implementacja odniesienia dla tej architektury jest dostępna w witrynie GitHub.GitHub logo A reference implementation for this architecture is available on GitHub.

Aplikacja internetowa na platformie Azure ze zwiększoną skalowalnością

Pobierz plik programu Visio z tą architekturą.Download a Visio file of this architecture.

ArchitekturaArchitecture

Ta architektura jest oparta na architekturze pokazanej w temacie Podstawowa aplikacja internetowa.This architecture builds on the one shown in Basic web application. Zawiera ona następujące składniki:It includes the following components:

  • Aplikacja internetowa.Web app. Typowa nowoczesna aplikacja może obejmować zarówno witrynę internetową, jak i co najmniej jeden internetowy interfejs API RESTful.A typical modern application might include both a website and one or more RESTful web APIs. Z internetowego interfejsu API mogą korzystać klienci w przeglądarkach (za pośrednictwem technologii AJAX), natywne aplikacje klienckie lub aplikacje po stronie serwera.A web API might be consumed by browser clients through AJAX, by native client applications, or by server-side applications. Aby poznać zagadnienia dotyczące projektowania internetowych interfejsów API, zobacz Wytyczne dotyczące projektowania interfejsów API.For considerations on designing web APIs, see API design guidance.
  • Drzwi z przodu.Front Door. Przód drzwi to moduł równoważenia obciążenia warstwy 7.Front Door is a layer 7 load balancer. W tej architekturze kieruje żądania HTTP do frontonu sieci Web.In this architecture, it routes HTTP requests to the web front end. Drzwi frontonu udostępniają również zaporę aplikacji sieci Web (WAF), która chroni aplikację przed typowymi programami wykorzystującymi luki w zabezpieczeniach.Front Door also provides a web application firewall (WAF) that protects the application from common exploits and vulnerabilities.
  • Aplikacja funkcji.Function App. Używaj aplikacji funkcji do uruchamiania zadań w tle.Use Function Apps to run background tasks. Funkcje są wywoływane przez wyzwalacz, taki jak zdarzenie timer lub umieszczanie komunikatu w kolejce.Functions are invoked by a trigger, such as a timer event or a message being placed on queue. W przypadku długotrwałych zadań stanowych Użyj Durable Functions.For long-running stateful tasks, use Durable Functions.
  • Kolejka.Queue. W przedstawionej tu architekturze aplikacja dodaje do kolejki zadania w tle, umieszczając komunikat w kolejce magazynu usługi Azure Queue Storage.In the architecture shown here, the application queues background tasks by putting a message onto an Azure Queue storage queue. Komunikat wyzwala aplikację funkcji.The message triggers a function app. Możesz zamiast tego używać kolejek usługi Service Bus.Alternatively, you can use Service Bus queues. Aby zapoznać się z porównaniem, zobacz Kolejki platformy Azure i kolejki usługi Service Bus — porównanie i różnice.For a comparison, see Azure Queues and Service Bus queues - compared and contrasted.
  • Pamięć podręczna.Cache. Przechowuj dane częściowo statyczne w usłudze Azure cache for Redis.Store semi-static data in Azure Cache for Redis.
  • Sieć CDN.CDN. Użyj usługi Azure Content Delivery Network (CDN), aby przechowywać w pamięci podręcznej zawartość dostępną publicznie w celu zmniejszenia opóźnień i szybszego dostarczania zawartości.Use Azure Content Delivery Network (CDN) to cache publicly available content for lower latency and faster delivery of content.
  • Magazyn danych.Data storage. Użyj usługi Azure SQL Database dla danych relacyjnych.Use Azure SQL Database for relational data. W przypadku danych nierelacyjnych należy rozważyć Cosmos DB.For non-relational data, consider Cosmos DB.
  • Wyszukiwanie poznawcze platformy Azure.Azure Cognitive Search. Za pomocą usługi Azure wyszukiwanie poznawcze można dodawać funkcje wyszukiwania, takie jak sugestie wyszukiwania, Wyszukiwanie rozmyte i wyszukiwanie specyficzne dla języka.Use Azure Cognitive Search to add search functionality such as search suggestions, fuzzy search, and language-specific search. Usługa Azure Search jest zwykle używana w połączeniu z innym magazynem danych, zwłaszcza gdy podstawowy magazyn danych wymaga ścisłej spójności.Azure Search is typically used in conjunction with another data store, especially if the primary data store requires strict consistency. W tym podejściu autorytatywne dane są przechowywane w innym magazynie danych, a indeks wyszukiwania jest przechowywany w usłudze Azure Search.In this approach, store authoritative data in the other data store and the search index in Azure Search. Usługa Azure Search pozwala też skonsolidować jeden indeks wyszukiwania z wielu magazynów danych.Azure Search can also be used to consolidate a single search index from multiple data stores.
  • Azure DNS.Azure DNS. Azure DNS to usługa hostingowa przeznaczona dla domen DNS, która umożliwia rozpoznawanie nazw przy użyciu infrastruktury platformy Microsoft Azure.Azure DNS is a hosting service for DNS domains, providing name resolution using Microsoft Azure infrastructure. Dzięki hostowaniu swoich domen na platformie Azure możesz zarządzać rekordami DNS z zastosowaniem tych samych poświadczeń, interfejsów API, narzędzi i rozliczeń co w przypadku innych usług platformy Azure.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.

ZaleceniaRecommendations

Wymagania rzeczywiste mogą różnić się od dotyczących opisanej tu architektury.Your requirements might differ from the architecture described here. Użyj zaleceń w tej sekcji jako punktu wyjścia.Use the recommendations in this section as a starting point.

Aplikacje usługi App ServiceApp Service apps

Zaleca się utworzenie aplikacji internetowej i internetowego interfejsu API jako osobnych aplikacji usługi App Service.We recommend creating the web application and the web API as separate App Service apps. Taki projekt umożliwia uruchamianie ich w oddzielnych planach usługi App Service, dzięki czemu mogą być skalowane niezależnie.This design lets you run them in separate App Service plans so they can be scaled independently. Jeśli początkowo nie potrzebujesz takiego poziomu skalowalności, możesz wdrożyć aplikacje w tym samym planie i później przenieść je do oddzielnych planów w razie potrzeby.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.

Uwaga

W przypadku planów w warstwie Podstawowa, Standardowa i Premium opłaty są naliczane dla wystąpień maszyn wirtualnych w planie, a nie dla aplikacji.For the Basic, Standard, and Premium plans, you are billed for the VM instances in the plan, not per app. Zobacz Cennik usługi App ServiceSee App Service Pricing

Pamięć podręcznaCache

Aby zwiększyć wydajność i skalowalność, można użyć usługi Azure cache for Redis w celu buforowania niektórych danych.You can improve performance and scalability by using Azure Cache for Redis to cache some data. Rozważ użycie usługi Azure cache for Redis dla:Consider using Azure Cache for Redis for:

  • Częściowo statyczne dane transakcji.Semi-static transaction data.
  • Stan sesji.Session state.
  • Dane wyjściowe HTML.HTML output. Może to być przydatne w aplikacjach renderujących złożone dane wyjściowe HTML.This can be useful in applications that render complex HTML output.

Aby uzyskać bardziej szczegółowe wskazówki dotyczące projektowania strategii buforowania, zobacz Wskazówki dotyczące buforowania.For more detailed guidance on designing a caching strategy, see Caching guidance.

CDNCDN

Użyj usługi Azure CDN do przechowywania zawartości statycznej w pamięci podręcznej.Use Azure CDN to cache static content. Główną zaletą usługi CDN jest zmniejszenie opóźnień dla użytkowników, ponieważ zawartość jest buforowana na serwerze granicznym, który znajduje się blisko lokalizacji geograficznej użytkownika.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. Usługa CDN pomaga też zmniejszyć obciążenie aplikacji, ponieważ określony ruch nie jest obsługiwany przez aplikację.CDN can also reduce load on the application, because that traffic is not being handled by the application.

Jeśli aplikacja zawiera głównie strony statyczne, rozważ użycie usługi CDN do przechowywania całej aplikacji w pamięci podręcznej.If your app consists mostly of static pages, consider using CDN to cache the entire app. W przeciwnym razie umieść zawartość statyczną, taką jak obrazy, pliki CSS i pliki HTML, w usłudze Azure Storage i użyj usługi CDN do przechowywania tych plików w pamięci podręcznej.Otherwise, put static content such as images, CSS, and HTML files, into Azure Storage and use CDN to cache those files.

Uwaga

Usługa Azure CDN nie może obsługiwać zawartości wymagającej uwierzytelniania.Azure CDN cannot serve content that requires authentication.

Aby uzyskać bardziej szczegółowe wskazówki, zobacz Wskazówki dotyczące usługi Content Delivery Network (CDN).For more detailed guidance, see Content Delivery Network (CDN) guidance.

StorageStorage

Nowoczesne aplikacje często przetwarzają duże ilości danych.Modern applications often process large amounts of data. Aby zapewnić skalowalność w chmurze, należy wybrać odpowiedni typ magazynu.In order to scale for the cloud, it's important to choose the right storage type. Poniżej przedstawiono niektóre podstawowe zalecenia.Here are some baseline recommendations.

Co chcesz przechowywaćWhat you want to store PrzykładExample Zalecany magazynRecommended storage
FilesFiles Obrazy, dokumenty, pliki PDFImages, documents, PDFs Azure Blob StorageAzure Blob Storage
Pary klucz-wartośćKey/Value pairs Dane profilów użytkowników wyszukiwane według identyfikatora użytkownikaUser profile data looked up by user ID Usługa Azure Table StorageAzure Table storage
Krótkie komunikaty służące do wyzwalania dalszego przetwarzaniaShort messages intended to trigger further processing Żądania zamówieńOrder requests Usługa Azure Queue Storage, kolejka usługi Service Bus lub temat usługi Service BusAzure Queue storage, Service Bus queue, or Service Bus topic
Dane nierelacyjne z elastycznym schematem, wymagające podstawowych zapytańNon-relational data with a flexible schema requiring basic querying Katalog produktówProduct catalog Baza danych dokumentów, taka jak Azure Cosmos DB, MongoDB lub Apache CouchDBDocument database, such as Azure Cosmos DB, MongoDB, or Apache CouchDB
Dane relacyjne wymagające bardziej zaawansowanej obsługi zapytań, ścisłego schematu i/lub silnej spójnościRelational data requiring richer query support, strict schema, and/or strong consistency Katalog produktówProduct inventory Azure SQL DatabaseAzure SQL Database

Zobacz Choose the right data store (Wybieranie odpowiedniego magazynu danych).See Choose the right data store.

Kwestie związane z kosztamiCost considerations

Użyj buforowania, aby zmniejszyć obciążenie serwerów, które obsługują zawartość, która nie zmienia się często.Use caching to reduce the load on servers that serve content that doesn't change frequently. Każdy cykl renderowania strony może mieć wpływ na koszty, ponieważ zużywa ona obliczenia, pamięć i przepustowość.Every render cycle of a page can impact cost because it consumes compute, memory, and bandwidth. Te koszty można znacznie skrócić, używając buforowania, szczególnie w przypadku usług zawartości statycznej, takich jak aplikacje jednostronicowe języka JavaScript i zawartość przesyłania strumieniowego multimediów.Those costs can be reduced significantly by using caching, especially for static content services, such as JavaScript single-page apps and media streaming content.

Jeśli aplikacja ma zawartość statyczną, Użyj usługi CDN, aby zmniejszyć obciążenie serwerów frontonu.If your app has static content, use CDN to decrease the load on the front end servers. W przypadku danych, które nie zmieniają się często, Użyj usługi Azure cache for Redis.For data that doesn't change frequently, use Azure Cache for Redis.

Aplikacje bezstanowe, które są skonfigurowane do automatycznego skalowania, są tańsze niż aplikacje stanowe.Stateless apps that are configured for autoscaling are more cost effective that stateful apps. W przypadku aplikacji ASP.NET należy przechowywać stan sesji w pamięci z użyciem pamięci podręcznej platformy Azure dla Redis.For an ASP.NET application, store your session state in-memory with Azure Cache for Redis. Aby uzyskać więcej informacji, zobacz ASP.NET Session State Provider for Azure cache for Redis.For more information, see ASP.NET Session State Provider for Azure Cache for Redis. Innym rozwiązaniem jest użycie Cosmos DB jako magazynu stanu zaplecza za pomocą dostawcy stanu sesji.Another option is to use Cosmos DB as a backend state store through a session state provider. Zobacz Pomoc techniczna Azure Cosmos DB i Azure Redis.See Support Azure Cosmos DB and Azure Redis.

Aby uzyskać więcej informacji, zobacz sekcję Cost (koszt) w Microsoft Azure Well-Architected Framework.For more information, see the cost section in the Microsoft Azure Well-Architected Framework.

Rozważ umieszczenie aplikacji funkcji w dedykowanym planie App Service, aby zadania w tle nie były uruchamiane w tych samych wystąpieniach, które obsługują żądania HTTP.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. Jeśli zadania w tle są uruchamiane sporadycznie, należy rozważyć użycie planu zużycia, który jest rozliczany na podstawie liczby wykonań, a nie co godzinę.If background tasks run intermittently, consider using a consumption plan, which is billed based on the number of executions, rather than hourly.

Oszacuj koszty przy użyciu kalkulatora cen .Use the pricing calculator to estimate costs.

Zagadnienia dotyczące skalowalnościScalability considerations

Główną zaletą usługi Azure App Service jest możliwość skalowania aplikacji w zależności od obciążenia.A major benefit of Azure App Service is the ability to scale your application based on load. Poniżej przedstawiono kilka kwestii, które należy wziąć pod uwagę, planując skalowanie aplikacji.Here are some considerations to keep in mind when planning to scale your application.

Aplikacja usługi App ServiceApp Service app

Jeśli Twoje rozwiązanie zawiera kilka aplikacji usługi App Service, rozważ wdrożenie ich w oddzielnych planach tej usługi.If your solution includes several App Service apps, consider deploying them to separate App Service plans. Takie podejście umożliwia ich niezależne skalowanie, ponieważ są one uruchamiane w osobnych wystąpieniach.This approach enables you to scale them independently because they run on separate instances.

SQL DatabaseSQL Database

Zwiększ skalowalność bazy danych SQL, dzieląc ją na fragmenty.Increase scalability of a SQL database by sharding the database. Dzielenie na fragmenty dotyczy partycjonowania bazy danych w poziomie.Sharding refers to partitioning the database horizontally. Dzielenie na fragmenty umożliwia skalowanie bazy danych w poziomie przy użyciu narzędzi elastycznych baz danych.Sharding allows you to scale out the database horizontally using Elastic Database tools. Potencjalne zalety dzielenia na fragmenty:Potential benefits of sharding include:

  • Większa przepływność transakcji.Better transaction throughput.
  • Zapytania mogą działać szybciej na podzestawie danych.Queries can run faster over a subset of the data.

Azure Front DoorAzure Front Door

Drzwi z przodu mogą wykonywać odciążanie protokołu SSL, a także zmniejszyć łączną liczbę połączeń TCP z aplikacją sieci Web zaplecza.Front Door can perform SSL offload and also reduces the total number of TCP connections with the backend web app. Poprawia to skalowalność, ponieważ aplikacja sieci Web zarządza mniejszą ilością uzgadniania protokołu SSL i połączeń TCP.This improves scalability because the web app manages a smaller volume of SSL handshakes and TCP connections. Te zyski dotyczą wydajności nawet w przypadku przesyłania dalej żądań do aplikacji sieci Web jako HTTPS ze względu na wysoki poziom użycia połączenia.These performance gains apply even if you forward the requests to the web app as HTTPS, due to the high level of connection reuse.

Usługa Azure Search eliminuje narzut związany z przeprowadzaniem złożonych wyszukiwań danych z podstawowego magazynu danych oraz zapewnia skalowalność niezbędną do obsługi obciążenia.Azure Search removes the overhead of performing complex data searches from the primary data store, and it can scale to handle load. Zobacz Poziomy skalowania zasobów dla obciążeń związanych z zapytaniami i indeksowaniem w usłudze Azure Search.See Scale resource levels for query and indexing workloads in Azure Search.

Zagadnienia dotyczące bezpieczeństwaSecurity considerations

W tej sekcji wyszczególniono kwestie dotyczące zabezpieczeń charakterystyczne dla usług platformy Azure opisanych w tym artykule.This section lists security considerations that are specific to the Azure services described in this article. Nie jest to kompletna lista najlepszych rozwiązań dotyczących zabezpieczeń aplikacji sieci Web.It's not a complete list of security best practices for web applications. Aby uzyskać dodatkowe zagadnienia dotyczące zabezpieczeń, zobacz temat Zabezpieczanie aplikacji w Azure App Service.For additional security considerations, see Secure an app in Azure App Service.

Ograniczanie ruchu przychodzącegoRestrict incoming traffic

Skonfiguruj aplikację, aby akceptować tylko ruch z przodu.Configure the application to accept traffic only from Front Door. Dzięki temu cały ruch przechodzi przez WAF przed osiągnięciem aplikacji.This ensures that all traffic goes through the WAF before reaching the app. Aby uzyskać więcej informacji, zobacz Jak mogę Zablokuj dostęp do mojego zaplecza tylko do usług Azure Front-Only?For more information, see How do I lock down the access to my backend to only Azure Front Door?

Współużytkowanie zasobów między źródłami (CORS)Cross-Origin Resource Sharing (CORS)

Jeśli utworzysz witrynę internetową i internetowy interfejs API jako osobne aplikacje, witryna internetowa nie będzie mogła wysyłać wywołań AJAX po stronie klienta do interfejsu API, chyba że włączysz mechanizm CORS.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.

Uwaga

Zabezpieczenia przeglądarki uniemożliwiają stronie internetowej wysyłanie żądań AJAX do innej domeny.Browser security prevents a web page from making AJAX requests to another domain. To ograniczenie jest nazywane zasadami tego samego źródła i uniemożliwia złośliwym lokacjom odczytywanie poufnych danych z innej lokacji.This restriction is called the same-origin policy, and prevents a malicious site from reading sensitive data from another site. CORS to standard W3C, dzięki któremu serwer może poluzować zasady tego samego źródła i zezwolić na niektóre żądania między źródłami, jednocześnie odrzucając inne.CORS is a W3C standard that allows a server to relax the same-origin policy and allow some cross-origin requests while rejecting others.

Usługa App Service ma wbudowaną obsługę mechanizmu CORS — nie wymaga to pisania kodu aplikacji.App Services has built-in support for CORS, without needing to write any application code. Zobacz Korzystanie z aplikacji interfejsu API z poziomu języka JavaScript przy użyciu mechanizmu CORS.See Consume an API app from JavaScript using CORS. Dodaj witrynę internetową do listy dozwolonych źródeł dla interfejsu API.Add the website to the list of allowed origins for the API.

Szyfrowanie bazy danych SQLSQL Database encryption

Użyj funkcji Transparent Data Encryption, jeśli chcesz szyfrować dane przechowywane w bazie danych.Use Transparent Data Encryption if you need to encrypt data at rest in the database. Ta funkcja szyfruje i odszyfrowuje całą bazę danych w czasie rzeczywistym (w tym kopie zapasowe i pliki dzienników transakcji) oraz nie wymaga żadnych zmian w aplikacji.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. Szyfrowanie wprowadza pewne opóźnienie, więc warto umieścić dane, które muszą być bezpieczne, w osobnej bazie danych i włączyć szyfrowanie tylko dla tej bazy danych.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.

Kwestie do rozważenia dotyczące metodyki DevOpsDevOps considerations

Wdrożenie frontonuFront-end deployment

Ta architektura jest oparta na tym, co pokazano w podstawowej aplikacji sieci Web, zobacz sekcję Uwagi dotyczące DevOps.This architecture builds on the one shown in Basic web application, see the DevOps considerations section.

Następne krokiNext steps