Những Ngày Ấy (Tám)
Những ngày tháng ấy (Tập 8)
Hôm nay công việc bận rộn đến tận khuya, gần như không còn thời gian để tiếp tục viết tiếp phần này. Ban đầu định về nhà nghỉ ngơi luôn, nhưng suy đi tính lại vẫn quyết định viết thêm vài dòng. Kỳ thực việc gì muốn duy trì lâu dài không phải dựa vào hứng thú hay trách nhiệm, mà chính là do thói quen. Tôi không muốn những ghi chép về quá khứ trở thành gánh nặng cho hiện tại, nhưng cũng lo sợ một khi dừng lại sẽ trì hoãn vô thời hạn. Dù nội dung nhiều hay ít, đã có sẵn ý tưởng trong đầu rồi, vẫn nên duy trì thói quen cập nhật hàng ngày để hoàn thành trọn vẹn việc này.
Tôi không nhớ rõ chính xác Dingdang gia nhập nhóm phát triển game vào ngày nào. Vì anh ấy phụ trách mảng server nên tôi không quan tâm nhiều. Có lẽ là vào giai đoạn giữa đến cuối dự án Đại Thoại Tây Du chăng? Anh ấy từng nói do tiến độ server quá chậm nên mới chuyển qua hỗ trợ. Trước đây anh từng chơi mud nên có chút hứng thú, nhưng công việc chủ yếu vẫn tập trung ở tầng底层.
Hệ thống server của Đại Thoại ban đầu được xây dựng trên nền tảng mudOS - một phần mềm mã nguồn mở thường được sử dụng cho các trò chơi mud dạng văn bản. Thông thường khi làm mud văn bản còn có một tầng trung gian gọi là mudlib. Nhắc đến mudlib, hẳn nhiều người nhớ đến nhóm bạn của Ph方Tử năm xưa với tựa game Hiệp Khách Hành - bộ mudlib kinh điển sau này được nhiều game mud Trung Quốc sử dụng. Nghe nói nhóm phát triển Đại Thoại cũng tự viết một bộ mudlib riêng (chỉ nghe nói vậy thôi, hình như Micro từng chia sẻ với tôi họ không dùng mã nguồn của Hiệp Khách Hành, nhưng chuyện cũ quá rồi nên cũng không muốn xác minh nữa). Tuy nhiên tôi không đồng tình với việc vẫn dùng mudOS đến tận bây giờ. Đây là thế kỷ 21 rồi, tại sao còn bám víu vào thứ lỗi thời như vậy? Với lượng code ít ỏi đó, tại sao không mạnh dạn từ bỏ để tự xây dựng từ đầu? Hơn nữa, một khung nền được thiết kế cho vài chục người chơi đồng thời liệu có phù hợp với tựa game online có hàng ngàn người tham gia cùng lúc?
Phải đến Đại Thoại 3, các đồng nghiệp ở NetEase mới dứt bỏ hoàn toàn “cây gậy” mudOS. Lý do chính là vì có quá nhiều logic code được viết bằng LPC - ngôn ngữ kịch bản kiểu C tích hợp sẵn trong mudOS. Cả nhóm đã từng bước cải tiến: trước tiên chuyển giao thức truyền thông văn bản sang dạng nhị phân tiết kiệm băng thông hơn, thêm các đoạn code đặc thù (như lưu trữ dữ liệu định kỳ), tối ưu hóa tầng底层 bằng cách thay thế mô hình mạng select thành epoll, v.v… Quá trình này kéo dài suốt 4-5 năm trời.
Tất nhiên giai đoạn đầu không thể làm được nhiều như vậy. Mọi người vẫn tập trung hoàn thành tiến độ game trước. Dingdang ngồi cạnh tôi, ở góc bàn gần lối đi. Bàn làm việc của anh ấy rất gọn gàng, mỗi ngày chỉ mang theo một chiếc laptop, suốt ngày gõ gõ đánh đánh.
Ký ức về thời gian làm việc trong khu công nghiệp không còn nhiều. Vì mỗi ngày mọi người đều trong tình trạng cúi đầu làm việc, buổi tối cũng không có nhiều người ở lại muộn. Nhưng tôi và Dingdang thường xuyên tăng ca nhiều hơn mức trung bình.
Hình như lúc đó anh ấy đang yêu đương nồng nhiệt. Buổi tối thường xuyên thấy anh ấy ngồi thu mình trong ghế, tay cầm điện thoại thì thầm trò chuyện, mỗi lần đều kéo dài vô tận. Văn phòng về đêm không bật đèn trần, ai cũng thích làm việc trong không gian tối om, chỉ có màn hình sáng trưng và sự yên tĩnh bao trùm.
Thỉnh thoảng cũng có lúc ồn ào náo nhiệt, đó là khi Gu Yue, Ten và Dingdang cùng nhau debug. Tôi không quan tâm đến chi tiết kỹ thuật, chỉ nghe qua cuộc trò chuyện mà cảm thấy có vô số bug sửa không hết. Tuy lo lắng nhưng tôi chẳng thể giúp gì, vì từ đầu đã không tham gia vào phần logic này. Tôi chỉ tập trung làm tốt phần công việc của mình.
Tôi nhớ lúc đó cả client và server đều gặp vấn đề rò rỉ bộ nhớ nghiêm trọng. Tôi đã nghĩ ra nhiều cách để hỗ trợ Gu Yue tìm nguyên nhân phía client. Về phía server, Dingdang cũng đang tìm cách khắc phục. Chúng tôi từng thảo luận về vấn đề này, dần dần chuyển sang nói về bộ quản lý bộ nhớ. Dingdang chia sẻ anh ấy đã tự viết một bộ phân bổ bộ nhớ theo thuật toán bạn bè (Buddy) nhằm giảm thiểu phân mảnh. Bộ quản lý tự phát triển này còn giúp phát hiện nguồn gốc rò rỉ bộ nhớ, đồng thời hy vọng sắp xếp hợp lý cấu trúc bộ nhớ để giảm xác suất server sập do truy cập vượt biên gây ra bởi các bug. Về mặt này tôi là người theo chủ nghĩa hoàn hảo, cho rằng không nên tồn tại bug, nhưng Dingdang lại tỏ ra bất lực. Chúng tôi tránh né chủ đề tranh cãi này và còn nói chuyện nhiều thứ khác nữa, dù giờ đây đều không nhớ rõ nữa rồi.
Phân công công việc phía client dần trở nên rõ ràng. Gu Yue phụ trách phối hợp nhóm server để triển khai logic tương ứng. Tôi đảm nhiệm phần底层, gần như không cần quan tâm đến nội dung game. Ví dụ như cảnh sắc và nhân vật phong phú trong Đại Thoại Tây Du, tôi chỉ lướt qua vài ba cái trong giai đoạn phát triển, toàn dùng để debug engine. Quả Tử phụ trách một phần底层 client không liên quan đến đồ họa, chủ yếu là xử lý phân phát gói mạng. Nhìn lại với con mắt hiện tại, thiết kế này không thực sự tối ưu khi sử dụng kiến trúc đa luồng làm tăng độ phức tạp. Nếu tìm hiểu nguyên nhân, tôi nghĩ là do lúc đó nhóm client thiếu một kiến trúc sư phần mềm giỏi để định hướng tổng thể, mọi người đều làm theo ý mình.
Phần giao diện do Quách Bân phụ trách, còn phần kết nối với IE thì do Quả Tử và một lập trình viên khác tên Hoàng Đông Hải đảm nhiệm. Nói về người sau, đây là một lão làng trong ngành game đã nhiều năm. Trước đây chuyên làm engine 3D, không hiểu sao lại gia nhập NetEase. Trước khi vào công ty, tôi từng nghe vài người bạn trong giới nói anh ấy tính tình không được dễ chịu lắm, ví dụ như thường gõ bàn phàn nàn các họa sĩ không làm theo ý mình. Tuy nhiên sau khi vào NetEase, anh ấy không đảm nhận vai trò chủ chốt nào nên cũng không thấy bộc lộ tính khí. Chỉ làm được một tháng rồi nghỉ, tháng đó thần long thấy đầu không thấy đuôi, thỉnh thoảng xuất hiện ở bàn làm việc rồi lại