AWS Dev day 2018 review

November 5, 2018 - 11 minutes read

Sự kiện này do Amazon Web Service kết hợp với FPT tổ chức. Năm ngoái họ có làm một lần rồi. Mục đích ngoài giúp AWS bán hàng thì F-soft cũng muốn contribute một chút hòng lấy lòng các dev.

Chủ đề chính năm nay là Get started with containers, tuy vậy khá ngạc nhiên là nội dung liên quan đến container tương đối ít. Phần workshop là một phần trích ra từ một lab trên trang tài liệu của AWS, các bạn có thể ở nhà tự làm theo, mặc dù nếu gặp phải vấn đề gì thì sẽ phải tự mò mẫm giải quyết thay vì hỏi ý kiến chuyên gia.

Phần đầu tiên nói về DevOps trong thời kỳ đổi mới, một số nội dung chính như sau:

Dev = Developement + Operation. Điều này có nghĩa là mỗi dev viên sẽ kiêm luôn cả chức năng vận hành. Developer sẽ phải tự control các công việc liên quan đến vận hành, như khởi tạo hạ tầng (provision), build, deploy… Điều này giúp giảm khoảng cách giữa phát triển và triển khai, thay vì phải mất hàng tuần để đưa các tính năng mới đến người dùng, thì chỉ mất vài tiếng đồng hồ. Ngoài ra team cũng được tối giản, không có quá nhiều người và giữa dev và ops có sự thấu cảm tự nhiên, không có chuyện ông nói gà bà nói vịt…

Để đạt được điều này, thì cần cắt giảm tối đa thời gian triển khai, các giải pháp được nêu ra bao gồm:

– Infrastructure as Code: định nghĩa các resource sử dụng (server instance, load balancer, cluster…) bằng code. AWS đưa ra sản phẩm là Cloud Formation, một tầng bọc lên dễ dùng hơn là SAM.

– Continous Integration / Continous Deployment: Tự động build/test/deploy khi phát hiện thay đổi trong code base. Các chỉ dẫn build này cũng nằm trong code. Sản phẩm AWS giới thiệu là Code Pipeline, gồm có: Code Commit – source repo, dùng git; Code Build – máy chuyên dụng để build, tính tiền theo thời gian build, dùng cái này thì có lợi điểm là không phải maintain một server build mà phần lớn thời gian idle; Code Deploy, tự động đẩy code lên môi trường chạy. Bộ tam ca này đều sử dụng share storage là S3, các gói code, hay binary build ra đều ném lên S3 cả.

Phần thứ hai nói về Xu hướng chuyển dịch sang microservices thời đại Công nghiệp 4.0. Phần này nói chung không có nhiều thông tin mới. Diễn giả đưa ra các nguyên tắc chung cho việc design microservices. Cuối buổi là chia sẻ một số guideline cho việc chuyển đổi từ monolithic architecture sang microservices, ví dụ như:

  • Only public API matters
  • Backward compatible: các API cũ nên giữ nguyên behavior
  • Eliminate foreign keys
  • Có thể chia nhỏ service theo DDD, tuy nhiên phải chú ý đến Data schema. Ngoài ra có thể chia theo use case (by verbs) hoặc theo resources (by nouns).
  • Nếu một team phát triển microservice phải phụ thuộc nhiều vào một team khác, thiết kế này có thể có vấn đề và cần được chia lại. Tất nhiên việc communicate phải diễn ra nhưng việc phụ thuộc cần phải thật ít.
  • Nếu giữa 2 services có sự trao đổi data số lượng lớn, ví dụ report service cần đọc lượng lớn dữ liệu từ các service khác, REST API sẽ không đáp ứng được. Phương án giải quyết là data pump, các service đẩy dữ liệu vào một shared storage rồi các service khác consume.

Phần ba là một case study của FPT sử dụng AWS lambda để tính toán bài toán dữ liệu lớn. Vấn đề là cần xử lý dữ liệu cảm biến của các trung tâm chăm sóc sức khỏe người già tại Nhật, lượng dữ liệu có thể lên tới 1TB/day/1 trung tâm(!). Phương án xử lý cũ của khách hàng mất 27 tiếng để xử lý dữ liệu của 1 ngày. Solution của Fsoft dùng Lambda mất 20 phút (!) (và 1k$ tiền lambda). Chỗ này mình nghe xong thấy sai sai, tuy nhiên diễn giả giải thích rằng dùng lambda để tính toán song song, vì run bao nhiêu function một lúc cũng được. Ở giữa sử dụng Simple Queue Service để schedule. Dữ liệu sau khi xử lý đẩy lên S3, lưu trữ giá rẻ. Sau đó query bằng Athena, tool này mới đối với mình, dùng để query dữ liệu lớn trực tiếp từ S3 rất hiệu quả. Tất nhiên là query dữ liệu lớn mất nhiều thời gian nên các data hot, hoặc cache sẽ lưu trong RDS như thông thường. Mô hình này có chi phí rẻ do các dịch vụ đều tính tiền theo thời gian request, S3 lưu trữ thì giá quá rẻ không cần nói nữa.

Phần bốn là workshop deploy một dockerized app dùng Fargate. Fargate hóa ra vẫn là Elastic Container Service, như đơn vị mình đã từng dùng để deploy Evermind nightly build, tuy nhiên điểm thú vị của nó là không cần lo lằng về scale cluster, chạy mấy node…, chỉ cần push image lên rồi chạy tasks đã định nghĩa. Nội dung thực hành bao gồm:

  • Dùng Cloud9 làm online IDE
  • Serve 1 static site trên S3
  • Dùng aws cli tạo các resource bằng Cloud Formation template file
  • Push image lên Elastic Container Registry
  • Tạo task và service cho Elastic Container Service, vơi deploy type là Fargate

Link bài lab: https://aws.amazon.com/getting-started/projects/build-modern-app-fargate-lambda-dynamodb-python/

Phần năm bonus là demo deploy ASP.NET Core app (eShopOnWeb) dùng Code Pipeline, với zero downtime

Tóm tắt lại thì nội dung hội thảo tương đối cơ bản, dễ tiếp thu, một số thứ có thể áp dụng được ngay. Ngoài ra thu hoạch thêm là Credit code 50 đồng ông Trump dùng đến cuối tháng, đã sung công.