How a team of just two engineers tackled real-time persisted events for hundreds of millions of players Với chỉ có hai kỹ sư, Supercell đã thực hiện nhiệm vụ khó khăn của việc phát triển hệ thống tài khoản cơ bản của họ thành một nền tảng xã hội kết nối hàng trăm triệu người chơi. quản lý tài khoản, yêu cầu bạn bè, chương trình khuyến mãi trò chơi chéo, trò chuyện, theo dõi sự hiện diện của người chơi và thành lập nhóm - tất cả điều này phải hoạt động trên năm trò chơi chính của họ. Kỹ sư máy chủ của Supercell, Edvard Fagerholm, gần đây đã chia sẻ cách nhóm mạnh mẽ của họ gồm hai người đã giải quyết nhiệm vụ này.Đọc tiếp để tìm hiểu làm thế nào họ đã biến một công cụ quản lý tài khoản đơn giản thành một cơ sở hạ tầng mạng xã hội toàn diện giữa các trò chơi mà ưu tiên cả đơn giản hoạt động và hiệu suất cao. Lưu ý: Nếu bạn thích nghe về các thành tựu kỹ thuật như thế này, hãy tham gia với chúng tôi tại Monster Scale Summit (miễn phí + ảo). Các kỹ sư từ Disney+ / Hulu, Slack, Canva, Uber, Salesforce, Atlassian và nhiều hơn nữa sẽ chia sẻ các chiến lược và nghiên cứu trường hợp. của s. ghi chú Nếu bạn thích nghe về các thành tựu kỹ thuật như thế này, hãy tham gia với chúng tôi tại Monster Scale Hội nghị thượng đỉnh Các kỹ sư từ Disney+ / Hulu, Slack, Canva, Uber, Salesforce, Atlassian và nhiều hơn nữa sẽ chia sẻ chiến lược và nghiên cứu trường hợp ghi chú Monster Scale Hội nghị thượng đỉnh Chủ đề: Supercell là gì? Supercell là công ty có trụ sở tại Phần Lan đằng sau các trò chơi hit Hay Day, Clash of Clans, Boom Beach, Clash Royale và Brawl Stars. Cho đến gần đây, tất cả các chức năng quản lý tài khoản cho các trò chơi phục vụ hàng trăm triệu người dùng hoạt động hàng tháng chỉ được xây dựng và quản lý bởi hai kỹ sư. Thông tin về Supercell ID Supercell ID được sinh ra như một hệ thống tài khoản cơ bản - một cái gì đó để giúp người dùng khôi phục tài khoản và di chuyển chúng sang các thiết bị mới. Edvard giải thích, “Khách hàng có thể thực hiện các truy vấn HTTP đến API tài khoản, chủ yếu trả lại các token đã ký mà khách hàng có thể trình bày cho máy chủ trò chơi để chứng minh danh tính của họ. Một số hoạt động, chẳng hạn như thực hiện yêu cầu bạn bè, yêu cầu API tài khoản gửi thông báo cho người chơi khác. Ví dụ, ‘Bạn có chấp thuận yêu cầu bạn bè này không?’ Giao tiếp hai chiều Sau khi Edvard gia nhập dự án Supercell ID vào cuối năm 2020, ông bắt đầu làm việc trên nền tảng thông báo - chủ yếu cho quảng cáo chéo trong năm trò chơi của họ. Khách hàng kết nối với một đội máy chủ proxy, sau đó một cơ chế định tuyến đẩy các sự kiện trực tiếp đến khách hàng (không đi qua trò chơi). Điều này là đủ cho mục tiêu ngay lập tức của việc xử lý các yêu cầu quảng cáo chéo và bạn bè. Họ nhận ra rằng họ có thể sử dụng giao tiếp hai chiều để tăng đáng kể phạm vi của hệ thống Supercell ID. Edvard giải thích, “Về cơ bản, nó cho phép chúng tôi triển khai các tính năng trước đây là một phần của máy chủ trò chơi. Mục tiêu của chúng tôi là lấy các tính năng mà bất kỳ trò chơi mới nào đang được phát triển có thể cần và đóng gói chúng vào hệ thống của chúng tôi – do đó đẩy nhanh sự phát triển của chúng.” Với điều đó, Supercell ID bắt đầu chuyển đổi thành một mạng xã hội xuyên trò chơi hỗ trợ các tính năng như biểu đồ bạn bè, hợp tác, trò chuyện và theo dõi tình trạng bạn bè. Phát triển Supercell ID thành mạng xã hội Cross-Game Tại thời điểm này, trang mạng xã hội của backend vẫn là một dự án một người, vì vậy họ đã thiết kế nó với sự đơn giản trong tâm trí. Tìm đúng abstraction “Chúng tôi chỉ muốn có một trừu tượng đơn giản hỗ trợ tất cả các ứng dụng của chúng tôi và do đó có thể được thiết kế và thực hiện bởi một kỹ sư duy nhất”, Edvard giải thích. “Nói cách khác, chúng tôi muốn tránh xây dựng một hệ thống trò chuyện, một hệ thống hiện diện, v.v. Chúng tôi muốn xây dựng một điều, không phải nhiều.” Tìm đúng trừu tượng là chìa khóa.Và một kho giá trị khóa phân cấp với Change Data Capture phù hợp hoàn hảo với hóa đơn.Đây là cách họ thực hiện nó: Các khóa cấp cao nhất trong kho giá trị khóa là các chủ đề có thể đăng ký. Có một bản đồ hai lớp bên dưới mỗi phím cấp cao nhất – bản đồ (chữ, bản đồ (chữ, chuỗi). bất kỳ thay đổi nào đối với dữ liệu dưới một phím cấp cao nhất được phát sóng cho tất cả người đăng ký của phím đó. Các giá trị trong bản đồ bên trong cũng được dán nhãn thời gian.Mỗi nguồn dữ liệu kiểm soát các dấu thời gian riêng của nó và xác định thứ tự chính xác.Client thả bất kỳ bản cập nhật nào có dấu thời gian cũ hơn những gì nó đã lưu trữ. Bản đồ (String, String) Một sự thay đổi điển hình trong dữ liệu sẽ là một cái gì đó giống như 'cấp bằng 10' thay đổi thành 'cấp bằng 11'. khi người chơi chơi, họ kích hoạt tất cả các loại cập nhật như thế này, có nghĩa là rất nhiều chữ viết nhỏ liên quan đến việc duy trì tất cả các sự kiện. Tìm đúng cơ sở dữ liệu Họ cần một cơ sở dữ liệu hỗ trợ các yêu cầu kỹ thuật của họ và có thể quản lý được, với đội ngũ tối giản của họ. Quản lý nhiều văn bản nhỏ với độ trễ thấp Hỗ trợ một mô hình dữ liệu phân cấp Quản lý sao lưu và hoạt động cluster như một dịch vụ ScyllaDB Cloud đã chứng minh là một sự phù hợp tuyệt vời. (ScyllaDB Cloud là phiên bản được quản lý đầy đủ của ScyllaDB, một cơ sở dữ liệu được biết đến để cung cấp độ trễ thấp có thể dự đoán được trên quy mô). Làm thế nào nó tất cả chơi ra Để có một ý tưởng về cách điều này diễn ra trong các trò chơi Supercell, hãy xem hai ví dụ. Đầu tiên, hãy xem xét tin nhắn chat. Một tin nhắn chat đơn giản có thể được thể hiện trong mô hình dữ liệu của họ như sau: Edvard giải thích, “Chìa khóa cấp cao nhất được đăng ký là ID phòng trò chuyện.Chìa khóa cấp tiếp theo là UID timestamp, vì vậy chúng tôi có một thứ tự của mỗi thông điệp và có thể truy vấn lịch sử trò chuyện. Tiếp theo, chúng ta hãy nhìn vào “sự hiện diện”, được sử dụng rất nhiều trong trò chơi mới (và được kỳ vọng cao) của Supercell, mo.co. Mục tiêu của sự hiện diện, theo Edvard: “Khi hợp tác cho trận chiến, bạn muốn xem trong thời gian thực avatar và xây dựng hiện tại của bạn bè của bạn – về cơ bản là vũ khí và thiết bị của bạn bè của bạn, cũng như những gì họ đang làm. Players’ state data is encoded into Supercell’s hierarchical map as follows: Note that: Mức cao nhất là ID người chơi, mức thứ hai là loại, và bản đồ bên trong chứa dữ liệu. Supercell ID không cần phải hiểu dữ liệu; nó chỉ chuyển nó cho các khách hàng trò chơi. Khách hàng trò chơi không cần phải biết biểu đồ bạn bè vì định tuyến được xử lý bởi Supercell ID. Đi sâu vào kiến trúc hệ thống Chúng ta hãy kết thúc với một tour du lịch kiến trúc hệ thống, như được cung cấp bởi Edvard. “Backend được chia thành API, proxy, và các máy chủ định tuyến sự kiện / lưu trữ. Chủ đề sống trên các máy chủ định tuyến sự kiện và được phân tách trên chúng. Một máy khách kết nối với một proxy, xử lý đăng ký chủ đề của khách hàng. Proxy định tuyến các đăng ký này đến các máy chủ định tuyến sự kiện thích hợp. điểm cuối (ví dụ, cho trò chuyện và hiện diện) gửi dữ liệu của họ đến các máy chủ định tuyến sự kiện, và tất cả các sự kiện vẫn tồn tại trong ScyllaDB Cloud. Mỗi chủ đề có một phân đoạn chính và sao lưu.Nếu phân đoạn chính đi xuống, phân đoạn chính duy trì số chuỗi bộ nhớ cho mỗi thông điệp để phát hiện tin nhắn bị mất.Nguồn thứ cấp sẽ chuyển tiếp tin nhắn mà không có số chuỗi.Nếu phân đoạn chính đi xuống, phân đoạn chính sẽ kích hoạt việc làm mới trạng thái trên máy khách, cũng như đặt lại số chuỗi. API cho các lớp định tuyến là một RPC đơn giản sau sự kiện chứa một loạt các chủ đề, loại, khóa, giá trị tuples. Nhiệm vụ của mỗi API chỉ là viết lại dữ liệu của họ vào đại diện tuple trên. Mỗi sự kiện được viết bằng ScyllaDB trước khi phát sóng cho người đăng ký. API của chúng tôi đồng bộ theo nghĩa là nếu một cuộc gọi API mang lại một phản hồi thành công, thông điệp vẫn tồn tại trong ScyllaDB. Gửi cùng một sự kiện nhiều lần không có hại vì áp dụng bản cập nhật trên máy khách là một hoạt động idempotent, ngoại trừ có thể là nhiều số chuỗi lập bản đồ cho cùng một thông điệp. Khi kết nối, proxy sẽ tìm ra tất cả bạn bè của bạn và đăng ký các chủ đề của họ, tương tự cho các nhóm trò chuyện mà bạn thuộc về. Chúng tôi cũng đăng ký các chủ đề cho khách hàng kết nối. Chúng được sử dụng để gửi thông báo cho khách hàng, chẳng hạn như yêu cầu bạn bè và chương trình khuyến mãi chéo. Một khởi động lại bộ định tuyến kích hoạt một đăng ký lại các chủ đề từ proxy. Chúng tôi sử dụng Protocol Buffers để tiết kiệm chi phí băng thông. Tất cả việc cân bằng tải là ở cấp độ TCP để đảm bảo rằng các yêu cầu trên cùng một kết nối HTTP/2 được xử lý bởi cùng một ổ cắm TCP trên proxy. Điều này cho phép chúng tôi lưu trữ một số thông tin nhất định trong bộ nhớ khi nghe ban đầu, vì vậy chúng tôi không cần phải tái tạo lại các yêu cầu khác. Chúng tôi có đủ các khách hàng đồng thời mà chúng tôi không cần phải tách riêng các yêu cầu HTTP/2 riêng biệt, vì lưu lượng truy cập được phân phối đều đặn dù sao, và các yêu cầu cũng tốn kém để xử lý trên các người dùng khác nhau. Chúng tôi sử dụng ổ cắm liên tục giữa các proxy và bộ định tuyến. Nhưng nó không phải là game over Nếu bạn muốn xem toàn bộ trò chuyện công nghệ, chỉ cần nhấn chơi bên dưới: Và nếu bạn muốn đọc thêm về vai trò của ScyllaDB trong thế giới game, bạn cũng có thể muốn đọc: Epic Games: Làm thế nào Epic Games sử dụng ScyllaDB như một bộ nhớ cache nhị phân trước NVMe và S3 để tăng tốc độ phân phối toàn cầu của các tài sản trò chơi lớn được sử dụng bởi Unreal Cloud DDC. Tencent Games: Làm thế nào Tencent Games xây dựng kiến trúc dịch vụ dựa trên CQRS và các mô hình nguồn cấp sự kiện với Pulsar và ScyllaDB. Discord: Làm thế nào Discord sử dụng ScyllaDB để thúc đẩy sự phát triển lớn của họ, chuyển từ một nền tảng chơi game niche sang một trong những nền tảng truyền thông lớn nhất thế giới. Trò chơi Epic: Trò chơi Tencent: Sự bất đồng: