https://avatars.githubusercontent.com/u/1217739?size=192

Go กับปัญหาโลกแตก Value หรือ Pointer

ในเวลาที่เขียนภาษา Go มักจะมีคำถามนึงโผล่มาเสมอ คือตกลง func นี้จะใช้ Value หรือ Pointer ดีนะ เดี๋ยวเรามาดูความแตกต่างกัน

ออกแบบ Go struct ด้วยความรู้วิชา Computer Architecture และ Data Structure

ตอนสมัยเรียนวิศวคอมพิวเตอร์มีคำถามนึงโผล่มาเสมอว่าวิชาอย่าง Computer Architecture กับ Data Structure เรียนไปทำไมกันนะ จนกระทั้งจบออกมาได้เขียนภาษา Go ถึงได้เอะใจว่า ทำไม Go ถึงได้มี data type แบบกำหนดขนาด เช่น int8 int16 int32 int64 และอื่น ๆ ทำไมถึงไม่เป็น int หรือ number เฉย ๆ ไปเลยแบบภาษาขี้เกียจอย่าง TypeScript กันนะ จนได้มานั่งอ่านเกี่ยวกับ sizes in Go ถึงได้รู้ว่าเราสามารถใช้ความรู้ในวิชา Computer Architecture และ Data Structure มาช่วยให้เราเขียน Go ออกมาได้ประสิทธิภาพอย่างที่ควรจะเป็น

เมื่อ Go กับ SOLID มาเจอกัน

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

วันนี้เราจะมาแนะนำแนวทางในการพัฒนาซอฟต์แวร์ที่ช่วยให้โค้ดมีคุณภาพดี, ง่ายต่อการดูแลรักษา และสามารถขยายได้ตามความต้องการ แนวทางที่นิยมและเข้าใจง่ายคือ SOLID ซึ่งในตัวอย่างวันนี้จะใช้ภาษา Go เป็นหลัก (เพราะผมถนัด Go ครับ #ฮา)

ลองเทียบประสิทธิภาพของ Apps กับ Database ระหว่าง TCP กับ Unix socket

ปกติแล้วเวลาใช้งาน database ในระดับงานที่ไม่ใหญ่มาก ใน container เราก็มักจะเชื่อมต่อกันด้วย TCP/IP กันถูกไหมครับ แต่รู้หรือไม่ว่าเราสามารถเพิ่มประสิทธิภาพง่าย ๆ ด้วยการลด overhead ของ TCP ออกด้วยการใช้ Unix socket แทนผลจะเป็นยังไง ลองมาดูกันครับ

เปิดเว็บเซอร์วิสสู่ชาวโลกด้วย K3S + Cloudflare Tunnel

หากเรามี home lab หรือ service ที่อยู่ใน k3s/k8s อยากเปิดให้ชาวโลกได้เข้ามาใช้งาน แต่ไม่มี public IP จะทำอย่างไรได้นะ ยิ่งในโลกที่ทุกวันนี้ ISP แจก IP แบบ Carrier-grade NAT หรือเรียกติดปากกันว่า large-scale NAT (LSN) ทำให้จะใช้ DDNS ก็ลำบากอัปเดต IP กันอีก จึงเป็นที่มาของพระเอกในบทความนี้ครับ

Linux Sysctl Tuning

เราสามารถปรับตั้งค่าใน sysctl เพื่อให้ Linux server ทำงานได้ราบลื่นเมื่อมีโหลดมากขึ้น โดยปกติแล้ว Linux ในแต่ละ Distro จะมีการตั้งค่า sysctl มาให้กลางอยู่แล้วเช่นสาย RHEL อาจจะปรับมาเพื่อให้บริการเป็นเครื่องแม่ข่ายเป็นพิเศษ DEB อาจจะปรับมาเพื่อให้ทำงานได้อย่างบาลานซ์ เป็นต้น ซึ่งในบทความนี้ผมจะมาแนะนำค่าที่ผมใช้งานอยู่ใน Production ของงานแต่ละประเภทดังนี้ครับ