Triển Khai Driver MongoDB Bằng Lua
Gần đây, theo lời đề nghị của đồng nghiệp, tôi bắt đầu tìm hiểu về MongoDB. Hai năm trước, một người bạn từ Turing Press đã tặng tôi cuốn “Cẩm nang MongoDB toàn diện”. Tôi đã đọc xong trong hai đêm và kiến thức của tôi về MongoDB đều bắt nguồn từ quyển sách này. Dự án hợp tác gần đây nhất mà chúng tôi thực hiện có tên “Kiếm Bá” cũng sử dụng MongoDB, trong giai đoạn đóng cửa thử nghiệm vừa qua hệ thống cơ sở dữ liệu đã gặp nhiều sự cố. Bạn Tốc Hành đã hỗ trợ các đồng nghiệp ở Thành Đô trong việc tinh chỉnh hiệu năng, thực hiện rất nhiều công việc quan trọng. Giờ đây trong văn phòng, tôi thường xuyên nghe thấy các cuộc thảo luận về MongoDB.
Trình Điều Khiển MongoDB Bằng Lua
Thực ra tôi biết đã có một số thư viện Lua cho MongoDB như cái này. Tuy nhiên, tôi không muốn chỉ đơn thuần là bao bọc lấy API C++ vốn có, mà muốn xây dựng từ tầng giao thức trở lên để sau này dễ dàng chuyển đổi sang mô hình bất đồng bộ và tích hợp mượt mà vào hệ sinh thái Skynet.
Một phương án thuần Lua khác cũng từng được triển khai theo hướng bắt tay trực tiếp với giao thức. Nhưng giải pháp này tồn tại vài điểm hạn chế: thứ nhất là phụ thuộc vào thư viện lua-socket, thứ hai hiệu năng không thể bằng được với các thư viện viết bằng C, thứ ba là thiếu sót nhiều tính năng quan trọng.
Vấn Đề Đăng Nhập Người Dùng Trong Khung Skynet
Hôm nay tôi nhận được một email từ một người bạn đang vận hành một game server sử dụng khung skynet. Khi số lượng người chơi đạt đến mức ~1000, họ gặp phải hiện tượng kết nối mới bị nghẽn tại các thành phần gate hoặc watchdog, dẫn đến tình trạng người dùng không thể đăng nhập được.
Theo diễn giải của họ: “Hệ thống server của chúng tôi sử dụng kiến trúc gate-watchdog-agent. Khi số lượng người chơi tiếp cận mốc 1000, nhiều kết nối socket mới bị treo tại tầng gate hoặc watchdog. Nguyên nhân được xác định là do phía client tích hợp cơ chế timeout khi đăng nhập - nếu vượt quá thời gian chờ cho phép, client sẽ ngắt kết nối và thực hiện reconnect để bắt đầu quy trình đăng nhập lại từ đầu. Vấn đề nằm ở chỗ watchdog chỉ tạo service agent khi nhận được thông điệp đầu tiên từ client. Điều này dẫn đến việc hệ thống phải chịu tải nặng do liên tục tạo/destroy agent, trong khi chi phí hệ thống để khởi tạo agent lại rất cao. Dù sau đó chúng tôi đã loại bỏ cơ chế timeout phía client và tối ưu một số logic server, tình trạng trễ vẫn xảy ra vào giờ cao điểm.”
无标题
Đã viết một thư viện lua bson
Đã viết một thư viện lua bson.
Tôi đã phát triển một thư viện bson cho ngôn ngữ Lua. Trên trang web chính thức của định dạng bson có cung cấp một thư viện bson được viết thuần túy bằng Lua, nhưng phiên bản đó có nhiều chức năng còn thiếu sót. Vì mục tiêu của tôi là xây dựng một trình điều khiển MongoDB cho Lua nên tôi đã quyết định dùng C để phát triển một thư viện bson hoàn thiện hơn.
Danh Sách Liên Kết XOR – Bí Mật Của Cấu Trúc Dữ Liệu Tiết Kiệm Bộ Nhớ
Hôm trước, một người bạn tên Nam đang xây dựng hàng đợi thông điệp bằng cấu trúc danh sách liên kết. Dù gọi là danh sách, nhưng yêu cầu không đòi hỏi thao tác chèn/xóa nút ở giữa – chỉ cần đảm bảo nguyên tắc FIFO (vào trước – ra trước). Để tối ưu hiệu suất, cuối cùng bạn ấy đã chọn cài đặt danh sách liên kết kép thông thường.