ปัจจุบันชื่อแบรนด์ Azure กลายเป็นแบรนด์ร่มใหญ่ของบริการด้านคลาวด์เกือบทั้งหมดของไมโครซอฟท์ โดยมีบริการย่อยๆ ในสังกัดเป็นจำนวนมาก ต่างไปจากในอดีตที่มีเพียงแค่การรัน Virtual Machine บนคลาวด์เท่านั้น
บริการหลายตัวของ Azure เป็นการนำองค์ประกอบของระบบเซิร์ฟเวอร์เดิม (เช่น ฐานข้อมูล) ย้ายมาอยู่บนคลาวด์ แต่บริการอีกหลายตัวก็เป็นบริการใหม่ๆ ที่เกิดขึ้นมาสำหรับยุคของคลาวด์โดยเฉพาะ เช่น การประมวลผลข้อมูล BIg Data หรือการรับส่งข้อมูลกับอุปกรณ์ IoT จำนวนมาก
บทความนี้เป็นกรณีศึกษาของไมโครซอฟท์ประเทศไทย ที่นำบริการจาก Azure เข้าไปช่วยปรับปรุงระบบซอฟต์แวร์ที่มีอยู่แล้วของสตาร์ตอัพในบ้านเรา เพื่อให้ทำงานมีประสิทธิภาพสูง รองรับการขยายตัวมากขึ้น
บริษัท 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 อยู่แล้ว
ทีมงานของไมโครซอฟท์เข้าไปให้คำปรึกษากับ Transcode และวิเคราะห์จุดที่สามารถปรับปรุงด้วยการนำบริการบางตัวของ Azure มาใช้แทนได้ ทั้งหมด 4 จุด ดังนี้
เนื่องจาก Microsoft Azure มีบริการย่อยเป็นจำนวนมาก เราจึงต้องคัดเลือกเฉพาะบริการบางตัวที่เหมาะสมกับโจทย์ที่ได้รับในงานนี้ ดังนี้
บริการ 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 สามารถรับข้อมูลได้จากหลายแหล่ง ไม่ว่าจะเป็นจากอุปกรณ์ IoT เซ็นเซอร์ หรือข้อมูลจากโซเชียล จากนั้นเราสามารถ "กรอง" หรือดัดแปลงข้อมูลได้ก่อนนำไปใช้งานต่อ ด้วยคำสั่งแบบเดียวกับ SQL ที่คุ้นเคย
จุดเด่นของ Azure Stream Analytics คือศักยภาพในการรองรับข้อมูลมากถึง 1GB/s บนสถาปัตยกรรมคลาวด์ของ Azure ที่ดีอยู่แล้ว ช่วยให้เราสามารถสเกลระบบได้ง่ายโดยที่ไม่ต้องเสียเวลามาพัฒนาส่วนนี้เอง
Azure SQL Database บริการตัวนี้หลายคนอาจรู้จักกันอยู่แล้ว มันคือการนำเอนจินของฐานข้อมูลแบบ relational database ของไมโครซอฟท์คือ Microsoft SQL Server ไปรันอยู่บนคลาวด์ Azure เพื่อให้ขยายงานได้ง่ายขึ้น โดยรักษาความเข้ากันได้กับ Microsoft SQL Server เอาไว้ สามารถใช้โปรแกรมเดิม คำสั่งเดิม เครื่องมือเดิมที่เคยใช้กับ SQL Server ได้โดยไม่ต้องเรียนรู้ใหม่
รายละเอียดเพิ่มเติมดูได้ที่ Azure SQL Database
PowerBI เป็นแอพสำหรับวิเคราะห์ข้อมูลธุรกิจ (Business Intelligence) โดยสามารถแสดงผลกราฟิก กราฟ และชาร์ทต่างๆ ได้อย่างสวยงาม ตัวของ PowerBI เป็นแอพแยก แต่ไมโครซอฟท์ก็นำความสามารถด้านการแสดงผลของ PowerBI ให้ไปฝังในแอพอื่นๆ ได้
รายละเอียดอ่านเพิ่มเติมได้จากบทความ ไมโครซอฟท์ออก Power BI Embedded บริการวิเคราะห์ข้อมูลและ Visualization บนคลาวด์
กรณีนี้เราเลือกใช้ PowerBI สำหรับแสดงผลกราฟิกในหน้าแดชบอร์ด (dashboard) ของระบบ GTaxi อีกทีหนึ่ง
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 อยู่แล้ว นำมารันได้ทันทีโดยไม่ต้องแก้ไขอะไรเพิ่ม
หลังวางแผนการปรับปรุงสถาปัตยกรรมเดิมของ GTaxi ด้วย Azure แล้ว ทางทีมของ Transcode และไมโครซอฟท์ก็ไปเข้าแคมป์ Hackathon กันที่สิงคโปร์เป็นเวลา 2 วัน เพื่อทดลองสร้างต้นแบบของ data flow แบบง่ายๆ ขึ้นมาก่อน
ต้นแบบแรกดึงข้อมูลจาก Azure IoT Hub ส่งมาประมวลผลยัง Stream Analytics และเก็บข้อมูลลง Azure SQL Database ก่อนส่งข้อมูลต่อไปยังเว็บแอพ และแสดงผลผ่าน Power BI
จากนั้นเมื่อทีมงานกลับมายังประเทศไทย ก็ปรับปรุงสถาปัตยกรรมให้ดีขึ้น โดยเพิ่มบริการบางตัวของ Azure เข้ามาอีก ดังนี้
ถ้า 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 เป็นบริการที่ใช้สร้าง data pipeline จากแหล่งข้อมูล (data source) หลายแหล่ง เช่น ฐานข้อมูลแบบ SQL และ NoSQL หลากหลายยี่ห้อ, Hadoop, ไฟล์จาก FTP หรือแม้กระทั่งตารางแบบ HTML
การใช้งาน Azure Data Factory เหมาะกับการที่มีแหล่งข้อมูลกระจายอยู่หลายที่ ทั้งอยู่บนคลาวด์หรืออยู่ในองค์กร (on premise) โดย Azure Data Factory จะช่วยจัดการเรื่องการย้ายที่ของข้อมูลให้เรา โดยมีระบบมอนิเตอร์และตัวจัดตารางเวลาคอยช่วยเหลือ
Azure Storage เป็นบริการเก็บข้อมูลบนคลาวด์ รองรับข้อมูลหลายรูปแบบ เช่น ไฟล์ (file), ดิสก์ (disk), ออบเจคต์ (blob), คิว (queue) และตาราง (table)
ในกรณีนี้ เราเลือกใช้บริการสองตัวคือ Azure Storage blob สำหรับเก็บข้อมูลอ้างอิง (reference data) เอาไว้เปรียบเทียบ และ Azure Storage table สำหรับเก็บข้อมูลเพื่อบันทึกไว้ (archive data)
Azure Event Hubs เป็นบริการ Azure ตัวสุดท้ายที่เราจะนำมาใช้งาน มันคือบริการที่คอยรับข้อมูลจำนวนมากจากแหล่งต่างๆ ไม่ว่าจะเป็นเว็บไซต์ แอพ เซ็นเซอร์ ที่ใหญ่ในระดับหลายล้านเหตุการณ์ต่อวินาที เข้ามารวมเป็นสตรีมข้อมูลสายเดียวกัน เพื่อนำไปประมวลผลต่อ
ในระบบ GTaxi ที่ออกแบบใหม่ วางตัว Event Hubs ไว้คอยรับข้อมูลจาก Stream Analytics เพื่อนำไปทำระบบแจ้งเตือน (notification) สำหรับเว็บแอพนั่นเอง
ดังนั้น สถาปัตยกรรมของระบบ GTaxi เวอร์ชันที่สอง มีการเปลี่ยนแปลงให้มีความสามารถเพิ่มขึ้นดังนี้
สถาปัตยกรรมแบบใหม่ของ GTaxi (คลิกเพื่อดูภาพขนาดเต็ม)
ความร่วมมือระหว่าง Transcode กับไมโครซอฟท์ แสดงให้เห็นว่าสามารถใช้บริการของ Azure ช่วยขยายขีดความสามารถของระบบโดยไม่จำเป็นต้องเรียนรู้เทคโนโลยีใหม่ทั้งหมด และใช้ PowerBI ช่วยเรื่องการวิเคราะห์และแสดงผลข้อมูลเพิ่มเติม
โครงการนี้ใช้เวลาพัฒนาประมาณ 3 เดือน โดยมีทีมงานจากไมโครซอฟท์ 1 คน ร่วมกับนักพัฒนา 2 คนจาก Transcode ขณะนี้โครงการกำลังเตรียมไปสู่ขั้นตอนการใช้งานจริง และมีแผนจะพัฒนาความสามารถอื่นๆ เพิ่มเติม เช่น การวิเคราะห์และแยกแยะใบหน้าของคนขับ
สำหรับผู้สนใจนำ Azure มาใช้งานเพื่อขยายศักยภาพของระบบ สามารถเข้าร่วมกลุ่ม Azure Thailand Developer Group เพื่อสอบถามข้อมูลได้โดยตรง
Comments
เป็นกรณีศึกษาที่น่าสนใจครับ แต่สงสัยว่าทำข้อมูลถึงมาจากหลายแหล่งมีข้อมูลเดิมอยู่แล้วหรอครับ?
เดี๋ยวนี้โครงการใช้คนพัฒนาแค่ 3 ตนเองหรอครับ?