โดยปกตินั้นข้อมูลมีการเปลี่ยนแปลงอยู่เสมอ
ยิ่งในปัจจุบันอัตราการเปลี่ยนแปลงสูงมาก ๆ
ทั้ง Volume, Velocity และ Variety
ทำให้เครื่องมือต่าง ๆ ที่มีอยู่อาจจะไม่เพียงพอต่อความต้องการ
ทั้งการจัดเก็บ
ทั้งการรวบรวม
ทั้งการวิเคราะห์ ประมวลผล ซึ่งมีความซับซ้อน
และต้องการให้ทำงานแบบ realtime
ดังนั้นเราต้องการวิธีการใหม่ เครื่องมือใหม่ ๆ architecture ใหม่
ขนาดของข้อมูลนั้นกลายเป็นเรื่องปกติไปแล้ว
ทั้งจาก business transaction, operation, logging และ IoT แต่สิ่งที่สำคัญมากกว่าคือ ความเร็วของระบบให้ทันต่อความต้องการ เพื่อใช้ในการวิเคราะห์และตัดสินใจต่อไป ยิ่งระบบสมัยใหม่ ทำการจัดเก็บข้อมูลการใช้งานเยอะมาก ๆ ทั้งสถิติการใช้งาน เช่นการ click การ view และ การดู เพื่อเรียนรู้พฤติกรรมการใช้งาน และ ปรับปรุงระบบได้อย่างทันท่วงที ดังนั้นจำเป็นต้องมีกระบวนการจัดเก็บ ทำความสะอาด วิเคราะห์ และแสดงผลได้เร็ว ดี ละเอียดและเข้าใจได้ง่ายมีทางเลือกสำหรับระบบจัดการสิ่งต่าง ๆ เหล่านี้คือ
ซื้อ ทำเอง ให้คนอื่นทำให้ เลือกเอาเองนะครับแต่ในบทความนี้เราลองมาดูว่า โครงสร้างที่น่าจะเหมาะสมกับ Fast data เป็นอย่างไรบ้าง ?
ซึ่งต้องการให้การประมวลผลเร็ว ๆ ดังนั้นน่าจะต้องคิดใหม่ ทำใหม่กัน เพราะว่า จะมาประมวลผลแบบ batch หรือ offline คงไม่เพียงพอต่อความต้องการ โดยในการจะสร้างระบบนั้นต้องพิจารณาในเรื่องของ- การนำข้อมูลเข้าที่มีประสิทธิภาพ
- การจัดเก็บข้อมูลและการดึงข้อมูลที่ยืดหยุ่น
- การวิเคราะห์ข้อมูลที่สะดวกและหลากหลาย
- การแสดงผล
1. การนำข้อมูลเข้า
โดยข้อมูลเข้ามีที่มามากมาย มีรูปแบบที่แตกต่างกันเช่น plain text, JSON, XML เป็นส่วนที่บอกว่า ข้อมูลจะเข้ามาสู่ระบบมากน้อยเพียงใด โดยปกติจะมีขั้นตอนดังนี้- Parsing
- Validation
- Cleansing
- De-duping
- Transformation
- Apache Kafka
- Akka Stream
- ActiveMQ
- RabbitMQ
- JBoss AMQ
2. การจัดเก็บข้อมูล
แนะนำให้ทดลองใช้งานหลาย ๆ อย่าง เพื่อให้เข้าใจ เพื่อให้รู้ว่าเหมาะหรือไม่กับระบบงานของเรา ซึ่งเชื่อเถอะว่า ทุก ๆ ปัญหาที่เราพบเจอนั้น มักจะมี solution หรือการแก้ไขไว้แล้ว ดังนั้นไม่จำเป็นต้องสร้างขึ้นมาใหม่จากศูนย์เอง ทั้งปัญหาเรื่องการอ่านข้อมูล ทั้งปัญหาเรื่องการเขียนข้อมูล ทั้งปัญหาเรื่องการแก้ไขข้อมูล โดยที่จัดเก็บข้อมูลที่ดีจะช่วยลด เวลาในการออกแบบ เวลาในการประมวลผล เวลาในการ transfer ข้อมูล ประหยัดที่จัดเก็บ ต่อมาสิ่งที่นำมาใช้งานต้องสามารถ configuration ได้ง่าย และปรับแต่งตามที่ต้องการได้ ทั้งการ replication และ ความถูกต้องของข้อมูล ในส่วนของการออกแบบ data model นั้น มันขึ้นอยู่กับระบบและการนำไปใช้งาน แต่ให้เน้นไปที่ performance เป็นหลัก ในส่วนของเครื่องมือก็มีให้เลือกใช้เพียบ เช่น- Apache Cassandra
- Couchbase
- Apache Hive
- Riak
- Redis
- MongoDB
- MariaDB
3. การประมวลผลข้อมูล
สำหรับระบบ Fast data นั้นมีการประมวลผลทั้ง Batching และ Streaming รวมกันไป นั่นคือเลือกวิธีการให้เหมาะสมกับงานนั่นเอง ยกตัวอย่างเช่น ระบบงานต้องการการทำงานแบบ realtime คงไม่ใช้วิธีการแบบ batching หรอกนะ หรือถ้ามีระบบ ETL แบบเดิม ๆ อยู่ ซึ่งทำงานแบบ bacthing คงไม่มีใครบ้าระห่ำย้ายมาทำงานแบบ realtime หรือ streaming หมดหรอกนะ โดยที่เครื่องมือบางตัวอาจจะแบ่งการทำงานเป็นส่วนเล็ก ๆ แต่ละส่วนการทำงานจะทำงานแบบ bactching หรือ micro-batching จากนั้นตัวควบคุมการทำงานหลักทำงานแบบ streaming ซึ่งวิธีการทำงานแบบนี้จะเรียกว่า hybrid อีกเครื่องคือ จะทำการบน disk หรือ memory ดีละ ก็เหมือนข้างต้นนั่นเอง ทำงานบน disk ไปหมดก็ไม่ดี มันช้า ทำงานบน memory ไปหมดก็ไม่ได้ มันเปลือง เราพูดถึงความเร็วคือ data locallly มากกว่า นั่นคือ ประมวลผลข้อมูลที่อยู่ใกล้ ๆ ซึ่งเร็วต่อการทำงาน และ transfer ข้อมูล ดังนั้นเครื่องมือหลาย ๆ ตัว จะทำงานแบบการกระจายข้อมูลไปในแต่ละที่ จากนั้นจึงรวมผลการทำงานเข้าด้วยกัน คุ้น ๆ กับวิธีการทำงานหรือไม่ ? โดยเครื่องมือมีให้ใช้เยอะมาก ๆ ยกตัวอย่างเช่น- Apache Spark
- Apache Flink
- Apache Storm
- Apache Beam
- Tensorflow
4. การแสดงผลข้อมูล
เป็นส่วนที่ใช้อธิบายผลการประมวลผลข้อมูลให้ผู้ใช้งานทั่วไปเข้าใจได้ง่าย เป็นขั้นตอนที่ไม่ง่ายเลย เนื่องจากต้องใช้ศาตร์และศิลป์เยอะสูงมาก ๆ ที่สำคัญต้องโดนใจ ถูกต้อง เข้าใจง่ายและเร็ว ดังนั้น การ process เยอะ ๆ ในขณะแสดงผลเป็นสิ่งต้องห้ามอย่างมาก ข้อมูลก่อนนำมาแสดงผล ต้องเป็นข้อมูลที่สรุปมาแล้ว เช่นข้อมูลตามหมวดหมู และ ตามช่วงเวลาเป็นต้น ข้อมูลแต่ละชุดทำขึ้นมาเพื่อการแสดงผลแบบเฉพาะเจาะจงเท่านั้น อย่านำข้อมูลชุดเดียวแล้วไปแสดงในทุกรูปแบบ มิเช่นนั้นจะช้าอย่างมาก ส่วนของเครื่องมือก็เยอะนะ ยกตัวอย่างเช่น- Notebook report เช่น Jupiter notebook และ Apache Zeppelin
- Tableau
- D3.js
- Gephi
แต่ทั้งหมดนี้ ต้องการ infrastructure ที่ดีด้วยเช่นกัน
ดังนั้น operation จำเป็นต้องปรับและเปลี่ยนด้วย จากที่เคยทำแต่ scale-up ต้องเปลี่ยนมาเป็น scale-out รวมทั้งเรื่องการนำ opensource มาใช้งาน แนวคิดและแนวปฏิบัติ DevOps จึงมีความสำคัญอย่างมาก เพื่อลดการ rework ต่าง ๆ ลงไป เช่นทีมพัฒนาสามารถทดสอบระบบ บน environment ที่เหมือนหรือคล้ายกับ production เป็นต้น ส่วนของเครื่องมีในการจัดการก็มีเยอะมากเช่นเดิม- Docker
- Kubernetes
- Spinnaker
- Apache Mesos