
ในโลกของการพัฒนา Software เรามักจะเจอการส่งข้อมูลไปมาระหว่างระบบอยู่แล้ว ยิ่ง Micro Services Architecture เป็นอะไรที่คนส่วนใหญ่ใช้กันแล้ว

โดยสรุปสั้นๆเป็น 2 หัวข้อง่ายๆละกัน เช่น
- การส่งข้อมูลระหว่าง Application ไป Server (public API)
- การส่งข้อมูลกันระหว่าง Server – Server (private API)
ซึ่งเจ้าการส่งข้อมูลไปมาแบบทั่วไปเลยที่คนรู้จักกันดีก็คงไม่พ้น JSON และ XML นั้นแหละ เพราะเวลาถามนักพัฒนาหลายท่านก็จะตอบประมาณว่าใช้เจ้า JSON หรือ XML แล้ว serialization เอาสิ จะได้รวดเร็ว บางคนก็จะบอกใช่ JSON ดีกว่า XML หรืออะไรกันไปต่างๆนา
แต่จริงๆแล้วเครื่องมือแต่ละชนิดมันออกแบบมาไม่เหมือนกัน ซึ่งวันนี้ที่จะมาพูดถึงคือเจ้า Protocol Buffer เป็นอีกเครื่องมือนึงที่ช่วยในการพัฒนาการส่งข้อมูลขนาดระหว่างระบบที่ทําให้ได้ขนาดที่เล็กมากๆ และ การส่งข้อมูลใน distributed application เลย (ลองนึกภาพ distributed app. ต้องส่งข้อมูลผ่าน xml หรือ json มันจะกินเวลา processing แต่ละ node ขนาดไหนล่ะ)
Protocol Buffer คืออะไร?
เจ้านี้คือเครื่องมือที่ Google พัฒนาขึ้นมาเพื่อใช้ในการ serializing structured data เพื่อใช้ในการส่งข้อมูลจาก A ไป B ง่ายๆแบบนั้นแหละ 🙂 ไม่ได้มีไรลึกซึ้งกว่านี้
ควรใช้ Protocol Buffer ตอนไหน?
จริงๆแล้ว ไม่ว่าจะเป็น Json, XML หรือ Protocol Buffer ฒันก็มีข้อดีแตกต่างกันไป ไม่มีอะไรบังคับว่าเราต้องใช้แต่ตัวนี้เท่านั้น โดย
- Json
- readable/editable
- browser support มากๆ
- ใช้กับพวก Ajax นี้เป็นอย่างดีเลยล่ะ
- ไม่จําเป็นต้องรู้ schema มาก่อน ก็สามารถ parse ได้ (เช่น ใช้ JSONarray จัดการลงลง Schema ให้หมดเลย แบบตัวอย่างนี้ Stackoverflow)
- XML
- readable/editable
- standard สําหรับการใช้ SOAP เลย
- tools support ก็เยอะ (xsd,xslt,dom)
- ไม่จําเป็นต้องรู้ schema มาก่อน ก็สามารถ parse ได้
- Protobug
- จุดเด่นสุดๆๆของมันเลยคือเรื่องของ เล็กมากๆๆๆ
- fast processing
- แต่มันต้องการ schema เพื่อใช้การ decode มันออกมา เพราะเราต้องมี message definition ชัดเจนเลย (มันจะใช้ได้ถ้าเรามี .proto file เท่านั้น ลองดูวิธีใช้ด้านล่างจะเข้าใจ)
- unable to read, not human friendly (binary format)
ก็จากที่เห็นมันก็มีดีไปกันคนละอย่าง เพราะฉะนั้นถ้าย้อนกลับไปต้อนแรกที่บอกว่า การส่งข้อมูลหลักๆมี 2 แบบนี้
- การส่งข้อมูลระหว่าง Application ไป Server (public API)
- การส่งข้อมูลกันระหว่าง Server – Server (private API)
ถ้าส่วนตัวจะเลือกใช้ว่า public API ส่วนใหญ่จะเป็นพวก JSON/XML กันไป เพราะมัน Support ทุก browser และ กับพวก Ajax อีกด้วย เวลาส่งข้อมูลกันไปมา แต่พอเป็น private API ก็มาใช้ Protocol Buffer เพื่อเพิ่มความเร็วในการส่งข้อมูล
ส่วนความเร็วในการส่งข้อมูลเพิ่มเท่าไร ลองดูจาก chart ข้างล่างที่มีคนทําไว้แล้ว 🙂 ลองอ่านตัวเต็มได้จาก ref. ข้างล่างน่ะ (แบบ Serialize และ ไม่ Serialize น่ะ)



วิธีใช้ Protocol Buffer?
โดยขั้นตอนการใช้งาน Protocol Buffer ง่ายมากคือ
- เราให้เรา message format ชองเราออกมาในรูปแบบของ .proto file
- แล้วใช้ protocol buffer compiler generate class ออกมาให้เรา แล้วเราก็เอาไปใช้
การ define message format เสร็จแล้วจะมีรูปร่างหน้าตางี้

ทีนี้เวลาเรา compile มันออกมา เราก็จะใช้ protoc ซึ่งเป็น compiler ของมันในการ generate message format เป็น class

ซึ่งใน Protocol Buffers มันรองรับหลายภาษาอยู่เช่น
- C#
- C++
- Java
- Python
- Go
เราก็แค่เปลี่ยน arguments จาก –java_out เป็น –python_out หรือ –csharp_out เป็นต้น
ซึ่งหลังจากการ generate ด้วย protoc แล้วเราจะได้ไฟล์ออกมาเป็นไฟล์ _FileName_Proto.Langage เช่น ตามตัวอย่างข้างบนก็จะเป็น AddressBookProto.Java นั้นเอง แล้วเราก็เอาไปเรียกใช้ตามปกติทั่วไป ของ Builder Pattern
AddressBook.Builder addressBook = AddressBook.newBuilder();

พวกนี้เราสามารถดู Lanaguage Guilde ได้ หรือ เราจะลองเล่นเองได้จากที่นี้เลย (เป็น Java Client น่ะ)
- Surajnayak
- Javatechblog
สรุปปปปปป
ทุกเครื่องมือมีดีคนละอย่างไม่มีไรแตกต่างกัน เพราะฉะนั้นแค่เลือกใช้ให้ถูกเป็นพอ 🙂
ถ้าส่วนตัวจะเลือกใช้ว่า public API ส่วนใหญ่จะเป็นพวก JSON/XML กันไป เพราะมัน Support ทุก browser และ กับพวก Ajax อีกด้วย เวลาส่งข้อมูลกันไปมา แต่พอเป็น private API ก็มาใช้ Protocol Buffer เพื่อเพิ่มความเร็วในการส่งข้อมูล และยิ่งถ้าเป็น distributed system ความเร็วส่งผลค่อนข้างเยอะ ตาม Performance ที่เขียนไว้ข้างบน (อารมณ์ read-write บน ssd กับ hdd อะ ว่าเวลาช้าแล้วส่งผลให้ข้อมูลมันตอบสนองไม่ทัน)