- Posted by: Tommy Tran
- Wed, 8/03/2023, 8:51 (GMT+7)
- 0 Bình luận
Xây dựng hệ thống tinh gọn và hiệu quả với AWS Serverless technology
Overview
Chào các bạn đọc giả, cũng đã gần 2 năm kể từ ngày mình chia sẻ kinh nghiệm học và thi chứng chỉ AWS, trong khoảng thời gian đó mình dần hoàn thiện bản thân hơn và có những bước tiến trong sự nghiệp như có được công việc Solution Architect ở AWS, giúp đỡ nhiều startups và doanh nghiệp non trẻ xây dựng hệ thống bền bỉ và có khả năng mở rộng, xây dựng nền tảng công nghệ giúp các doanh nghiệp thực hiện chuyển đổi số. Từ những trải nghiệm đó mình có được những bài học đáng nhớ và lượng kiến thức tăng lên đồng thời cũng cứng cáp hơn. Dù làm việc với vai trò là Solution Architect, nhưng mình không phải chuyên gia trong nhiều công nghệ, mình chọn Serverless & Container là lĩnh vực chuyên sâu. Sắp tới sẽ có nhiều chia sẻ của mình hơn về mảng công nghệ này, hôm nay mình sẽ chia sẻ về tổng quan trước nhé. Let go!
Lean and efficient
Mình đã từng tham gia xây dựng hệ thống vài chục (~50) microservices để thực hiện chuyển đổi số cho một doanh nghiệp lớn. Hệ thống đã đưa vào hoạt động nhưng có những vấn đề lớn mình và team gặp phải hằng ngày.
- Vận hành phức tạp: Hệ thống được xây dựng ở On-premise (Private cloud), mình phải xây dựng hầu như từ đầu tất cả mọi thứ trừ hardware. Và mình phải vận hành rất nhiều lớp từ hệ điều hành, quản lý network, security patching, quản lý k8s cluster. Rất nhiều thứ bọn mình phải vận hành và phải theo dõi cùng một lúc để đảm bảo hệ thống hoạt động trơn tru. Tốn nhiều công sức vận hành và phải luôn trong tình trạng sẵn sàng sử lý sự cố
- Dư thừa tài nguyên: Đối với hệ thống On-premise, việc tắt máy ảo khi ngoài giờ làm việc và mở lại vào giờ làm việc không mang lại nhiều giá trị nhưng có thể xảy ra sự cố nếu việc vận hành không tốt và sai sót khó tránh khỏi. Nên hệ thống luôn duy trì lượng tài nguyên đủ để xử lý trình trạng truy cập quá mức dự kiến (lượng người dùng tăng gấp đôi so với bình thường), khi có sự cố về hiệu suất thì luôn tăng thêm resource và hầu như là không giảm. Dẫn đến việc chi phí tăng và khó tối ưu
- Đòi hỏi nhiều kiến thức: Việc phát triển và vận hành hệ thống luôn cần team infra & devops với nhiều skills khác nhau như network, compute, k8s, monitoring, operating, etc. Nhưng với ngân sách hạn chế, dẫn đến tình trạng team luôn thiếu nguồn lực và thiếu kiến thức
Đó là những điều mà mình gặp phải khi phát triển dự án. Đấy là một dự án chuyển đổi số và công nghệ; nhưng vẫn còn nhiều điểm chưa hoàn thiện. Vì mục tiêu chuyển đổi số của dự án là tối ưu hoá việc vận hành cả một doanh nghiệp. Tốn rất nhiều công sức và tiền để xây dựng hệ thống chuyển đổi số và không đủ tài nguyên và nhân lực để tập trung vào phân tích, chuyển đổi và tối ưu core business. Dẫn đến core business logics không cải tiến nhiều và kết quả nó là một cuộc nâng cấp về công nghệ.
Mình đã từng làm cho nhiều startups và bài học rút ra từ những dự án chuyển đổi số là luôn có một mục tiêu chung sử dụng công nghệ để tối ưu hoá kinh doanh nó là xây dựng những chức năng, những ý tưởng mới giúp tối ưu hoá vận hành kinh doanh, và mang lại nhiều giá trị hơn trên cùng một lượng tài nguyên đầu tư. Để làm được điều đó, mình luôn tìm hiểu công nghệ mới giúp mình giảm thiểu tài nguyên cho những việc không mang lại nhiều giá trị hoặc những việc mình làm chưa tối ưu như quản lý servers, quản lý platform, xây dựng từ đầu. Từ có mình có nhiều tài nguyên hơn để xây dựng và cải tiến core business logics.
Success stories
1. Sử dụng container serverless
Lúc mình còn làm ở startups cũng có lượng khách hàng khoảng 10k tenants (khách hàng doanh nghiệp). Cùng với đó là một số ràng buộc đối với startups về chi phí và resource nhé.
Yêu cầu | Giải phát | Lợi ích | Bài học |
---|---|---|---|
Deploy hệ thống có sẵn, đang chạy ở k8s lên AWS trong vòng 1 tuần | Sử dụng AWS EKS managed services để deploy hệ thống | Deploy nhanh, tin gọn, giảm thiểu việc vận hành k8s control plan | Dù deploy rất nhanh và managed bởi AWS nhưng cần phải học những kiến thức của AWS như VPC, IAM và một số giới hạn của AWS EKS |
Dễ dàng deploy một hệ thống ở một khu vực (region) khác trong thời gian ngắn nhất có thể | Sử dụng AWS CDK để develop IaaC | Mình có thể deploy nhanh chóng AWS resources như EKS, VPC, IAM Roles ở những regions khác nhanh chóng. Giảm thiểu rủi ro và công sức thủ công | Bạn có thể chọn IaaC mà bạn đã biết như Terraform hoặc Cloudformation |
Không có thêm resource (con người) để vận hành hệ thống mới | Sử dụng Serverless compute và managed service để giảm thiểu việc vận hành | Không tốn thêm nhiều effort để vận hành hệ thống và giảm thiểu rủi ro liên quan đến security. Tối ưu hoá chi phí với việc Fargate có khả năng mở rộng linh hoạt hơn so với EC2 | Cần tìm hiểu về AWS Fargate và hiểu những giới hạn của Fargate khi chạy trên k8s |
AWS EKS và Serverless Compute (Fargate) giúp mình deploy nhanh chóng, giảm thiểu việc vận hành và tối ưu hoá chi phí với khả năng mở rộng linh hoạt của AWS Fargate. Di chuyển hệ thống k8s từ onpremise lên AWS trong một tuần để tối ưu hoá chi phí và công sức vận hành.
2. Chuyển số với AWS Serverless technology
Mình nhận nhiệm vụ mới với vai trò là Solution Architect, trong một dự án chuyển đổi số cho một khách hàng doanh nghiệp. Dự án này phát triển một ứng dụng cho hàng triệu người dùng trên toàn thế giới có thể theo dõi lộ trình du lịch của mình và những dịch vụ đi kèm như ví điện tử, booking, shoping - Nó là một supper app. Dự án đã được phát triển rất lâu dựa trên kiến trúc monolithics và đi cùng với vấn đề là khả năng scale, khó mở rộng và độ linh hoạt kém. Đây là một dự án tâm huyết nhất của mình, và đã sử dụng những bài học trước đó trong việc chuyển đổi số để thực hiện dự án này để giải quyết vấn đề và mang giải pháp tối ưu cho khách hàng.
Yêu cầu | Giải phát | Lợi ích | Bài học |
---|---|---|---|
Hệ thống có khả năng scale linh hoạt và nhanh chóng vì người dùng truy cập tăng hàng trăm lần vào các dịp lễ và giảm giá | Chuyển đổi kiến trúc hệ thống từ monolithics sang microservices | Hệ thống scale tự động dựa trên lượng người dùng và việc vận hành giảm đến mức tối thiểu và có thể xử lý được lượng requests tăng đột biến hàng trăm lần | Cần phân chia team phù hợp để phát triển từng microservices, tham khảo Conway's law |
Tối ưu hoá, giảm thiểu chi phí vận hành đến mức tối thiểu | Sử dụng AWS Serverless services như AWS Lambda, AWS Dynamodb, AWS SQS, etc | Sử dụng AWS Serverless services giúp giảm đến mức tối thiểu chi phí vận hành, chỉ cần một DevOps để monitor hệ thống so với một team gồm 5 members như trước. Chi phí cho server cũng được minize dựa trên số lượng người dùng | AWS Serverless là công nghệ mới, team cần học những kiến thức và best practices mới nhanh chóng |
Có khả năng phát triển và mở rộng linh hoạt để tăng tốc phát triển những chức năng mới | Sử dụng AWS Serverless, AWS managed services (Opensearch Serverless, Aurora) và Event Driven Architecture style để phát triển microservices | Event Driven Architecture mang lại khả năng mở rộng chức năng linh hoạt, giảm sự phụ thuộc. AWS Serverless và AWS Managed Services giúp đội ngũ tập trung hoàn toàn vào việc phát triển chức năng mới, giúp đưa những chức năng mới đến người dùng nhanh hơn so với trước đây từ một hoặc vài tháng sang hàng tuần | Việc sử dụng Event Driven Architecture style cùng với AWS Serverles services đòi hỏi tuân thủ best practices và patterns phù hợp để tối ưu hoá |
AWS Managed Services, Serverless và Microservices với Event Driven Architecture style mang lại sự linh hoạt, khả năng scale tốt hơn, đội ngũ tập trung vào việc phát triển chức năng dẫn đến tăng tốc độ đổi mới, tăng hiệu xuất và chi phí tối ưu nhất theo số lượng người dùng.
Best Practices
- Liên tục review kiến trúc hệ thống theo AWS Well-Architected framework
- Áp dụng những best practices của AWS Event Driven Architecture style
- Liên tục thử nghiệm công nghệ và giải pháp mới Try-fast & fail-fast
- Chia team và microservices bounded context phù hợp,
- Dive Deep trên những services được sử dụng trong hệ thống
What next
Hiện tại AWS Serverless vẫn chưa áp dụng nhiều ở Việt Nam, mục tiêu của mình là chia sẻ nhiều kiến thức và mang lại nhiều lợi ích hơn cho cộng đồng. Mình đang phát triển một số blog tiếp theo từ level 100-300 dựa trên kiến trúc Event Driven Architecture, các bạn subscribe mình để nhận được thông báo khi có bài viết mới nhé, sẽ đều hàng tháng.
Các bạn có thể tìm hiểu và kết nối với mình bằng cách comment vào blog hoặc connect với mình qua linkedin nhé. Mình luôn sẵn sàng để chia sẻ khi bạn cần, nếu bạn có bất kì thắc mắc hoặc gặp vấn đề khó liên quan đến AWS thì có thể ping mình nhé.
Resources
- ServerlessLand: https://serverlessland.com/
- AWS Well-Architected framework: https://aws.amazon.com/architecture/well-architected/?wa-lens-whitepapers.sort-by=item.additionalFields.sortDate&wa-lens-whitepapers.sort-order=desc&wa-guidance-whitepapers.sort-by=item.additionalFields.sortDate&wa-guidance-whitepapers.sort-order=desc
- Serverless Applications Lens: https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/welcome.html
Add Comment