วันพุธที่ 9 มีนาคม พ.ศ. 2559

ActiveMQ คืออะไร part 1

>> ผมเขียนจาวาเป็นหลัก ต้องติดต่อกับฐานข้อมูลอยู่เป็นนิจ ทว่าเมื่อเริ่มโครงการใหม่กลับต้องไปขอข้อมูลจาก ActiveMQ แทนฐานข้อมูลเดิม ซึ่งผมขอออกตัวก่อนเลยว่าไม่มีความรู้เรื่องนี้เลยครับ
:( นั่นจึงเป็นสาเหตุให้ผมต้องมาเขียนโพสต์นี้อย่างไรเล่า

>> เข้าไปอ่านว่า ActiveMQ มันคืออะไร?
คำตอบที่ได้ มันย่อมาจาก Active Message Queue (ยังงงอยู่ แล้วมันคืออะไร) มันเป็นเทคโนโลยีที่ใช้ความคิดของ Message Oriented Middleware (MOM) และยืนอยู่บนข้อกำหนดของวิธีการหรือเทคโนโลยีที่เรียกว่า AMQP ซึ่งย่อมาจาก Advanced Message Queue Protocol โดยตัวมันเอง (ActiveMQ) ยังระบุหรือตั้งข้อกำหนดของวิธีการในการส่ง message ระหว่าง client กับ broker ให้ทำงานร่วมกันได้อีกด้วย ทำความเข้าใจมาถึงตอนนี้ก็ยังไม่แจ้งแก่ใจ

>> ความต่างระหว่าง ActiveMQ กับ AMQP มีแค่เรื่องข้อกำหนดที่เพิ่มขึ้นดังข้างต้นเท่านั้นหรือ?
คำตอบที่ได้ เอกสารบอกว่า AMQP มีข้อกำหนดสำหรับ wire-level protocol เพื่อการสื่อสาร message ระหว่าง client กับ broker เท่านั้น มันไม่มีระบบ message อย่างแท้จริง ไม่เหมือนกับ ActiveMQ ที่มีระบบ message หรือพูดง่ายๆภาษาผมว่า
- AMQP เน้นข้อกำหนดของ protocol ในการสื่อสาร message
- ส่วน ActiveMQ เน้นระบบ message ว่ามีกี่วิธี (ของ message) ในการพูดคุยระหว่างกัน

>> ทำไมต้องใช้ ActiveMQ ด้วยล่ะ?
อันนี้คงต้องพูดถึงประโยชน์ของมัน ว่ามีกรณีไหนบ้างที่ทำให้เราพยักหน้าตาม (เห็นด้วยที่จะเอามาใช้ไง) มีสองเอกสารที่ผมขอหยิบมาอ้างอิงครับ แน่นอนว่าผมไม่เคยรู้จักมันมาก่อน ดังนี้

- ActiveMQ use cases ที่บอกว่าเหล่ากรณีใหญ่ๆเหล่านี้แหละคือเหตุผล
       1) Transactional messaging เพื่อรับประกันว่าข้อมูลจะไม่สูญหายแม้ว่าระบบ (หมายถึงระบบย่อยในระบบใหญ่ของมัน) ล้มหรือเกิดปัญหา
       2) High performance market data distribution ก็เพื่อกระจายหรือแจ้งหรืออัพเกรด message ที่เกี่ยวข้องกับข้อมูลการซื้อขายจำนวนมากบน network ขนาดใหญ่
       3) Clustering and general purpose async messaging model โอ้อันนี้ไม่เข้าใจ
       4) Web Streaming of data สามารถให้ real time data ได้ เช่น ราคาหุ้น
       5) RESTful API to messaging using HTTP โอ้โห หัวใจเรื่องนี้คือการเชื่อมต่อกันแบบ cross-language และ cross-technology เขียนภาษาอะไรก็คุยกันได้หมด ทำงานบนระบบปฏิบัติการอะไรก็ให้บริการกันได้หมด (ผ่านทาง HTTP interface นะ อิอิ)

- ทำไมฉันต้องใช้ ActiveMQ? ก็ลองคลิกไปอ่านกันดูอาจสรุปได้ดีกว่าผม แต่ที่ผมชอบใจคือความเห็นที่กล่าวว่า You should use database for persistent data and not for temporary data ก็คือข้อมูลที่ต้องส่งจาก Sender (ขอเรียกว่าผู้ส่ง) ไปยัง Receiver (ขอเรียกว่าผู้รับ) เพื่อที่จะรับข้อมูลหรือ message เพียงแค่ครั้งเดียวต่องานเพียงหนึ่ง operation เท่านั้น และหลังจากนั้นก็จะคอยรับข้อมูลตัวใหม่ (เพราะว่าผู้ส่งจะส่ง message ตัวใหม่ไปให้ผู้รับเรื่อยๆ เช่นทุกๆ 1 นาที) ดังนั้นผู้รับข้อมูลลักษณะที่เรียกว่า temporary data นี้จึงไม่จำเป็นต้องสนใจอายุของข้อมูลหรอก ไม่ต้องเก็บมันไว้ในฐานข้อมูลหรอกครับ

>> เพื่อให้เข้าใจได้ง่ายขึ้นและดูเหมือนว่า ActiveMQ จะเกี่ยวข้องกับวิธีการของ message จึงพูดได้ว่า ActiveMQ เป็น message broker หรือก็คือคนกลางในการติดต่อสื่อสารกันของระบบตั้งแต่สองระบบขึ้นไปที่เชื่อมต่อกันบนระบบ network โดยมีวิธีการจัดการ message ด้วยการนำ queue และ topic มาใช้งานนั่นเองครับ

>> สืบเนื่องจาก queue และ topic ดังข้างต้นคือ สอง รูปแบบของวิธีการจัดการกับ message ที่ถูกกำหนดไว้ในเอกสาร (specification) ของความคิดของเทคโนโลยีใดๆที่เป็น Message Oriented Middleware (MOM) อยู่แล้ว นั่นหมายความว่ายังมียี่ห้ออื่นๆอีกที่อาศัยข้อกำหนดหรือเอกสารนี้เพื่อบริการการจัดการกับ message ได้แก่
- TIBCO EMS (TIBCO)
- ActiveMQ (Apache) ที่เรากำลังสนใจ
- JBOSSMQ (JBOSS)
- MQSeries (IBM)
- ฯลฯ

>> วิธีการหรือ API ที่ใช้สำหรับบริการการจัดการ message ที่เป็น MOM ซึ่งผมคุ้นหูมากก็คือ JMS (ย่อมาจาก Java Messaging Service) ฝรั่งใช้คำว่า MOM Service Providers ตัวดังๆก็อย่างที่ได้ยกตัวอย่างไปแล้วนั่นแหละครับ หนึ่งในนั้นก็คือ ActiveMQ ที่เรากำลังสนใจอยู่นี้ เพราะเหตุนี้หากเรามีความเข้าใจการจัดการ message ของ JMS เป็นพื้นฐานแล้วล่ะก็ เราก็จะเข้าใจ ActiveMQ ได้ดีขึ้นด้วย

>> ทำความเข้าใจ JMS อีกนิดนะ
โปรแกรมภาษาจาวาที่สร้างขึ้นเพื่อส่ง message ในความคิดของ JMS เราจะเรียกว่า JMS Producer และโปรแกรมภาษาจาวาที่สร้างขึ้นเพื่อรับหรือบริโภค message เราจะเรียกว่า JMS Consumer

และเพื่อจัดการกับ message เจ้า JMS Producer ก็คือ Publisher และ JMS Consumer ก็คือ Subscriber นั่นเองครับ (จะคิดถึง YouTube ก็ได้ ผู้ผลิตวิดีโอก็คือ Publisher ส่วนพวกเราที่ไปกดปุ่ม ติดตาม หรือ subscribe (สับตะไคร้) ก็คือ Subscriber ดีๆนี่แหละ)

>> JMS มีสองโมเดลหรือสองรูปแบบในการจัดการกับ message ได้แก่
1) Point to Point (PTP)
2) Publisher/Subscriber (Pub/Sub)

>> ง่วงนอนแล้วล่ะ ไว้มาศึกษาด้วยกันต่อนะ ฝันดี อ้อ เผื่อว่าอยากไปอ่านต่อเองแบบว่าไม่ต้องรอ ขอบคุณลิงค์เหล่านี้ที่แชร์ความรู้ ผลประโยชน์ที่ตัวผมและเพื่อนๆได้รับล้วนมาจากน้ำใจของพวกเขาทั้งสิ้น ขอบคุณพวกเขาด้วยล่ะ สำหรับตัวผมเองขอขอบคุณมากครับ
- https://krisachai.wordpress.com/2014/03/25/%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99-apache-camel-activemq-protobuf/
- http://www.jcombat.com/jms-tutorials/introduction-to-java-messaging-service-jms

1 ความคิดเห็น: