Bir işlevi asenkron olarak çağırdığınızda, çağrının başarılı olup olmadığını, başarısız mı olduğunu yoksa hâlâ çalışıyor mu olduğunu izlemek için yerleşik bir yöntem bulunmaz. Asenkron görev modu, her çağrı için kuyruğa alınmış durumdan tamamlanmış veya başarısız duruma kadar olan tüm durum geçişlerini kaydederek ve bu kayıtları gerçek zamanlı sorgulama ve yönetim için kullanılabilir hale getirerek bu sorunu çözer.
Görev modu etkinleştirildiğinde şunları yapabilirsiniz:
Yaşam döngüsünün herhangi bir noktasında bir görevin mevcut durumunu sorgulayın.
Kimliğine göre belirli bir çalışan görevi durdurun.
Her çağrıya benzersiz bir görev kimliği atayarak yinelenen yürütmeleri önleyin.
Kuyruk derinliğini, işlem gecikme süresini ve örnek düzeyindeki kaynak kullanımını izleyin.
CloudFlow kullanarak büyük ölçekli iş akışlarında görevleri koordine edin.
Görev modu, çağrılara ve yürütülere minimum düzeyde gecikme ekler. Bu gecikme için ücretlendirme yapılmaz. Faturalandırma ayrıntıları için bkz. Faturalandırmaya genel bakış.
Görev modunun çalışma şekli
Görev modu etkinleştirildiğinde, Function Compute her asenkron çağrı için tüm durum geçişlerini kaydeder. Bir görev gönderdikten sonra:
Function Compute çağrı iletisini kuyruğa alır (durum: Enqueued).
İleti kuyruktan çıkarılır ve uygun bir örneğin serbest kalmasını bekler (durum: Processed).
Bir örnek görevi alır ve çalıştırır (durum: Running).
Görev son duruma geçer: Succeeded, Failed, Stopped, Expired veya Invalid.
Durumu konsol, API veya Serverless Devs kullanarak herhangi bir adımda sorgulayabilirsiniz.
Sınırlamalar
Gecikmeye duyarlılık: Uygulamanız uçtan uca ortalama gecikme süresinin 100 ms'den az olmasını gerektiriyorsa görev modunu devre dışı bırakın.
Aktarım hızı: İşlevleri saniyede binlerce istek (RPS) veya daha yüksek oranlarda asenkron olarak çağırmanız gerekiyorsa görev modunu devre dışı bırakın.
Saklama süresi: Görev kayıtları oluşturulduktan sonraki 7 gün boyunca sorgulanabilir.
Desteklenen bölgeler: China (Hangzhou), China (Shanghai), China (Qingdao), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Chengdu), China (Hong Kong), Singapore, UK (London), US (Silicon Valley), US (Virginia), Germany (Frankfurt), Malaysia (Kuala Lumpur), Indonesia (Jakarta), Thailand (Bangkok), Japan (Tokyo) ve South Korea (Seoul).
Görev durumları
Function Compute, her asenkron görev için aşağıdaki durumları izler:
| Durum | Açıklama |
|---|---|
| Enqueued | Çağrı iletisi kuyruğa alınmıştır ve işlenmeyi beklemektedir. |
| Processed | İleti kuyruktan çıkarılmıştır ve görev çağrılmayı beklemektedir. |
| Running | Görev bir örnek üzerinde çalışmaktadır. |
| Succeeded | Görev başarıyla tamamlanmıştır. |
| Failed | Görev başarısız olmuştur. |
| Stopped | Görev manuel olarak durdurulmuştur. |
| Stopping | Sistem bir durdurma isteğini işlemektedir. |
| Expired | Görev işlenmeden önce iletinin yaşam süresi (TTL) dolmuş; ileti atılmıştır. |
| Invalid | Görev çalıştırılamamıştır; örneğin, işlev silindiği için. |
| Retrying | Görev, bir yürütme hatasının ardından yeniden denenmektedir. Yeniden deneme başladığında durum Running olarak değişir. |
Belirli bir görevin mevcut durumunu almak için GetAsyncTask öğesini çağırın. Görevleri duruma veya diğer koşullara göre filtrelemek için ListAsyncTasks öğesini çağırın.
Kubernetes işleri ile karşılaştırma
Asenkron görevleri çalıştırmak için Function Compute'ün asenkron görev özelliğini veya Kubernetes işlerini kullanabilirsiniz. Aşağıdaki tabloda iki yaklaşım karşılaştırılmaktadır.
| Özellik | Function Compute görevleri | Kubernetes işleri |
|---|---|---|
| Kullanım senaryoları | Hem onlarca milisaniye süren gerçek zamanlı görevler hem de onlarca saat süren çevrimdışı görevler için uygundur. | Sabit iş yüküne sahip ve gönderim hızı ile gerçek zamanlı performans gereksinimleri düşük olan çevrimdışı görevler için uygundur. |
| Görev gözlemlenebilirliği | Desteklenir. Kuyruktaki görev sayısı, görev yolu süresi ve görev durumu sorguları gibi ölçümler dahil olmak üzere kapsamlı gözlemlenebilirlik sağlar. | Açık kaynak yazılımların manuel olarak entegre edilmesini gerektirir. |
| Görev örneklerinin otomatik ölçeklendirilmesi | Desteklenir. Kuyruktaki görev sayısı ve kaynak kullanımına göre örnekleri otomatik olarak ölçeklendirir. | Ölçeklendirme ve yük dengelemenin bir görev kuyruğu ile manuel olarak uygulanmasını gerektirir; bu da karmaşıklığı artırır. |
| Örnek ölçeklendirme hızı | Milisaniye düzeyinde. | Dakika düzeyinde. |
| Örnek kaynak kullanımı | Uygun bir örnek türü seçin. Örnekler otomatik olarak ölçeklenir; yalnızca gerçek görev işleme süresine göre ücretlendirilirsiniz, bu da yüksek kaynak verimliliği sağlar. | Bir iş gönderirken örnek türünü ve sayısını belirtmeniz gerekir. Otomatik ölçeklendirme ve yük dengeleme zor uygulandığından kaynak verimliliği düşüktür. |
| Görev gönderim aktarım hızı | Tek bir kullanıcı saniyede on binlerce görev gönderebilir. | Bir küme saniyede en fazla birkaç yüz iş başlatabilir. |
| Zamanlanmış veya gecikmeli gönderim | Hem zamanlanmış hem de gecikmeli gönderimi destekler. | Zamanlanmış gönderimi destekler ancak gecikmeli gönderimi desteklemez. |
| Görev yinelenmesini önleme | Desteklenir. | Desteklenmez. |
| Belirli bir görevi sonlandırma | Desteklenir. | Sınırlı destek. Görevler, görev örnekleri durdurularak dolaylı yoldan sonlandırılır. |
| Görev kısıtlama | Desteklenir. Kısıtlama, kullanıcı veya işlev düzeyinde yapılandırılabilir. | Desteklenmez. |
| Otomatik sonuç geri araması | Desteklenir. | Desteklenmez. |
| Geliştirme ve işletme maliyetleri | Yalnızca görev işleme mantığını uygulamanız gerekir. | Bir Kubernetes kümesinin bakımını gerektirir. |
Görev modunu etkinleştirme
Bir işlev oluştururken görev modunu etkinleştirme
Function Compute konsolu adresine giriş yapın. Sol gezinme bölmesinde Function Management > Function seçeneklerini seçin.
Üst gezinme çubuğunda bir bölge seçin. Function sayfasında Create Function öğesine tıklayın.
İletişim kutusunda Task Function seçeneğini belirleyin ve Create öğesine tıklayın. İşlev adını ayarlayın ve Create öğesine tıklayın.
İşlev oluşturulduktan sonra işlev ayrıntıları sayfasına gidin ve Tasks sekmesine tıklayın. Görev modu varsayılan olarak etkindir.
Yapılandırma ayrıntıları için bkz. Görev işlevi oluşturma.
Mevcut bir işlevde görev modunu etkinleştirme
Başlamadan önce bir işlev oluşturduğunuzdan emin olun. Bkz. İşlev oluşturma.
Function Compute konsolu adresine giriş yapın. Sol gezinme bölmesinde Functions öğesine tıklayın.
Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında hedef işleve tıklayın.
İşlev ayrıntıları sayfasında Tasks sekmesine tıklayın, ardından Task Mode yanındaki Modify öğesine tıklayın.
Task Mode panelinde Task Mode değerini Enable olarak ayarlayın ve Deploy öğesine tıklayın.
API aracılığıyla görev modunu etkinleştirme
asyncTask parametresini true olarak ayarlayarak PutFunctionAsyncInvokeConfig API'sini çağırın. İşlev için sonraki tüm asenkron çağrılar görev modunu kullanır.
{
"asyncTask": true
}
Görev modunu etkinleştirmek senkron çağrıları etkilemez. Görev modu yalnızca asenkron çağrılar için geçerlidir.
Görev gönderme
Konsoldan görev gönderme
Function Compute konsolu adresine giriş yapın. Sol gezinme bölmesinde Functions öğesine tıklayın.
Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında hedef işleve tıklayın.
İşlev ayrıntıları sayfasında Tasks sekmesine tıklayın, ardından Submit Task öğesine tıklayın.
İletişim kutusunda bir görev kimliği oluşturma yöntemi seçin ve yürütme zamanını belirtin, ardından OK öğesine tıklayın.
Göndermeden önce test parametrelerini iletmek için Submit Task yanındaki ok simgesine tıklayın ve Configure Test Parameters seçeneğini belirleyin. Olay işlevleri için parametreler olay yükü olarak iletilir. HTTP işlevleri için parametreler HTTP parametreleri olarak iletilir.
Gönderimden sonra görev listesi Task Status, Task ID ve Instance ID bilgilerini gösterir.
API aracılığıyla görev gönderme
x-fc-invocation-type üst bilgisini Async olarak ayarlayarak InvokeFunction API'sini çağırın. Yinelenmeleri önlemek için özel bir görev kimliği atamak amacıyla x-fc-async-task-id üst bilgisini ekleyin.
Örnek: Bir görev gönderin ve durumunu yoklayın
Aşağıdaki örnek, asenkron bir görev göndermenin ve tamamlanana kadar durumunu sorgulamanın tam yaşam döngüsünü gösterir.
-
İşlevde görev modunu etkinleştirin (tek seferlik kurulum):
PUT /2023-03-30/functions/{functionName}/async-invoke-config Content-Type: application/json { "asyncTask": true } -
Özel bir görev kimliği ile görevi gönderin:
POST /2023-03-30/functions/{functionName}/invocations x-fc-invocation-type: Async x-fc-async-task-id: my-task-001 -
Görev kimliğini kullanarak görev durumunu sorgulayın:
GET /2023-03-30/functions/{functionName}/async-tasks/my-task-001Yanıt, mevcut durumu içerir (
Enqueued,Running,Succeededvb.). Durum son duruma ulaşana kadar bu uç noktayı yoklayın.
Çağrı sırasında bir görev kimliği ayarlayan çalıştırılabilir bir kod örneği için bkz. InvokeFunction örneği (uluslararası site).
Görev durdurma
Konsoldan görev durdurma
İşlev ayrıntıları sayfasının Tasks sekmesinde görev listesinden ilgili görevi bulun ve durdurun.
API aracılığıyla görev durdurma
Görevin TaskID değeriyle StopAsyncTask API'sini çağırın. TaskID değerini bulmak için ListAsyncTasks API'sini çağırın.
Görev yinelenmesini önleme
Function Compute, yinelenen yürütmeleri önlemek için genel olarak benzersiz bir TaskID kullanır. Bir gönderim başarısız olursa (örneğin, zaman aşımı nedeniyle) aynı TaskID ile yeniden deneyin. Function Compute, yinelenen gönderimleri 409 hatasıyla reddeder.
Çağrı isteğine x-fc-async-task-id üst bilgisini ekleyerek her göreve bir TaskID atayın. Başarısız gönderimleri yeniden denerken bu kimliği kullanın.
TaskID ayarlamadan RequestID ayarlarsanız Function Compute, TaskID değerini otomatik olarak RequestID olarak ayarlar. TaskID değerini doğrudan ayarlayın ve RequestID ayarını boş bırakın.
Olay tetikleyicileri ile görevleri tetikleme
Aşağıdaki tetikleyiciler asenkron çağrıyı destekler ve asenkron görevleri tetikleyebilir:
-
EventBridge ile entegre tetikleyiciler:
HTTP tetikleyicileri ve EventBridge ile entegre tetikleyiciler için Invocation Method ayarını Async Invocation olarak yapılandırın.
Görevleri izleme
Görev kuyruğu derinliğini izlemek, hataları tespit etmek ve zaman aşımlarına gerçek zamanlı yanıt vermek için Function Compute izleme ölçümlerini kullanın.
Ölçümleri görüntüleme
Başlamadan önce bir işlev oluşturduğunuzdan emin olun. Bkz. İşlev oluşturma.
Function Compute konsolu adresine giriş yapın. Sol gezinme bölmesinde Functions öğesine tıklayın.
Üst gezinme çubuğunda bir bölge seçin. Function sayfasında hedef işleve tıklayın.
-
İşlev ayrıntıları sayfasında Monitoring sekmesine tıklayın.
Asenkron çağrı ölçümlerini görüntülemek için Function Metrics öğesine tıklayın: Asynchronous Invocation Processing (count), Asynchronous Invocation Processing Latency (ms), Asynchronous Invocation Trigger Events (count) ve Asynchronous Requests Backlogs (count).
Asenkron görev örnekleri için örnek düzeyindeki kaynak kullanımını görüntülemek için Instance Metrics öğesine tıklayın.
Örnek düzeyindeki ölçümler günlük kaydı özelliğinin etkinleştirilmesini gerektirir. Bkz. Günlük kaydı yapılandırma.
İzleme ölçümlerinin tam listesi için bkz. İzleme ölçümleri.
Uyarı kuralları ayarlama
Bir ölçüm için uyarı ayarlamak amacıyla ölçüm grafiğinin sağ üst köşesindeki zil simgesine tıklayın. Create Metric-based Alert Rule panelinde uyarı koşullarını ve eşik değerini ayarlayın, ardından OK öğesine tıklayın.
Örnek: Bekleyen asenkron çağrı sayısı 5 veya daha fazlasına ulaştığında orta önem derecesinde bir uyarı gönderin; uyarı 7/24 DingTalk, e-posta, telefon ve Webhook üzerinden iletilir.
CloudFlow ile görevleri orkestre etme
Büyük ölçekli iş akışlarında asenkron görevleri koordine etmek için Function Compute'ü CloudFlow ile entegre edin. CloudFlow, her görevin durum geçişlerini izler, yeniden deneme mantığınızı uygular ve önceden tanımlanmış adımların güvenilir şekilde yürütülmesini sağlar. Desteklenen CloudFlow durumları arasında Pass, Map ve Parallel bulunur.
Entegrasyon ayrıntıları için bkz. Function Compute ile entegrasyon.
Ön koşullar
Başlamadan önce şunları yaptığınızdan emin olun:
Bir asenkron görev etkinleştirilmiş olmalıdır (bkz. Görev modunu etkinleştirme)
CloudFlow'a Function Compute'e erişim izni verilmiş olmalıdır. Bkz. Function Compute'e diğer cloud hizmetlerine erişim izni vermek için işlev rolü kullanma
İş akışı oluşturma ve çalıştırma
CloudFlow konsolu adresine giriş yapın. Üst gezinme çubuğunda bir bölge seçin.
Sol gezinme bölmesinde Workflows öğesine tıklayın. Workflows sayfasında Create Workflow öğesine tıklayın.
Create Workflow iletişim kutusunda bir oluşturma yöntemi ve iş akışı modu seçin. CloudFlow iki modu destekler: Standard ve Express. Ayrıntılar için bkz. Standard iş akışları ve Express iş akışları ve Boş tuvalden iş akışı oluşturma.
-
İş akışını tanımlayın. Akış ayrıntıları sayfasının sağ üst köşesinde YAML öğesine tıklayın. Kod düzenleyicide akış tanımını girin ve ardından Save öğesine tıklayın. Aşağıdaki örnek, bir Function Compute işlevini asenkron olarak çağırır ve iş akışı sona ermeden önce tamamlanmasını bekler (
TaskMode: RequestComplete):Type: StateMachine Name: MyFlow SpecVersion: v1 StartAt: InvokeFunction States: - Type: Task Name: InvokeFunction Action: FC:InvokeFunction TaskMode: RequestComplete Parameters: invocationType: Async resourceArn: acs:fc:us-west-1:103435468****:functions/func-i1****/LATEST End: true -
Çalıştırma rolünü yapılandırın. Sağ üst köşede Configure Workflow öğesine tıklayın. Bir Execution Role seçin ve Save öğesine tıklayın.
NotRole, AliyunFCInvocationAccess ilkesinin eklenmiş olması gerekir.
Akış ayrıntıları sayfasında iş akışını test etmek için Execute öğesine tıklayın.