Aplikacje bezserwerowe: architektura, wzorce i implementacja platformy AzureServerless apps: Architecture, patterns, and Azure implementation

Zrzut ekranu przedstawiający centrum poczty elektronicznej aplikacji bezserwerowych.

Wersja 3.0 — zaktualizowane do Azure Functions v3EDITION v3.0 - Updated to Azure Functions v3

Pobieranie dostępne o: https://aka.ms/serverlessbookpdfDOWNLOAD available at: https://aka.ms/serverlessbookpdf

OPUBLIKOWANA PRZEZPUBLISHED BY

Zespoły deweloperów firmy Microsoft, .NET i Visual StudioMicrosoft Developer Division, .NET, and Visual Studio product teams

Dział firmy Microsoft CorporationA division of Microsoft Corporation

One Microsoft WayOne Microsoft Way

Redmond, Waszyngton 98052-6399Redmond, Washington 98052-6399

Copyright © 2018-2020 od firmy Microsoft CorporationCopyright © 2018-2020 by Microsoft Corporation

All rights reserved.All rights reserved. Żadna część zawartości tej księgi nie może być odtwarzana ani przekazywana w żadnej formie ani za pomocą jakichkolwiek środków bez zgody na wydawcę.No part of the contents of this book may be reproduced or transmitted in any form or by any means without the written permission of the publisher.

Ta książka jest świadczona w postaci "AS-IS" i zawiera widoki i opinie autora.This book is provided "as-is" and expresses the author's views and opinions. Widoki, opinie i informacje wyrażone w tej książce, w tym adresy URL i inne odwołania do witryn internetowych, mogą ulec zmianie bez powiadomienia.The views, opinions and information expressed in this book, including URL and other Internet website references, may change without notice.

Niektóre z przykładów przedstawiono wyłącznie do celów informacyjnych i są one fikcyjne.Some examples depicted herein are provided for illustration only and are fictitious. Żadne rzeczywiste skojarzenia lub związki nie są zamierzone ani wnioskowane.No real association or connection is intended or should be inferred.

Firma Microsoft i znaki towarowe wymienione na https://www.microsoft.com stronie "znaki towarowe" są znakami towarowymi grupy firm Microsoft.Microsoft and the trademarks listed at https://www.microsoft.com on the "Trademarks" webpage are trademarks of the Microsoft group of companies.

Komputery Mac i macOS są znakami towarowymi firmy Apple Inc.Mac and macOS are trademarks of Apple Inc.

Wszystkie inne znaczniki i logo są własnością odpowiednich właścicieli.All other marks and logos are property of their respective owners.

Autor:Author:

Jeremy Likness, starszy kierownik ds. zarządzania danymi, Microsoft Corp.Jeremy Likness, Senior .NET Data Program Manager, Microsoft Corp.

Współautor:Contributor:

Cecil Phillip, starszy ambasador w chmurze, Microsoft Corp.Cecil Phillip, Senior Cloud Advocate, Microsoft Corp.

EdytoryEditors:

Bill Wagner, Starszy programista ds. zawartości, Microsoft Corp.Bill Wagner, Senior Content Developer, Microsoft Corp.

Maira Wenzel, Starszy programista ds. zawartości, Microsoft Corp.Maira Wenzel, Senior Content Developer, Microsoft Corp.

Uczestnicy i recenzenci:Participants and reviewers:

Steve Smith, Owner, Ardalis Services.Steve Smith, Owner, Ardalis Services.

WprowadzenieIntroduction

Bezserwerowy to ewolucja platform w chmurze w kierunku czystego natywnego kodu w chmurze.Serverless is the evolution of cloud platforms in the direction of pure cloud native code. Bezserwerowe serwery zapewniają deweloperom bliższą logikę biznesową, jednocześnie izolując ich od obaw związanych z infrastrukturą.Serverless brings developers closer to business logic while insulating them from infrastructure concerns. Jest to wzorzec, który nie implikuje "No Server", ale raczej "Less Server".It's a pattern that doesn't imply "no server" but rather, "less server." Kod bezserwerowy jest sterowany zdarzeniami.Serverless code is event-driven. Kod może być wyzwalany przez dowolne elementy od tradycyjnego żądania sieci Web HTTP do czasomierza lub wynik przekazywania pliku.Code may be triggered by anything from a traditional HTTP web request to a timer or the result of uploading a file. Infrastruktura za bezserwerową umożliwia natychmiastowe skalowanie w celu spełnienia elastycznych wymagań i oferuje szeroką rozliczenie za użycie.The infrastructure behind serverless allows for instant scale to meet elastic demands and offers micro-billing to truly "pay for what you use." Bezserwerowy wymaga nowego sposobu podejścia do tworzenia aplikacji i nie jest odpowiednim rozwiązaniem dla każdego problemu.Serverless requires a new way of thinking and approach to building applications and isn't the right solution for every problem. Jako programista musisz wybrać:As a developer, you must decide:

  • Jakie są zalety i wady bezserwerowe?What are the pros and cons of serverless?
  • Dlaczego należy wziąć pod uwagę bezserwerowe aplikacje?Why should you consider serverless for your own applications?
  • Jak można kompilować, testować, wdrażać i obsługiwać kod bezserwerowy?How can you build, test, deploy, and maintain your serverless code?
  • Gdzie warto przeprowadzić migrację kodu do aplikacji bezserwerowej w istniejących aplikacjach i jak najlepiej wykonać tę transformację?Where does it make sense to migrate code to serverless in existing applications, and what is the best way to accomplish this transformation?

O tym przewodnikuAbout this guide

Ten przewodnik koncentruje się na natywnym programowaniu aplikacji, które używają bezserwerowego programu.This guide focuses on cloud native development of applications that use serverless. Książka wyróżnia korzyści i ujawnia potencjalne wady tworzenia aplikacji bezserwerowych i udostępnia Przegląd architektury bezserwerowej.The book highlights the benefits and exposes the potential drawbacks of developing serverless apps and provides a survey of serverless architectures. Wiele przykładów wykorzystania bezserwerowego można zobaczyć wraz z różnymi wzorcami projektowymi bez użycia serwera.Many examples of how serverless can be used are illustrated along with various serverless design patterns.

W tym przewodniku objaśniono składniki platformy bezserwerowej platformy Azure i koncentruje się na implementacji bezserwerowej przy użyciu Azure Functions.This guide explains the components of the Azure serverless platform and focuses specifically on implementation of serverless using Azure Functions. Zapoznaj się z wyzwalaczami i powiązaniami oraz sposobem implementacji aplikacji bezserwerowych, które są zależne od stanu przy użyciu funkcji trwałych.You'll learn about triggers and bindings as well as how to implement serverless apps that rely on state using durable functions. Na koniec przykłady biznesowe i analizy przypadków ułatwią dostarczenie kontekstu i ramki odniesienia, aby określić, czy bezserwerowy jest właściwym podejściem do projektów.Finally, business examples and case studies will help provide context and a frame of reference to determine whether serverless is the right approach for your projects.

Ewolucja platform w chmurzeEvolution of cloud platforms

Bezserwerowy jest culmination kilku iteracji platformy w chmurze.Serverless is the culmination of several iterations of cloud platforms. Ewolucja rozpoczęła się z materiałem fizycznym w centrum danych i postępuje za pomocą infrastruktury jako usługi (IaaS) i platformy jako usługi (PaaS).The evolution began with physical metal in the data center and progressed through Infrastructure as a Service (IaaS) and Platform as a Service (PaaS).

Ewolucja w środowisku lokalnym do bezserwerowego

Przed chmurą istniała różnica między programowaniem a operacją.Before the cloud, a discernible boundary existed between development and operations. Wdrożenie aplikacji, która odpowiada na pytania wyposażono, takie jak:Deploying an application meant answering myriad questions like:

  • Jakiego sprzętu należy zainstalować?What hardware should be installed?
  • Jak bezpieczny jest fizyczny dostęp do maszyny?How is physical access to the machine secured?
  • Czy centrum danych wymaga zasilacza awaryjnego (UPS)?Does the data center require an Uninterruptible Power Supply (UPS)?
  • Gdzie są wysyłane kopie zapasowe magazynu?Where are storage backups sent?
  • Czy istnieje nadmiarowa moc?Should there be redundant power?

Ta lista jest włączona, a obciążenie było ogromne.The list goes on and the overhead was enormous. W wielu sytuacjach działy IT były zmuszeni do postępowania z niezwykłą ilością odpadów.In many situations, IT departments were forced to deal with incredible waste. Przyczyną jest nadmierne przydzielanie serwerów jako maszyn zapasowych na potrzeby odzyskiwania po awarii i serwerów rezerwy, aby umożliwić skalowanie w poziomie. Na szczęście wprowadzenie technologii wirtualizacji (takich jak Funkcja Hyper-V) z Virtual Machines (maszyny wirtualne) spowodowało powstanie infrastruktury jako usługi (IaaS).The waste was due to over-allocation of servers as backup machines for disaster recovery and standby servers to enable scale-out. Fortunately, the introduction of virtualization technology (like Hyper-V) with Virtual Machines (VMs) gave rise to Infrastructure as a Service (IaaS). Zwirtualizowana infrastruktura umożliwia wykonywanie operacji w celu skonfigurowania standardowego zestawu serwerów jako szkieletu, co prowadzi do elastycznego środowiska z możliwością aprowizacji unikatowych serwerów na żądanie.Virtualized infrastructure allowed operations to set up a standard set of servers as the backbone, leading to a flexible environment capable of provisioning unique servers "on demand." Co ważniejsze, wirtualizacja ustawia etap korzystania z chmury w celu zapewnienia maszyn wirtualnych "jako usługi".More important, virtualization set the stage for using the cloud to provide virtual machines "as a service." Firmy mogą łatwo uzyskać informacje o nadmiarowych maszynach lub komputerach fizycznych.Companies could easily get out of the business of worrying about redundant power or physical machines. Zamiast tego koncentrują się na środowisku wirtualnym.Instead, they focused on the virtual environment.

IaaS nadal wymaga dużego nakładu pracy, ponieważ operacje są nadal odpowiedzialne za różne zadania.IaaS still requires heavy overhead because operations is still responsible for various tasks. Do zadań tych należą:These tasks include:

  • Stosowanie poprawek i tworzenie kopii zapasowych serwerów.Patching and backing up servers.
  • Instalowanie pakietów.Installing packages.
  • Utrzymywanie Aktualności systemu operacyjnego.Keeping the operating system up-to-date.
  • Monitorowanie aplikacji.Monitoring the application.

Kolejna ewolucja obniżyć koszty dzięki udostępnieniu platformy jako usługi (PaaS).The next evolution reduced the overhead by providing Platform as a Service (PaaS). W przypadku usługi PaaS dostawca chmury obsługuje systemy operacyjne, poprawki zabezpieczeń, a nawet pakiety wymagane do obsługi określonej platformy.With PaaS, the cloud provider handles operating systems, security patches, and even the required packages to support a specific platform. Zamiast tworzyć maszyny wirtualne, a następnie konfigurować platformę .NET i stałe serwery Internet Information Services (IIS), deweloperzy po prostu wybierają "obiekt docelowy platformy", taki jak "aplikacja sieci Web" lub "punkt końcowy interfejsu API" i bezpośrednio wdrażają kod.Instead of building a VM then configuring .NET and standing up Internet Information Services (IIS) servers, developers simply choose a "platform target" such as "web application" or "API endpoint" and deploy code directly. Pytania dotyczące infrastruktury są ograniczone do:The infrastructure questions are reduced to:

  • Jakie usługi rozmiaru są potrzebne?What size services are needed?
  • Jak są skalowane usługi (Dodaj więcej serwerów lub węzłów)?How do the services scale out (add more servers or nodes)?
  • Jak są skalowane usługi (zwiększyć pojemność serwerów hostingu lub węzłów)?How do the services scale up (increase the capacity of hosting servers or nodes)?

Serwerowe bardziej abstrakcyjne serwery, koncentrując się na kodzie sterowanym zdarzeniami.Serverless further abstracts servers by focusing on event-driven code. Zamiast platformy deweloperzy mogą skupić się na mikrousłudze, która wykonuje jedną czynność.Instead of a platform, developers can focus on a microservice that does one thing. Dwa kluczowe pytania dotyczące kompilowania kodu bezserwerowego są następujące:The two key questions for building the serverless code are:

  • Co wyzwala kod?What triggers the code?
  • Do czego służy kod?What does the code do?

Bez serwera, infrastruktura jest abstrakcyjna.With serverless, infrastructure is abstracted. W niektórych przypadkach deweloperzy nie będą już martw o hoście.In some cases, the developer no longer worries about the host at all. Niezależnie od tego, czy wystąpienie usług IIS, Kestrel, Apache lub innego serwera sieci Web jest uruchomione do zarządzania żądaniami sieci Web, deweloper koncentruje się na wyzwalaczu HTTP.Whether or not an instance of IIS, Kestrel, Apache, or some other web server is running to manage web requests, the developer focuses on an HTTP trigger. Wyzwalacz zawiera standardowy, międzyplatformowy ładunek dla żądania.The trigger provides the standard, cross-platform payload for the request. Ładunek nie tylko upraszcza proces opracowywania, ale ułatwia testowanie i w niektórych przypadkach sprawia, że kod jest łatwo przenośny między platformami.The payload not only simplifies the development process, but facilitates testing and in some cases, makes the code easily portable across platforms.

Inna funkcja bezserwerowa to bardzo rozliczenia.Another feature of serverless is micro-billing. Często aplikacje sieci Web mogą hostować punkty końcowe interfejsu API sieci Web.It's common for web applications to host Web API endpoints. W tradycyjnych tradycyjnym systemie IaaS i nawet implementacjach PaaS zasoby do hostowania interfejsów API są płatne w sposób ciągły.In traditional bare metal, IaaS and even PaaS implementations, the resources to host the APIs are paid for continuously. Oznacza to, że płacisz będzie hostować punkty końcowe nawet wtedy, gdy nie są dostępne.That means you pay to host the endpoints even when they aren't being accessed. Często znajdziesz jeden interfejs API o nazwie więcej niż inne, więc cały system jest skalowany w oparciu o obsługę popularnych punktów końcowych.Often you'll find one API is called more than others, so the entire system is scaled based on supporting the popular endpoints. Funkcja bezserwerowa umożliwia niezależne skalowanie każdego punktu końcowego i płatność za użycie, więc żadne koszty nie są naliczane, gdy interfejsy API nie są wywoływane.Serverless enables you to scale each endpoint independently and pay for usage, so no costs are incurred when the APIs aren't being called. Migracja może w wielu przypadkach znacząco obniżyć koszty związane z punktami końcowymi.Migration may in many circumstances dramatically reduce the ongoing cost to support the endpoints.

Czym nie obejmuje ten przewodnikWhat this guide doesn't cover

W tym przewodniku szczegółowo omówiono podejścia do architektury i wzorce projektowe i nie jest głębokie szczegółowe w szczegółach implementacji Azure Functions, Logic Appslub innych platform bezserwerowych.This guide specifically emphasizes architecture approaches and design patterns and isn't a deep dive into the implementation details of Azure Functions, Logic Apps, or other serverless platforms. Ten przewodnik nie obejmuje na przykład zaawansowanych przepływów pracy z Logic Appsami lub funkcjami Azure Functions, takimi jak Konfigurowanie udostępniania zasobów między źródłami (CORS), stosowanie domen niestandardowych lub przekazywanie certyfikatów SSL.This guide doesn't cover, for example, advanced workflows with Logic Apps or features of Azure Functions such as configuring Cross-Origin Resource Sharing (CORS), applying custom domains, or uploading SSL certificates. Te szczegóły są dostępne w dokumentacji Azure Functionsonline.These details are available through the online Azure Functions documentation.

Zasoby dodatkoweAdditional resources

Kto powinien korzystać z przewodnikaWho should use the guide

Ten przewodnik został utworzony dla deweloperów i architektów rozwiązań, którzy chcą kompilować aplikacje dla przedsiębiorstw przy użyciu platformy .NET, które mogą korzystać ze składników bezserwerowych w środowisku lokalnym lub w chmurze.This guide was written for developers and solution architects who want to build enterprise applications with .NET that may use serverless components either on premises or in the cloud. Jest to przydatne dla deweloperów, architektów i decyzji technicznych zainteresowanych:It's useful to developers, architects, and technical decision makers interested in:

  • Zrozumienie specjalistów i wad tworzenia bezserwerowegoUnderstanding the pros and cons of serverless development
  • Nauka podejścia do architektury bezserwerowejLearning how to approach serverless architecture
  • Przykładowe implementacje aplikacji bezserwerowychExample implementations of serverless apps

Jak korzystać z przewodnikaHow to use the guide

W pierwszej części tego przewodnika sprawdzono, dlaczego serwer jest opłacalną opcją, porównując kilka różnych metod architektury.The first part of this guide examines why serverless is a viable option by comparing several different architecture approaches. Bada ona zarówno cykl życia technologii, jak i programowania, ponieważ wszystkie aspekty opracowywania oprogramowania mają wpływ na decyzje architektury.It examines both the technology and development lifecycle, because all aspects of software development are impacted by architecture decisions. Przewodnik bada przypadki użycia i wzorce projektowe i zawiera implementacje odwołań przy użyciu Azure Functions.The guide then examines use cases and design patterns and includes reference implementations using Azure Functions. Każda sekcja zawiera dodatkowe zasoby, aby dowiedzieć się więcej na temat określonego obszaru.Each section contains additional resources to learn more about a particular area. Przewodnik zawiera zasoby dla przewodników i praktycznej eksploracji implementacji bezserwerowej.The guide concludes with resources for walkthroughs and hands-on exploration of serverless implementation.

Wyślij opinięSend your feedback

Przewodnik i powiązane przykłady są stale rozwijane, więc Twoje opinie są gotowe!The guide and related samples are constantly evolving, so your feedback is welcomed! Jeśli masz komentarze dotyczące sposobu, w jaki można ulepszyć ten przewodnik, Skorzystaj z sekcji opinia w dolnej części strony utworzonej w witrynie GitHub.If you have comments about how this guide can be improved, use the feedback section at the bottom of any page built on GitHub issues.