إنشاء تطبيقات بدون خادم باستخدام وظائف Azure وحلول .NET
نشرت: 2023-09-21الحوسبة بدون خادم هي نموذج تنفيذ سحابي يمكّن المطورين من إنشاء التطبيقات والخدمات وتشغيلها دون التفكير في الخوادم. مع عدم وجود خادم، لا تعتمد التطبيقات على استمرار تشغيل الخوادم - حيث يقوم موفر السحابة بإدارة تخصيص الخوادم وتوفيرها بشكل ديناميكي. يتيح ذلك للمطورين التركيز على ترميز منطق الأعمال بدلاً من إدارة الخادم.
Microsoft Azure Functions عبارة عن خدمة حوسبة بدون خادم لإنشاء واستضافة نقاط نهاية الويب ومهام معالجة الخلفية دون الحاجة إلى توفير الخوادم أو إدارتها. باستخدام Azure Functions، يمكنك تشغيل التعليمات البرمجية عند الطلب استجابةً للأحداث دون الحاجة إلى توفير البنية التحتية أو إدارتها بشكل صريح. في منشور المدونة هذا، سنستكشف كيفية إنشاء تطبيقات بدون خادم باستخدام وظائف Azure باستخدام حلول .NET، بما في ذلك الاستفادة من خدمات تطوير ASP.NET .
ما هي وظائف أزور؟
تتيح لك Azure Functions تشغيل التعليمات البرمجية في السحابة دون نشر البنية التحتية أو إدارتها. باستخدام الوظائف، يمكنك كتابة التعليمات البرمجية التي تحتاجها فقط للمشكلة المطروحة دون القلق بشأن إدارة الخوادم. يقوم Azure بإدارة كافة البنية التحتية والخوادم نيابةً عنك.
بعض الجوانب والفوائد الرئيسية لوظائف Azure:
- تعتمد على الأحداث: يتم تشغيل الوظائف بواسطة أحداث من العديد من خدمات Azure وخدمات الطرف الثالث. يتضمن ذلك طلبات HTTP والمؤقتات وقوائم الانتظار وواجهات برمجة التطبيقات بدون خادم والمزيد. يمكنك تشغيل التعليمات البرمجية استجابةً لهذه الأحداث.
- القياس تلقائيًا: يقوم Azure بإدارة الوظائف وقياسها تلقائيًا بناءً على معدل الطلب الوارد وحمل المعالجة. لا يلزمك توفير الخوادم وتوسيع نطاقها يدويًا.
- الدفع لكل تنفيذ: أنت تدفع فقط مقابل موارد الحوسبة المطلوبة لتشغيل التعليمات البرمجية الخاصة بك. لا توجد رسوم خاملة عندما لا تكون وظائفك قيد التشغيل.
- لغات متعددة: تدعم الوظائف C# وJavaScript وPython وPowerShell وJava والمزيد. يمكنك تطوير الوظائف بلغتك المفضلة.
- تجربة بدون خادم: باستخدام الوظائف، يمكنك التركيز على كتابة التعليمات البرمجية والسماح لـ Azure بالتعامل مع كافة عمليات توفير الخادم وتكوينه وإدارته. يمكنك الحصول على تجربة حقيقية بدون خادم.
تطوير وظائف .NET محليًا
لتطوير وظائف .NET محليًا، تحتاج إلى أدوات Azure Functions الأساسية وهي واجهة سطر أوامر لتطوير واختبار ونشر وظائف Azure محليًا وعلى Azure.
لإعداد بيئة التطوير:
- قم بتثبيت أحدث إصدار من .NET Core SDK
- قم بتثبيت الأدوات الأساسية لوظائف Azure باستخدام أداة dotnet install -g Microsoft.Azure.WebJobs.Script.WebHost
- أنشئ دليلاً لمشروع تطبيق الوظائف وقم بتشغيل func init
- سيؤدي ذلك إلى دعم مشروع وظائف نموذجية باستخدام قالب دالة
يمكنك الآن إضافة رمز الوظيفة واختباره محليًا ونشره على Azure باستخدام func CLI. أضف ملف run.csx لوظيفة C# التي يتم تشغيلها بواسطة HTTP:
المصدر {csharp}
ينسخ
#r "Newtonsoft.Json"
باستخدام Microsoft.AspNetCore.Mvc؛
باستخدام Microsoft.Extensions.Primitives؛
باستخدام Newtonsoft.Json؛
باستخدام System.Net؛
باستخدام System.Threading.Tasks؛
مهمة عامة ثابتة غير متزامنة<IActionResult> تشغيل (HttpRequest req، سجل ILogger)
{
log.LogInformation("قامت وظيفة تشغيل HTTP C# بمعالجة طلب.");
اسم السلسلة = req.Query["name"];
سلسلة requestBody = انتظار StreamReader الجديد(req.Body).ReadToEndAsync();
البيانات الديناميكية = JsonConvert.DeserializeObject(requestBody);
الاسم = الاسم؟؟ البيانات؟.الاسم؛
اسم الإرجاع! = فارغ
؟ (ActionResult)new OkObjectResult($"مرحبا، {name}")
: new BadRequestObjectResult("الرجاء تمرير اسم في سلسلة الاستعلام أو في نص الطلب");
}
اختبره محليًا عن طريق تشغيل func host start الذي يبدأ بوابة الوظائف على مضيفك المحلي. يمكنك الآن تشغيله باستخدام Postman أو المتصفح باستخدام http://localhost:7071/api/HttpExample?name=John.
اختيار المشغلات والارتباطات لوظائف Azure
تدعم وظائف Azure العديد من مصادر الأحداث والأهداف المختلفة التي تسمى المشغلات والارتباطات. يعد اختيار المشغلات والارتباطات الصحيحة أمرًا مهمًا بناءً على حالة الاستخدام الخاصة بك.
بعض المشغلات الشائعة في الوظائف هي:
- مشغل HTTP: لإنشاء واجهات برمجة تطبيقات REST ونقاط نهاية الويب. يتم تشغيل التعليمات البرمجية من خلال طلبات HTTP.
- مشغل المؤقت: للمهام المجدولة التي يتم تشغيلها وفقًا لجدول زمني، على سبيل المثال، كل 5 دقائق.
- مشغل قائمة الانتظار: لمعالجة الرسائل من قوائم انتظار التخزين.
- Blob Trigger: للتفاعل مع النقط الجديدة أو المحدثة في مساحة تخزين Azure Blob.
تسمح الارتباطات للوظائف بالتفاعل مع مخازن وخدمات البيانات الخارجية. تشمل الارتباطات الشائعة ما يلي:
- قائمة انتظار التخزين: لإخراج الرسائل إلى قوائم انتظار التخزين.
- تخزين Blob: للقراءة من مخزن Azure Blob والكتابة إليه.
- Cosmos DB: للاستعلام عن المستندات وتعديلها في خدمة قاعدة بيانات Azure Cosmos DB.
- ناقل الخدمة: للتعامل مع الرسائل من قوائم انتظار وموضوعات ناقل خدمة Azure.
يساعد اختيار المشغل والارتباطات الصحيحة في بناء حلول شاملة من خلال دمج الوظائف المختلفة مع البيانات والخدمات.
استخدام وظائف متينة
تتيح الوظائف الدائمة كتابة وظائف ذات حالة تسمح بتنفيذ تسلسل العمليات بشكل موثوق حتى في حالة الفشل أو إعادة التشغيل. فهو يتيح لك تنظيم سير العمل طويل الأمد كأجهزة حالة.
على سبيل المثال، يمكنك إنشاء سير عمل باستخدام وظائف متينة تتكون من:
- وظيفة المنسق: تعمل كآلة حالة تنسق تنفيذ وظائف النشاط بالترتيب الصحيح.
- وظائف النشاط: وحدات عمل صغيرة مستقلة يمكن استدعاؤها بواسطة وظائف المنسق.
تشمل فوائد استخدام الوظائف الدائمة ما يلي:
- عمليات إعادة المحاولة الموثوقة: تقوم الوظائف الدائمة بإعادة محاولة وظائف النشاط تلقائيًا في حالة فشلها.
- المكالمات غير المتزامنة: يمكن لوظيفة المنسق تشغيل وظائف النشاط بشكل غير متزامن وانتظار اكتمالها.
- نقاط التفتيش: يتم فحص الحالة بشكل مستمر بحيث يمكن استعادة سير العمل حتى بعد إعادة تشغيل التطبيق أو فشله.
دعونا نرى سير عمل بسيط ينسق نشاطين:
المصدر {csharp}
ينسخ
[اسم الوظيفة("المنسق")]
مهمة RunOrchestrator العامة الثابتة غير المتزامنة (
[OrchestrationTrigger] سياق IDurableOrchestrationContext)
{
فار الإخراج1 = انتظار السياق.CallActivityAsync<string>("DotNetActivity"، "Hello")؛
فار الإخراج2 = انتظار السياق.CallActivityAsync<string>("DotNetActivity"،output1);
// إرجاع النتيجة
عودة الإخراج2؛
}
[اسم الوظيفة("DotNetActivity")]
مهمة ثابتة عامة <سلسلة> تشغيل (
[ActivityTrigger] إدخال السلسلة،
سجل ILogger)
{
log.LogInformation($"تمت معالجة وظيفة DotNetActivity: {input}");
return Task.FromResult(input.ToUpper());
}
تسمح الوظائف المتينة بتقسيم العمليات المعقدة إلى مسارات عمل موثوقة.
أفضل الممارسات لتطوير وظائف Azure
بعض أفضل الممارسات التي يجب اتباعها لتطوير وظائف Azure:
- استخدم حقن التبعية: خدمات حقن التبعية في الوظائف لتحسين قابلية الاختبار.
- تجنب العمليات الطويلة الأمد: تهدف الوظائف إلى تشغيل التعليمات البرمجية على وحدات المعالجة الصغيرة. اجعل تنفيذ التعليمات البرمجية قصيرًا.
- استخدم أنواع البيانات غير القابلة للتغيير: الوظائف عديمة الحالة، لذا تجنب الأنواع/الآثار الجانبية القابلة للتغيير التي يمكن أن تسبب مشكلات.
- معالجة الأخطاء بشكل مركزي: أضف منطقًا شائعًا لمعالجة الأخطاء بدلاً من معالجة الأخطاء بشكل فردي في كل مكان.
- التسجيل المنظم: يساعد التسجيل الموحد في مسارات تصحيح الأخطاء والمراقبة والتدقيق.
- التقييد وإعادة المحاولة: تعامل مع أخطاء التقييد من خلال تنفيذ عمليات إعادة المحاولة مع التراجعات الأسية.
- الإصدار: مشغلات الإصدار والارتباطات والمدخلات/المخرجات قوية لتجنب كسر التغييرات.
- المراقبة والأجهزة: استخدم أدوات مثل Application Insights للتسجيل ومراقبة الأداء وتحليلات الاستخدام.
- استخدام روابط السياق: استفد من روابط السياق للوصول إلى أشياء مثل إعدادات التطبيق دون تبعيات إضافية.
يساعد اتباع أفضل الممارسات هذه في إنشاء تطبيقات قوية وموثوقة وقابلة للتطوير بدون خادم باستخدام Azure Functions.
نشر الوظائف إلى Azure
بمجرد أن تصبح الوظائف جاهزة، يمكنك نشرها على Azure عبر Azure CLI أو PowerShell أو Visual Studio أو مباشرة من أدوات Azure Functions الأساسية CLI:
ينسخ
نشر func azure functionapp <اسم تطبيق الوظيفة>
سيؤدي هذا إلى نشر مجلد مشروع الوظائف إلى تطبيق Azure Function. تتضمن بعض الفوائد الأساسية لنشر الوظائف في Azure ما يلي:
- القياس التلقائي - يتم قياس الوظائف بناءً على حجم الطلب الوارد أو مشغلات الوقت.
- التوفر العالي – توفر المثيلات المتعددة عبر مراكز البيانات توفرًا عاليًا.
- المراقبة والتسجيل - استخدم أدوات مثل Application Insights لمراقبة الأداء والأخطاء وما إلى ذلك.
- منصة بدون خادم – لا توجد خوادم لتوفيرها/إدارتها. أنت تركز فقط على الكود.
- النشر المستمر - استخدم خطوط أنابيب CI/CD للنشر الآلي عند تغيير التعليمات البرمجية.
يتعامل Azure مع البنية التحتية بأكملها، ويتجنب تكاليف الخمول ويوفر نظامًا أساسيًا بدون خادم بالكامل لتشغيل التطبيقات بدون خادم على نطاق واسع بشكل موثوق.
خاتمة
تمكن الحوسبة بدون خادم مع Azure Functions المطورين من التركيز على منطق الأعمال أثناء تفريغ كافة البنية التحتية وإدارة العمليات إلى Azure. يتيح دعم تطوير .NET الأصلي، بما في ذلك خيار استئجار ASP.NET Core Developers ، إنشاء حلول قوية بدون خادم بسهولة في لغة C#. باستخدام المشغلات والارتباطات والوظائف الدائمة، يمكن للمطورين إنشاء بنيات وسير عمل شاملة تعتمد على الأحداث كوظائف عديمة الحالة وذات حالة. تتيح وظائف Azure، جنبًا إلى جنب مع أفضل الممارسات، إنشاء تطبيقات بدون خادم ونشرها على السحابة بكل بساطة وتوسيع نطاقها.