Bài Giảng - nói dối e blog

Bài Giảng

Nếu mọi việc diễn ra đúng kế hoạch, hiện tại tôi đang chuẩn bị cho bài phát biểu tại Hội nghị Phát triển Phần mềm 2.0 năm 2007 với chủ đề “Kiến trúc máy chủ game online quy mô lớn”. Chỉ còn vài phút nữa là tôi sẽ bước lên sân khấu.

Bài thuyết trình này thực chất là phần giới thiệu về thiết kế hệ thống engine máy chủ game online mà nhóm chúng tôi đã phát triển trong hai năm qua. Quý vị có thể tải về bản trình chiếu (PPT) tại đây.

Ngày 4 tháng 12, cuối cùng đã trở về sau chuyến công tác. Xin phép được giải thích rõ thêm một số điểm trong PPT mà tôi đã đề cập trong buổi thuyết trình:

  1. Chuẩn hóa dữ liệu thành dạng văn bản
    Chúng tôi thậm chí còn chuyển đổi toàn bộ dữ liệu mô hình 3D sang định dạng văn bản thuần túy. Trong thực tế, phương pháp này mang lại nhiều lợi ích đáng kể. Để bù đắp cho sự hao hụt hiệu năng, chúng tôi phát triển công cụ dòng lệnh chuyên dụng để chuyển đổi định dạng. Điều này tương tự như việc sử dụng ngôn ngữ biên dịch - các lập trình viên làm việc với mã nguồn văn bản, nhưng hệ thống vận hành bằng chương trình nhị phân. Toàn bộ dữ liệu trong kho lưu trữ SVN đều được giữ ở dạng văn bản, và trước khi triển khai phải qua quá trình “biên dịch” bằng hệ thống Makefile cùng các công cụ hỗ trợ. Những thành phần không yêu cầu hiệu năng cao sẽ được xử lý trực tiếp ở dạng văn bản.

  2. Giảm thiểu điểm lỗi đơn lẻ (Single Point of Failure)
    Đầu tiên, yêu cầu nghiệp vụ của chúng tôi cho phép tồn tại một số điểm lỗi đơn lẻ. Thứ hai, việc phân tách một điểm đơn thành hai không nhất thiết làm tăng nguy cơ sự cố. Vì thực tế, khi thực hiện hai nhiệm vụ song song, bất kỳ lỗi nào trong hai nhiệm vụ đều gây ra sự cố tương đương với việc xử lý tập trung. Điều này hoàn toàn không liên quan đến việc phân chia tiến trình hay phụ thuộc vào phần cứng/mạng. Ngược lại, khi chia nhỏ nhiệm vụ khiến mỗi tiến trình trở nên đơn giản hơn, tỷ lệ lỗi giảm xuống và khả năng chịu tải tăng lên. Trong tương lai nếu cần triển khai cơ chế dự phòng kép cho bất kỳ thành phần nào, nhờ vào thiết kế đơn giản hóa, việc nâng cấp hệ thống sẽ dễ dàng hơn nhiều.

  3. Mô hình đa tiến trình đơn luồng (Single-threaded Multi-process)
    Về bản chất, khi không xét đến yếu tố hiệu năng, mô hình đa tiến trình hoàn toàn có thể thay thế mô hình đa luồng, đồng thời mang lại độ ổn định cao hơn. Trong mô hình đa luồng, chi phí truyền dữ liệu giữa các tiến trình bị chuyển hóa thành chi phí quản lý khóa (lock overhead). Tỷ lệ chi phí giữa hai phương pháp này có thể thay đổi theo thời gian. Thiết kế của tôi tập trung xây dựng hệ thống ống dẫn (pipeline) dài hơn để tăng khả năng xử lý đồng thời vẫn đảm bảo thời gian phản hồi chấp nhận được. Bằng cách hạn chế tối đa sự tương tác giữa các tiến trình, dữ liệu sẽ di chuyển liên tục qua các giai đoạn xử lý, tránh tình trạng nghẽn cổ chai trong một tiến trình đơn lẻ.

  4. Tính tương thích nhị phân đa nền tảng
    Chúng tôi không hướng đến việc tương thích giữa các tập lệnh CPU khác nhau. Điều này hoàn toàn có thể thực hiện được chỉ bằng cách định nghĩa một định dạng nhị phân module mã nguồn riêng biệt. Đặc điểm này giúp đơn giản hóa đáng kể quá trình triển khai và bảo trì hệ thống trên các nền tảng phần mềm khác nhau.

Bài thuyết trình này không chỉ là chia sẻ kinh nghiệm kỹ thuật, mà còn là minh chứng cho quá trình đổi mới sáng tạo trong việc xây dựng hệ thống game online quy mô lớn. Hy vọng những chia sẻ này sẽ mang lại giá trị thực tiễn cho cộng đồng phát triển phần mềm.

0%