กรณีศึกษา Microsoft Azure กับการขยายระบบจัดการแท็กซี่อัจฉริยะของไทย

by sponsored
30 June 2017 - 02:57

ปัจจุบันชื่อแบรนด์ Azure กลายเป็นแบรนด์ร่มใหญ่ของบริการด้านคลาวด์เกือบทั้งหมดของไมโครซอฟท์ โดยมีบริการย่อยๆ ในสังกัดเป็นจำนวนมาก ต่างไปจากในอดีตที่มีเพียงแค่การรัน Virtual Machine บนคลาวด์เท่านั้น

บริการหลายตัวของ Azure เป็นการนำองค์ประกอบของระบบเซิร์ฟเวอร์เดิม (เช่น ฐานข้อมูล) ย้ายมาอยู่บนคลาวด์ แต่บริการอีกหลายตัวก็เป็นบริการใหม่ๆ ที่เกิดขึ้นมาสำหรับยุคของคลาวด์โดยเฉพาะ เช่น การประมวลผลข้อมูล BIg Data หรือการรับส่งข้อมูลกับอุปกรณ์ IoT จำนวนมาก

บทความนี้เป็นกรณีศึกษาของไมโครซอฟท์ประเทศไทย ที่นำบริการจาก Azure เข้าไปช่วยปรับปรุงระบบซอฟต์แวร์ที่มีอยู่แล้วของสตาร์ตอัพในบ้านเรา เพื่อให้ทำงานมีประสิทธิภาพสูง รองรับการขยายตัวมากขึ้น

1. ระบบเดิมและโจทย์ของลูกค้า

บริษัท Transcode จำกัด เป็นสตาร์ตอัพไทยที่ทำระบบจัดการการขนส่งอัจฉริยะ (Intelligent Transportation Services - ITS) โดยมีผลิตภัณฑ์แพลตฟอร์มแท็กซี่อัจฉริยะ GTaxi ไว้ให้บริการบริษัทแท็กซี่ไทย ที่ต้องการมอนิเตอร์พฤติกรรมของคนขับแท็กซี่ในสังกัด และช่วยให้บริหารแท็กซี่ได้มีประสิทธิภาพมากขึ้น

ระบบ GTaxi เก็บข้อมูลผ่านอุปกรณ์แท็บเล็ต Android ที่ติดตั้งในรถแท็กซี่ และเซ็นเซอร์เก็บข้อมูล Advance TREK-570 ที่รัน Windows Embedded Standard 7 คอยเก็บข้อมูลจากพอร์ต OBD ของรถ จากนั้นส่งข้อมูลกลับมายังเซิร์ฟเวอร์ของ Transcode ที่เก็บข้อมูลลงฐานข้อมูล MongoDB และมีแอพพลิเคชันที่เขียนด้วย Node.js

ตัวแพ็กเกจของข้อมูลที่ส่งเป็นฟอร์แมต JSON มีขนาดเล็กกว่า 4KB แต่มีอัตราการส่งค่อนข้างถี่คือทุก 1 นาทีสำหรับพิกัด GPS และสถิติของรถ ส่วนข้อมูลอื่นอย่างล็อกของระบบและข้อมูลการคิดค่าโดยสาร เป็นการส่งเมื่อเกิดอีเวนต์ขึ้นเท่านั้น การส่งแพ็กเกจใช้โพรโทคอล MQTT ที่เป็นมาตรฐานของอุตสาหกรรม ผ่านเครือข่ายที่เข้ารหัส TLS

โจทย์ของ GTaxi คือมองหาวิธีสเกลระบบให้เติบโตกว่าเดิม สามารถรองรับผู้ใช้ได้อย่างน้อย 200,000 คน โดยสำรวจหาเทคโนโลยีคลาวด์เข้ามาช่วย แต่ก็มีข้อจำกัดว่าคลาวด์ที่ใช้งานต้องมีผลกระทบต่อแอพพลิเคชันเดิมให้น้อยที่สุด เพื่อลดภาระของทีมพัฒนาที่มีทักษะด้าน Android และ Node.js อยู่แล้ว

2. วิเคราะห์แนวทางที่เป็นไปได้

ทีมงานของไมโครซอฟท์เข้าไปให้คำปรึกษากับ Transcode และวิเคราะห์จุดที่สามารถปรับปรุงด้วยการนำบริการบางตัวของ Azure มาใช้แทนได้ ทั้งหมด 4 จุด ดังนี้

  • การรับข้อมูล (Ingestion) โดยให้ทีม Android ของ Transcode เข้ามาใช้งานบริการ Azure IoT Hub ในการรับข้อมูลจากอุปกรณ์ขึ้นไปยังคลาวด์
  • การประมวลผลข้อมูล (Processing) เป็นขั้นตอนของการนำข้อมูลจาก IoT มาประมวลผลด้วย Azure Stream Analytics เพื่อเตรียมนำข้อมูลไปใช้งานในขั้นตอนอื่นๆ ต่อไป
  • การเตรียมข้อมูล (Staging) หาความเป็นไปได้ในการใช้บริการฝั่ง Azure Data ทั้งฐานข้อมูล Azure Cosmos DB (Document DB เดิม) และ Azure Storage Table
  • การให้บริการ (Serving) ให้ทีมพัฒนาที่มีประสบการณ์ Node.js สามารถรันแอพพลิเคชันเดิม ที่เชื่อมต่อกับบริการต่างๆ ของ Azure และ Power BI

3. แนะนำบริการ Azure ที่เลือกใช้งาน

เนื่องจาก Microsoft Azure มีบริการย่อยเป็นจำนวนมาก เราจึงต้องคัดเลือกเฉพาะบริการบางตัวที่เหมาะสมกับโจทย์ที่ได้รับในงานนี้ ดังนี้

Azure IoT Hub

บริการ Azure IoT Hub เป็นตัวกลางที่คอยเชื่อมต่อกับอุปกรณ์ IoT จำนวนมาก หน้าที่หลักของมันคือคอย "รับ" ข้อมูลจำนวนมหาศาลจาก IoT เข้ามาเก็บไว้บนคลาวด์เพื่อไปใช้งานต่อ ในอีกด้าน มันยังสามารถใช้สื่อสาร ส่งคำสั่งไปยังอุปกรณ์ IoT ได้เช่นกัน

Azure IoT Hub รองรับโพรโทคอลมาตรฐานในวงการ IoT ทั้ง Message Queuing Protocol (AMQP) และ MQ Telemetry Transport (MQTT) หรือแม้แต่ผ่าน HTTP/HTTPS แถมยังมีฟีเจอร์ authentication เป็นรายอุปกรณ์เพื่อการันตีว่าอุปกรณ์ที่เข้ามาเชื่อมในเครือข่ายเป็นของจริง

ระบบ GTaxi ส่งข้อมูลจากแท็กซี่มายังเซิร์ฟเวอร์ด้วยโพรโทคอล MQTT อยู่แล้ว โดยตัวรับข้อมูล (broker) เดิมเป็นระบบที่ Transcode เขียนขึ้นมาเอง การเปลี่ยนมาใช้ Azure IoT Hub จึงสามารถทำได้ทันที เพราะใช้โพรโทคอล MQTT เหมือนเดิมทุกประการ


Azure Stream Analytics

ในการประมวลผลข้อมูลยุคใหม่ที่มีข้อมูลปริมาณมหาศาลไหลบ่าเข้ามา การคัดเลือกข้อมูลที่ต้องการให้ได้แบบเรียลไทม์จึงเป็นเรื่องสำคัญ บริการ Azure Stream Analytics จึงเข้ามารับหน้าที่นี้

Azure Stream Analytics สามารถรับข้อมูลได้จากหลายแหล่ง ไม่ว่าจะเป็นจากอุปกรณ์ IoT เซ็นเซอร์ หรือข้อมูลจากโซเชียล จากนั้นเราสามารถ "กรอง" หรือดัดแปลงข้อมูลได้ก่อนนำไปใช้งานต่อ ด้วยคำสั่งแบบเดียวกับ SQL ที่คุ้นเคย

จุดเด่นของ Azure Stream Analytics คือศักยภาพในการรองรับข้อมูลมากถึง 1GB/s บนสถาปัตยกรรมคลาวด์ของ Azure ที่ดีอยู่แล้ว ช่วยให้เราสามารถสเกลระบบได้ง่ายโดยที่ไม่ต้องเสียเวลามาพัฒนาส่วนนี้เอง


Azure SQL Database

Azure SQL Database บริการตัวนี้หลายคนอาจรู้จักกันอยู่แล้ว มันคือการนำเอนจินของฐานข้อมูลแบบ relational database ของไมโครซอฟท์คือ Microsoft SQL Server ไปรันอยู่บนคลาวด์ Azure เพื่อให้ขยายงานได้ง่ายขึ้น โดยรักษาความเข้ากันได้กับ Microsoft SQL Server เอาไว้ สามารถใช้โปรแกรมเดิม คำสั่งเดิม เครื่องมือเดิมที่เคยใช้กับ SQL Server ได้โดยไม่ต้องเรียนรู้ใหม่

รายละเอียดเพิ่มเติมดูได้ที่ Azure SQL Database


PowerBI Embed

PowerBI เป็นแอพสำหรับวิเคราะห์ข้อมูลธุรกิจ (Business Intelligence) โดยสามารถแสดงผลกราฟิก กราฟ และชาร์ทต่างๆ ได้อย่างสวยงาม ตัวของ PowerBI เป็นแอพแยก แต่ไมโครซอฟท์ก็นำความสามารถด้านการแสดงผลของ PowerBI ให้ไปฝังในแอพอื่นๆ ได้

รายละเอียดอ่านเพิ่มเติมได้จากบทความ ไมโครซอฟท์ออก Power BI Embedded บริการวิเคราะห์ข้อมูลและ Visualization บนคลาวด์

กรณีนี้เราเลือกใช้ PowerBI สำหรับแสดงผลกราฟิกในหน้าแดชบอร์ด (dashboard) ของระบบ GTaxi อีกทีหนึ่ง


Azure App Service – Web Apps

Azure App Service เป็นบริการแบ็คเอนด์ (backend) สำหรับให้บริการแอพหลากหลายชนิด โดยตัวระบบรันอยู่บนคลาวด์ที่บริหารจัดการได้ง่ายกว่า รองรับทั้งโมบายล์แอพและเว็บแอพ

Azure App Service แบ่งออกเป็น 4 บริการย่อยคือ Web Apps, Mobile Apps, API Apps, Logic Apps ซึ่งในที่นี้ เราเลือกใช้งาน Web Apps เอาไว้รันแอพตัวเดิมที่เขียนด้วย Node.js

ตัวของ Azure App Service ที่เป็น Web Apps รองรับภาษา .NET, Java, Node.js, PHP, Python ซึ่งแอพของ Transcode เขียนด้วย Node.js อยู่แล้ว นำมารันได้ทันทีโดยไม่ต้องแก้ไขอะไรเพิ่ม



4. เริ่มแปลงระบบเดิมมาสู่ Azure

หลังวางแผนการปรับปรุงสถาปัตยกรรมเดิมของ GTaxi ด้วย Azure แล้ว ทางทีมของ Transcode และไมโครซอฟท์ก็ไปเข้าแคมป์ Hackathon กันที่สิงคโปร์เป็นเวลา 2 วัน เพื่อทดลองสร้างต้นแบบของ data flow แบบง่ายๆ ขึ้นมาก่อน

ต้นแบบแรกดึงข้อมูลจาก Azure IoT Hub ส่งมาประมวลผลยัง Stream Analytics และเก็บข้อมูลลง Azure SQL Database ก่อนส่งข้อมูลต่อไปยังเว็บแอพ และแสดงผลผ่าน Power BI

จากนั้นเมื่อทีมงานกลับมายังประเทศไทย ก็ปรับปรุงสถาปัตยกรรมให้ดีขึ้น โดยเพิ่มบริการบางตัวของ Azure เข้ามาอีก ดังนี้

Azure Cosmos DB (ชื่อเดิมคือ Document DB)

ถ้า Azure SQL Server คือบริการที่ตอบโจทย์ฐานข้อมูลแบบ relational database (SQL) เราก็สามารถเปรียบเทียบได้ว่า Azure Costmos DB (เดิมทีรู้จักกันในชื่อ Document DB) คือการนำฐานข้อมูลแบบ NoSQL ไปทำงานบนคลาวด์

จุดเด่นของ Cosmos DB คือมันสามารถกระจายฐานข้อมูลไปทั่วโลก (ตามที่ตั้งของศูนย์ข้อมูล Azure) โดยมีอัตรา latency ที่ต่ำมาก, มีอัตรา SLA สูงถึง 99.99% และมี API ที่เข้ากันได้กับ MongoDB แบบ 100%

ดังนั้น ระบบของ GTaxi เป็นฐานข้อมูล MongoDB อยู่แล้ว ก็สามารถสลับมาใช้ Cosmos DB ได้ทันที แอพพลิเคชันสามารถรันได้ต่อเนื่องโดยไม่ต้องแก้ไขโค้ดเลย


Azure Data Factory

Azure Data Factory เป็นบริการที่ใช้สร้าง data pipeline จากแหล่งข้อมูล (data source) หลายแหล่ง เช่น ฐานข้อมูลแบบ SQL และ NoSQL หลากหลายยี่ห้อ, Hadoop, ไฟล์จาก FTP หรือแม้กระทั่งตารางแบบ HTML

การใช้งาน Azure Data Factory เหมาะกับการที่มีแหล่งข้อมูลกระจายอยู่หลายที่ ทั้งอยู่บนคลาวด์หรืออยู่ในองค์กร (on premise) โดย Azure Data Factory จะช่วยจัดการเรื่องการย้ายที่ของข้อมูลให้เรา โดยมีระบบมอนิเตอร์และตัวจัดตารางเวลาคอยช่วยเหลือ


Azure Storage

Azure Storage เป็นบริการเก็บข้อมูลบนคลาวด์ รองรับข้อมูลหลายรูปแบบ เช่น ไฟล์ (file), ดิสก์ (disk), ออบเจคต์ (blob), คิว (queue) และตาราง (table)

ในกรณีนี้ เราเลือกใช้บริการสองตัวคือ Azure Storage blob สำหรับเก็บข้อมูลอ้างอิง (reference data) เอาไว้เปรียบเทียบ และ Azure Storage table สำหรับเก็บข้อมูลเพื่อบันทึกไว้ (archive data)


Azure Event Hubs

Azure Event Hubs เป็นบริการ Azure ตัวสุดท้ายที่เราจะนำมาใช้งาน มันคือบริการที่คอยรับข้อมูลจำนวนมากจากแหล่งต่างๆ ไม่ว่าจะเป็นเว็บไซต์ แอพ เซ็นเซอร์ ที่ใหญ่ในระดับหลายล้านเหตุการณ์ต่อวินาที เข้ามารวมเป็นสตรีมข้อมูลสายเดียวกัน เพื่อนำไปประมวลผลต่อ

ในระบบ GTaxi ที่ออกแบบใหม่ วางตัว Event Hubs ไว้คอยรับข้อมูลจาก Stream Analytics เพื่อนำไปทำระบบแจ้งเตือน (notification) สำหรับเว็บแอพนั่นเอง

ดังนั้น สถาปัตยกรรมของระบบ GTaxi เวอร์ชันที่สอง มีการเปลี่ยนแปลงให้มีความสามารถเพิ่มขึ้นดังนี้

  1. นำข้อมูลจาก Stream Analytics ลงมาเก็บในฐานข้อมูล Cosmos DB / DocumentDB ผ่าน API ของ MongoDB ที่ทีมงานคุ้นเคยอยู่แล้ว
  2. อย่างไรก็ตาม การเปลี่ยนฐานข้อมูลมาใช้ Cosmos DB / DocumentDB เจอข้อจำกัดในการใช้งานร่วมกับ PowerBI ที่ยังไม่รองรับ ทำให้ทีมงานยังต้องมี Azure SQL Database เอาไว้ต่อกับ PowerBI อยู่ และใช้บริการ Azure Data Factory ช่วยคัดลอกข้อมูลจาก DocumentDB มาสู่ SQL Database
  3. ขั้นตอนการประมวลผลด้วย Stream Analytics จำเป็นต้องมีชุดข้อมูลอ้างอิง (reference data) เพื่อเปรียบเทียบ ทีมงานจึงใช้ข้อมูลเก่าที่เก็บไว้ใน SQL Server ดึงออกมาผ่าน Data Factory ลงไปเก็บใน Azure Data Storage (เก็บแบบ blob)
  4. เพิ่มขั้นตอนการใช้ Event Hubs เป็นข้อมูลสำหรับแจ้งเตือน (alert) เพื่อส่งไปยังเว็บแอพอีกทีหนึ่ง

สถาปัตยกรรมแบบใหม่ของ GTaxi (คลิกเพื่อดูภาพขนาดเต็ม)

5. บทสรุป

ความร่วมมือระหว่าง Transcode กับไมโครซอฟท์ แสดงให้เห็นว่าสามารถใช้บริการของ Azure ช่วยขยายขีดความสามารถของระบบโดยไม่จำเป็นต้องเรียนรู้เทคโนโลยีใหม่ทั้งหมด และใช้ PowerBI ช่วยเรื่องการวิเคราะห์และแสดงผลข้อมูลเพิ่มเติม

โครงการนี้ใช้เวลาพัฒนาประมาณ 3 เดือน โดยมีทีมงานจากไมโครซอฟท์ 1 คน ร่วมกับนักพัฒนา 2 คนจาก Transcode ขณะนี้โครงการกำลังเตรียมไปสู่ขั้นตอนการใช้งานจริง และมีแผนจะพัฒนาความสามารถอื่นๆ เพิ่มเติม เช่น การวิเคราะห์และแยกแยะใบหน้าของคนขับ

สำหรับผู้สนใจนำ Azure มาใช้งานเพื่อขยายศักยภาพของระบบ สามารถเข้าร่วมกลุ่ม Azure Thailand Developer Group เพื่อสอบถามข้อมูลได้โดยตรง

Blognone Jobs Premium