[Góc engineering] Câu chuyện về đợt "cúp điện" lâu nhất lịch sử


posted on Dec. 9, 2021, 4:49 p.m.

Thông báo lỗi 502 Bad Gateway đã trở thành một mảnh ghép thân thương của trang web LQDOJ trong lòng người dùng nhờ lịch bảo trì dày đặc và đầy bất ngờ của nhà cung cấp máy chủ ảo. Các bạn có thể bắt gặp lỗi 502 khi đang tham gia contest, khi chat chit, viết blog và thậm chí là khi ... chỉ vừa mới đăng nhập xong. Dù mật độ lỗi xảy ra khá thường xuyên nhưng team dev web cũng luôn xử lý chúng rất nhanh gọn để không làm gián đoạn trải nghiệm của mọi người. Tuy nhiên, may mắn đã không mỉm cười với chúng mình vào sự cố ngày thứ bảy vừa rồi (04/12) nữa. Diễn biến của "tuần cuối năm u ám" này (được chính thức đặt tên để kỷ niệm một bài học nhớ đời) có thể được tóm tắt như sau:

  • Vào tầm 16h ngày thứ bảy, thầy Small thông báo cho toàn thể các admin về việc LQDOJ lại bị lỗi 502 sau khi bảo trì máy chủ và việc restart các service không có tác dụng.
  • 17h cùng ngày, server được reboot và tình hình vẫn không tươi sáng hơn. CaiWinDao thử khởi động development server bằng lệnh kinh điển python manage.py runserver và nhận được thông báo lỗi khô khốc: "Table 'dmoj.django_migrations' doesn't exist in engine". Đọc lướt thấy keyword migrations đã biết ngay lành ít dữ nhiều, CaiWinDao đã xác định rằng web không thể có cơ may sống lại trước khi cuom1999 thức giấc.
  • 20h (ở Mỹ đang là buổi sáng), cuom1999 sau bài thể dục buổi sáng đã gấp rút chạy lệnh sao lưu dữ liệu ... ./backup.sh, tuy nhiên, một thông báo lỗi nghiệt ngã đã chờ sẵn: mysqldump: Got error: 1932: "Table 'dmoj.auth_group' doesn't exist in engine" when using LOCK TABLES. Định mệnh đã rõ: Database đã bị crash, MariaDB chính thức đình công. cuom1999 tạm gác việc debug để lên trường dự thi Putnam.
  • Sau hơn một ngày tra cứu, một giải pháp khả thi xuất hiện là sử dụng mysqlfrm để restore database từ các mảnh .idb.frm. Nghe có vẻ đơn giản nhưng việc thực thi đã gặp rất nhiều rào cản nên người dùng vẫn phải chờ đợi mỏn mỏi :(
  • Vào thứ hai tuần sau, team hạ tầng server bắt đầu tiến hành tạo một bản sao của web từ mã nguồn trên Github và dữ liệu cào được vào ngày 4/12. cuom1999 đã tham gia hỗ trợ hiệu chỉnh các table trong database để bản sao này có thể chạy trơn tru.
  • Trưa ngày hôm nay, thứ năm (09/12), LQDOJ đã chính thức "hồi sinh" dù vẫn còn tồn tại một số lỗi nhỏ trong đồng bộ dữ liệu. Toàn thể ban quản trị đều thở phào nhẹ nhõm!

Chúng mình thấu hiểu sâu sắc rằng LQDOJ đóng một vai trò không nhỏ trong quá trình học tập và tự rèn luyện của các bạn. Chúng mình cũng xin chân thành cáo lỗi về sự cố vừa qua. Kể từ ngày hôm nay, server sẽ chính thức thực hiện việc sao lưu (backup) vào mỗi ngày để việc khắc phục các sự cố (nếu xảy ra trong tương lai) được nhanh nhất có thể. Xin cảm ơn sự đồng hành và ủng hộ của tất cả thầy cô và các bạn học sinh!


Comments


  • 2
    Solra123  commented on 9:05 p.m. 14 dec, 2021

    Legendary Admin. Chúc mừng các ad!


  • 2
    thich_viet_editor  commented on 4:07 p.m. 11 dec, 2021

    admin ơi, hiện tại nick chính của em là N7hoatt vẫn đang bị lỗi không đăng nhập được, các anh có thể giúp em không


    • 3
      cuom1999  commented on 10:28 a.m. 12 dec, 2021

      Cảm ơn em. Anh đã sửa lại rồi, kiểm tra lại nhé.


    • 1
      tkluannguyendang  commented on 4:27 p.m. 11 dec, 2021 edited

      Uả mình mới thấy N7hoatt online mà :))


  • 16
    Toilaaibanbietko7A4  commented on 10:11 a.m. 11 dec, 2021

    Thật sự chúng ta cần dành cho dàn admin của chúng ta một chục tràn pháo tay và những lời cảm ơn nồng nhiệt nhất vì những nỗ lực của họ nhằm khôi phục web dành cho việc luyện coding của chúng ta cho tương lai sau này. ^^

    P/S: Sao nghe câu chuyện này thấy giống một cuộc chiến giành giật lại sự sống thế nhờ :D Ai thấy đúng nhớ upvote, thấy sai nhớ reply lại số 0 chứ đừng downvote tui nhé :D


    • 2
      huyhau6a2  commented on 2:49 p.m. 11 dec, 2021

      vỗ tay vỗ tay!!!


  • 4
    khoa2008  commented on 8:32 p.m. 10 dec, 2021

    Một câu chuyện thật thú zị :)

    Ngồi đợi mòn mỏi suốt mấy ngày mới đc code lại


  • 3
    tkquanbuianh  commented on 2:39 p.m. 10 dec, 2021 edited

    Hôm bữa em làm xong bài mà đợi cả tuần mòn mỏi mới được


  • -2
    khanhhunghack  commented on 9:48 a.m. 10 dec, 2021

    hơn 1 tuần cúp điện không làm code giờ quên sạch luôn rồi 🥴😵😵🥴


  • 7
    mimibetty  commented on 8:26 a.m. 10 dec, 2021

    một câu chuyện cảm động. Thật sự ngưỡng mộ sự nỗ lực cố gắng của dàn admin đẹp trai


  • 6
    n2anndk  commented on 7:58 p.m. 9 dec, 2021

    may quá hồi sinh r :)


  • 5
    edatnvt  commented on 7:44 p.m. 9 dec, 2021

    team BQT quá căng o.o


  • 5
    Lê_Gia_Khánh  commented on 6:41 p.m. 9 dec, 2021

    xịn


  • 13
    nvatuan  commented on 6:37 p.m. 9 dec, 2021

    Một Like cho team hệ thống hey hey


    • 2
      An09855  commented on 7:41 a.m. 13 dec, 2021

      yey mất dữ liệu yey ^^


      • 1
        nvatuan  commented on 3:00 p.m. 13 dec, 2021

        Mình đẳng cấp thì xây dựng lại đế chế bằng hai bàn tay trắng cũng được em, dăm ba cái rating


    • 3
      Toilaaibanbietko7A4  commented on 10:56 a.m. 11 dec, 2021

      Mười Like cho team hệ thống đi chứ một like ít qá a ưi ^^


  • 5
    stack_queue_4977  commented on 6:15 p.m. 9 dec, 2021

    ủa hôm nay (9/12) là thứ năm mà ta :?


    • 7
      CaiWinDao  commented on 6:18 p.m. 9 dec, 2021

      Hehe cảm ơn bạn đã nhắc. Mình vừa sửa lại.


  • 8
    jalsol  commented on 6:09 p.m. 9 dec, 2021

    chỉ backup mỗi ngày có phải là phương án tốt không ạ? em nghĩ là nên giữ lại backup của một khoảng thời gian (ví dụ, khoảng 2 tuần gần nhất hay 1 tháng gần nhất chẳng hạn), lâu hơn thì xóa đi để giải phóng dung lượng ấy ạ


    • 6
      CaiWinDao  commented on 6:23 p.m. 9 dec, 2021

      Cảm ơn bạn. Bọn mình cũng sẽ triển khai như vậy.


      • 6
        dnkhanh01  commented on 6:59 p.m. 9 dec, 2021

        Sao lưu thì anh nhở để snapshot mỗi tháng trên Google Drive hay Onedrive chứ hư đĩa là mất hết :).


        • 3
          cuom1999  commented on 10:30 a.m. 12 dec, 2021

          Uh trước giờ bọn anh cũng lưu trên GG Drive, chỉ có điều không phải mỗi ngày (do lười code :v)