بناء حل إنترنت الأشياء باستخدام Stream Analytics

مقدمة

في هذا الحل، ستتعلم كيفية استخدام Azure Stream Analytics للحصول على نتائج تحليلات في الوقت الحقيقي من بياناتك. يمكن للمطورين دمج تدفقات البيانات بسهولة، مثل تدفقات النقر والسجلات والأحداث التي تم إنشاؤها بواسطة الجهاز، مع وجود سجلات تاريخية أو بيانات مرجعية لاشتقاق نتائج تحليلات الأعمال. كخدمة حساب دفق مُدارة بالكامل في الوقت الحقيقي تتم استضافتها في Microsoft Azure، توفر Azure Stream Analytics مرونة مضمنة وزمن انتقال منخفضاً وقابلية توسع لكي تنجز ما تريد وتقوم بتشغيله في دقائق.

بعد إكمال هذا الحل، يمكنك:

  • التعرف على مدخل Microsoft Azure Stream Analytics.
  • تكوين وتوزيع وظيفة دفق.
  • توضيح مشاكل العالم الحقيقي وحلها باستخدام لغة الاستعلام Stream Analytics.
  • طوّر حلول البث لعملائك باستخدام Stream Analytics بثقة.
  • استخدم تجربة المراقبة والتسجيل لاستكشاف المشكلات وإصلاحها.

المتطلبات الأساسية

أنت بحاجة إلى المتطلبات الأساسية التالية لإكمال هذا الحل:

مقدمة السيناريو: "مرحباً، رقم الرسوم!"

محطة حصيلة ظاهرة شائعة. تصادفهم على العديد من الطرق السريعة والجسور والأنفاق في جميع أنحاء العالم. تحتوي كل محطة حصيلة على أكشاك متعددة. في الأكشاك اليدوية، تتوقف لدفع رسوم المرور إلى عامل. في الأكشاك الآلية، يقوم مستشعر أعلى كل كشك بمسح بطاقة RFID المثبتة على الزجاج الأمامي لسيارتك أثناء عبورك كشك تحصيل رسوم المرور. من السهل تصور مرور المركبات من خلال محطات تحصيل الرسوم هذه كتدفق حدث يمكن من خلاله تنفيذ عمليات مثيرة للاهتمام.

صورة سيارات في أكشاك تحصيل رسوم المرور

البيانات الواردة

يعمل هذا الحل مع دفقين من البيانات. أدوات الاستشعار المثبتة في مدخل وخروج محطات الرسوم تنتج الدفق الأول. الدفق الثاني عبارة عن مجموعة بيانات بحث ثابتة تحتوي على بيانات تسجيل مركبة.

دخول دفق البيانات

يحتوي دفق بيانات الإدخال على معلومات بشأن السيارات عند دخولها محطات الرسوم. يتم بث أحداث بيانات الخروج مباشرة إلى مركز أحداث من تطبيق ويب مضمن في نموذج التطبيق.

| TollID | EntryTime | LicensePlate | State | Make | Model | VehicleType | VehicleWeight | Toll | Tag |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1 |2014-09-10 12:01:00.000 |JNB 7001 |NY |Honda |CRV |1 |0 |7 | |
| 1 |2014-09-10 12:02:00.000 |YXZ 1001 |NY |Toyota |Camry |1 |0 |4 |123456789 |
| 3 |2014-09-10 12:02:00.000 |ABC 1004 |CT |Ford |Taurus |1 |0 |5 |456789123 |
| 2 |2014-09-10 12:03:00.000 |XYZ 1003 |CT |Toyota |Corolla |1 |0 |4 | |
| 1 |2014-09-10 12:03:00.000 |BNJ 1007 |NY |Honda |CRV |1 |0 |5 |789123456 |
| 2 |2014-09-10 12:05:00.000 |CDE 1007 |NJ |Toyota |4x4 |1 |0 |6 |321987654 |

فيما يلي وصف مختصر للأعمدة:

العمود الوصف
TollID معرف كشك تحصيل رسوم المرور الذي يحدد بشكل فريد كشك تحصيل رسوم المرور
وقت دخول تاريخ ووقت دخول السيارة إلى كشك تحصيل الرسوم بالتوقيت العالمي المتفق عليه
LicensePlate رقم لوحة ترخيص المركبة
الولاية ولاية في الولايات المتحدة
Make الشركة المصنعة للسيارة
النموذج رقم نموذج السيارة
نوع السيارة إما 1 لمركبات الركاب أو 2 للمركبات التجارية
نوع الوزن وزن السيارة بالأطنان؛ 0 لمركبات الركاب
حصيلة المكالمات قيمة الرسوم بالدولار الأمريكي
العلامة العلامة الإلكترونية على السيارة التي تقوم بأتمتة الدفع؛ فارغاً حيث تم الدفع يدوياً

خروج دفق البيانات

يحتوي دفق بيانات الخروج على معلومات بشأن السيارات التي تغادر محطة الرسوم. يتم بث أحداث بيانات الخروج مباشرة إلى مركز أحداث من تطبيق ويب مضمن في نموذج التطبيق.

معرف الرقم ExitTime LicensePlate
1 2014-09-10T12:03:00Z JNB 7001
1 2014-09-10T12:03:00Z YXZ 1001
3 2014-09-10T12:04:00Z ABC 1004
2 2014-09-10T12:07:00Z XYZ 1003
1 2014-09-10T12:08:00Z BNJ 1007
2 2014-09-10T12:07:00Z CDE 1007

فيما يلي وصف مختصر للأعمدة:

العمود الوصف
TollID معرف كشك تحصيل رسوم المرور الذي يحدد بشكل فريد كشك تحصيل رسوم المرور
ExitTime تاريخ ووقت خروج السيارة من كشك تحصيل الرسوم بالتوقيت العالمي المتفق عليه
LicensePlate رقم لوحة ترخيص المركبة

بيانات تسجيل المركبات التجارية

يستخدم الحل لقطة ثابتة لقاعدة بيانات تسجيل المركبات التجارية. يتم حفظ هذه البيانات كملف JSON في تخزين البيانات الثنائية الكبيرة Azure، المضمنة في النموذج.

LicensePlate معرف التسجيل انتهت الصلاحية
SVT 6023 285429838 1
XLZ 3463 362715656 0
BAC 1005 876133137 1
RIV 8632 992711956 0
SNY 7188 592133890 0
ELH 9896 678427724 1

فيما يلي وصف مختصر للأعمدة:

العمود الوصف
LicensePlate رقم لوحة ترخيص المركبة
RegistrationId معرّف تسجيل المركبة
انتهت الصلاحية حالة تسجيل السيارة: 0 إذا كان تسجيل المركبة نشطاً، 1 إذا كان التسجيل منتهي الصلاحية

قم بإعداد البيئة لـ Azure Stream Analytics

لإكمال هذا الحل، أنت بحاجة إلى اشتراك Microsoft Azure. إذا لم يكن لديك حساب Azure، يمكنك طلب إصدار تجريبي مجاني.

تأكد من اتباع الخطوات الواردة في قسم "تنظيف حساب Azure الخاص بك" في نهاية هذه المقالة حتى تتمكن من تحقيق أقصى استفادة من رصيد Azure الخاص بك.

انشر العينة

يوجد العديد من الموارد التي يمكن توزيعها بسهولة في مجموعة موارد مع عدد قليل من النقرات. تتم استضافة تعريف الحل في مستودع GitHub في https://github.com/Azure/azure-stream-analytics/tree/master/Samples/TollApp.

قم بتوزيع قالب TollApp في مدخل Microsoft Azure

  1. لتوزيع بيئة TollApp على Azure، استخدم هذا الارتباط من أجل توزيع TollApp Azure Template .

  2. سجّل الدخول إلى مدخل Microsoft Azure إذا طُلب منك ذلك.

  3. اختر الاشتراك الذي تتم فيه فوترة الموارد المختلفة.

  4. حدد مجموعة موارد جديدة، باسم فريد، على سبيل المثال MyTollBooth.

  5. حدد موقع Azure.

  6. حدد Interval على أنه عدد من الثواني. يتم استخدام هذه القيمة في نموذج تطبيق الويب، لمدى تكرار إرسال البيانات إلى مركز الأحداث.

  7. حدد للموافقة على البنود والشروط.

  8. حدد Pin to dashboard بحيث يمكنك بسهولة تحديد موقع الموارد لاحقاً.

  9. حدد Purchase لتوزيع قالب القالب.

  10. بعد لحظات قليلة، يظهر إشعار لتأكيد نجاح التوزيع .

راجع موارد Azure Stream Analytics TollApp

  1. سجّل الدخول إلى مدخل Azure.

  2. حدد موقع مجموعة الموارد التي قمت بتسميتها في القسم السابق.

  3. تحقق من إدراج الموارد التالية في مجموعة الموارد:

    • حساب Azure Cosmos DB واحد
    • وظيفة Azure Stream Analytics واحدة
    • حساب Azure Storage واحد
    • مركز أحداث Azure واحد
    • اثنين من تطبيقات الويب

افحص عينة مهمة TollApp

  1. بدءا من مجموعة الموارد في القسم السابق، حدد مهمة دفق Stream Analytics بدءا من الاسم tollapp (يحتوي الاسم على أحرف عشوائية للتفرد).

  2. في صفحة Overview للمهمة، لاحظ مربع Query لعرض بنية الاستعلام.

    SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*) AS Count
    INTO CosmosDB
    FROM EntryStream TIMESTAMP BY EntryTime
    GROUP BY TUMBLINGWINDOW(minute, 3), TollId
    

    لإعادة صياغة الهدف من الاستعلام، لنفترض أنك بحاجة إلى حساب عدد المركبات التي تدخل كشك تحصيل رسوم المرور. نظراً لأن كشك تحصيل رسوم المرور على الطريق السريع به دفق مستمر من المركبات التي تدخل، فهذه أحداث دخول مماثلة لدفق لا يتوقف أبداً. لتقدير التدفق، عليك تحديد "فترة زمنية" للقياس. دعنا ندقق السؤال أكثر، إلى "كم عدد المركبات التي تدخل كشك تحصيل رسوم المرور كل ثلاث دقائق؟" يشار إلى هذا بشكل عام باسم العد التنازلي.

    كما ترى، يستخدم Azure Stream Analytics لغة استعلام مثل SQL ويضيف بعض الإضافات لتحديد جوانب الاستعلام المتعلقة بالوقت. لمزيد من التفاصيل، اقرأ بشأن بنيتي إدارة الوقت و وضع النوافذ المستخدمة في الاستعلام.

  3. افحص مدخلات وظيفة نموذج TollApp. يتم استخدام إدخال EntryStream فقط في الاستعلام الحالي.

    • إدخال EntryStream هو اتصال مركز أحداث يقوم بقوائم انتظار البيانات التي تمثل في كل مرة تدخل فيها السيارة قاعدة مرور على الطريق السريع. يقوم تطبيق الويب الذي يعد جزءا من العينة بإنشاء الأحداث، ويتم وضع هذه البيانات في قائمة الانتظار في مركز الأحداث هذا. لاحظ أنه تم الاستعلام عن هذا الإدخال في عبارة FROM الخاصة باستعلام الدفق.
    • إدخال ExitStream هو اتصال مركز أحداث يقوم بقوائم انتظار البيانات التي تمثل كل مرة تخرج فيها سيارة من قاعدة مرور على الطريق السريع. يتم استخدام هذا الإدخال المتدفق في أشكال لاحقة من بناء جملة الاستعلام.
    • إدخال التسجيل هو اتصال موقع تخزين Azure Blob، يشير إلى ملف register.json ثابت، يُستخدم لعمليات البحث حسب الحاجة. يتم استخدام إدخال البيانات المرجعية هذا في الأشكال اللاحقة لبناء جملة الاستعلام.
  4. افحص مخرجات مهمة TollApp النموذجية.

    • إخراج Azure Cosmos DB هو حاوية قاعدة بيانات Azure Cosmos DB التي تتلقى أحداث مصدر الإخراج. لاحظ أنه يتم استخدام هذا الإخراج في عبارة INTO لاستعلام الدفق.

ابدأ وظيفة البث TollApp

اتبع هذه الخطوات لبدء وظيفة البث:

  1. في صفحة Overview للوظيفة، حدد Start.

  2. في جزء Start job، حدد Now.

  3. بعد لحظات قليلة، بمجرد تشغيل الوظيفة، في صفحة Overview لوظيفة البث، اعرض الرسم البياني Monitoring. يجب أن يُظهر الرسم البياني عدة آلاف من أحداث الإدخال وعشرات من أحداث المخرجات.

مراجعة بيانات إخراج Azure Cosmos DB

  1. حدد موقع مجموعة الموارد التي تحتوي على موارد TollApp.

  2. حدد حساب Azure Cosmos DB بنمط الاسم tollapp < random > -cosmos .

  3. حدد العنوان Data Explorer لفتح صفحة Data Explorer.

  4. قم بتوسيع tollAppDatabase > tollAppCollection > Documents .

  5. في قائمة المعرف، يتم عرض العديد من المستندات بمجرد توفر الإخراج.

  6. حدد كل معرف لمراجعة مستند JSON. لاحظ كل tollidو windowend timeو count of cars من تلك النافذة.

  7. بعد ثلاث دقائق إضافية، تتوفر مجموعة أخرى من أربعة مستندات، مستند واحد لكل tollid.

تقرير إجمالي الوقت لكل سيارة

يساعد متوسط ​​الوقت اللازم لمرور السيارة عبر الرسوم على تقييم كفاءة العملية وتجربة العميل.

للعثور على الوقت الإجمالي، انضم إلى دفق EntryTime مع دفق ExitTime. انضم إلى دفقَي الإدخال على عمودي TollId وLicencePlate المطابقين المتساويين. يطلب منك عامل التشغيل JOIN تحديد الفسحة الزمنية التي تصف الفارق الزمني المقبول بين الأحداث المنضمة. استخدم الوظيفة DATEDIFF لتحديد أن الأحداث يجب ألا تزيد عن 15 دقيقة عن بعضها البعض. قم أيضاً بتطبيق وظيفة DATEDIFF للخروج وأوقات الدخول لحساب الوقت الحقيقي الذي تقضيه السيارة في محطة الرسوم. لاحظ اختلاف استخدام DATEDIFF عند استخدامه في عبارة SELECT بدلاً من شرط JOIN .

SELECT EntryStream.TollId, EntryStream.EntryTime, ExitStream.ExitTime, EntryStream.LicensePlate, DATEDIFF (minute, EntryStream.EntryTime, ExitStream.ExitTime) AS DurationInMinutes
INTO CosmosDB
FROM EntryStream TIMESTAMP BY EntryTime
JOIN ExitStream TIMESTAMP BY ExitTime
ON (EntryStream.TollId= ExitStream.TollId AND EntryStream.LicensePlate = ExitStream.LicensePlate)
AND DATEDIFF (minute, EntryStream, ExitStream ) BETWEEN 0 AND 15

لتحديث صيغة استعلام وظيفة تدفق TollApp:

  1. في صفحة Overview للوظيفة، حدد Stop.

  2. انتظر بضع لحظات للإشعار بأن الوظيفة قد توقفت.

  3. تحت عنوان JOB TOPOLOGY، حدد <> Query

  4. الصق استعلام SQL المتدفق المعدل.

  5. حدد Save لحفظ الاستعلام. أكد Yes لحفظ التغييرات.

  6. في صفحة Overview للوظيفة، حدد Start.

  7. في جزء Start job، حدد Now.

راجع الوقت الإجمالي في الإخراج

كرر الخطوات الواردة في القسم السابق لمراجعة بيانات إخراج Azure Cosmos DB من مهمة الدفق. راجع أحدث مستندات JSON.

على سبيل المثال، يعرض هذا المستند مثالا لسيارة مع لوحة ترخيص معينة، entrytime و exit time، وحقل DATEDIFF المحسوب durationinminutes الذي يعرض مدة كشك تحصيل الرسوم لمدة دقيقتين:

{
    "tollid": 4,
    "entrytime": "2018-04-05T06:51:39.0491173Z",
    "exittime": "2018-04-05T06:53:09.0491173Z",
    "licenseplate": "JVR 9425",
    "durationinminutes": 2,
    "id": "ff52eb25-d580-7566-2879-1f52bba6601e",
    "_rid": "+8E4AI1DZgBjAAAAAAAAAA==",
    "_self": "dbs/+8E4AA==/colls/+8E4AI1DZgA=/docs/+8E4AI1DZgBjAAAAAAAAAA==/",
    "_etag": "\"ad02f6b8-0000-0000-0000-5ac5c8330000\"",
    "_attachments": "attachments/",
    "_ts": 1522911283
}

الإبلاغ عن مركبات منتهية الصلاحية

يمكن أن يستخدم Azure Stream Analytics لقطات ثابتة من البيانات المرجعية للانضمام إلى تدفقات البيانات المؤقتة. لإثبات هذه القدرة، استخدم نموذج السؤال التالي. إدخال التسجيل هو ملف blob json ثابت يسرد انتهاء صلاحية علامات الترخيص. من خلال الانضمام على لوحة الترخيص، تتم مقارنة البيانات المرجعية بكل مركبة تمر عبر رسوم المرور على حد سواء.

إذا كانت المركبة التجارية مسجلة لدى شركة رسوم المرور، يمكنها المرور عبر كشك تحصيل الرسوم دون أن يتم إيقافها للتفتيش. استخدم جدول البحث عن التسجيل لتعريف جميع المركبات التجارية التي انتهت صلاحية التسجيلات.

SELECT EntryStream.EntryTime, EntryStream.LicensePlate, EntryStream.TollId, Registration.RegistrationId
INTO CosmosDB
FROM EntryStream TIMESTAMP BY EntryTime
JOIN Registration
ON EntryStream.LicensePlate = Registration.LicensePlate
WHERE Registration.Expired = '1'
  1. كرر الخطوات المذكورة في القسم السابق لتحديث صيغة استعلام وظيفة تدفق TollApp.

  2. كرر الخطوات الواردة في القسم السابق لمراجعة بيانات إخراج Azure Cosmos DB من مهمة الدفق.

مثال الإخراج:

    {
        "entrytime": "2018-04-05T08:01:28.0252168Z",
        "licenseplate": "GMT 3221",
        "tollid": 1,
        "registrationid": "763220582",
        "id": "47db0535-9716-4eb2-db58-de7886966cbf",
        "_rid": "y+F8AJ9QWACSAQAAAAAAAA==",
        "_self": "dbs/y+F8AA==/colls/y+F8AJ9QWAA=/docs/y+F8AJ9QWACSAQAAAAAAAA==/",
        "_etag": "\"88007d8d-0000-0000-0000-5ac5d7e20000\"",
        "_attachments": "attachments/",
        "_ts": 1522915298
    }

توسيع نطاق العمل

تم تصميم Azure Stream Analytics لتوسيع نطاقه بمرونة بحيث يمكنه التعامل مع كميات كبيرة من البيانات. يمكن لاستعلام Azure Stream Analytics استخدام عبارة PARTITION BY لإخبار النظام بأن هذه الخطوة تتوسع. PartitionId هو عمود خاص يضيفه النظام لمطابقة معرف قسم الإدخال (مركز الحدث).

لتصغير حجم الاستعلام إلى أقسام، قم بتحرير بناء جملة الاستعلام إلى التعليمة البرمجية التالية:

SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*)AS Count
INTO CosmosDB
FROM EntryStream
TIMESTAMP BY EntryTime
PARTITION BY PartitionId
GROUP BY TUMBLINGWINDOW(minute,3), TollId, PartitionId

لتوسيع نطاق وظيفة البث إلى المزيد من وحدات البث:

  1. أوقف الوظيفة الحالية.

  2. قم بتحديث بنية الاستعلام في صفحة <> Query، واحفظ التغييرات.

  3. تحت عنوان CONFIGURE في وظيفة البث، حدد Scale.

  4. مرر شريط تمرير وحدات البث من 1 إلى 6. تحدد وحدات التدفق مقدار قوة الحوسبة التي يمكن أن تتلقاها الوظيفة. حدد ⁧⁩حفظ⁧⁩.

  5. ابدأ وظيفة البث لتوضيح النطاق الإضافي. يوزع Azure Stream Analytics العمل عبر المزيد من موارد الحوسبة ويحقق معدل نقل أفضل، وتقسيم العمل عبر الموارد باستخدام العمود المعين في عبارة PARTITION BY.

مراقبة المهمة

تحتوي منطقة MONITOR على إحصائيات بشأن الوظيفة قيد التشغيل. يلزم التكوين لأول مرة لاستخدام حساب التخزين في نفس المنطقة (الاسم مثل باقي أجزاء هذا المستند).

مراقبة وظيفة Azure Stream Analytics

يمكنك أيضاً الوصول إلى سجلات الأنشطة من منطقة Settings بلوحة معلومات الوظيفة.

تنظيف موارد TollApp

  1. أوقف وظيفة Stream Analytics في مدخل Microsoft Azure.

  2. حدد موقع مجموعة الموارد التي تحتوي على ثمانية موارد متعلقة بقالب TollApp.

  3. حدد Delete resource group. اكتب اسم مجموعة الموارد لتأكيد الحذف.

الختام

قدم لك هذا الحل خدمة Azure Stream Analytics. لقد أوضح كيفية تكوين المدخلات والمخرجات لوظيفة Stream Analytics. باستخدام سيناريو Toll Data، شرح الحل الأنواع الشائعة من المشاكل التي تنشأ في مساحة البيانات قيد الحركة وكيف يمكن حلها باستخدام استعلامات بسيطة تشبه SQL في Azure Stream Analytics. وصف الحل بنيات ملحق SQL للعمل مع البيانات الزمنية. أظهر كيفية الانضمام إلى تدفقات البيانات، وكيفية إثراء دفق البيانات ببيانات مرجعية ثابتة، وكيفية توسيع نطاق الاستعلام لتحقيق معدل نقل أعلى.

على الرغم من أن هذا الحل يوفر مقدمة جيدة، إلا أنه غير كامل بأي وسيلة. يمكنك العثور على المزيد من أنماط الاستعلام باستخدام لغة SAQL في أمثلة طلب بحث لأنماط استخدام Stream Analytics الشائعة .