ในช่วงที่ผ่านมาได้มีการพูดถึง Go-kit กันพอสมควร
ทั้งในเรื่องของรูปแบบการเขียนที่ดี
ทั้งในเรื่องของชุดเครื่องมือสำหรับการพัฒนา Microservices
บางคนก็บอกว่าเหมือน Netflix เลย
บางคนก็บอกว่าเหมือน Finagle ของ Twitter เลย
แต่ไม่ว่าจะเหมือนอะไรก็ช่างมัน
เป้าหมายของ Go-kit ต้องการให้นักพัฒนาสนใจไปที่ business logic เท่านั้น
ส่วนเรื่องอื่น ๆ ที่ในแต่ละระบบ service ควรมีก็ให้ Go-kit จัดการให้
ยกตัวอย่างความสามารถที่ service ต่าง ๆ ควรมี
- Rate limit การใช้งาน
- Logging
- Metric
- Tracing
- Circuit breaker
- Service discovery
- Serialization
- Authentication
ขั้นตอนที่ 1 ทำการสร้างส่วนการทำงานหลักหรือ business logic ก่อน
สิ่งที่ควรสร้างคือ กำหนด interface ของ service ก่อน จากนั้นจึงลงมือในส่วนของ implementation ต่อไป ตัวอย่างเป็น Counter Service สำหรับการบวกเลขง่าย ๆ แน่นอนว่า ในส่วนนี้ไม่ได้ใช้อะไรเกี่ยวกับ Go-kit เลยดังนี้ [gist id="a4006a1925e1bb2a61c0039318cafb4e" file="service.go"]ขั้นตอนที่ 2 สร้างส่วนของ Endpoint ของ service ที่สร้าง
ในส่วนของ Endpoint นั้น Go-kit ได้เตรียมไว้ให้ใช้งาน สิ่งที่เราต้องกำหนดและสร้างขึ้นมาคือ รูปแบบของ request และ response ของการใช้งาน Counter Service ที่สร้างไว้ รวมไปถึงการจัดการข้อมูลในรูปแบบ JSON ดังนั้นจำเป็นต้องมีการ decode request และ encode response ด้วยดังนี้ [gist id="a4006a1925e1bb2a61c0039318cafb4e" file="counter_endpoint.go"]ขั้นตอนที่ 3 ทำการสร้างส่วน Middleware
ในส่วนนี้จะทำการสร้าง web server ขึ้นมา และสามารถใส่ความสามารถต่าง ๆ เข้าไป ทั้ง endpoint ทั้ง decode/encode ดังนี้ [gist id="a4006a1925e1bb2a61c0039318cafb4e" file="main.go"]ขั้นตอนที่ 4 ทำการทดสอบ service ที่สร้าง
[gist id="a4006a1925e1bb2a61c0039318cafb4e" file="1.txt"]ขั้นตอนที่ 5 ใส่ความสามารถต่าง ๆ เข้าไปยัง Middleware/Endpoint ของเรา
ยกตัวอย่างเช่น การใส่ rate limit เข้าไป เพื่อกำหนดจำนวนการเรียกใช้ service เช่นกำหนดให้เรียกใช้งานต่อนาทีเพียงครั้งเดียวเท่านั้น ดังนี้ [gist id="a4006a1925e1bb2a61c0039318cafb4e" file="main2.go"] จากนั้นทดลองใช้งานจะเจอ error แบบนี้ [gist id="a4006a1925e1bb2a61c0039318cafb4e" file="2.txt"]เพียงเท่านี้เราก็สามารถสร้าง service ด้วย Go-kit ได้แล้วนะ
เหมือนกับการต่อ LEGO เลย แต่ยังมีความสามารถอื่น ๆ อีกทั้ง- Basic Authentication
- Authentication with JWT
- Circuit Breaker
- Metric ซึ่งสนับสนุนทั้ง State, Prometheous, Expvar, Influx เป็นต้น
- Tracing