Thursday, March 5, 2020

Tốc độ khởi động Client và khóa tướng sẽ được cải thiện nhanh gấp nhiều lần trong tương lai

Trong khoảng hơn sáu tháng tới, chúng tôi sẽ có những thay đổi và cải thiện nhắm đến hạ tầng hệ thống máy chủ của Liên Minh Huyền Thoại. Để làm rõ quá trình này, chúng tôi sẽ chia sẻ với các bạn về hai mục tiêu chính của chúng tôi nhằm cải thiện hiệu suất hoạt động của các máy client, đó chính là: thời gian khởi động của clientthời gian khóa tướng. Trong quá trình này, chúng tôi cũng sẽ đồng thời tìm và khắc phục những lỗi (bug, crash, …) còn tồn tại trên client. Nói cách khác, mục tiêu của chúng tôi là sửa lại client.

png-divider-14

“Riot, khi nào các anh mới nghĩ đến việc sửa chữa lại client đây?”

Đó là câu hỏi mà chúng tôi nhận được rất nhiều. Client không thực sự được đảm bảo ở trạng thái tốt nhất. Có quá nhiều bug, lag (đặc biệt là khi chọn tướng) và rất nhiều những vấn đề khác gây ảnh hưởng xấu tới trải nhiệm của các bạn. Chúng tôi đã từng lên kế hoạch và thực hiện chúng nhằm giải quyết vấn đề này nhưng không thực sự thu được kết quả như mong đợi.

Vậy nên chúng tôi muốn thử một vài phương án khác.

Và thay vì việc nói với các bạn một cách mơ hồ, hôm nay, chúng tôi sẽ chia sẻ một cách chi tiết nhất về mục tiêu cũng như những kế hoạch mà chúng tôi sẽ triển khai trong thời gian sắp tới.

Trước tiên, hãy nói về một số cải tiến hiệu suất gần đây mà chúng tôi đã thực hiện và đào sâu vào những con số cụ thể đóng vai trò là kim chỉ nam cho những kế hoạch trong tương lai của chúng tôi.

Client qua những con số

Cuối năm ngoái, chúng tôi đã thêm một số công cụ vào client cho phép chúng tôi có thể theo dõi các chỉ số về hiệu suất cơ bản như, ví dụ, khoảng thời gian client khởi động hoàn chỉnh và kích hoạt được đầy đủ chức năng (còn gọi là “bootstrap”).

Chúng tôi muốn bootstrap mất dưới 15 giây, ngay cả đối với những người chơi có máy tương đối yếu. Tuy nhiên, chúng tôi thấy rằng, hiện tại, bootstrap có thể mất tới ba hoặc thậm chí bốn lần thời gian đó đối với một số người.

Một điều quan trọng khác mà chúng tôi đã theo dõi là thời gian phản hồi khi khóa tướng. Đây là lượng thời gian mà client gửi lại thông tin về vị tướng mà bạn đã khóa sau khi nhấn vào nút về máy chủ để lưu vào hệ cơ sở dữ liệu. Trong biểu đồ bên dưới, bạn sẽ thấy thời gian phản hồi trung bình cho việc khóa tướng trong bản cập nhập 9.22 (đường màu cam) và trong bản cập nhập 10.2 (đường màu xanh). Thời gian phản hồi được tính bằng mili giây.

Biểu đồ trên cho thấy thời gian phản hồi của việc khóa tướng với những người chơi khác nhau có thể khác nhau lớn đến thế nào. Tất nhiên, hiệu suất của client thay đổi tùy thuộc vào tốc độ máy của bạn. Ví dụ, nếu bạn mất dưới 200ms để khóa, máy của bạn ở phân đoạn 10 và thời gian phản hồi của bạn nhanh hơn 90% người chơi. Tương tự, nếu thời gian phản hồi cho bạn trên 800ms, bạn đang ở phân đoạn 90, điều đó có nghĩa là client của bạn chạy chậm hơn so với 90% người chơi.

Như bạn có thể thấy, thời gian khóa đã tốt hơn rất nhiều trong bản cập nhật 10.2 so với bản 9.22. Lý do lớn cho sự cải tiến là, trong bản cập nhật 9.23, chúng tôi đã cập nhật phiên bản Chromium mà client chạy trên. Nó mang lại cho chúng tôi một số thành quả tương đối lớn, nhưng chúng tôi nghĩ rằng client vẫn còn quá chậm đối với nhiều người.

Để có thể hiểu về những gì chúng tôi muốn nói tới, chúng ta hãy tới với một cái nhìn chi tiết hơn về tốc độ phản hồi của việc khóa tướng theo thời gian cho một vài trong số các nhóm cụ thể đó.

Như bạn có thể thấy, đường màu xanh biểu thị phân đoạn 50 hoặc người chơi ở mức độ trung bình. Độ giảm thiểu của thời gian phản hồi cho người chơi ở mức này là khá tốt. Nhưng bạn có thể thấy rằng ngay từ đầu năm 2020, thời gian phản hồi của việc khóa tướng cho người chơi mức trung bình nằm trong khoảng 300ms. Điều đó không hẳn là quá tệ, nhưng nó vẫn là một sự chậm trễ đáng kể.

Những người chơi phân đoạn 70 (đường màu xanh lá cây) gần đây cũng đã có những cải tiến lớn, nhưng thời gian phản hồi khi khóa tướng của họ đang dao động trong khoảng 450ms. Đó là độ trễ gần nửa giây, chậm hơn rất nhiều so với những gì chúng ta muốn cho bất cứ ai có một cỗ máy tầm trung.

Cuối cùng, hãy nhìn vào phân đoạn 90 (đường màu cam) với sự tệ hại kinh khủng của nó. Theo biểu đồ này, chúng ta có thể nhìn rõ những sự thay đổi là khá đáng kể. Nhưng 800ms là quá cao và đó là ngay cả sau khi đã cập nhật Chromium.

Giờ, hãy nói về những gì chúng tôi sắp thực hiện.

Những mục tiêu mà chúng tôi hướng tới

Dưới đây là hai mục tiêu cụ thể và dài hạn cho vấn đề về client mà chúng tôi đề ra:

–  Chúng tôi muốn giảm thiểu thời gian bootstrap xuống chỉ còn khoảng 15 giây kể cả với những người ở phân đoạn 90. Điều đó có nghĩa là nhanh hơn gấp 3 đến 4 lần so với hiện tại.

–  Chúng tôi muốn thời gian phản hồi khi khóa tướng giảm xuống còn khoảng 100ms cho những người ở phân đoạn 90. Tức là nhanh hơn 8 lần so với bây giờ.

Chúng tôi biết bạn đang nghĩ gì. Những lỗi phát sinh (bug) thì sao? Về những sự cố(crash) hay rò rỉ bộ nhớ?

Tại sao phải ưu tiên hai điều này trước? Lý do là vì, trong quá trình giải quyết thời gian khởi động và thời gian khóa tướng, chúng tôi sẽ dọn dẹp và làm lại các khía cạnh cơ bản nhất định của kiến trúc client. Chúng tôi tin rằng đây sẽ là cơ hội để chúng tôi có thể phát hiện và giải quyết lỗi, rò rỉ bộ nhớ và sự cố trong khi theo đuổi các mục tiêu này.

Các vấn đề như lỗi “màn hình đen” khi lựa chọn tướng và các bảng ngọc không được lưu đúng cách chỉ là ví dụ về những điều chúng tôi dự định sẽ giải quyết như một phần của quy trình này. Nhưng chúng tôi muốn thành thật mà chia sẻ rằng công việc này cần thời gian để có thể giải quyết triệt để. Hiện tại, chúng tôi đang có một kế hoạch trong sáu tháng mà chúng tôi tin rằng sẽ mang lại cho chúng tôi cải thiện có ý nghĩa đối với những mục tiêu này. Nhưng để đạt được các mục tiêu dài hạn mà chúng tôi đề ra thì có lẽ sẽ cần phải tốn thêm nhiều thời gian.

Cách mà chúng tôi thực hiện

Cho đến nay chúng tôi đã xác định được hai vấn đề chính góp phần làm chậm thời gian khởi động. Đầu tiên là kiến trúc plugin của chúng tôi, thứ cho phép chúng tôi chia code của client thành các phần hữu ích. Kiến trúc này đã trở nên cồng kềnh khi chúng tôi đã thêm nhiều chức năng mới cho client. Thứ hai, chúng tôi đang lạm dụng Javascript framework (được gọi là Ember) để điều khiển giao diện người dùng của chúng tôi.

Lúc này, client sử dụng quá nhiều plugin và ứng dụng Ember. Trên thực tế, trong quá trình bootstrap của client, chúng tôi tải vào 41 plugin riêng biệt và 16 ứng dụng. Mỗi trong số này mất từ 100ms đến 800ms mỗi lần để khởi động. Điều đó không tốt chút nào.

Kế hoạch của chúng tôi là có thể tinh gọn lại hệ thống plugins và ứng dụng Ember trong client để nó có thể hoạt động hiệu quả hơn (theo lý thuyết). Trước tiên, chúng tôi sẽ tập trung vào những thứ khởi động trong bootstrap vì chúng tôi tin rằng nó sẽ mang lại cho chúng tôi những kết quả đáng kể nhất.

Giai đoạn 1: BOOTSTRAP

client_user_interface

Hiện nay phải mất 40 giây để đa số các bạn có thể vượt qua bootstrap. Nếu bạn là một trong những người chơi này, bạn sẽ biết rằng đây là một trải nghiệm vô cùng chậm chạp. Điều đó cũng có nghĩa là khi client của bạn gặp sự cố, khởi động lại nó sẽ khó chịu hơn nhiều.

Có rất nhiều tính năng trong client như thông báo, danh sách bạn bè và bộ sưu tập bị ảnh hưởng bởi các plugin và ứng dụng mà sẽ khởi động trong thời gian bootstrap. Vậy nên, dù mục tiêu chính đặt ra là có thể giúp người chơi phân khúc 90 có thời gian bootstrap là 15 giây, chúng tôi hy vọng có thể tìm ra và khắc phục những lỗi còn tồn tại trong client.

Sau một vài tháng tập trung vào bootstrap, chúng tôi sẽ đánh giá mức độ mà chúng tôi đạt được so với mục tiêu đã đề ra và sau đó, có lẽ gần cuối mùa xuân, chúng tôi sẽ chuyển sang tập trung cụ thể vào bước tiếp theo là vấn đề về việc lựa chọn tướng.

Giai đoạn 2: Lựa chọn tướng

lcu_champion selection

Việc chọn tướng tạo ra nhiều plugin và ứng dụng Ember bổ sung. Nói một cách chân thực nhất, hầu hết mọi thứ bạn làm trong khi chọn tướng đều tạo ra các ứng dụng mới. Nhà vô địch giao dịch tạo ra hai trong số chúng. Và việc chọn phép bổ trợ cũng vậy

Khi bạn chơi Liên Minh liên tục trong một thời gian dài, bạn sẽ thấy client sẽ chậm hơn rất nhiều khi những ứng dụng mới được sinh ra sẽ chồng chất lên nhau. Vấn đề xảy ra bởi thực tế là hầu hết các hành động bạn thực hiện trong quá trình chọn tướng đều dựa vào giao tiếp với máy chủ của chúng tôi, tạo thêm độ trễ cho mọi tương tác.

Vấn đề thực cốt lõi trong việc lựa chọn tướng là cách các hệ thống máy chủ của chúng tôi quản lý dữ liệu. Kiến trúc hiện tại của công việc lựa chọn tướng cho phép chúng tôi truyền đi rất nhiều dữ liệu thông qua các hệ thống của chúng tôi. Ví dụ: nếu Riot quyết định vô hiệu hóa một vị tướng trong xếp hạng, vị tướng đó sẽ bị vô hiệu hóa gần như ngay lập tức đối với tất cả người chơi, kể cả những người hiện đang chọn tướng khi vô hiệu hóa được chính thức kích hoạt.

Đó là một hệ thống rất mạnh, nhưng nó đòi hỏi rất nhiều tài nguyên để làm cho nó hoạt động. Và cách mà hệ thống hiện đang được thiết lập, có rất nhiều cổng và nút thắt không cần thiết trong quy trình. Vì vậy, thông thường, hàng tấn dữ liệu được kết xuất lại khi chỉ một đầu vào nhỏ được thay đổi. Điều này dẫn đến hàng tấn thiệt hại cho trải nghiệm của bạn với client.

Để khắc phục điều này, chúng tôi sẽ phải thay đổi căn bản cách thức mà việc lựa chọn tướng hoạt động ở phía máy chủ. Chúng tôi sẽ làm lại cách mà tất cả dữ liệu được truyền từ máy chủ đến client trong quá trình chọn tướng, việc mà sẽ mất một thời gian để có thể hoàn thành.

Chúng tôi có các mục tiêu dài hạn, đầy tham vọng khác có thể khiến việc lựa chọn tướng trở nên hiệu quả hơn nữa, như hợp nhất toàn bộ các client vào một ứng dụng nhúng duy nhất mà không có plugin nào cả. Nhưng trong ngắn hạn, chúng tôi muốn thực hiện đủ các thay đổi để khiến các client có thể chạy chạy với mục tiêu đã đề ra, điều mà chúng tôi đã chia sẻ ở trên.

Sẽ khó có thể biết được rằng chúng tôi sẽ đạt được thành quả đến mức nào sau sáu tháng. Nhưng tôi có thể chắc chắn rằng chúng tôi sẽ tạo nên những cải thiện đáng kể dành cho các bạn và vạch ra những kế hoạch tiếp theo.

Những bước tiếp theo

Chúng tôi sẽ kiểm tra vài tháng một về tiến trình của chúng tôi, sẽ bao gồm các số liệu về hiệu suất và bất kỳ điều chỉnh nào theo dòng thời gian của dự án.

Hy vọng chúng tôi sẽ thực hiện được mục tiêu này và cám ơn các bạn đã luôn đồng hành với Liên Minh Huyền Thoại. Chúng ta sẽ sớm có thể trò chuyện tiếp với nhau về chủ đề này.

Theo euw.leagueoflegends

No comments:

Post a Comment