-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Tuân thủ
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Lựa chọn người đi cùng
- Ngành công nghiệp phần mềm tại Việt Nam - Mới chỉ là bắt đầu.
- Ngành công nghiệp phần mềm tại Việt Nam - Dây chuyền sản xuất.
- Ngành công nghiệp phần mềm tại Việt Nam - Thị trường
- Ngành công nghiệp phần mềm tại Việt Nam - Công ăn việc làm
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
- Tham gia phát triển open source!
- Buôn có bạn, bán có phường
- Đam mê đi đâu rồi?
- Giữa lửa đam mê!
- Tương lai nào cho tester? Thay đổi để dẫn đầu xu thế!
- Tương lai nào cho tester? - Khi thế sự đổi thay!
- Tương lai nào cho lập trình viên? Khi không có hệ quy chiếu!
- Tương lai nào cho lập trình viên - Làm đến bao nhiêu tuổi?
- Tương lai nào cho lập trình viên? Có làm giàu được không?
- Tương lai nào cho lập trình viên? Có cân bằng cuộc sống được không?
- Tương lai nào cho lập trình viên - Nhảy việc đến khi nào?
- Tương lai nào cho lập trình viên - Con đường sự nghiệp (Career path)!
- Tương lai nào cho lập trình viên - Tổng kết lại!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn sơ cấp (Junior)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn trung cấp (Intermediate)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn lành nghề (Senior)!
- Giai đoạn lành nghề (Senior) - Giữa những hoang mang!
- Giai đoạn lành nghề (Senior) - Phân hoá trong doanh nghiệp!
- Con đường sự nghiệp cho lập trình viên - Trở thành chuyên gia (Expert)!
- Con đường sự nghiệp cho lập trình viên - Trở thành người ảnh hưởng (Influencer)!
- Các giai đoạn phát triển của lập trình viên - Tổng kết lại!
- Metaverse - Câu chuyện 10 nghìn CCU (Người tham gia đồng thời)
- Metaverse có khả thi ở Việt Nam?
- Lựa chọn nghề nghiệp - DevOps!
- Lựa chọn nghề nghiệp - Project Manager (PM)!
- Lựa chọn nghề nghiệp - Data Engineer!
- Lựa chọn nghề nghiệp - BackEnd Engineer!
- “Talk is cheap. Show me the code” ― Linus Torvalds
- Lựa chọn nghề nghiệp - Web Front-End Engineer!
- Lựa chọn nghề nghiệp - Mobile Engineer!
- Lựa chọn nghề nghiệp - Game Engineer!
- Lựa chọn nghề nghiệp - Product Owner!
- Tuổi trẻ cần đột phá!
- Tuổi trẻ cần sự đồng cảm!
- Tuổi trẻ - điều đáng sợ đầu tiên là gì?
- Tuổi trẻ - Điều đáng sợ thứ 2 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 3 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 4 là gì?
- Nếu tận dụng hết năng lực thì sẽ thế nào?
- Tuổi trẻ - Điều đáng sợ thứ 5 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 6 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 7 là gì?
- Tuổi trẻ - ham học hỏi là như thế nào?
- Đầu tư cho bản thân là gì?
- Học chủ động!
- Có nên quay lại công ty cũ?
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 1)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 2)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 3)
- Tự học
- Học tập tại doanh nghiệp
- Học tại trung tâm
- Cách đọc sách kỹ thuật hiệu quả
- Học trong một tổ chức mã nguồn mở.
- Câu chuyện lập trình viên - Công việc đầu tiên
- Câu chuyện lập trình viên - Mức lương đầu tiên
- Câu chuyện lập trình viên - 2018
- Định hướng là gì?
- Wordpress nguy hiểm thế nào?
- Danh sách 10 trung tâm đào tạo trình uy tín, chất lượng ở Hà Nội
Đá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ó:
- 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.
- 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 Chat
và Tổ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ế.
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Tuân thủ
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Lựa chọn người đi cùng
- Ngành công nghiệp phần mềm tại Việt Nam - Mới chỉ là bắt đầu.
- Ngành công nghiệp phần mềm tại Việt Nam - Dây chuyền sản xuất.
- Ngành công nghiệp phần mềm tại Việt Nam - Thị trường
- Ngành công nghiệp phần mềm tại Việt Nam - Công ăn việc làm
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
- Tham gia phát triển open source!
- Buôn có bạn, bán có phường
- Đam mê đi đâu rồi?
- Giữa lửa đam mê!
- Tương lai nào cho tester? Thay đổi để dẫn đầu xu thế!
- Tương lai nào cho tester? - Khi thế sự đổi thay!
- Tương lai nào cho lập trình viên? Khi không có hệ quy chiếu!
- Tương lai nào cho lập trình viên - Làm đến bao nhiêu tuổi?
- Tương lai nào cho lập trình viên? Có làm giàu được không?
- Tương lai nào cho lập trình viên? Có cân bằng cuộc sống được không?
- Tương lai nào cho lập trình viên - Nhảy việc đến khi nào?
- Tương lai nào cho lập trình viên - Con đường sự nghiệp (Career path)!
- Tương lai nào cho lập trình viên - Tổng kết lại!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn sơ cấp (Junior)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn trung cấp (Intermediate)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn lành nghề (Senior)!
- Giai đoạn lành nghề (Senior) - Giữa những hoang mang!
- Giai đoạn lành nghề (Senior) - Phân hoá trong doanh nghiệp!
- Con đường sự nghiệp cho lập trình viên - Trở thành chuyên gia (Expert)!
- Con đường sự nghiệp cho lập trình viên - Trở thành người ảnh hưởng (Influencer)!
- Các giai đoạn phát triển của lập trình viên - Tổng kết lại!
- Metaverse - Câu chuyện 10 nghìn CCU (Người tham gia đồng thời)
- Metaverse có khả thi ở Việt Nam?
- Lựa chọn nghề nghiệp - DevOps!
- Lựa chọn nghề nghiệp - Project Manager (PM)!
- Lựa chọn nghề nghiệp - Data Engineer!
- Lựa chọn nghề nghiệp - BackEnd Engineer!
- “Talk is cheap. Show me the code” ― Linus Torvalds
- Lựa chọn nghề nghiệp - Web Front-End Engineer!
- Lựa chọn nghề nghiệp - Mobile Engineer!
- Lựa chọn nghề nghiệp - Game Engineer!
- Lựa chọn nghề nghiệp - Product Owner!
- Tuổi trẻ cần đột phá!
- Tuổi trẻ cần sự đồng cảm!
- Tuổi trẻ - điều đáng sợ đầu tiên là gì?
- Tuổi trẻ - Điều đáng sợ thứ 2 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 3 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 4 là gì?
- Nếu tận dụng hết năng lực thì sẽ thế nào?
- Tuổi trẻ - Điều đáng sợ thứ 5 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 6 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 7 là gì?
- Tuổi trẻ - ham học hỏi là như thế nào?
- Đầu tư cho bản thân là gì?
- Học chủ động!
- Có nên quay lại công ty cũ?
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 1)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 2)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 3)
- Tự học
- Học tập tại doanh nghiệp
- Học tại trung tâm
- Cách đọc sách kỹ thuật hiệu quả
- Học trong một tổ chức mã nguồn mở.
- Câu chuyện lập trình viên - Công việc đầu tiên
- Câu chuyện lập trình viên - Mức lương đầu tiên
- Câu chuyện lập trình viên - 2018
- Định hướng là gì?
- Wordpress nguy hiểm thế nào?
- Danh sách 10 trung tâm đào tạo trình uy tín, chất lượng ở Hà Nội