Hôm rồi tự nhiên hệ thống máy chủ các ứng dụng của Hura Apps gặp vấn đề. Các hàm gọi Shopify API rất chập chờn và tỷ lệ phản hồi rất thấp. Ứng dụng cứ quay mòng mòng. Rồi! Tới công chuyện.
Kiểm tra thử các hàm các API thì vẫn chạy tốt. Kiểm tra trạng thái máy chủ của Shopify cũng như của dịch vụ đang đặt máy chủ của Hura Apps thấy vẫn báo ổn. Là sao??? Thôi khởi động lại máy chủ thử xem sao. Khởi động lại vẫn bị. Mồ hôi bắt đầu túa ra.
Bắt đầu có vài ticket hỗ trợ kỹ thuật với nội dung “it’s not working“. Toang! Toang! Toang thật sự. Tim bắt đầu đập mạnh, chân bắt đầu run.
Kể ra các hàm mình viết chưa tối ưu lắm nhưng cả mấy năm nay chạy cũng có sao đâu. Ngồi mò mò thử tối ưu nhanh lại các hàm mà thấy vẫn không hiệu quả. Trang dashboard vẫn quay mòng mòng. Không ổn! Không ổn 1 tý nào. Trời hôm đó lạnh mà mồ hôi túa ra như tắm.
Thôi chuyển server mới. Quyết định vậy đi. Vậy là mất hơn 2 tiếng để cài đặt các máy chủ mới và di chuyển dữ liệu. Và sau khi chuyển sang thì mọi thứ lại trở nên bình thường. Và đến bây giờ mình vẫn không hiểu là bị vấn đề gì. Rất có khả năng server cũ bóp kết nối với Shopify làm không lấy được dữ liệu.
Vậy là cả hệ thống ứng dụng của Hura Apps bị ảnh hưởng trong khoảng 5h.
Cũng xin chia sẻ thêm về case study này cho mọi người:
Trước kia để tối ưu đó chi phí nên mình “bỏ tất cả trứng vào 1 giỏ” tức là bao nhiêu ứng dụng mình chỉ chạy trên 1 server. Khi cảm giác server quá tải thì… resize hệ thống lên cấp cao hơn. Và đặc biệt là… không có quy trình sao lưu nào mà chỉ thỉnh thoảng vào sao lưu thủ công thôi.
Nhiều lần cũng chớm nghĩ: Lỡ ổ cứng máy chủ nó có vấn đề thì mất sạch dữ liệu đấy nhỉ. Nhưng vì lợi nhuận tối đa nên tặc lưỡi… chắc chả sao đâu Ờ đúng là chả sao thật. May lần này sự cố không mất mát dữ liệu gì nhưng cũng đã cảnh tỉnh và mình quyết định sẽ thiết lập lại quy trình hoạt động của hệ thống và bổ sung thêm quá trình sao lưu dữ liệu.
- Thay vì chạy tất cả ứng dụng trên 1 máy chủ duy nhất thì mình thiết lập từng máy chủ riêng biệt cho các ứng dụng để tránh làm ảnh hưởng hiệu suất cũng như tránh việc… chết chùm.
- Cơ sở dữ liệu (database) thay vì cho chạy ở cục bộ (localhost) thì mình sử dụng máy chủ riêng để lưu trữ và sẽ được gọi remote từ máy chủ chứa source code.
- Thiết lập hệ thống sao lưu tự động các mã nguồn và database định kỳ hàng ngày. Các tập tin sao lưu sẽ được đẩy về 1 máy chủ riêng và bung ra để luôn trong tình trạng sẵn sàng để chạy khi hệ thống chính có sự cố. Chỉ cần trỏ lại IP các tên miền ứng dụng về là chạy.
- Các máy chủ được mình thuê ở nhiều công ty khác nhau cũng để tránh vấn đề… chết chùm.
Dĩ nhiên là nhìn vào mô hình này thì vẫn có lỗ hổng thiếu dữ liệu giữa các lần sao lưu. Thật sự do thời gian quá vội và đang trong mùa cao điểm nên không dám thử nghiệm nhiều nên thôi cứ tạm thế đã. Có thể sau mùa cao điểm sẽ nghiên cứu thêm về mô hình master-slave để đảm bảo uptime 100% chứ nói chung cũng ít tin tưởng vào mấy ông dịch vụ lưu trữ.