Zamanlayıcı Aracısı Gözetmeni düzeniScheduler Agent Supervisor pattern

Bir dizi dağıtılmış eylemi tek bir işlem olarak koordine edin.Coordinate a set of distributed actions as a single operation. Eylemlerden herhangi birini başarısız olursa, hataları şeffaf bir şekilde ele almayı deneyin veya tümün işlemin bütünüyle başarılı ya da başarısız olması için gerçekleştirilen işi geri alın.If any of the actions fail, try to handle the failures transparently, or else undo the work that was performed, so the entire operation succeeds or fails as a whole. Bunun yapılması; geçici özel durumlar, uzun süreli arızalar ve işlem hataları nedeniyle başarısız olan eylemleri kurtarmayı ve yeniden denemeyi sağlayarak dağıtılmış bir sisteme dayanıklılık katabilir.This can add resiliency to a distributed system, by enabling it to recover and retry actions that fail due to transient exceptions, long-lasting faults, and process failures.

Bağlam ve sorunContext and problem

Bir uygulama, bazıları uzak hizmetleri çağırabilen veya uzak kaynaklara erişebilen birkaç adımlı görevler gerçekleştirir.An application performs tasks that include a number of steps, some of which might invoke remote services or access remote resources. Her bir adım birbirinden bağımsız olabilir, ancak görevi uygulayan bir uygulama mantığı tarafından düzenlenirler.The individual steps might be independent of each other, but they are orchestrated by the application logic that implements the task.

Mümkün olduğunda, uygulama görevin tamamlanana kadar çalışmasını sağlamalı ve uzak hizmetlere ya da kaynaklara erişirken oluşabilecek her türlü hatayı çözümlemelidir.Whenever possible, the application should ensure that the task runs to completion and resolve any failures that might occur when accessing remote services or resources. Hatalar çeşitli nedenlerle ortaya çıkabilir.Failures can occur for many reasons. Örneğin, ağ arızalı olabilir, iletişim kesintiye uğramış olabilir, uzak bir hizmet yanıt vermiyor veya kararsız bir durumda olabilir ya da uzak bir kaynağa, belki de kaynak kısıtlamaları nedeniyle, geçici olarak erişilemiyor olabilir.For example, the network might be down, communications could be interrupted, a remote service might be unresponsive or in an unstable state, or a remote resource might be temporarily inaccessible, perhaps due to resource constraints. Çoğu durumda hatalar geçicidir ve kullanılarak işlenebilir yeniden deneme düzeni.In many cases the failures will be transient and can be handled by using the Retry pattern.

Uygulama kolayca kurtaramayacağı daha kalıcı bir hata algılarsa, sistemi tutarlı bir duruma geri yükleyebilmesi ve tüm işlemin bütünlüğünü sağlayabilmesi gerekir.If the application detects a more permanent fault it can't easily recover from, it must be able to restore the system to a consistent state and ensure integrity of the entire operation.

ÇözümSolution

Zamanlayıcı Aracısı Gözetmeni düzeni aşağıdaki aktörleri tanımlar.The Scheduler Agent Supervisor pattern defines the following actors. Bu aktörler genel görevinin bir parçası olarak gerçekleştirilecek adımları düzenlerler.These actors orchestrate the steps to be performed as part of the overall task.

  • Zamanlayıcı, yürütülecek görevi oluşturan adımları ve işleyişlerini düzenler.The Scheduler arranges for the steps that make up the task to be executed and orchestrates their operation. Bu adımlar bir işlem hattı veya iş akışı içinde birleştirilebilir.These steps can be combined into a pipeline or workflow. Zamanlayıcı bu iş akışındaki adımların doğru sırayla gerçekleştirilmesinden sorumludur.The Scheduler is responsible for ensuring that the steps in this workflow are performed in the right order. Gerçekleştirilen her adımla birlikte Zamanlayıcı, "adım henüz başlatılmadı," "adım devam ediyor" veya "adım tamamlandı" gibi iş akışı durumlarını kaydeder.As each step is performed, the Scheduler records the state of the workflow, such as "step not yet started," "step running," or "step completed." Durum bilgileri, adımın tamamlanması için izin verilen üst süre sınırını da (tamamlama süresi) içermelidir.The state information should also include an upper limit of the time allowed for the step to finish, called the complete-by time. Bir adım, uzak bir hizmete veya kaynağa erişim gerektiriyorsa Zamanlayıcı uygun Aracıyı çağırır ve gerçekleştirilecek işin ayrıntılarını iletir.If a step requires access to a remote service or resource, the Scheduler invokes the appropriate Agent, passing it the details of the work to be performed. Zamanlayıcı genellikle zaman uyumsuz istek/yanıt mesajlaşması kullanarak bir Aracı ile iletişim kurar.The Scheduler typically communicates with an Agent using asynchronous request/response messaging. Bu özellik, diğer dağıtılmış mesajlaşma teknolojilerinin de kullanılabilmesine rağmen kuyruklar kullanılarak uygulanır.This can be implemented using queues, although other distributed messaging technologies could be used instead.

    Zamanlayıcı, İşlem Yöneticisi düzeninde İşlem Yöneticisi’ne benzer bir işlev gerçekleştirir.The Scheduler performs a similar function to the Process Manager in the Process Manager pattern. Gerçek iş akışı genellikle Zamanlayıcı ile denetlenen bir iş akışı altyapısı tarafından tanımlanıp uygulanır.The actual workflow is typically defined and implemented by a workflow engine that's controlled by the Scheduler. Bu yaklaşım, iş akışındaki iş mantığını Zamanlayıcı’dan ayırır.This approach decouples the business logic in the workflow from the Scheduler.

  • Aracı, bir uzak hizmete çağrıyı veya bir görevin adımı tarafından başvurulan uzak kaynağa erişimi kapsayan mantığı içerir.The Agent contains logic that encapsulates a call to a remote service, or access to a remote resource referenced by a step in a task. Her Aracı genellikle çağrıları tek bir hizmet ya da kaynağa sarmalar ve uygun hata işleme ile yeniden deneme mantığını uygular (daha sonra açıklanacak bir zaman aşımı kısıtlamasına tabidir).Each Agent typically wraps calls to a single service or resource, implementing the appropriate error handling and retry logic (subject to a timeout constraint, described later). Zamanlayıcı çalıştırılmakta olan iş akışındaki adımlar, farklı adımlarda birkaç hizmet ve kaynak kullanır ve her adım farklı bir Aracıya başvurabilir (bu, düzenin uygulama ayrıntısıdır).If the steps in the workflow being run by the Scheduler use several services and resources across different steps, each step might reference a different Agent (this is an implementation detail of the pattern).

  • Gözetmen, Zamanlayıcı tarafından gerçekleştirilen görevdeki adımların durumunu izler.The Supervisor monitors the status of the steps in the task being performed by the Scheduler. Düzenli aralıklarla çalışır (sıklığı sisteme özeldir) ve Zamanlayıcı tarafından sürdürülen adımların durumunu inceler.It runs periodically (the frequency will be system specific), and examines the status of steps maintained by the Scheduler. Zaman aşımına uğramış veya başarısız olmuş bir adım algılarsa, adımı kurtarmak veya uygun düzeltici işlemi yürütmek (bunun için adım durumunun değiştirilmesi gerekebilir) üzere uygun Aracıyı ayarlar.If it detects any that have timed out or failed, it arranges for the appropriate Agent to recover the step or execute the appropriate remedial action (this might involve modifying the status of a step). Kurtarma veya düzeltici işlemler Zamanlayıcı ve Aracılar tarafından uygulanır.Note that the recovery or remedial actions are implemented by the Scheduler and Agents. Gözetmen bu eylemlerin gerçekleştirilmesini istemelidir.The Supervisor should simply request that these actions be performed.

Zamanlayıcı, Aracı ve Gözetmen mantıksal bileşenlerdir ve fiziksel uygulaması, kullanılan teknolojiye bağlıdır.The Scheduler, Agent, and Supervisor are logical components and their physical implementation depends on the technology being used. Örneğin, tek bir web hizmetinin parçası olarak birkaç mantıksal aracı uygulanabilir.For example, several logical agents might be implemented as part of a single web service.

Zamanlayıcı, görevin ilerleme durumuna ve her bir adımın durumunda ilişkin bilgileri, durum deposu adlı dayanıklı bir veri deposunda tutar.The Scheduler maintains information about the progress of the task and the state of each step in a durable data store, called the state store. Gözetmen, bir adımın başarısız olup olmadığını belirlemek üzere bu bilgileri kullanabilir.The Supervisor can use this information to help determine whether a step has failed. Şekilde Zamanlayıcı, Aracılar, Gözetmen ve durum deposu arasındaki ilişki gösterilmektedir.The figure illustrates the relationship between the Scheduler, the Agents, the Supervisor, and the state store.

Şekil 1 - Zamanlayıcı Aracısı Gözetmeni düzenindeki aktörler

Not

Bu diyagram bir düzenin basitleştirilmiş bir sürümünü gösterir.This diagram shows a simplified version of the pattern. Gerçek bir uygulamada, her biri bir görev alt kümesi olan çok sayıda Zamanlayıcı örneği eşzamanlı olarak çalışabilir.In a real implementation, there might be many instances of the Scheduler running concurrently, each a subset of tasks. Benzer şekilde, sistem her bir Aracının birden çok örneğini veya birden fazla Gözetmeni çalıştırabilir.Similarly, the system could run multiple instances of each Agent, or even multiple Supervisors. Bu durumda, Gözetmenlerin aynı başarısız adımları ve görevleri kurtarmak için rekabet etmediklerinden emin olmak üzere birbirleriyle işlerini dikkatli bir şekilde koordine etmeleri gerekir.In this case, Supervisors must coordinate their work with each other carefully to ensure that they don’t compete to recover the same failed steps and tasks. Öncü Seçimi düzeni bu sorun için olası bir çözüm sağlar.The Leader Election pattern provides one possible solution to this problem.

Uygulama bir görevi çalıştırmaya hazır olduğunda Zamanlayıcı’ya bir istek gönderir.When the application is ready to run a task, it submits a request to the Scheduler. Zamanlayıcı, görevle ilgili başlangıç durumu bilgilerini (örneğin, adım henüz başlatılmadı) durum deposuna kaydeder ve sonra iş akışı tarafından tanımlanmış işlemleri gerçekleştirmeye başlar.The Scheduler records initial state information about the task and its steps (for example, step not yet started) in the state store and then starts performing the operations defined by the workflow. Zamanlayıcı bir adımı başlattığında, durum deposunda bu adımın durum bilgilerini günceller (örneğin, adım çalışıyor).As the Scheduler starts each step, it updates the information about the state of that step in the state store (for example, step running).

Bir adım uzak bir hizmet ya da kaynağa başvuruyorsa Zamanlayıcı uygun Aracıya bir ileti gönderir.If a step references a remote service or resource, the Scheduler sends a message to the appropriate Agent. İleti, Aracının hizmete geçirmesi veya kaynağa erişmesi için gereken bilgilerin yanı sıra işlemin son tamamlanma saatini içerir.The message contains the information that the Agent needs to pass to the service or access the resource, in addition to the complete-by time for the operation. Aracı, işlemini başarıyla tamamlarsa Zamanlayıcı’ya bir yanıt döndürür.If the Agent completes its operation successfully, it returns a response to the Scheduler. Bundan sonra Zamanlayıcı, durum deposundaki durum bilgilerini güncelleyebilir (örneğin, adım tamamlandı) ve sonraki adımı gerçekleştirebilir.The Scheduler can then update the state information in the state store (for example, step completed) and perform the next step. Bu işlem tüm görev tamamlanana kadar devam eder.This process continues until the entire task is complete.

Bir Aracı, işini gerçekleştirmek için gerekli olan herhangi bir yeniden deneme mantığını uygulayabilir.An Agent can implement any retry logic that's necessary to perform its work. Ancak, Aracı son tamamlanma süresi dolmadan önce işini tamamlamazsa, Zamanlayıcı işlemin başarısız olduğunu varsayar.However, if the Agent doesn't complete its work before the complete-by period expires, the Scheduler will assume that the operation has failed. Bu durumda, Aracı işini durdurmalı Zamanlayıcı’ya herhangi bir şey döndürmeyi (hata iletisi bile) veya herhangi bir kurtarma biçimini denememelidir.In this case, the Agent should stop its work and not try to return anything to the Scheduler (not even an error message), or try any form of recovery. Bu kısıtlamanın nedeni, bir adım zaman aşımına uğradıktan veya başarısız olduktan sonra başka bir Aracı örneğinin başarısız adımı çalıştıracak şekilde zamanlanmış olabilmesidir (bu işlem daha sonra açıklanacaktır).The reason for this restriction is that, after a step has timed out or failed, another instance of the Agent might be scheduled to run the failing step (this process is described later).

Aracı başarısız olursa Zamanlayıcı bir yanıt almaz.If the Agent fails, the Scheduler won't receive a response. Düzen, zaman aşımına uğramış bir adım ile gerçekten başarısız olmuş bir adımı birbirinden ayırt edemez.The pattern doesn't make a distinction between a step that has timed out and one that has genuinely failed.

Bir adım zaman aşımına uğrar veya başarısız olursa, durum deposu adımın çalıştırıldığını belirten bir kayıt içerir ancak son tamamlanma saati geçmiş olur.If a step times out or fails, the state store will contain a record that indicates that the step is running, but the complete-by time will have passed. Gözetmen buna benzer adımları arar ve kurtarmayı dener.The Supervisor looks for steps like this and tries to recover them. Olası stratejilerden biri, Gözetmenin son tamamlanma saati değerini, adımı tamamlamak için mevcut olan süreyi uzatacak şekilde güncelleştirmesi ve sonra Zamanlayıcı’ya zaman aşımına uğramış adımı tanımlayan bir ileti göndermesidir. Bundan sonra Zamanlayıcı bu adımı yinelemeyi deneyebilir.One possible strategy is for the Supervisor to update the complete-by value to extend the time available to complete the step, and then send a message to the Scheduler identifying the step that has timed out. The Scheduler can then try to repeat this step. Ancak, bu tasarım görevlerin bir kez etkili olmasını gerektirir.However, this design requires the tasks to be idempotent.

Gözetmenin, sürekli başarısız olması ya da zaman aşımına uğraması halinde aynı adımın yeniden denenmesini önlemesi gerekebilir. Bunu yapmak için Gözetmen, durum deposunda durum bilgilerinin yanında her adım için bir yeniden deneme sayısı tutabilir.The Supervisor might need to prevent the same step from being retried if it continually fails or times out. To do this, the Supervisor could maintain a retry count for each step, along with the state information, in the state store. Bu sayısı önceden tanımlı bir eşiği aşarsa Gözetmen, arızanın bu süre boyunca çözümlenebileceği beklentisiyle, Zamanlayıcı’ya adımı yeniden denemesi gerektiğini bildirmeden önce uzun bir süre bekleme stratejisini benimseyebilir.If this count exceeds a predefined threshold the Supervisor can adopt a strategy of waiting for an extended period before notifying the Scheduler that it should retry the step, in the expectation that the fault will be resolved during this period. Alternatif olarak, Gözetmen bir Telafi İşlemi düzeni uygulanarak tüm görevin geri alınmasını istemek üzere Zamanlayıcı’ya bir ileti gönderebilir.Alternatively, the Supervisor can send a message to the Scheduler to request the entire task be undone by implementing a Compensating Transaction pattern. Bu yaklaşım, Zamanlayıcı ve Aracıların başarıyla tamamlanan her adım için telafi işlemleri uygulamak üzere gerekli bilgileri sağlamasına bağlıdır.This approach will depend on the Scheduler and Agents providing the information necessary to implement the compensating operations for each step that completed successfully.

Zamanlayıcı ve Aracıların izlenmesi ve başarısız olmaları durumunda yeniden başlatılması Gözetmenin amacı değildir.It isn't the purpose of the Supervisor to monitor the Scheduler and Agents, and restart them if they fail. Sistemin bu özelliği, bu bileşenlerin çalıştığı altyapı tarafından kullanılmalıdır.This aspect of the system should be handled by the infrastructure these components are running in. Benzer şekilde, Gözetmen gerçek iş işlemleri hakkında Zamanlayıcı tarafından gerçekleştirilmekte olan görevlerin çalıştığını (bu görevlerin başarısız olması durumunda nasıl telafi edileceği de dahil olmak üzere) bilmemelidir.Similarly, the Supervisor shouldn't have knowledge of the actual business operations that the tasks being performed by the Scheduler are running (including how to compensate should these tasks fail). Zamanlayıcı tarafından uygulanan iş akışı mantığı bunu amaçlar.This is the purpose of the workflow logic implemented by the Scheduler. Gözetmenin tek sorumluluğu bir adımın başarısız olup olmadığını belirlemek ve yinelenmesini ya da başarısız adımı içeren tüm görevin geri alınmasını ayarlamaktır.The sole responsibility of the Supervisor is to determine whether a step has failed and arrange either for it to be repeated or for the entire task containing the failed step to be undone.

Zamanlayıcı bir hatadan sonra yeniden başlatılırsa veya Zamanlayıcı tarafından gerçekleştirilen iş akışı beklenmedik şekilde sonlandırılırsa, Zamanlayıcı başarısız olduğunda gerçekleştirmekte olduğu tüm devam eden görevlerin durumunu belirleyebilmeli ve bu görevi o noktadan itibaren sürdürmeye hazır olmalıdır.If the Scheduler is restarted after a failure, or the workflow being performed by the Scheduler terminates unexpectedly, the Scheduler should be able to determine the status of any inflight task that it was handling when it failed, and be prepared to resume this task from that point. Bu işlemin uygulama ayrıntıları sisteme özgü olabilir.The implementation details of this process are likely to be system specific. Görev kurtarılamıyorsa, görev tarafından zaten gerçekleştirilmiş işin geri alınması gerekebilir.If the task can't be recovered, it might be necessary to undo the work already performed by the task. Bunun için bir telafi işlemi uygulanması da gerekebilir.This might also require implementing a compensating transaction.

Bu düzenin temel avantajı, sistemin beklenmeyen geçici veya kurtarılamaz hatalar durumunda dayanıklı olmasıdır.The key advantage of this pattern is that the system is resilient in the event of unexpected temporary or unrecoverable failures. Sistem, kendi kendini iyileştirecek şekilde oluşturulabilir.The system can be constructed to be self healing. Örneğin, bir Aracı ya da Zamanlayıcı başarısız olursa yeni bir tane başlatılabilir ve Gözetmen bir görevin sürdürülmesini ayarlayabilir.For example, if an Agent or the Scheduler fails, a new one can be started and the Supervisor can arrange for a task to be resumed. Gözetmen başarısız olursa başka bir örnek başlatılabilir ve hatanın gerçekleştiği noktadan itibaren görevi üstlenebilir.If the Supervisor fails, another instance can be started and can take over from where the failure occurred. Gözetmen düzenli aralıklarla çalışacak şekilde zamanlanmışsa, önceden tanımlı bir aralıktan sonra otomatik olarak yeni bir örnek başlatılabilir.If the Supervisor is scheduled to run periodically, a new instance can be automatically started after a predefined interval. Durum deposu çok daha yüksek bir dayanıklılık derecesine ulaşmak üzere çoğaltılabilir.The state store can be replicated to reach an even greater degree of resiliency.

Sorunlar ve dikkat edilmesi gerekenlerIssues and considerations

Bu düzeni nasıl uygulayacağınıza karar verirken aşağıdaki noktaları dikkate almalısınız:You should consider the following points when deciding how to implement this pattern:

  • Bu düzenin uygulanması zor olabilir ve sistemin her olası hata modunun kapsamlı bir şekilde test edilmesini gerektirir.This pattern can be difficult to implement and requires thorough testing of each possible failure mode of the system.

  • Zamanlayıcı tarafından uygulanan kurtarma/yeniden deneme mantığı karmaşıktır ve durum deposunda saklanan durum bilgilerine bağlıdır.The recovery/retry logic implemented by the Scheduler is complex and dependent on state information held in the state store. Bir telafi işlemini uygulamak için gereken bilgilerin dayanıklı bir veri deposuna kaydedilmesi de gerekebilir.It might also be necessary to record the information required to implement a compensating transaction in a durable data store.

  • Gözetmenin ne sıklıkta çalıştığı önemlidir.How often the Supervisor runs will be important. Başarısız adımların bir uygulamayı uzun bir süre boyunca engellemesini önleyecek sıklıkta çalışmalı, ancak ek yük haline geleceği sıklıkta çalışmamalıdır.It should run often enough to prevent any failed steps from blocking an application for an extended period, but it shouldn't run so often that it becomes an overhead.

  • Bir Aracı tarafından gerçekleştirilen adımlar birden çok kez çalıştırılabilir.The steps performed by an Agent could be run more than once. Bu adımları uygulayan mantık bir kez etkili olmalıdır.The logic that implements these steps should be idempotent.

Bu düzenin kullanılacağı durumlarWhen to use this pattern

Bulut gibi dağıtılmış bir ortamda çalışan bir işlemin iletişim hatasına ve/veya işlem hatasına karşı dayanıklı olması gerektiğinde bu düzeni kullanın.Use this pattern when a process that runs in a distributed environment, such as the cloud, must be resilient to communications failure and/or operational failure.

Bu düzen, uzak hizmetleri çağırmayan veya uzak kaynaklara erişmeyen görevler için uygun olmayabilir.This pattern might not be suitable for tasks that don't invoke remote services or access remote resources.

ÖrnekExample

Microsoft Azure’da, e-ticaret sistemi uygulayan bir web uygulaması dağıtılmıştır.A web application that implements an ecommerce system has been deployed on Microsoft Azure. Kullanıcılar bu uygulamayı çalıştırarak kullanılabilir ürünlere göz atabilir ve sipariş verebilir.Users can run this application to browse the available products and to place orders. Kullanıcı arabirimi bir web rolü olarak çalışır ve uygulamanın sipariş işleme öğeleri, bir çalışan rolleri kümesi olarak uygulanır.The user interface runs as a web role, and the order processing elements of the application are implemented as a set of worker roles. Sipariş işleme mantığının bir kısmı uzak bir hizmete erişim gerektirir ve sistemin bu yönü, geçici ya da daha uzun süreli arızalara yatkın olabilir.Part of the order processing logic involves accessing a remote service, and this aspect of the system could be prone to transient or more long-lasting faults. Bu nedenle tasarımcılar, sistemin sipariş işleme öğelerini uygulamak için Zamanlayıcı Aracısı Gözetmeni düzenini kullanmıştır.For this reason, the designers used the Scheduler Agent Supervisor pattern to implement the order processing elements of the system.

Bir müşteri sipariş verdiğinde, uygulama siparişi açıklayan bir ileti oluşturur ve bu iletiyi bir kuyruğa gönderir.When a customer places an order, the application constructs a message that describes the order and posts this message to a queue. Bir çalışan rolü içinde çalışan ayrı bir gönderme işlemi ise iletiyi alır, sipariş ayrıntılarını sipariş veritabanına ekler ve durum deposunda sipariş işleminin bir kaydını oluşturur.A separate submission process, running in a worker role, retrieves the message, inserts the order details into the orders database, and creates a record for the order process in the state store. Sipariş veritabanı ve durum deposu içindeki eklemelerin aynı işlem kapsamında gerçekleştirildiğini unutmayın.Note that the inserts into the orders database and the state store are performed as part of the same operation. Gönderme işlemi her iki eklemenin de birlikte tamamlanmasını sağlayacak şekilde tasarlanmıştır.The submission process is designed to ensure that both inserts complete together.

Gönderme işleminin sipariş için oluşturduğu durum bilgileri şunlardır:The state information that the submission process creates for the order includes:

  • OrderID.OrderID. Sipariş veritabanındaki sipariş kimliği.The ID of the order in the orders database.

  • LockedBy.LockedBy. Siparişi işleyen çalışan rolünün örnek kimliği.The instance ID of the worker role handling the order. Zamanlayıcı tarafından çalıştırılan çalışan rolünün birden fazla geçerli örneği olabilir, ancak her sipariş yalnızca tek bir örnek tarafından işlenmelidir.There might be multiple current instances of the worker role running the Scheduler, but each order should only be handled by a single instance.

  • CompleteBy.CompleteBy. Siparişin işlenmesi gereken en son zaman.The time the order should be processed by.

  • ProcessState.ProcessState. Siparişi işleyen görevin geçerli durumu.The current state of the task handling the order. Olası durumlar şunlardır:The possible states are:

    • Beklemede.Pending. Sipariş oluşturuldu ancak işleme henüz başlamadı.The order has been created but processing hasn't yet been started.
    • İşleniyor.Processing. Sipariş şu anda işleniyor.The order is currently being processed.
    • İşlendi.Processed. Sipariş başarıyla işlendi.The order has been processed successfully.
    • Hata.Error. Sipariş işleme başarısız oldu.The order processing has failed.
  • FailureCount.FailureCount. Sipariş için işlemenin denenme sayısı.The number of times that processing has been tried for the order.

Bu durum bilgilerinde OrderID alaı, yeni siparişin sipariş kimliğinden kopyalanır.In this state information, the OrderID field is copied from the order ID of the new order. LockedBy ve CompleteBy alanları null, ProcessState alanı Pending ve FailureCount alanı 0 olarak ayarlanır.The LockedBy and CompleteBy fields are set to null, the ProcessState field is set to Pending, and the FailureCount field is set to 0.

Not

Bu örnekte sipariş işleme mantığı oldukça basittir ve yalnızca uzak bir hizmeti çağıran tek bir adım içerir.In this example, the order handling logic is relatively simple and only has a single step that invokes a remote service. Daha karmaşık, çok adımlı bir senaryoda gönderme işlemi, benzer şekilde birkaç adım içerir ve bu yüzden durum deposunda her biri bir adımın durumunu açıklayan birkaç kayıt oluşturulur.In a more complex multistep scenario, the submission process would likely involve several steps, and so several records would be created in the state store—each one describing the state of an individual step.

Zamanlayıcı ayrıca bir çalışan rolünün parçası olarak çalışır ve siparişi işleyen iş mantığını uygular.The Scheduler also runs as part of a worker role and implements the business logic that handles the order. Zamanlayıcı’nın yeni siparişleri yoklayan bir örneği, LockedBy alanının null ve ProcessState alanının beklemede olduğu kayıtlar için durum deposunu inceler.An instance of the Scheduler polling for new orders examines the state store for records where the LockedBy field is null and the ProcessState field is pending. Zamanlayıcı yeni bir sipariş bulduğunda LockedBy alanını kendi örnek kimliği ile hemen doldurur, CompleteBy alanını uygun bir saate ayarlar ve ProcessState alanını işleniyor olarak ayarlar.When the Scheduler finds a new order, it immediately populates the LockedBy field with its own instance ID, sets the CompleteBy field to an appropriate time, and sets the ProcessState field to processing. Kod, iki zamanlı Zamanlayıcı örneğinin aynı siparişi aynı anda işlemeye çalışamadığından emin olmak için özel ve atomik olacak şekilde tasarlanmıştır.The code is designed to be exclusive and atomic to ensure that two concurrent instances of the Scheduler can't try to handle the same order simultaneously.

Zamanlayıcı daha sonra siparişi zaman uyumsuz olarak işlemek için iş akışını çalıştırır ve durum deposunun OrderID alanındaki değerini geçirir.The Scheduler then runs the business workflow to process the order asynchronously, passing it the value in the OrderID field from the state store. Siparişi işleyen iş akışı, sipariş veritabanından siparişin ayrıntılarını alır ve kendi işini gerçekleştirir.The workflow handling the order retrieves the details of the order from the orders database and performs its work. Sipariş işleme iş akışındaki bir adımın uzak hizmeti çağırması gerekirse Aracıyı kullanır.When a step in the order processing workflow needs to invoke the remote service, it uses an Agent. İş akışı adımı, istek/yanıt kanalı gibi davranan bir çift Azure Service Bus ileti kuyruğunu kullanarak Aracı ile iletişim kurar.The workflow step communicates with the Agent using a pair of Azure Service Bus message queues acting as a request/response channel. Şekilde, çözümün yüksek düzeyde bir görünümü gösterilmiştir.The figure shows a high level view of the solution.

Şekil 2 - Bir Azure çözümünde siparişleri işlemek için Zamanlayıcı Aracısı Gözetmeni düzenini kullanma

Bir iş akışı adımından Aracıya gönderilen ileti, siparişi açıklar ve son tamamlanma saatini içerir.The message sent to the Agent from a workflow step describes the order and includes the complete-by time. Aracı son tamamlanma saati dolmadan önce uzak hizmetten bir yanıt alırsa, iş akışının dinlediği Service Bus kuyruğuna bir yanıt iletisi gönderir.If the Agent receives a response from the remote service before the complete-by time expires, it posts a reply message on the Service Bus queue on which the workflow is listening. İş akışı adımı geçerli yanıt iletisini aldığında işlemeyi tamamlar ve Zamanlayıcı, işlenecek sipariş durumunun `ProcessState alanını ayarlar.When the workflow step receives the valid reply message, it completes its processing and the Scheduler sets the `ProcessState field of the order state to processed. Bu noktada, sipariş işleme başarıyla tamamlanmıştır.At this point, the order processing has completed successfully.

Aracı uzak hizmetten bir yanıt almadan önce son tamamlanma saati dolarsa, Aracı işlemeyi durdurur ve siparişi işlemeyi sonlandırır.If the complete-by time expires before the Agent receives a response from the remote service, the Agent simply halts its processing and terminates handling the order. Benzer şekilde, siparişi işleyen iş akışı son tamamlanma saatini aşarsa o da sonlandırılır.Similarly, if the workflow handling the order exceeds the complete-by time, it also terminates. Her iki durumda da siparişin durum deposundaki durumu işleniyor olarak kalır; ancak son tamamlanma saati, siparişi işleme saatinin geçtiğini gösterir ve işlemin başarısız olduğu kabul edilir.In both cases, the state of the order in the state store remains set to processing, but the complete-by time indicates that the time for processing the order has passed and the process is deemed to have failed. Uzak hizmete erişen Aracının veya siparişi işleyen iş akışının (ya da her ikisinin) beklenmedik şekilde sonlandırılması durumunda, durum deposundaki bilgilerin işleniyor olarak kalacağını ve son tamamlanma saatinin dolacağını unutmayın.Note that if the Agent that's accessing the remote service, or the workflow that's handling the order (or both) terminate unexpectedly, the information in the state store will again remain set to processing and eventually will have an expired complete-by value.

Aracı uzak hizmet ile iletişim kurmaya çalışırken kurtarılamaz ve geçici olmayan bir arıza algılarsa, iş akışına bir hata yanıtı gönderir.If the Agent detects an unrecoverable, nontransient fault while it's trying to contact the remote service, it can send an error response back to the workflow. Zamanlayıcı, siparişin durumunu hata olarak ayarlayabilir ve operatörü uyaran bir olay tetikleyebilir.The Scheduler can set the status of the order to error and raise an event that alerts an operator. Operatör bundan sonra hatanın nedenini el ile çözümlemeyi ve başarısız işleme adımını yeniden göndermeyi deneyebilir.The operator can then try to resolve the reason for the failure manually and resubmit the failed processing step.

Gözetmen, son tamamlanma saati dolmuş siparişleri aramak için durum deposunu düzenli aralıklarla inceler.The Supervisor periodically examines the state store looking for orders with an expired complete-by value. Gözetmen bir kayıt bulursa FailureCount alanını artırır.If the Supervisor finds a record, it increments the FailureCount field. Hata sayısı değeri belirtilen bir eşik değerinin altındaysa, Gözetmen LockedBy alanını null olarak sıfırlar, CompleteBy alanını yeni bir sona erme saati ile güncelleştirir ve ProcessState alanını bekliyor olarak ayarlar.If the failure count value is below a specified threshold value, the Supervisor resets the LockedBy field to null, updates the CompleteBy field with a new expiration time, and sets the ProcessState field to pending. Bir Zamanlayıcı örneği bu siparişi alıp daha önceki gibi işleyebilir.An instance of the Scheduler can pick up this order and perform its processing as before. Hata sayısı değeri belirtilen bir eşiği aşarsa, başarısızlık nedeninin geçici olmadığı varsayılır.If the failure count value exceeds a specified threshold, the reason for the failure is assumed to be nontransient. Gözetmen, siparişin durumunu hata olarak ayarlayabilir ve operatörü uyaran bir olay tetikleyebilir.The Supervisor sets the status of the order to error and raises an event that alerts an operator.

Bu örnekte Gözetmen ayrı bir çalışan rolünde uygulanmıştır.In this example, the Supervisor is implemented in a separate worker role. Gözetmen görevinin çalıştırılması için, Azure Scheduler hizmeti gibi (bu düzendeki Zamanlayıcı bileşeni ile karıştırılmamalıdır) çeşitli stratejiler kullanabilirsiniz.You can use a variety of strategies to arrange for the Supervisor task to be run, including using the Azure Scheduler service (not to be confused with the Scheduler component in this pattern). Azure Scheduler hizmeti hakkında daha fazla bilgi için Scheduler sayfasını ziyaret edin.For more information about the Azure Scheduler service, visit the Scheduler page.

Bu örnekte gösterilmemesine karşın, Zamanlayıcının siparişi gönderen uygulamayı siparişin ilerlemesi ve durumu hakkında bilgilendirmesi gerekebilir.Although it isn't shown in this example, the Scheduler might need to keep the application that submitted the order informed about the progress and status of the order. Uygulama ve Zamanlayıcı, aralarındaki bağımlılıkları ortadan kaldırmak için birbirinden yalıtılmıştır.The application and the Scheduler are isolated from each other to eliminate any dependencies between them. Uygulama, hangi Zamanlayıcı örneğinin sipariş işlediğini bilmez, Zamanlayıcı ise hangi uygulama örneğinin siparişi gönderdiğinin bilincinde değildir.The application has no knowledge of which instance of the Scheduler is handling the order, and the Scheduler is unaware of which specific application instance posted the order.

Sipariş durumunun bildirilmesine izin vermek için uygulama kendi özel yanıt kuyruğunu kullanabilir.To allow the order status to be reported, the application could use its own private response queue. Bu yanıt kuyruğunun ayrıntıları, gönderme işlemine gönderilen isteğe ve durum deposuna eklenir.The details of this response queue would be included as part of the request sent to the submission process, which would include this information in the state store. Zamanlayıcı daha sonra siparişin durumunu gösteren bu kuyruğa iletiler gönderir (istek alındı, sipariş tamamlandı, sipariş başarısız oldu gibi).The Scheduler would then post messages to this queue indicating the status of the order (request received, order completed, order failed, and so on). Uygulama tarafından özgün istekle ilişkilendirilebilmesi için bu iletilere sipariş kimliği eklenmelidir.It should include the order ID in these messages so they can be correlated with the original request by the application.

Bu düzen uygulanırken aşağıdaki düzenler ve yönergeler de yararlı olabilir:The following patterns and guidance might also be relevant when implementing this pattern:

  • Yeniden deneme düzeni.Retry pattern. Aracı, daha önce başarısız olmuş uzak bir hizmete veya kaynağa erişen bir işlemi şeffaf bir şekilde yeniden denemek için bu düzeni kullanabilir.An Agent can use this pattern to transparently retry an operation that accesses a remote service or resource that has previously failed. Hata nedeninin geçici olduğu ve düzeltilebileceği beklendiğinde kullanın.Use when the expectation is that the cause of the failure is transient and can be corrected.
  • Devre Kesici düzeni.Circuit Breaker pattern. Aracı, uzak hizmete veya kaynağa bağlanırken değişken bir süre boyunca devam eden arızları düzeltmek için bu düzeni kullanabilir.An Agent can use this pattern to handle faults that take a variable amount of time to correct when connecting to a remote service or resource.
  • Telafi İşlemi düzeni.Compensating Transaction pattern. Bir Zamanlayıcı tarafından gerçekleştirilmekte olan iş akışı başarıyla tamamlanamıyorsa, daha önce gerçekleştirilen işlerin geri alınması gerekebilir.If the workflow being performed by a Scheduler can't be completed successfully, it might be necessary to undo any work it's previously performed. Telafi İşlemi düzeni, son tutarlılık modelini izleyen işlemler için bunun nasıl gerçekleştirilebileceğini açıklar.The Compensating Transaction pattern describes how this can be achieved for operations that follow the eventual consistency model. Bu tür işlemler genellikle karmaşık iş süreçleri ve iş akışları uygulayan bir Zamanlayıcı tarafından uygulanır.These types of operations are commonly implemented by a Scheduler that performs complex business processes and workflows.
  • Zaman Uyumsuz Mesajlaşma Temel Bilgileri.Asynchronous Messaging Primer. Zamanlayıcı Aracısı Gözetmeni düzenindeki bileşenler genellikle birbirinden ayrılmış olarak çalıştırılır ve zaman uyumsuz olarak iletişim kurar.The components in the Scheduler Agent Supervisor pattern typically run decoupled from each other and communicate asynchronously. İleti kuyruklarını temel alarak zaman uyumsuz iletişim uygulamak için kullanılabilen yaklaşımlardan bazılarını açıklar.Describes some of the approaches that can be used to implement asynchronous communication based on message queues.
  • Öncü Seçimi düzeni.Leader Election pattern. Aynı başarısız işlemi kurtarmayı denemelerini önlemek için, bir Gözetmenin birden fazla örneğinin eylemlerini koordine etmek gerekli olabilir.It might be necessary to coordinate the actions of multiple instances of a Supervisor to prevent them from attempting to recover the same failed process. Öncü Seçimi düzeni bunun nasıl yapılacağını açıklar.The Leader Election pattern describes how to do this.
  • Bulut mimarisi: Zamanlayıcı Aracısı Gözetmeni düzeni Clemens Vasters bloguCloud Architecture: The Scheduler-Agent-Supervisor Pattern on Clemens Vasters' blog
  • İşlem Yöneticisi düzeniProcess Manager pattern
  • Başvuru 6: Efsaneler üzerinde efsane.Reference 6: A Saga on Sagas. CQRS düzeninin bir işlem yöneticisini nasıl kullandığını gösteren örnek (CQRS Yolculuğu kılavuzunda).An example showing how the CQRS pattern uses a process manager (part of the CQRS Journey guidance).
  • Microsoft Azure SchedulerMicrosoft Azure Scheduler