[Report][AWS Summit Online ASEAN RE:CAP 2020]Tăng tốc với serverless, để phát triển những tính năng hiệu quả cho ứng dụng
Ngày 29/09/2020 vừa rồi đã diễn ra sự kiện AWS Summit Online ASEAN RE:CAP. Link sự kiện: https://live.awsevents.com/ASEANSummitreCap/
Chủ để của session lần này là "Tăng tốc với serverless, để phát triển những tính năng hiệu quả cho ứng dụng" Diễn giả: Bryan Chua, Solutions Architect Amazon Web Services Salm YH, CEO, CardsPal, Standard Chartered, Bank Subsidiary
Trong phiên này, bạn sẽ học được làm sao để triển khai production-grade, ứng dụng mobile và web trong thực tế với những tích năng nổi trội, chẳng hạn như real-time chat, hổ trợ, và đẩy thông báo. Chúng ta sẽ thảo luận về chức năng, dịch vụ, và các ứng dụng có sẵn qua AWS AMplify và AWS AppSync. Khám phá làm sao các dịch vụ có thể giúp bạn mở rộng cơ sở hạ tầng, kinh nghiệm cho các nhà phát triển giúp tập trung vào phát triển tính năng cho sản phẩm để đáp ứng yêu cầu kinh doanh của bạn.
Ngày nay mức độ cạnh tranh giữa các ứng dụng mobile ngày một tăng. Năm 2019, ta có hơn 204 tỷ lượt tải app trên toàn thế giới từ các appstore. Con số này đã tăng hơn 45% trong 3 năm qua. Người dùng sẵn sàng dành thời gian và tiền bạc của họ để sử dụng các ứng dụng với tính năng cao cấp. năm 2019, 120 tỷ đô là con số gấp 2,1 lần so với năm 2016. Ước tính, người dùng dành ra 3 giờ 40 phút mỗi ngày dành cho các thiết bị di động, tăng 35% so với năm 2016. Tuy nhiên, 25% ứng dụng mà người dùng cài đặt lần đầu đã bị gỡ bỏ ngay sau lần sử dụng đầu tiên. Đây có thể do ứng dụng gặp lỗi mà người dùng không thể sử dụng được, hoặc ứng dụng không hoạt động như họ mong đợi. Câu hỏi là làm sao để sản phẩm của bạn trở nên nổi bật
1. Giới thiệu AWS Amplify
AWS Amplify là một dịch vụ và là một framework tuyệt vời dành cho phát triển ứng dụng. AWS Amplify là một hệ sinh thái nhằm nâng cao trải nghiệm cho các Developer.
Amplify bao gồm các thành phần như
- Amplify CLI giúp các Developer tạo và quản lý cơ sở hạ tầng cloud. Các Developer chỉ đơn giản là gửi yêu cầu xin tài nguyên cloud cho các chức năng cần thực hiện cho ứng dụng của họ như Authentication, Database, Pub/Sub,...
- Chúng tôi cũng cung cấp các thư viện cho client trên IOS, Android, Javascript framework như React Native.
- Ngoài ra còn có các thành phần UI nhằm giúp bạn nhanh chóng tạo các nguyên mẫu cho ứng dụng của mình với các kiểu tuỳ chỉnh.
- Cuối cùng, có một danh sách các dịch vụ dành cho Developer do AWS quản lý nhằm thực hiện chức năng CI/CD và hosting hoặc kiểm tra các thiết bị và trình duyệt trên AWS Device FarmFarm
2. Xây dựng ứng dụng thời gian thực có khả năng hoạt động offline và dựa trên nền tảng Serverless
Khách hàng đang xây dựng rất nhiều ứng dụng có độ trễ thấp ở mọi thời điểm. Ví dụ như tối có một ứng dụng Chat hoặc tôi có một tin tức mới cần được hiển thị với thời gian thực. Mọi người cần được cập nhật thông tin mới nhất và tốt nhất ngay khi họ được kết nối với internet. Nhưng những gì chúng ta đang thấy là một xu hướng lớn hướng tới UX hay còn gọi là trải nghiệm cho người dùng. Khi người dùng bước vào ga tàu hoặc những nơi có kết nối Internet kém, các Developer bắt đầu đối mặt với các thách thức mà chúng có thể còn tương đối nhỏ khi ứng dụng của họ còn mới.
Đối với lập trình ứng dụng, chúng ta đang thấy rất nhiều pattern phổ biến trong đó các Developer sử dụng AWS SDK hoặc AppSync SDK cho xử lý App data. Điều này đặc biệt khó khăn khi bạn có hàng ngàn thiết bị cần phải chia sẻ cùng một trạng thái nhất quán, nếu không bạn sẽ gặp phải vấn đề xử lý dữ liệu tài chính không chính xác hoặc là bị mất thông tin. Và điều mà lập trình viên thường làm là họ coi đây là một cái hộp, và họ muốn đặt mọi thứ vào hộp, thường là bộ nhớ Cache, hoặc họ phải lấy thông tin và lặp lại việc cập nhật các giá trị mỗi lần, và liên kết chúng với một số giao diện UI. Thách thức là khi bạn bắt đầu xử lý bộ nhớ Cache như Database. Mô hình này bắt đầu bị phá vỡ một cách thực sự nhanh chóng. Và cuối cùng, code bắt đầu trở nên lộn xộn
Và đây là lý do vì sao AWS xây dựng Amplify DataStore. Đầu tiên là nó có cùng một programming và mental mà các Developer đã quen thuộc. Điều này thực sự quan trọng vì Developer sẽ không phải làm gì khác đi so với trước đây. Họ chỉ cần nghĩ về dữ liệu của họ, và data store quen thuộc của họ. Họ sẽ vận hành trên đó. Khi sử dụng Amplify DataStore, thực chất đã giúp xử lý hàng loạt các tác vụ cho Developer. Từ góc độ Network, DataStore được vận hành bởi GraphQL và AWS AppSync, điều này cho phép chúng ta kích hoạt DataSync khi một thiết bị chuyển từ offline sang online. Người dùng sẽ nhận được các thay đổi từ AppSync và điều này tối ưu hoá cho network bởi họ chỉ nhận được những thay đổi mà họ cần. Ta cũng tận dụng những lợi thế từ GraphQL giúp cho phép tự động hợp nhất để giải quyết các xung đột về dữ liệu đồng bộ.
Vậy Amplify DataStore hoạt động như thế nào? Khi một Developer sử dụng DataStore API thì điều gì sẽ xảy ra? Với mỗi Runtime khác nhau, chúng tôi thực hiện phân tách model này. Thực tế, chúng tôi tạo ra một Registry gọi là Storage Engine, từ đó ta sẽ lựa chọn storage phù hợp với nền tảng được sử dụng. Ví dụ: với các ứng dụng Web chạy trên trình duyệt, chúng tôi sử dụng IndexDB, với IOS và Android chúng tôi sử dụng SQLight. Điều thú vị với DataStore là bạn không cần có tài khoản AWS. Khi bạn cần xây dựng backend, tất cả những gì bạn cần là sử dụng Amplify CLI để enable các tuỳ chọn thành "true", và các tài nguyên sẽ được cung cấp cho bạn hoàn toàn tự động.
Và bây giờ khi tất cả các thiết bị và trình duyệt cùng trỏ tới một backend với các hoạt động ghi đồng thời thì chắc chắn sẽ xảy ra xung đột. Làm thế nào để ta có thể xử lý nó. Câu trả lời là dùng Automerge. Automerge sẽ xem xét các loại thuộc tính khác nhau từ các bản ghi khác nhau dựa trên các loại dữ liệu
3. Câu chuyện của khách hàng
Câu chuyên của công ty ứng dụng CardsPal: Ứng dụng khám phá các giao dịch thẻ tín dụng, phần thưởng, chiết khấu và ưu đãi để tối đa hóa khoản tiết kiệm và kiếm tiền hoàn lại từ thẻ tín dụng của bạn (tại Singapore).
Khi chúng tôi lần đầu xem xét kiến trúc, nó bảo gồm khoảng hơn 10 Lambda Function, và đáng ngạc nhiên là chúng không làm gì khác ngoại trừ một tính năng cụ thể là tính toán khoảng cách giữa người dùng và các deal để giới thiệu các deal gần đó cho người dùng. Ngoài ra các Lambda Function chỉ đơn giản là tạo, cập nhật và tạo từ 3 đến 4 DynamoDB table. Và những dữ liều này được nhập vào thông qua 1 file Script từ một máy laptop của họ.
Những lo lằng của khách hàng:
- Làm thế nào để tập trung vào tính năng chính và nhanh chóng đưa ra thị trường? Giải quyết: CI/CD pipeline, DevOps practices
- Làm thế nào để giảm thiểu chi phí? Giải quyết: AWS serverless + On demand
- Làm thế nào để duy trì hiệu suất tốt nhất Giải quyết: Enable AWS X-Ray, Lambda -> GraphQL
- Làm thế nào để đảm bảo build có thể scale Giải quyết: Sử dụng AWS Amplify + AWS AppSync
Như vậy hành trình của CasPal trên con đường trở thành serverless app là không đơn giản. Chúng tôi đã thực hiện trong suốt 7 tháng. Một bước rất quan trọng đối với chúng tôi là chuẩn đoán các vấn đề về hiệu suất trong ứng dụng.
- Khi sử dụng 1 số Lambda function, chúng tôi đã sử dụng AWS X-Ray để theo dõi và nhận ra rằng chúng tôi cần chỉnh lượng RAM được cung cấp cho Lambda function để code của họ chạy nhanh hơn. Từ 1 phút giảm xuống dưới 2 giây. Đó không phải là quá nhanh, nhưng ít nhất nó cũng cho phép tối ưu hoá hoạt động của ứng dụng hơn rất nhiều.
- Tiếp theo, chúng tôi tìm hiểu sâu về AWS Amplify và AppSync cho phép Mobile Developer truy vấn đúng lượng dữ liệu anh ta cần từ ứng dụng trong khi giảm gánh nặng khi phải duy trì Lambda Function để làm những công việc đơn giản.
- Đồng thời họ cũng chuyển sang Cognito cho cả xác thực và uỷ quyền cho người dùng. Và sau này, Cognito được sử dụng cho mọi tài nguyên của AWS để cung cấp quyền truy cập phù hợp cho ứng dụng
- Đồng thời Backend Developer đã chuyển toàn bộ code của mình sang một Repo lưu trữ tập trung (CodeCommit)
- Họ cũng sử dụng AWS Cloud9, một IDE online của AWS. Bằng cách đó, nếu laptop của developer gặp trục trặc, họ vẫn có thể vận hành và hoạt động như bình thường.
- Họ cũng di chuyển các file Script sang AWS Step Functions, là dịch vụ có thể quản lý trạng thái và tự retry một cách có hệ thống và tự động. Về sau các file Script đó được chuyển sang CI/CD với CodeBuild và CodePipeline
- Sau khi thực hiện các cải tiến này, team bắt đầu suy nghĩ về cải tiến và analytics, push notification để thu hút người dùng tốt hơn. Đó là use case cho Amazon Pinpoint và họ cũng đẩy dữ liệu lên Kinesis để thực hiện các bước xử lý dữ liệu khác với Lambda.
Đó là tất cả những gì chúng tôi đã thực hiện, vậy bước đi tiếp theo cho CasPal là gì?
- Lấy người dùng làm trọng tâm và nâng cao liên tục khả năng của sản phẩm -Thông báo đẩy hàng rào địa lý -Tìm kiếm -Đối tác giao dịch khi lên máy bay
- Mở rộng quốc gia -1 ứng dụng cho 1 quốc gia hoặc 1 ứng dụng cho tất cả các quốc gia -Thiết kế lược đồ cơ sở dữ liệu
- Quyết định theo hướng dữ liệu -Điểm dữ liệu hoặc theo dõi sự kiện -Phân tích dự đoán và mô hình ML
Nếu bạn thấy thú vị và muốn tìm hiểu thêm. Hay truy cập đường link của sự kiện và tìm video của session "Tăng tốc với serverless, để phát triển những tính năng hiệu quả cho ứng dụng"
Cảm ơn các bạn đã theo dõi blog. Xin chào và hẹn gặp lại!