รู้จักกับฐานข้อมูลอนุกรมเวลา OpenTSDB กันเถอะ

สวัสดีครับ ผมชื่อมายนะคับ เนื่องจากผมทำวิทยานพินธ์ปริญญาโท เกี่ยวกับการปรับปรุงประสิทธิภาพของฐานข้อมูลอนุกรมเวลา OpenTSDB และบ้านเราก็ยังไม่ค่อยมีคนพูดถึงเรื่องนี้เท่าไหร่นัก ถือว่าเป็นโอกาสดีที่จะนำความรู้มาแบ่งปันกันครับ

ถ้าใครยังไม่รู้จักกับฐานข้อมูลอนุกรมเวลา (Time Series Database) หรือยังใหม่สำหรับเรื่องนี้ หรือสามารถตามอ่านได้ในบทความก่อนหน้านี้ครับ ทำไมเราถึงควรใช้ฐานข้อมูลอนุกรมเวลาสำหรับ "ข้อมูลอนุกรมเวลา" (Time Series Database)

OpenTSDB ถูกใช้ในบริษัทใหญ่ๆ อย่าง eBay, Yahoo, Pinterest, Box, Bitbucket และบริษัทใหญ่ๆ อีกหลายบริษัท ซึ่งในบทความนี้ผมจะแนะนำเบื้องต้นเกี่ยวกับ OpenTSDB ข้อดี และข้อควรระวัง รวมถึงตัวอย่างการ query หลักการทำงานคร่าวๆ ว่ากันแล้ว

TL;DR (ยาวไปไม่อ่าน): #

OpenTSDB คือฐานข้อมูลอนุกรมเวลา Open Source บนฐานข้อมูล HBase

สรุปความสามารถเด่นๆ ดังนี้

  • สามารถขยายตัวได้ (Scalablity) และมีความคงทนของข้อมูลสูงอีกด้วย ( Availability) สรุปง่ายๆ คือ อาศัยความสามารถของ HBase และ Hadoop เป็นจุดเด่น
  • เหมาะสำหรับข้อมูลอนุกรมเวลาขนาดใหญ่
  • 1 data point จัดเก็บได้เฉพาะ เวลา (timestamp) และตัวเลข (ค่าของข้อมูล)
  • การ Query มี syntax เป็นของตัวเองผ่าน HTTP API
  • สามารถทำ post processing ได้เช่น downsampling, rate, interoperation

จริงๆ แล้วทุกวันนี้เราน่าจะได้ยินเกี่ยวกับอนุกรมเวลามากขึ้น และใช้กันบ่อยขึ้น บางคนอาจจะจะรู้จักในนามของกราฟหุ้น หรือเทคโนโลยีที่เป็นที่นิยมอยู่ตอนนี้คือ Internet of Thing โดยมองคอนเซ็ปว่าทุกอย่างสามารถต่ออินเตอร์เน็ตได้

ดังนั้นในอนาคตเราก็จะมีข้อมูลเกิดขึ้นอย่างมหาศาล ลองคิดเล่นๆ ว่า หลอดไฟทุกดวงในประเทศต่ออินเตอร์เน็ต และส่งข้อมูลสถานะของมันออกมาทุกๆ วินาที เป็นระยะเวลาสัก 1 ปี แค่นี้ก็จินตนาการไม่ออกแล้วว่าข้อมูลจะมากขึ้น หรือจริงๆ แล้วอนุกรมเวลาครอบคลุมทุกอย่างที่มีความสัมพันธ์กับเวลาเลยทีเดียว

เชื่อว่าหลายๆ คนอาจจะยังไม่คุ้นชินกับฐานข้อมูลอนุกรมเวลา หรือ OpenTSDB เพราะในบ้านไม่ค่อนมีคนพูดถึงมากนัก รวมถึงในฝั่งงานวิจัยเองก็ยังคงเป็นเรื่องที่ใหม่มากๆ (เปเปอร์ที่ survey เกี่ยวกับฐานข้อมูลอนุกรมเวลาเพิ่งออกเมื่อปีที่แล้วเลย 2017)

แต่ถ้าเราต้องเก็บข้อมูลอนุกรมเวลาขนาดใหญ่ และดึงข้อมูลออกมาวิเคราะห์แล้ว OpenTSDB ตอบโจทย์ได้ดีมาก เพราะสามารถทำงานได้เร็วกว่าพวก database ทั่วๆ ไป พวก MySQL, MongoDB, HBase

OpenTSDB (Open Time series database) #

https://www.dropbox.com/s/2zprjjijpfo8y1t/2018-08-13-%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%88%E0%B8%B1%E0%B8%81%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%90%E0%B8%B2%E0%B8%99%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B8%AD%E0%B8%99%E0%B8%B8%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B9%80%E0%B8%A7%E0%B8%A5%E0%B8%B2%20OpenTSDB%20%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B9%80%E0%B8%96%E0%B8%AD%E0%B8%B0-3.jpg?dl=0

OpenTSDB ถูกสร้างครั้งแรกโดย StumbleUpon ซึ่งคนที่ดูแลหลักๆ คือ Yahoo โดยเจ้าดังๆ ที่มีใช้ก็มี eBay, Atlassian หรือบางคนอาจจะรู้จักในนาม bitbucket, Box, Pinterest , Tumblr, MapR, Cloudflare และอีกหลายๆบริษัทเลย

จุดแข็งของ OpenTSDB ที่ทำให้ผมชอบ และหลงรักคือการออกแบบอยู่บน HBase

แล้ว OpenTSDB คืออะไร หน้าเว็บหลักเค้าบอกว่าแบบนี้คับ

The Scalable Time Series Database
Store and serve massive amounts of time series data without losing granularity.

ก็คือฐานข้อมูลที่เหมาะสำหรับการเก็บข้อมูลอนุกรมเวลาขนาดใหญ่บนฐานข้อมูล HBase ซึ่งสืบทอดความสามารถของ HBase ซึ่งอยู่ใน ecosystem ของ Hadoop โดยมีความสามารถหลักๆ ประมาณนี้ครับ

  • ตัว HBase เองมีความสามารถในการจัดเก็บข้อมูลแบบกระจายตัวที่มีความสามารถในการขยายตัวได้ดีมากในแบบ horizontal ( Scalability )อีกทั้งยังมีความคงทนของข้อมูลสูงอีกด้วย (Availability)

  • โดยเริ่มต้นเอง พัฒนามาเพื่อใช้สำหรับในงาน Monitoring ระบบคอมพิวเตอร์ ต่างๆ ซึ่งมี ตัวที่เป็นสคริปซ์ (เรียกว่า Tcollector) ไว้สำหรับส่ง data เข้าสู่ OpenTSDB ด้วย เช่นการ monitor สถานะของ mysql หรือ พวก redis เป็นต้น และข้อมูลที่เก็บเป็นแบบ time series เท่านั้น

  • OpenTSDB ยังมี HTTP API สำหรับการ write และ read ข้อมูลลงฐานข้อมูล รวมถึงหน้าตา dashboard แบบง่ายๆ ให้ใช้งานด้วย (visualization tool)

  • ข้อดีอย่างหนึ่งของ OpenTSDB คือการเก็บ data points ทั้งหมด ซึ่งไม่เหมือนบางฐานข้อมูล เช่น RDDtool ซึ่งตัวนึงที่ใช้มากในระบบ monitoring ซึ่งมันจะลดจำนวนจุดที่มีบันทึกนานมาแล้ว โดยการเอามารวมกัน เพื่อการลดพื้นที่การจัดเก็บ

ดังนั้น OpenTSDB จึงเหมาะสำหรับจัดเก็บข้อมูลเซนเซอร์หรือข้อมูล IoT หรือแม้แต่ time series ทั่วๆ ไปได้ ซึ่งทุกๆ จุดมีประโยชน์ต่อการนำไปวิเคราะห์ข้อมูล

ตัวอย่างการ query #

เพื่อให้เห็นภาพมากขึ้น ขอยกตัวอย่างการ query ข้อมูลจากฐานข้อมูล OpenTSDB นะครับ

https://www.dropbox.com/s/9f7oa9mnbfntb20/2018-08-13-%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%88%E0%B8%B1%E0%B8%81%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%90%E0%B8%B2%E0%B8%99%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B8%AD%E0%B8%99%E0%B8%B8%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B9%80%E0%B8%A7%E0%B8%A5%E0%B8%B2%20OpenTSDB%20%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B9%80%E0%B8%96%E0%B8%AD%E0%B8%B0-4.jpg?dl=0

OpenTSDB มี Web GUI เป็นของตัวเอง และสามารถใช้ HTTP API ได้ จากรูปข้างบน เราสามารถกำหนดเวลา ตั้งต้น และสิ้นสุด และชื่อของอนุกรมเวลาได้ (ทางซ้ายมือ)

ซึ่งผลลัพธ์ก็ได้ JSON ดังรูปทางขวามือคับ ซึ่ง data point จะอยู่ในรูปแบบของ key และ value ระหว่าง timestamp และค่าของมันคับ

หลายๆ คนอาจจะสงสัยแล้วว่า OpenTSDB ทำงานยังไง แล้วทีนี้เราก็มาดู architecture ภาพรวมคร่าวๆ กันนะครับ

Opentsdb ทำงานอย่างไร #

https://www.dropbox.com/s/9u78y13ja2da3s4/2018-08-13-%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%88%E0%B8%B1%E0%B8%81%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%90%E0%B8%B2%E0%B8%99%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B8%AD%E0%B8%99%E0%B8%B8%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B9%80%E0%B8%A7%E0%B8%A5%E0%B8%B2%20OpenTSDB%20%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B9%80%E0%B8%96%E0%B8%AD%E0%B8%B0-5.png?dl=0

รูปจากหน้าเว็บหลักของ OpenTSDB แสดงสถาปัตยกรรมของ OpenTSDB

OpenTSDB จะสร้าง worker ที่แตก thread ออกมา ซึ่งเรียกว่า TSD (Time Series Daemon) สำหรับจัดการ job ของ OpenTSDB ซึ่งจะต้องมี worker (หรือ TSD) อย่างน้อย 1 ตัว แต่ละตัวทำงานไม่เกี่ยวข้องกัน ถ้าดูจากรูปข้างบน คือ จะไม่มีเส้น ระหว่าง TSD แต่จะต่อตรงกับ HBase ทีเดียวเลย

หลักๆ คือ TSD ทำหน้าที่เป็นตัวกลางระหว่างการเขียนและการอ่านของ OpenTSDB กับ HBase

ผมขอแนะนำ time series database ที่ชื่อ OpenTSDB ไว้แต่เพียงแค่นี้ครับ หลังจากนี้จะเป็นสรุปข้อดี ข้อเด่น และข้อควรระวังในการนำ OpenTSDB ไปใช้ จากประสบการณ์การใช้งานของผมเอง

ข้อดีของ OpenTSDB #

  • ทำงานเร็วกว่าฐานข้อมูลเอนกประสงค์ทั่วๆ ไปมาก
  • รองรับการขยายตัวได้ดีเมื่อเทียบกับ prometheus, InfluxDB, Elasticsearch
  • มีการ compaction เพื่อลดขนาดของพื้นที่ที่ใช้จัดเก็บข้อมูล
  • สามารถปรับจูนประสิทธิภาพได้เยอะ
  • เป็น Open Source และมี Commnuity ที่โอเคพอควร

ข้อควรระวังของ OpenTSDB #

  • เนื่องจากเป็นฐานข้อมูลที่ทำงานบน HBase ดังนั้นการติดตั้งและตั้งค่าอาจจะยุ่งยาก
  • สามารถเก็บเวลาได้แค่ 2 หน่วยคือ วินาที และ มิลลิวินาที
  • ค่าที่บันทึกได้มีแค่ตัวเลข ทศนิยมหรือจำนวนเต็ม ไม่สามารถเก็บข้อความได้
  • เนื่องจากยังไม่มีมาตรฐานการออกแบบฐานข้อมูลอนุกรมเวลา ดังนั้น API การใช้งานจึงเฉพาะเจาะจงสำหรับ OpenTSDB เท่านั้น
  • บางระบบอาจจะยังไม่ตอบโจทย์เพราะว่า OpenTSDB อาจจะ general เกินไป
  • ยังไม่มีแคชในส่วนของการ Query ข้อมูล ซึ่งใน roadmap ของ OpenTSDB 3.0 บอกว่าจะใส่เข้ามา

ส่วนผมเองได้ออกแบบและพัฒนากลไกแคชสำหรับ OpenTSDB โดยใช้ Memcached ซึ่งจะปีพิมพ์ในงานประชุมวิชาการ ISCIT 2018 ด้วยครับ บล็อกหน้าจะอธิบายในส่วนถัดๆไป คับ

ในบทความต่อไปถัดไปจะพูดถึง

  • Internal OpenTSDB
  • Asynchorous programming using deferred object ( async Hbase )
  • Memcached & internal

ไว้พบกันใหม่โอกาสหน้าครับ สวัสดีครับ

หมายเหตุ #

ใช้ OpenTSDB 2.3.0 เป็นตัวอ้างอิงนะครับ

Comment

GO BACK TO HOME