[2018/12/03]
เว็บไซต์ไม่สามารถใช้งานได้เป็นระยะระหว่างวันที่ 2018/12/02 เวลา 9:30 จนถึงวันที่ 2018/12/03 เวลา 0:15
ซึ่งเป็นผลสืบเนื่องจากการย้ายเซิฟเวอร์จาก DigitalOcean ไปยัง Google Cloud
[Post-mortem]
1. การปรับปรุงใน >>23 มีการคาดการณ์ spec ของเซิฟเวอร์ผิดพลาด โดยใช้เซิฟเวอร์ประเภท f1-micro
ใน Google Cloud ซึ่งมี quota การใช้งานเพียง 0.5 CPU (shared core) และ RAM เพียง 0.6 GB
ซึ่งไม่สามารถตอบสนอง request ได้เร็วเพียงพอ จึงมีปัญหา 500 Service Unavailable ในช่วง 9:30 - 12:00
2. เวลาในเซิฟเวอร์ไม่ตรงกับเวลาจริง เนื่องจากทางเว็บฯ ในตอนแรกตั้งใจจะใช้ Clock Skew Daemon
ที่ Google Cloud ติดตั้งไว้ให้ แต่พบว่า Clock Skew Daemon ไม่สามารถปรับเวลาได้รวดเร็วพอ
โดยจะค่อยๆ ปรับเวลาวินาทีละ 5ms - 10ms ซึ่งนาฬิกาของเซิฟเวอร์ช้ากว่าเวลาจริงประมาณ 20 นาที
จะใช้เวลาในการปรับถึง 66 ชั่วโมง ทำให้ทางเว็บตัดสินใจเปลี่ยนไปใช้ OpenNTPD
ซึ่งเป็นโปรแกรมสำหรับปรับเวลาที่ใช้ดั้งเดิมในขณะที่เซิฟเวอร์ยังอยู่ที่ DigitalOcean
3. เว็บไซต์ฯ พยายามปรับ topology ของเซิฟเวอร์ให้สามารถรันได้อยู่ในงบประมาณ $50 ต่อเดือน
ในการปรับปรุงช่วง 12:00 ทางเว็บได้ปรับไปใช้เซิฟเวอร์ขนาด n1-standard-1 ซึ่งมี 1 CPU (dedicated core)
และ RAM 3.75 GB ซึ่งทำให้รายจ่ายในการรันเซิฟเวอร์สูงถึง $96.24 (บังคับจ่าย 3 ปี) ที่ toplogy เดิม
ซึ่งประกอบด้วย load balancer, database และ application server 3 ตัว
เพื่อเป็นการปรับปรุงให้เซิฟเวอร์สามารถรันได้อย่างราบลื่น และอยู่ในงบประมาณ $50 ต่อเดือน
เว็บไซต์ฯ ได้ทำการเปลี่ยนโปรแกรมสำหรับรันเว็บเซิฟเวอร์จาก Waitress ไปเป็น Gunicorn
เพื่อที่จะสามารถรันหลาย process ได้บน Port เดียว และทำการลด application server ลงเป็น 1 ตัว
โดยรัน Gunicorn เป็น 3 processes ซึ่งคาดว่าจะสามารถรับ traffic ได้ตามเดิม
(เนื่องจาก 1 CPU core ใน Google Cloud เป็น Skylake และไม่แชร์กับผู้อื่น)
อีกทั้งยังทำการลด load balancer ไปใช้ f1-micro หลังจากทำการ monitor ตลอดทั้งวัน
โดยพบว่า load balancer ใช้ resource ทั้ง CPU และ RAM น้อยมาก ทำให้คาดว่าน่าจะรันอยู่บน f1-micro ได้
โดยสรุปแล้ว เซิฟเวอร์ของ Fanboi Channel ในขณะนี้ มีโครงสร้างดังต่อไปนี้
1x f1-micro สำหรับ load balancer (Hitch และ Varnish) $4.70 ต่อเดือน ไม่ติดสัญญา
1x n1-standard-1 สำหรับ db (PostgreSQL และ Redis) $19.25 ต่อเดือน สัญญา 3 ปี
1x n1-standard-1 สำหรับ app (Gunicorn และ Celery) $19.25 ต่อเดือน สัญญา 3 ปี
รวมแล้ว $43.2 ต่อเดือน ซึ่งอยู่ในงบที่ตั้งไว้