วันอังคารที่ 15 มีนาคม พ.ศ. 2559

ทำไมต้องมี JMS ?

>> คิดเสียว่ามาเล่าสู่กันฟังนะครับเพื่อนๆ ถึงประเด็นที่ว่า ทำไมต้องใช้ Java Messaging Service (JMS) และหากนี่เป็นความรู้เก่าและผิดพลาดประการใด ผมขออภัยด้วยนะครับ

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

>> ผมอยากจะเล่าย้อนไปว่างานหรือโปรแกรมที่เราพัฒนาขึ้นมานั้นต้องได้รับการประมวลผลจาก CPU มันจึงจะทำงานได้ จริงอยู่บางคนก็ว่างานบางอย่างก็ต้องใช้ IO สลับกับ CPU (ไม่ได้ใช้ CPU อย่างเดียว) โอเคผมไม่เถียงเพราะเราต่างก็พูดเรื่องเดียวกันว่า เราใช้ CPU ทำงานงานของเราด้วย สมมติให้เรามี 1 CPU ทำงานทั้งสิ้น 2 งาน เมื่อ CPU ทำงานที่ 1 นั่นหมายความว่างานที่ 2 จะต้องรอให้งานที่ 1 เสร็จก่อนจึงจะทำงานของตนได้ ถ้าเพื่อนๆมีงานให้ CPU ตัวนี้ทำสัก 100 งาน นั่นก็หมายความว่าแต่ละงานจะแซงคิวกันไม่ได้

>> กาลเวลาผ่านไปจึงเกิดการพัฒนาให้ CPU ทำงานได้หลายงานภายในเวลาใกล้เคียงกัน กล่าวคือเรามี CPU 1 ตัวทำงานทั้งสิ้น 2 งาน และเราสั่งให้ CPU ทำงานที่ 1 เจ้า CPU นี้จะทำงานของงานที่ 1 ไปสักระยะ อาจทำได้หลายขั้นตอนของงานที่ 1 แล้วมันก็จะจดจำว่าทำถึงไหน จากนั้นก็พักงานที่ 1 ไว้ ก่อนจะไปหยิบเอางานที่ 2 มาทำต่อ เจ้า CPU นี้จะทำงานของงานที่ 2 ไปสักระยะ อาจทำได้หลายขั้นตอนของงานที่ 2 แล้วมันก็จะจดจำว่าทำถึงไหน จากนั้นก็จะพักงานที่ 2 ไว้ ก่อนจะไปหยิบเอางานที่ 1 ณ ที่จดจำไว้มาทำต่อ ทำสลับกันไปอย่างนี้จนกว่าทั้งสองงานจะแล้วเสร็จ การกระทำเช่นนี้เราเรียกว่า มัลติทาสกิ้ง (Multitasking) หรือการทำงานหลายอย่างไปพร้อมๆกันในเวลาที่สุดแสนจะใกล้เคียงกัน (ซึ่งเรามองไม่เห็นความแตกต่างของเวลาหรอกนะ มันทำไวมาก) ตัวอย่างเช่น เล่น app บนมือถือ เห็นไหม เปิดได้ตั้งหลาย app แถมมันก็กำลังทำงานกันอยู่ด้วย

>> กาลเวลาผ่านไปก็เกิดการพัฒนาระบบเครือข่ายคอมพิวเตอร์หรือระบบเน็ตเวิร์ก ไม่เพียงแค่ CPU คุยกับงานของตัวเองในบ้านของตัวเอง ตอนนี้มันมีเพื่อนแล้ว มันมีเพื่อนเป็น CPU ด้วยกันที่กำลังทำงานอยู่ที่ใดๆก็ได้ในระบบเครือข่าย แหม~ล้ำ เพื่อติดต่อสื่อสาร แลกเปลี่ยนข้อมูลและใช้อุปกรณ์ต่างๆในเครือข่ายร่วมกันได้ CPU ตัวเดียวของเรานั้นมันก็คุยเพลินเลยเทียวล่ะ เอาล่ะ สมมติให้เราเป็นบริษัทที่ให้บริการส่วนลดภาษี (สมมติอะไรก็ได้ แบบว่าให้เป็นการบริการลูกค้าในระบบเน็ตเวิร์ก) ใครก็ตามที่มาขอใช้บริการจากเรา เขาคนนั้นก็จะได้ส่วนลดทันที 50 เปอร์เซ็นต์ โอ้แม่จ้าว เศรษฐีทั้งหลายจะแห่มาขอลดภาษีกับเว็บของเราแน่ๆ (เพราะการสร้างรายได้ที่ง่ายที่สุดก็คือการลดต้นทุนหรือจ่ายให้น้อยเข้าไว้) และน้อง CPU ตัวเดียวของเรานี้แหละก็จะต้องทำงานส่วนลดเจ้ากรรมนี้ให้กับผู้ใช้บริการทุกคน เดิมทีงานของมันก็มีให้ทำอยู่แล้วยังต้องมาคำนวณภาษีให้อีก เอาสัก 10 คน แหมจิ๊บๆกุ๊กๆไก่ แร๊บเดียวก็เสร็จกิจ โอเค เอาสัก 1000 คน แหมน้อง CPU นี่เขียนยิ๊กๆเลย แต่ก็รอดมาได้ โอเคจ้า เอาสัก 1,000,000 คน รับรองว่าทำไม่ทันแน่นอน ต้องเข้าคิวแบบว่าทยอยบริการทีละ 1000 คนไรงี้ก็พอจะทำให้เสร็จไปได้ คำถามคือ มันช้าแล้วครับ ต้องมาเกิดคอขวดเนี่ยเข้าประเด็นบริการได้แต่ช้าแล้วครับ

>> ผมขอหยิบคำพูดของพี่ชายผมที่ว่า รถวิ่งบนถนนเส้นเดิมแต่จำนวนรถเพิ่มขึ้นทุกวัน วันหนึ่งรถก็ต้องติดและทยอยกันออกจากสี่แยกไฟแดง สี่แยกไฟแดงที่เกิดขึ้นก็คือระบบคิวหรือเปรียบเปรยว่าเป็นคอขวดนั่นแหละครับ ผมถามง่ายๆเลยว่า ในเมื่อน้อง CPU ทำงานเพียงตัวเดียวไม่ทันกิจจะแก้ไขอย่างไร ก็คล้ายกับถนนที่มีรถติดจะแก้ไขอย่างไร คำตอบนี้ในทางนักพัฒนาพวกเขาก็จะว่า ขยายถนนสิ! คำตอบคือ ถูกต้องค๊าบ! ขยายเลนให้รถวิ่ง รถก็ติดน้อยลง จากที่เป็น 2 เลนก็จะกลายเป็น 3 เป็น 4 เลนไปเรื่อยๆตามปริมาณของรถที่เพิ่มมากขึ้นอย่างต่อเนื่อง เราก็จะทำอย่างเดียวกันกับถนนคือไปซื้อ CPU มาเพิ่ม พูดง่ายๆว่าตั้งเซิร์ฟเวอร์เพิ่ม เป็น 2 เครื่องเป็น 3 เป็น 4 เครื่องตามปริมาณของผู้มาขอใช้บริการ (หรือคำร้องขอจากผู้ใช้บริการผ่านระบบอินเตอร์เน็ต) ที่มากขึ้นอย่างต่อเนื่อง งานต่อไปที่จะงอกก็คือการ deploy โปรแกรมขึ้นสู่เซิร์ฟเวอร์นี่แหละครับ สมมติว่าตอนนี้เรามีเครื่องเซิร์ฟเวอร์ 10 เครื่อง โปรแกรมขอลดภาษีเวอร์ชัน 1.0 ก็จะถูกติดตั้งไว้กับเซิร์ฟเวอร์ทุกเครื่อง พอเราพัฒนาโปรแกรมเป็นเวอร์ชัน 1.1 ก็ต้องเอาไป deploy ใหม่ให้ครบทุกเครื่อง เกิดเป็นกรรมสาม คือ กายกรรม วจีกรรมและมโนกรรม พอเวอร์ชันเปลี่ยนก็จะเข้าสู่วงโคจรเดิมๆที่ต้อง deploy โปรแกรมให้ครบทุกเครื่อง หรือเรียกว่าการเข้าสู่ วัฏสงสาร นั่นเอง

>> สิ่งที่เกิดขึ้นดังข้างต้นเป็นเรื่องของการจัดการข้อมูลข่าวสาร การให้บริการ การใช้บริการผ่านระบบอินเตอร์เน็ตหรือระบบเครือข่ายที่มีกิจกรรมร่วมกันของแต่ละองกรณ์ แต่ละบริษัทมากมายนัก ใครที่เป็นโปรแกรมเมอร์หรือนักพัฒนาจาวาก็จะได้รู้จักกับ J2EE หรือ JEE ก็คราวนี้แหละจ้า แค่ JSP ก็ต้องใช้ JEE แล้วใช่ไหมล่ะ

>> กิจกรรมการมีเซิร์ฟเวอร์จำนวนมากกับ app ที่ต้องคอย update ดูเหมือนจะเป็นงานที่ไม่เข็นใจเท่าใด แต่ปรากฏว่าผู้ขอใช้บริการนี้เยอะเหลือเกิน (มูลค่าธุรกิจอาจจะหลัก 100 ล้านถึง 1000 ล้านขึ้นไป) น้องๆ CPU ก็พากันสลบเหมือด ถูกใช้งานอย่างหนักและต่อเนื่อง ไม่ไหวล่ะครับ มันเริ่มช้ากันอีกแล้ว จะซื้อเซิร์ฟเวอร์มาเพิ่มอย่างที่เคยทำก็กระไรอยู่ เอาไงดี?

>> นักคิดนักสร้างระบบจึงเสนอว่า เอางี้ดีไหม แทนที่จะคอยซื้อฮาร์ดแวร์มาเพิ่มถ่ายเดียว เอางี้ มาบริหารจัดการงานที่ทำอยู่ทุกวันนี้ก่อนดีกว่า เขาว่า อย่าให้ CPU เดียวมาทำงานทุกอย่าง ให้แยกประเภทงานออกมาก่อน เช่นพวกบริการลดภาษีเนี่ย (ที่ยกตัวอย่าง) ให้เครื่องเซิร์ฟเวอร์หมายเลข 1 ทำเท่านั้น เครื่องที่เหลือให้ไปทำงานบริการด้านอื่นๆ ก็จะเห็นว่า CPU ของเครื่องหมายเลข 1 มีงานให้ทำแค่อย่างเดียวคือคอยบริการการลดภาษี จากเดิมที่สามารถบริการทุกอย่างทีละ 1000 คน เมื่อตัดการบริการด้านอื่นๆออกไป อาจทำได้ 100,000 คนสำหรับงานบริการภาษีอย่างเดียว หรือพูดในทางกลับกันคือตั้งอีกเซิร์ฟเวอร์ขึ้นมาเพื่อจัดการกับงานด้านลดภาษีแค่นั้น งานเดิมที่น้อง CPU ต้องมาแบกรับก็จะลดลงแล้วทีนี้ (เห็นไหมล่ะ เพียงลดต้นทุนหรือตัดรายจ่าย รายได้ก็เพิ่มขึ้น) ลักษณะการแก้ไขปัญหาที่เกิดขึ้นนี้มีศัพท์ที่เรียกว่า Message Oriented Middleware (MOM) หรือเรียกตามความเข้าใจของผม มันก็คือ 'ตัวกลางจัดการ message' ซึ่งมันถูกกำหนดให้เป็นหนึ่งในหลายเทคโนโลยีย่อยที่สามารถทำงานร่วมกันได้ของ JEE

>> มันในที่นี้ก็คือ Java Messaging Service หรือย่อว่า JMS นั่นเองครับ

*** มือใหม่อ่านมาถึงตรงนี้หากเข้าใจบ้างไม่เข้าใจบ้างนั่นถือเป็นธรรมดา JMS น่ะคือความคิดหรือก็คือวิธีคิดในการจัดการการกระจาย message จำนวนมากจากผู้ส่งไปยังผู้รับ มันจึงมี API หรือก็คือคู่มือการใช้งานหรือก็คือแผนที่วิธีติดต่อกับมัน สิ่งเหล่านี้เรียกว่า ข้อกำหนด (แรกเลยก็เป็นเอกสาร เขียนกันในกระดาษนี่แหละ) ที่ท้ายสุดก็นำมาร่างเป็น interface (หมายถึงจาวา interface) ตลอดจนนำข้อกำหนดนี้ไปทำโปรแกรมทางการค้า ตัวอย่างเช่น TIBCO EMS ของ TIBCO, MQSeries ของ IBM เป็นต้น อ้อ แบบที่ให้ใช้ฟรีก็มี เช่น ActiveMQ ของ Apache ไงล่ะ

>> สวัสดี

ไม่มีความคิดเห็น:

แสดงความคิดเห็น