สิ่งที่คนเขียน Backend (ไม่ว่าจะ web server side ทั่วไปหรือจะทำ API) มือใหม่มักพลาดคือลืมไปว่าเวลาโค้ดเราต้องทำงานจริงๆ มันไม่ได้ถูกรันไว้แค่ 1 node มันจะถูกรันไว้หลายๆ node แล้วแบ่งภาระกันโดยมี Load Balancer ช่วยกระจาย request ให้
พอลืมนึกถึงตรงนี้ จะทำให้บางครั้งเราออกแบบพลาด เช่น อยากทำ cache บางอย่างเพื่อจะได้ทำงานได้เร็วขึ้น ก็จะไปจำไว้ใน global memory สักที่
แม้จะเขียนจัดการ lock อย่างดีไม่ให้แต่ละ thread แย่งกันใช้งาน แต่พอลืมนึงว่ามันรันหลาย node พร้อมกัน ก็จะลืมคิดว่าแล้วจะ reset cache หลายเครื่องพร้อมกันยังไงไปนั่นเอง
จริงๆแล้วก็ทำได้หลายท่าในการ clear cache หลายๆ node แต่ถ้าเรานึกเรื่องนี้ไว้แต่แรก อาจจะไปตกที่ ไม่ต้องเขียนเรื่อง cache ใน memory เองสิ ไปใช้ service อื่นเช่นเก็บลง Redis อะไรแบบนี้ที่มันเขียนจัดการ cluster หลายๆ node ของ Redis เอาไว้แล้ว เป็นต้น
Top comments (1)
ผมเคยงงว่าจะใช้ redis ทำไม โปรแกรทก็รันเครื่องเดียว ปรากฎว่าเครื่องเดียวแต่มีหลาย process 🤦