Reliable Services özelliğine genel bakışReliable Services overview

Azure Service Fabric, yazma ve durum bilgisiz ve durum bilgisi olan Reliable Services yönetme kolaylaştırır.Azure Service Fabric simplifies writing and managing stateless and stateful Reliable Services. Bu konu şunları içerir:This topic covers:

  • Durum bilgisiz ve durum bilgisi olan hizmetler için Reliable Services programlama modeli.The Reliable Services programming model for stateless and stateful services.
  • Seçenekler bir güvenilir hizmet yazarken yapmanız gerekir.The choices you have to make when writing a Reliable Service.
  • Bazı senaryolar ve örnekler Reliable Services kullanmak ne zaman ve nasıl yazılır.Some scenarios and examples of when to use Reliable Services and how they are written.

Reliable Services, Service Fabric üzerinde kullanılabilir programlama modelleri biridir.Reliable Services is one of the programming models available on Service Fabric. Diğer bir Reliable Services model üzerinde sanal aktör programlama modeli sağlar Reliable Actor programlama modeli var.The other is the Reliable Actor programming model, which provides a virtual Actor programming model on top of the Reliable Services model. Reliable Actors programlama modeli hakkında daha fazla bilgi için bkz. Service Fabric Reliable Actors hizmetine giriş.For more information on the Reliable Actors programming model, see Introduction to Service Fabric Reliable Actors.

Service Fabric Hizmetleri, sağlama ve dağıtım yükseltme ve silme ile ömrünü aracılığıyla yöneten Service Fabric uygulama yönetimini.Service Fabric manages the lifetime of services, from provisioning and deployment through upgrade and deletion, via Service Fabric application management.

Reliable Services nedir?What are Reliable Services?

Reliable Services uygulamanızı önemli express yardımcı olması için bir basit, güçlü, üst düzey programlama modeli sağlar.Reliable Services gives you a simple, powerful, top-level programming model to help you express what is important to your application. Güvenilir programlama modeli Hizmetleri olursunuz:With the Reliable Services programming model, you get:

  • Rest API'leri programlama Service fabric'in erişim.Access to the rest of the Service Fabric programming APIs. Service Fabric olarak modellenir hizmetlerinin aksine Konuk yürütülebilir dosyaları, Reliable Services get Service Fabric API'leri rest doğrudan kullanın.Unlike Service Fabric Services modeled as Guest Executables, Reliable Services get to use the rest of the Service Fabric APIs directly. Bu hizmetleri sağlar:This allows services to:
    • sistemi sorgulamaquery the system
    • küme içindeki varlıklar hakkında rapor durumureport health about entities in the cluster
    • Yapılandırma ve kod değişiklikleri ile ilgili bildirimleri almareceive notifications about configuration and code changes
    • bulma ve diğer hizmetlerle iletişim kurmafind and communicate with other services,
    • (isteğe bağlı olarak) güvenilir koleksiyonlar(optionally) use the Reliable Collections
    • ...ve erişim diğer birçok yetenekleri için birinci sınıf bir programlama modeli çeşitli programlama dillerinde çekmenize onların....and giving them access to many other capabilities, all from a first class programming model in several programming languages.
  • Kendi kodunuzu çalıştıran basit bir model programlama modellerini olduğunuz gibi görünüyor.A simple model for running your own code that looks like programming models you are used to. Kodunuz, iyi tanımlanmış bir giriş noktası ve kolayca yönetilen yaşam döngüsü vardır.Your code has a well-defined entry point and easily managed lifecycle.
  • Bir iletişim takılabilir modeli.A pluggable communication model. HTTP ile gibi tercih ettiğiniz bir aktarım kullanın Web API, WebSockets, özel TCP protokolleri ya da başka bir şey.Use the transport of your choice, such as HTTP with Web API, WebSockets, custom TCP protocols, or anything else. Reliable Services Giden kutusu seçenekleri kullanabilirsiniz veya kendi sağlayabilir bazı harika sağlar.Reliable Services provide some great out-of-the-box options you can use, or you can provide your own.
  • Durum bilgisi olan hizmetler için Reliable Services programlama modeli kullanarak, hizmet içinde durumunu tutarlı ve güvenilir bir şekilde depolamak sağlar güvenilir koleksiyonlar.For stateful services, the Reliable Services programming model allows you to consistently and reliably store your state right inside your service by using Reliable Collections. Güvenilir koleksiyonlar kullanan herkese tanıdık gelecektir yüksek kullanılabilirliğe sahip ve güvenilir koleksiyon sınıfları daha basit bir dizi olan C# koleksiyonları.Reliable Collections are a simple set of highly available and reliable collection classes that will be familiar to anyone who has used C# collections. Geleneksel olarak, hizmetleri güvenilir durum yönetimi için dış sistemler gerekli.Traditionally, services needed external systems for Reliable state management. Güvenilir koleksiyonlar ile aynı yüksek kullanılabilirlik ve güvenilirlik, yüksek oranda kullanılabilir bir dış mağazalardan beklenir karşılaşmışsınızdır yanındaki işlem durumunuzu depolayabilirsiniz.With Reliable Collections, you can store your state next to your compute with the same high availability and reliability you've come to expect from highly available external stores. İşlem ve çalışması için durum birlikte bulundurmak için bu modeli gecikme süresi de artırır.This model also improves latency because you are co-locating the compute and state it needs to function.

Reliable Services farklı yapan nedir?What makes Reliable Services different?

Service Fabric güvenilir hizmetler önce yazılmış hizmetlerinden farklıdır.Reliable Services in Service Fabric are different from services you may have written before. Service Fabric, güvenilirlik, kullanılabilirlik, tutarlılık ve ölçeklenebilirlik sağlar.Service Fabric provides reliability, availability, consistency, and scalability.

  • Güvenilirlik - hizmet kalır yukarı güvenilir olmayan ortamlarda bile makineleriniz nerede başarısız veya ağ karşılaşıp karşılaşmadığını veya burada Hizmetleri hata ve kilitlenme karşılaştığınız veya başarısız durumda.Reliability - Your service stays up even in unreliable environments where your machines fail or hit network issues, or in cases where the services themselves encounter errors and crash or fail. Durum bilgisi olan hizmetler için durumu, ağ veya diğer hatalar varsa bile korunur.For stateful services, your state is preserved even in the presence of network or other failures.
  • Kullanılabilirlik -hizmetiniz, erişilebilir ve hızlı.Availability - Your service is reachable and responsive. Service Fabric, istenen numaranızı kopyalarını çalıştırma tutar.Service Fabric maintains your desired number of running copies.
  • Ölçeklenebilirlik - Hizmetleri belirli donanım ayrılmış ve büyütün veya eklenmesi veya kaldırılmasını donanım veya diğer kaynaklar ile gerektiği gibi Daralt.Scalability - Services are decoupled from specific hardware, and they can grow or shrink as necessary through the addition or removal of hardware or other resources. Hizmetleri kolayca bölümlenmiş (durum bilgisi olan durumda özellikle) hizmetini ölçeklendirebilirsiniz sağlamak ve kısmi hata işleme.Services are easily partitioned (especially in the stateful case) to ensure that the service can scale and handle partial failures. Hizmetleri oluşturulabilir ve müşteri isteklerine yanıt olarak dinamik olarak etkinleştirme çalışmaya gerektiği şekilde başlar için daha fazla örnek kod aracılığıyla silindi varsayalım.Services can be created and deleted dynamically via code, enabling more instances to be spun up as necessary, say in response to customer requests. Son olarak, Service Fabric Hizmetleri basit olmasını önerir.Finally, Service Fabric encourages services to be lightweight. Service Fabric hizmetleri gerektiren veya ayrılmış tüm işletim sistemi örnekleri veya hizmetinin tek bir örneği için işlemler yerine tek bir işlem içinde sağlanacak binlerce sağlar.Service Fabric allows thousands of services to be provisioned within a single process, rather than requiring or dedicating entire OS instances or processes to a single instance of a service.
  • Tutarlılık -bu hizmette depolanan tüm bilgileri tutarlı olmasını güvence altına alınabilir.Consistency - Any information stored in this service can be guaranteed to be consistent. Bu hizmet içinde birden çok güvenilir koleksiyonlar arasında bile geçerlidir.This is true even across multiple reliable collections within a service. İşlemsel olarak kararlı bir şekilde bir hizmet içinde koleksiyonlar arasında değişiklik yapılabilir.Changes across collections within a service can be made in a transactionally atomic manner.

Hizmet yaşam döngüsüService lifecycle

Reliable Services, durum bilgisi olan veya durum bilgisi olmayan, hizmeti olup olmadığını hızlı bir şekilde kodunuzda takın ve çalışmaya başlama olanak tanıyan basit bir yaşam döngüsü sağlar.Whether your service is stateful or stateless, Reliable Services provide a simple lifecycle that lets you quickly plug in your code and get started. Hizmetinizi çalışır almak için uygulamanız gereken yalnızca bir veya iki yöntem vardır.There are just one or two methods that you need to implement to get your service up and running.

  • CreateServiceReplicaListeners/Createserviceınstancelisteners -burada kullanmak istediği iletişimi stack(s) hizmeti tanımlayan bu yöntemidir.CreateServiceReplicaListeners/CreateServiceInstanceListeners - This method is where the service defines the communication stack(s) that it wants to use. Aşağıdaki gibi iletişim yığın Web API, olan uç noktaları ya da (nasıl istemciler hizmete erişmek) hizmeti için uç nokta tanımlar.The communication stack, such as Web API, is what defines the listening endpoint or endpoints for the service (how clients reach the service). Ayrıca, görünen iletileri hizmet kodunu geri kalanı ile etkileşimini tanımlar.It also defines how the messages that appear interact with the rest of the service code.
  • RunAsync -hizmetinizin iş mantığını çalıştığı ve burada, hizmet ömrü boyunca çalışması gereken herhangi bir arka plan görevi hız kazandırın, bu yöntem kullanılır.RunAsync - This method is where your service runs its business logic, and where it would kick off any background tasks that should run for the lifetime of the service. Sağlanan iptal belirtecini bu çalışmanın ne zaman durması gerektiğini sinyaldir.The cancellation token that is provided is a signal for when that work should stop. Örneğin, hizmet iletileri güvenilir bir sıra dışında çekme ve bunları işlemeniz gerekiyorsa, bu iş nerede olacağını budur.For example, if the service needs to pull messages out of a Reliable Queue and process them, this is where that work happens.

Reliable services ilk kez öğrendiğiniz okumaya devam edin!If you're learning about reliable services for the first time, read on! Reliable services yaşam döngüsü için ayrıntılı bilgileri arıyorsanız, attıktan bu makalede.If you're looking for a detailed walkthrough of the lifecycle of reliable services, you can head over to this article.

Örnek HizmetleriExample services

Bu programlama modeli bilerek parçaların birbirine nasıl uyduğunu görmek için iki farklı Hizmetleri hızlı bir göz atalım.Knowing this programming model, let's take a quick look at two different services to see how these pieces fit together.

Güvenilir durum bilgisi olmayan hizmetlerStateless Reliable Services

Durum bilgisi olmayan hizmet tek yerdir çağrıları arasında hizmetinde saklanan durum yoktur.A stateless service is one where there is no state maintained within the service across calls. Mevcut olan herhangi bir durumu tamamen atılabilir ve eşitleme, çoğaltma, Kalıcılık veya yüksek kullanılabilirlik gerektirmez.Any state that is present is entirely disposable and doesn't require synchronization, replication, persistence, or high availability.

Örneğin, bellek ve tüm hüküm ve aynı anda gerçekleştirilecek işlemleri alır bir hesap makinesi göz önünde bulundurun.For example, consider a calculator that has no memory and receives all terms and operations to perform at once.

Bu durumda, RunAsync() (C#) veya runAsync() (Java) hiçbir arka plan görev hizmeti yapmak için gereken işleme olduğundan hizmet boş olabilir.In this case, the RunAsync() (C#) or runAsync() (Java) of the service can be empty, since there is no background task-processing that the service needs to do. Hesaplayıcı hizmet oluşturulduğunda döndürür bir ICommunicationListener (C#) veya CommunicationListener (Java) (örneğin Web API) bazı bağlantı noktası üzerinde dinleyen bir uç noktası'kurmak açılır.When the calculator service is created, it returns an ICommunicationListener (C#) or CommunicationListener (Java) (for example Web API) that opens up a listening endpoint on some port. Bu uç noktaları için farklı olan hesaplamayı yöntemleri kancaları (örnek: "Ekleyin. (n1, n2)") Makinesi'ni Genel API tanımlayın.This listening endpoint hooks up to the different calculation methods (example: "Add(n1, n2)") that define the calculator's public API.

Bir istemciden bir çağrı yapıldığında, uygun yöntemi çağrılır ve hesaplayıcı hizmet sağlanan veriler üzerinde işlem gerçekleştirir ve sonucu döndürür.When a call is made from a client, the appropriate method is invoked, and the calculator service performs the operations on the data provided and returns the result. Bu, herhangi bir durumu depolamaz.It doesn't store any state.

Herhangi bir iç durum depolamayın Bu örnek hesaplayıcı basitleştirir.Not storing any internal state makes this example calculator simple. Ancak, çoğu Hizmetleri gerçekten durum bilgisiz değildir.But most services aren't truly stateless. Bunun yerine, başka bir deposunda durumlarına federasyonda.Instead, they externalize their state to some other store. (Örneğin, bir yedekleme deposu veya cache oturum durumu tutmayı kullanan herhangi bir web uygulamasını durum bilgisiz değildir.)(For example, any web app that relies on keeping session state in a backing store or cache is not stateless.)

Sık kullanılan bir örnek olarak bir ön uç web uygulaması için genel kullanıma yönelik API sunan Service Fabric durum bilgisi olmayan hizmetler kullanılan nasıl.A common example of how stateless services are used in Service Fabric is as a front-end that exposes the public-facing API for a web application. Ön uç hizmeti daha sonra bir kullanıcı isteğini tamamlamak için durum bilgisi olan hizmetler hakkında konuşuyor.The front-end service then talks to stateful services to complete a user request. Bu durumda, istemcilerden gelen çağrıları burada durum bilgisi olmayan hizmet dinlediği bir bilinen bağlantı noktası için 80 gibi yönlendirilir.In this case, calls from clients are directed to a known port, such as 80, where the stateless service is listening. Bu durum bilgisi olmayan hizmet çağrısı alır ve çağrı güvenilir bir tarafın olup olmadığını ve hangi hizmet belirler için yönlendirilir.This stateless service receives the call and determines whether the call is from a trusted party and which service it's destined for. Ardından, durum bilgisi olmayan hizmet doğru bölüm durum bilgisi olan hizmet çağrısı iletir ve bir yanıt bekler.Then, the stateless service forwards the call to the correct partition of the stateful service and waits for a response. Durum bilgisi olmayan hizmet bir yanıtı aldığında, özgün istemciye yanıt verir.When the stateless service receives a response, it replies to the original client. Böyle bir hizmet içinde örneklerimizi örneğidir C# / Java.An example of such a service is in our samples C# / Java. Bu örneklerdeki bu düzeni yalnızca bir örnektir, vardır diğerleri de diğer örnekleri.This is only one example of this pattern in the samples, there are others in other samples as well.

Durum bilgisi olan Reliable ServicesStateful Reliable Services

Durum bilgisi olan hizmet durumu işlevi için tutarlı ve hizmetin mevcut tutulan kısmı olmalıdır biridir.A stateful service is one that must have some portion of state kept consistent and present in order for the service to function. Sürekli olarak aldığı güncelleştirmelerini temel alarak belirli bir değerin yuvarlanmış ortalamasını hesaplar bir hizmeti kullanmayı düşünün.Consider a service that constantly computes a rolling average of some value based on updates it receives. Bunu yapmak için ihtiyaç duyduğu işlem ve geçerli ortalama gelen isteklerin geçerli kümesi olmalıdır.To do this, it must have the current set of incoming requests it needs to process and the current average. Durum bilgisi olan (örneğin, bir Azure blob veya tablo deposunu Bugün) bir dış depolama bilgilerini depolar alır ve işler herhangi bir hizmeti.Any service that retrieves, processes, and stores information in an external store (such as an Azure blob or table store today) is stateful. Yalnızca durumuna dış durum deposunda tutar.It just keeps its state in the external state store.

Dış depo olduğundan bu durum için ne güvenilirlik, kullanılabilirlik, ölçeklenebilirlik ve tutarlılık sağlar hizmetlerin çoğu bugün durumlarına harici olarak depolar.Most services today store their state externally, since the external store is what provides reliability, availability, scalability, and consistency for that state. Service Fabric'te Hizmetleri durumlarına harici olarak depolamak gerekmez.In Service Fabric, services aren't required to store their state externally. Service Fabric hizmet kodunu hem de hizmet durumu için bu gereksinimlerin üstlenir.Service Fabric takes care of these requirements for both the service code and the service state.

Resimleri işleyen bir hizmet yazılacak istediğimizi varsayalım.Let's say we want to write a service that processes images. Hizmeti bunu yapmak için bu görüntüyü üzerinde gerçekleştirmek için bir görüntü ve bir dizi dönüşümleri alır.To do this, the service takes in an image and the series of conversions to perform on that image. (Şimdi onu bir Webapı olduğunu varsayın) Bu hizmet iletişim dinleyicisini kullanıma sunan bir API gibi sağladığı döndürür ConvertImage(Image i, IList<Conversion> conversions).This service returns a communication listener (let's suppose it's a WebAPI) that exposes an API like ConvertImage(Image i, IList<Conversion> conversions). Bir isteği aldığında, hizmet depolar bir IReliableQueueve istek izleyebilmek için istemci bazı kimliğini döndürür.When it receives a request, the service stores it in a IReliableQueue, and returns some id to the client so it can track the request.

Bu hizmette RunAsync() daha karmaşık olabilir.In this service, RunAsync() could be more complex. Hizmet bir döngü içinde olan kendi RunAsync() tanesi istekleri çeker IReliableQueue ve istenen dönüştürmeleri gerçekleştirir.The service has a loop inside its RunAsync() that pulls requests out of IReliableQueue and performs the conversions requested. Sonuçları depolanan bir IReliableDictionary ne zaman istemci geri gelir, dönüştürülen resimlerinin alabilirsiniz.The results get stored in an IReliableDictionary so that when the client comes back they can get their converted images. Bir görüntü başarısız olsa bile emin olmak için kayıp değilse, bu güvenilir hizmet sıranın dışında çekme, dönüştürmeler gerçekleştirmek ve sonucu tek bir işlemde tüm depolar.To ensure that even if something fails the image isn't lost, this Reliable Service would pull out of the queue, perform the conversions, and store the result all in a single transaction. Bu durumda, ileti kuyruktan silinir ve dönüştürmeler tamamlandığında sonuçları Sonuç sözlükte depolanır.In this case, the message is removed from the queue and the results are stored in the result dictionary only when the conversions are complete. Alternatif olarak, hizmet sıradaki görüntü çekme ve hemen sonra bir uzak depoda saklayabilirsiniz.Alternatively, the service could pull the image out of the queue and immediately store it in a remote store. Bu durumu yönetmek için hizmette olduğunu miktarını azaltır, ancak uzak depoda yönetmek için gerekli meta verileri tutmak hizmet beri arttıkça karmaşıklığı sahiptir.This reduces the amount of state the service has to manage, but increases complexity since the service has to keep the necessary metadata to manage the remote store. Ortada bir şey başarısız olursa her iki yaklaşım ile istek işlenmeyi bekleyen kuyruğunda kalır.With either approach, if something failed in the middle the request remains in the queue waiting to be processed.

Bu hizmet hakkında dikkat edilecek bir normal bir .NET hizmetine gibi ses şeydir!One thing to note about this service is that it sounds like a normal .NET service! Tek fark, kullanılan veri yapıları olan (IReliableQueue ve IReliableDictionary) Service Fabric tarafından sağlanır ve yüksek oranda güvenilir, kullanılabilir ve tutarlı.The only difference is that the data structures being used (IReliableQueue and IReliableDictionary) are provided by Service Fabric, and are highly reliable, available, and consistent.

Güvenilir hizmetler API'lerini kullanmak ne zamanWhen to use Reliable Services APIs

Ardından uygulama hizmeti gereksinimlerinizi niteleyen aşağıdakilerden herhangi biri, güvenilir hizmetler API'lerini dikkate almanız gerekir:If any of the following characterize your application service needs, then you should consider Reliable Services APIs:

  • Hizmetinizin kodunuzun (ve isteğe bağlı olarak durumu) yüksek oranda kullanılabilir ve güvenilir olmasıYou want your service's code (and optionally state) to be highly available and reliable
  • İşlem garanti arasında birden çok birimi durumunun (örneğin, sipariş ve sipariş satır öğeleri) gerekir.You need transactional guarantees across multiple units of state (for example, orders and order line items).
  • Uygulamanızın durumunu, doğal olarak güvenilir bir sözlük ve Kuyruklar modellenebilir.Your application’s state can be naturally modeled as Reliable Dictionaries and Queues.
  • Uygulama kodu veya durumu düşük gecikme süreli okuma ve yazma işlemleri ile yüksek oranda kullanılabilir olması gerekir.Your applications code or state needs to be highly available with low latency reads and writes.
  • Ayrıntı düzeyi, işlemler ve eşzamanlılık, bir veya daha fazla güvenilir koleksiyonlar kontrol etmek uygulamanız gerekir.Your application needs to control the concurrency or granularity of transacted operations across one or more Reliable Collections.
  • Duyuruları yönetmek veya hizmetiniz için bölümleme düzeni denetlemek istiyorsunuz.You want to manage the communications or control the partitioning scheme for your service.
  • Kodunuzu bir ücretsiz iş parçacıklı çalışma zamanı ortamı gerekir.Your code needs a free-threaded runtime environment.
  • Dinamik olarak oluşturmak veya güvenilir bir sözlük veya kuyruklar veya çalışma zamanında tüm hizmetleri yok etmek uygulamanız gerekir.Your application needs to dynamically create or destroy Reliable Dictionaries or Queues or whole Services at runtime.
  • Program aracılığıyla denetlemek Service Fabric tarafından sağlanan yedekleme ve geri yükleme özellikleri hizmetinizin durumu için gerekir.You need to programmatically control Service Fabric-provided backup and restore features for your service’s state.
  • Değişiklik geçmişi durumu onun birim korumak uygulamanız gerekir.Your application needs to maintain change history for its units of state.
  • Geliştirme veya üçüncü taraf geliştirilen, özel durum sağlayıcılarının kullanmak istiyorsunuz.You want to develop or consume third-party-developed, custom state providers.

Sonraki adımlarNext steps