Chia sẻ kiến thức lập trình

Xây dựng một nền tảng

Đáp ứng nhiều bài toán

Nền tảng là bộ phận vững chắc để những thành phần khác có thể tồn tại và phát triển trên nó. Và ngày nay hầu như mọi doanh nghiệp đều hướng tới xây dựng ra một nền tảng để phục vụ cho tất cả mọi người. Ví dụ như Facebook không chỉ là một ứng dụng mạng xã hội mà nó còn là một nền tảng để cho các ứng dụng, các game khác chạy được trên nó. Hay Eclipse không chỉ đơn thuần là một IDE lập trình, nó còn là nền tảng cho phép các plugin chạy trên nó. Vậy nên không có gì chúng ta không xây dựng một socket server giống như một nền tảng để đáp ứng cho nhiều bài toán nhất có liên quan đến socket server.

Mô hình cơ bản

Về cơ bản thì nền tảng là đóng gói, tuy nhiên nó sẽ cho phép các plugin cắm vào và chạy. Bởi vì mỗi nền tảng sẽ có sự khác biệt nên mình sẽ sử dụng ezyfox-server để mô tả thôi nhé.

Bản thân nền tảng EzyFox là một chương trình chạy trên hệ điều hành, nó mở một vài cổng để client gửi nhận dữ dữ liệu kết nối đến các ứng dụng đang chạy trên nó. Mỗi ứng dụng có 1 lối vào (Entry) được đăng ký với EzyFox để được khởi tạo và khởi động lên, ví dụ:

<name>chat</name>
<entry-loader>com.tvd12.ezyfoxserver.chat.EzyChatEntryLoader</entry-loader>

Cấu hình sẽ sẽ báo cho EzyFox biết rằng sẽ khởi tạo ứng dụng chat có đầu vào là EzyChatEntryLoader và client sẽ có khả năng kết nối đến ứng chat này.

Tại sao ứng dụng phải đăng ký như thế này mà không thể chạy qua hàm main? Câu trả lời là cả chương trình của chúng ta chỉ có 1 hàm main duy nhất và hàm main đó đã cho EzyFox sử dụng rồi nên buộc lòng chúng ta phải sử dụng cơ chế đăng ký Entry này.

Với cùng một cơ chế như vậy chúng ta sẽ có thể chạy mọi thứ trên nền tảng EzyFox ví dụ như game, chat hay các ứng dụng kiểu thông báo.

Mô hình với cloud

Để triển khai dễ dàng nhất trên cloud thì cách đơn giản nhất là chúng ta sẽ triển khai các server giống hệt nhau, mỗi server này sẽ chứa 1 platform. Về tổng thể là 1 platform lớn và bên trong sẽ chứa các platform nhỏ hơn. Chúng ta có thể sử dụng Database, Caching hay Message Broker để liên kết các platform nhỏ với nhau và sử dụng Load balancer hoặc Lobby server để cân bằng tải.

Chúng ta cũng có thể sử dụng Rolling update, Blue Green Deployment hay Canary deployment để đảm bảo khả năng Zero down time khi chúng ta cần khởi động lại các platform nhỏ. Ngoài ra thì Auto Scale khi toàn bộ nền tảng của chúng ta bị quá tải cũng là một ý tưởng hay. Đây cũng chính là một lợi thế tuyệt với khi sử dụng cloud.

Tổ chức thành zone

Cá nhân mình là một lập trình viên với rất nhiều dự án, và mình cũng không sẵn sàng để bỏ tiền ra một server với cấu hình khủng, và hiện tại mình cũng đang dùng server với 1 core và 2 GB RAM mà thôi. Và chắc chắn là không chỉ có mỗi mình đang gặp vấn đề như vậy.

Thế nhưng có những thời điểm mình phải chạy 1 ứng dụng chat, 1 ứng dụng quản lý, 1 ứng dụng tổng đài điện thoại và rất nhiều game demo trên 1 ezyfox-server duy nhất. Mình có thể làm được như vậy bởi mình đã tổ chức nền tảng EzyFox thành các zone, mỗi zone lại có:

  1. Các plugin: là các thành phần không quản lý user, chỉ xử lý sự kiện và chạy các task ngầm, mỗi 1 zone cần tối thiểu một plugin để xác thực người dùng.
  2. Các app: là các thành phần có quản lý user và thường dùng để xử lý request từ client gửi lên, mỗi 1 ứng dụng, 1 game có thể là 1 app.

Ví dụ 1 user có thể vào được nhiều game (game portal), vậy mình sẽ có 1 zone Game và 1 plugin xác thực chung. User xác thực thành công có thể truy cập được các game trong Game zone. Còn các thành phần khác không liên quan đến Game và phục vụ đối tượng khách hàng khác ví dụ như chat hay tổng đài sẽ được tổ chức thành các zone ChatTổng Đài.

Nhiều tiền và ít tiền

Chi phí là một phần quan trọng để một cá nhân hay doanh nghiệp lựa chọn hướng đi phù hợp cho mình. Thế nên 1 nền tảng cũng có thể đóng những vai trò khác nhau trong mỗi dự án.

Khi bạn nhiều tiền

Đối với các doanh nghiệp lắm tiền nhiều của, server nhiều như lợn con thì chẳng có lý do gì phải nhồi nhét quá nhiều thứ và trong một socket server làm gì, thì lúc này socket server như ezyfox-server sẽ đóng vai trò như một framework cho phần xử lý socket I/O để nhận và gửi message đến client và nó là một tầng xử lý dữ liệu hơn là một nền tảng.

Khi bạn ít tiền

Thật may mắn rằng số doanh nghiệp lắm tiền nhiều của thường ít hơn các nghiệp vừa và nhỏ, và càng ít hơn nữa so với số lượng những nhà phát triển đơn lẻ. Khi không có nhiều tiền thì cách duy nhất bạn có thể làm đó là tiết kiệm. Giả sử trong giai đoạn này game NFT đang phát triển chẳng hạn, khi mà khách hàng của bọn còn chưa biết đến từ đâu, doanh thu còn chưa có 1 đồng nào thì nhiều khả năng bạn cũng chỉ nên thuê 1 con server trên Digital Ocean với giá khoảng 10$ cho 1 CPU và 2GB RAM và bạn sẽ triển khai mọi thứ trên đấy.

Lúc này một nền tảng socket server sẽ vô cùng hữu ích, bạn có thể triển khai mọi thứ trên đó mà không quá lo lắng về tài nguyên hạn chế hay những vấn đề phát sinh khi phải quản lý quá nhiều ứng dụng chạy trên 1 server.

Tổng kết

Nền tảng là mục tiêu mà mọi doanh nghiệp đều hướng đến, tuy nhiên để tạo ra một nền tảng lại không phải đơn giản. Nó đòi hỏi cái nền móng của chúng ta phải cực kì vững chắc, và với một nền tảng cho socket server thì nó phải là khả năng xử lý I/O tối ưu nhất.

Nền tảng sẽ giúp chúng ta dễ dàng triển khai vào quản lý, mặc dù nghe có vẻ cồng kềnh nhưng nó lại rất phù hợp cho các tổ chức cá nhân đang có tài nguyên hạn chế.

Share: