0
0
Lập trình
NM

Cách Tôi Tạo Ra Sttrace Trong 1 Tuần

Đăng vào 5 ngày trước

• 6 phút đọc

Giới thiệu

Trong một tuần trước khi phỏng vấn tại Meta với vai trò Kỹ sư Sản xuất, tôi đã tìm kiếm một trang web để thực hành kỹ năng gỡ lỗi và SRE của mình. Meta có những vòng phỏng vấn gỡ lỗi nơi bạn phải phân tích từng bước một tình huống thực tế như máy chủ bị hỏng hoặc dịch vụ không phản hồi.

Không giống như các vòng phỏng vấn lập trình thông thường, nơi bạn có thể đơn giản giải quyết 50 câu hỏi DSA/algo hàng đầu và vượt qua phỏng vấn, các vòng phỏng vấn gỡ lỗi không có nhiều trang web giúp bạn xử lý các sự cố sản xuất mô phỏng.

Vì vậy, giống như bất kỳ lập trình viên nào có nhiều thời gian rảnh, tôi quyết định tự tạo ra một trang web như vậy :)

Khởi Đầu Với Một Trang Web Cơ Bản

Dự án bắt đầu với một trang web rất cơ bản: một terminal đơn giản được mô phỏng trong trình duyệt bằng thư viện xterm. Dữ liệu đầu vào và đầu ra được gửi qua kết nối socket đến máy chủ backend, sau đó được chuyển đến một container đang chạy thông qua kết nối SSH. Container có cấu trúc rất cơ bản:

  • entrypoint.sh thiết lập sshd và các tiến trình cần thiết khác
  • init.sh khởi tạo trạng thái cần thiết cho bài toán
  • submit.sh được kích hoạt sau khi người dùng nhấp vào nút gửi trong trình duyệt. Nó kiểm tra trạng thái hiện tại của thư mục người dùng và in ra success hoặc failure trên luồng stdout.

Lập Kế Hoạch Quy Mô

Khi đã có xương sống của ứng dụng, tôi cần nghĩ về khả năng mở rộng. Dù rằng đây không phải là một ChatGPT tiếp nhận hàng triệu người dùng trong một tuần, nhưng tôi vẫn cần lên kế hoạch cho khả năng mở rộng theo chiều ngang trong trường hợp nó phát triển. Backend monolith Node.js có thể xử lý lưu lượng lớn, vì vậy tôi không lo lắng về điều đó. Tôi cũng tin tưởng vào Postgres về hiệu suất vì hầu hết các truy vấn cần thiết đều là các truy vấn đơn giản với ít hoặc không có join. Phần duy nhất có thể trở thành nút thắt cổ chai là các container đang chạy cho mỗi bài toán.

Tôi cần phân bổ những container này trên nhiều node để có hiệu suất và độ tin cậy tốt hơn. Tôi đã chọn kiến trúc master-slave cơ bản. Mỗi worker node, khi khởi động, đăng ký với một dịch vụ master, trong trường hợp này là backend monolith. Master sau đó thực hiện kiểm tra sức khỏe cơ bản trên worker node và đưa nó vào hàng đợi ưu tiên. Tôi sử dụng hàng đợi ưu tiên để tìm worker node tốt nhất cho yêu cầu kết nối đến và cũng hoạt động như một bộ cân bằng tải.

Thách Thức Tìm Kiếm Container Manager

Một thách thức khác là tìm kiếm quản lý container phù hợp. Tôi cần một quản lý container nhẹ với API để khởi động và dừng các container. Tôi đã không tìm thấy một cái nào, vì vậy như bất kỳ kỹ sư thất nghiệp nào có nhiều thời gian rảnh, tôi quyết định tự tạo một cái. Một wrapper API Flask cơ bản quanh client Docker mất chưa đến một giờ.

Tạo Ra Trang Web Hoạt Động

Khi đã có tất cả các phần cơ bản, tôi đã ghép lại một trang web hoạt động. Tiếp theo là việc lưu trữ. Nhìn vào các tùy chọn của mình, tôi nhận ra rằng tôi không có đủ tiền để đầu tư vào các máy chủ EC2, nhưng tôi có hai máy Dell Optiplex mạnh mẽ trong homelab của tôi, cả hai đều chạy Linux. Với một vài script bash, homelab đã sẵn sàng để chạy trang web. Tôi đã có một IP động và khởi động một máy chủ t2.micro, chuyển hướng tất cả lưu lượng qua một tunnel SSH đến homelab của tôi, và sttrace.com đã hoạt động.

Tất cả quá trình này mất khoảng một tuần để xây dựng, và tôi đã có khoảng 40 người dùng trong hai ngày đầu tiên sau khi ra mắt.

Bước Tiếp Theo Là Gì?

Tôi cố gắng tạo ít nhất một bài toán mỗi ngày, nhưng trang web vẫn chưa hoàn thiện. Ý tưởng đằng sau sttrace.com là cầu nối giữa nhà tuyển dụng và lập trình viên. Bước tiếp theo là xây dựng một bảng việc làm nội bộ nơi nhà tuyển dụng có thể đăng các công việc. Tôi cũng muốn trang web này trở thành nơi mà lập trình viên đến để nâng cao kỹ năng thay vì chỉ giải quyết các bài toán cho phỏng vấn xin việc.

Tôi mới chỉ bắt đầu, và còn nhiều việc phải làm. Nếu bạn là một lập trình viên đang muốn nâng cao kỹ năng gỡ lỗi của mình hoặc một nhà tuyển dụng quan tâm đến những đánh giá có ý nghĩa, hãy truy cập sttrace.com và tham gia vào hành trình này. Ý kiến và sự tham gia của bạn có thể giúp hình thành nó thành một nền tảng quý giá cho tất cả mọi người.

Các Thực Hành Tốt Nhất

  • Lập kế hoạch trước: Khi bắt đầu một dự án, hãy chắc chắn rằng bạn đã có kế hoạch rõ ràng về cách triển khai và mở rộng ứng dụng.
  • Kiểm tra sức khỏe thường xuyên: Đảm bảo hệ thống của bạn luôn trong tình trạng tốt bằng cách triển khai các kiểm tra sức khỏe định kỳ cho các node worker.
  • Tối ưu hóa truy vấn cơ sở dữ liệu: Sử dụng chỉ số và tối ưu hóa truy vấn để cải thiện hiệu suất.

Những Cạm Bẫy Thường Gặp

  • Quản lý tài nguyên: Không phân bổ đủ tài nguyên cho các container có thể dẫn đến hiệu suất kém.
  • Thiếu khả năng mở rộng: Không chuẩn bị cho khả năng mở rộng có thể dẫn đến gián đoạn dịch vụ khi lượng truy cập tăng.

Mẹo Hiệu Suất

  • Sử dụng bộ cân bằng tải: Đảm bảo rằng bạn phân phối lưu lượng đều giữa các node.
  • Giảm thiểu độ trễ: Sử dụng các công nghệ như Redis để lưu trữ tạm thời và giảm thiểu độ trễ khi truy cập dữ liệu.

Xử Lý Sự Cố

  • Container không khởi động: Kiểm tra logs để xác định nguyên nhân và khởi động lại container khi cần thiết.
  • Kết nối không thành công: Đảm bảo rằng các cổng đã được mở và các quy tắc tường lửa không chặn lưu lượng.

Câu Hỏi Thường Gặp

Sttrace có miễn phí không?

Sttrace hiện tại là miễn phí cho người dùng.

Tôi có thể gửi phản hồi không?

Có, chúng tôi rất khuyến khích người dùng gửi phản hồi để cải thiện nền tảng.

Kết luận

Với sttrace, tôi hy vọng sẽ tạo ra một cộng đồng giúp lập trình viên phát triển kỹ năng gỡ lỗi và kết nối với các nhà tuyển dụng. Hãy tham gia cùng tôi trên hành trình này và giúp xây dựng một nền tảng hữu ích cho tất cả.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào