Hội thảo công nghệ Stateless vs Stateful Serverless Architecture

Chỉ trong vòng một thập kỷ, điện toán đám mây đã trở thành một phần không thể thiếu trong công tác hàng ngày ở ngành CNTT. Các máy chủ, từ những hệ thống vật lý khổng lồ, đã tiến hóa lên nền tảng đám mây, mở đầu bằng mô hình Infrastructure as a Service (IaaS), rồi đến Platform as a Service (PaaS) và gần nhất là tiến lên Serverless như hiện nay.

Serverless Architecture

Serverless là sự phát triển của các nền tảng đám mây theo hướng mã gốc đám mây thuần túy (pure cloud native code). Đây là mô hình đưa Developer đến gần hơn với logic kinh doanh, trong khi giải phóng họ khỏi các mối lo ngại về cơ sở hạ tầng.

Mặc dù là "serverless" nhưng mô hình này không có nghĩa là "không có máy chủ", mà là "ít máy chủ hơn". Code máy chủ được định hướng theo sự kiện. Cơ sở hạ tầng phía sau serverless cho phép chúng ta có thể tức thời đáp ứng nhu cầu thay đổi về quy mô vận hành và cung cấp các phương thức thanh toán để bạn thực sự "trả tiền cho những gì bạn sử dụng".

Hội thảo công nghệ Stateless vs Stateful Serverless Architecture

Tuy vậy, serverless đòi hỏi những cách suy nghĩ và tiếp cận mới để xây dựng các ứng dụng. Serverless càng không phải là giải pháp “thần thánh” cho mọi vấn đề. Với vai trò là một Developer, bạn phải biết được:

  • Những ưu và nhược điểm của serverless là gì?
  • Tại sao bạn nên xem xét serverless cho các ứng dụng của riêng bạn?
  • Làm thế nào bạn có thể xây dựng, kiểm tra, triển khai và duy trì mã máy chủ của mình?
  • Trường hợp nào thích hợp để dịch chuyển code sang serverless và cách tốt nhất để thực hiện chuyển đổi này là gì?

Là Tech Meetup No.02 nằm trong chuỗi 04 Meetup bên lề của sự kiện VietnamWorks TECH EXPO 2019, buổi hội thảo công nghệ "Stateless vs. Stateful Serverless Architecture" sẽ giúp bạn tìm hiểu thêm về các vấn đề xoay quanh mô hình Serverless thông qua những chia sẻ thực tế từ các chuyên gia về Điện toán đám mây tại PYCOGroup.

Serverless là môi trường, nền tảng thực thi ứng dụng và dịch vụ mà không phải quan tâm đến máy chủ. Ứng dụng serverless không cần phải  quan tâm việc phân bổ, quản lý tài nguyên của hệ điều hành, và bỏ qua các vấn đề về nâng cấp và bảo mật. Với khái niệm là chỉ cần tập trung phát triển sản phẩm, việc còn lại về vận hành sẽ để nền tảng này đảm nhiệm.

Ưu điểm

Xây dụng ứng dụng serverless đồng nghĩa với việc bạn chỉ tập trung vào sản phẩm cốt lõi thay vì phải lo lắng về việc quản lý và vận hành nhiều máy chủ hoặc thời gian chạy, dù trên nền tảng đám mây hay tự xây dựng hệ thống máy chủ. Sự cắt giảm công sức tổng thể này sẽ giúp cho các nhà phát triển dành thời gian và năng lượng để tập trung vào việc xây dựng các sản phẩm tuyệt vời có quy mô linh hoạt và ổn định cao.

Không cần quản lý máy chủ: Bạn sẽ không cần cung cấp hay duy trì bất kỳ máy chủ nào. Sẽ không cần phần mềm hoặc thời gian chạy để cài đặt, nâng cấp hoặc quản trị.

Thay đổi quy mô một cách linh hoạt: Ứng dụng của bạn sẽ có khả năng thay đổi quy mô tự động hoặc bằng cách điều chỉnh dung lượng thông qua việc chuyển đổi đơn vị sử dụng (ví dụ: thông lượng, bộ nhớ) thay vì với máy chủ độc lập thì sẽ phức tạp hơn.

Độ sẵn sàng cao: Ứng dụng serverless có độ sẵn sàng tích hợp và dung sai cao. Bạn sẽ không cần tạo kiến trúc cho các khả năng này do các dịch vụ chạy ứng dụng đã cung cấp cho ứng dụng theo mặc định. Ngoài ra, có để chọn trung tâm dữ liệu (một hoặc nhiều nơi) để triển khai sản phẩm một cách dễ dàng.

Tiết kiệm chi phí: chi phí gần như bằng 0 sau khi triển khai nếu bạn không có request nào (hoặc không có hành động gọi hàm), còn sử dụng bao nhiêu thì tính tiền bấy nhiêu.

Khuyết điểm

Serverless là một ý tưởng tuyệt vời nhưng không hoàn hảo, serverless có những vấn đề riêng mà bạn cũng phải suy nghĩ trước khi quyết định sử dụng:

Độ trễ: Hiệu suất có thể là một vấn đề, chính bản thân mô hình này có thể gây ra độ trễ lớn hơn trong quá trình các nguồn tài nguyên điện toán phản ứng lại với lệnh của các ứng dụng. Nếu khách hàng yêu cầu hiệu suất cao thì việc sử dụng các máy chủ ảo được phân bổ sẽ là một lựa chọn ưu việt hơn.

Gỡ lỗi (Debug): Công việc giám sát và gỡ lỗi của serverless computing cũng khá khó khăn. Việc bạn không sử dụng một nguồn tài nguyên máy chủ thống nhất làm cho cả hai hoạt động này gặp nhiều trở ngại. (Tin tốt là công cụ này sẽ dần được để cải thiện xử lý giám sát và gỡ lỗi tốt hơn trong môi trường không máy chủ.)

Giới hạn về bộ nhớ, thời gian: các nhà cung cấp đều giới hạn tài nguyên ở các mức cố định về bộ nhớ và thời gian thực thi (timeout). Giả sử timeout tối đa là 5 phút, nếu bạn chạy quá 5 phút, quá trình thực thi sẽ bị ngắt. Về bộ nhớ, thì sẽ thiết lập mỗi mức khác nhau tuỳ nhà cung cấp, AWS có memory là 3008MB (sẽ được cấp CPU cao tương ứng), nếu ứng dụng yêu cầu bộ nhớ lớn thì sẽ không đáp ứng được. Liên quan đến vấn đề bộ nhớ này, thì cũng cần phải lưu tâm lúc lập trình nên tối ưu tốt, để tiết kiệm chi phí.

Phụ thuộc nhà cung cấp: bạn không thể muốn chạy phiên bản của phần mềm, nền tảng chính xác như bạn muốn. Ví dụ Nodejs bạn cần 10.x nhưng nhà cung cấp chỉ hỗ trợ đến 8.x, thì bạn sẽ không sử dụng được nền tảng này. Như vậy, trước khi sử dụng, bạn cần cân nhắc các nền tảng được hỗ trợ.

Chi phí ngầm: tuỳ nhà cung cấp có tính hay không, nhưng cơ bản là sẽ phát sinh chi phí lưu trữ mã nguồn, băng thông, và chi phí về lưu trữ dữ liệu (tuỳ ứng dụng có sử dụng hay không, ví dụ DynamoDB, RDMS … thì sẽ được tính riêng). Mặc dù, tuy không nhiều nhưng nếu không tối ưu, các phần chi phí ngầm sẽ còn cao hơn cả chi phí cho serverless.

Thời gian để nghiên cứu: trước đây bạn phải học cách sử dụng, quản lý máy chủ thì giờ đây bạn cũng cần thời gian để học để quản lý các tài nguyên trong serverless, mặc dù ko phải quá khó như quản lý máy chủ, nhưng không thể không tính. Ví dụ bạn sẽ mất thời gian để hiểu về cách sử dụng CloudFormation, IAM policies, quản lý cấu hình về stage, region, memory của Functions…

Khi nào nên sử dụng serverless

Có rất nhiều trường hợp có thể ứng dụng được serverless, điểm chung là tất cả những ứng dụng không dính dáng đến điểm yếu của serverless

Serverless

Websites và APIs: hoàn toàn có thể xây dựng 1 website hoặc API, website có thể là động hoặc là bán tĩnh (bán tĩnh nghĩa là nguồn gốc file là tĩnh, nhưng dùng route động). Thường thì người ta hay xây dựng Restful API với serverless, nhưng mình thích áp dụng cho Graphql hơn, vì Restful có thể trả về dữ liệu không dùng tới nhưng mình phải trả tiền băng thông 

Xử lý đa phương tiện: các thao tác xử lý hình ảnh, video với yêu cầu không quá cao như cắt, nén, định dạng kích thước ảnh, tạo ảnh thumbnail, hoặc chuyển đổi bộ mã của video để phù hợp với thiết bị tương ứng.

Xử lý sự kiện: có thể đóng vai trò như 1 công tắc cầu giao để thực hiện một loạt các hành động khác khi được kích hoạt tuỳ theo sự kiện.

Xử lý dữ liệu: tuỳ theo ngữ cảnh mà có thể ứng dụng như chatbot, IoT,… lý do mà serverless thích hợp với mảng này vì với chatbot hay IoT chúng ta không biết khi nào dữ liệu sẽ tới, khi nào sẽ cần xử lý dữ liệu nên chúng ta không cần phải xây dựng máy chủ luôn luôn chạy và lãng phí ở thời gian chờ.

Nội dung & diễn giả

Phần 1: Góc nhìn thực tế về Serverless - Diễn giả Anton Mednonogov, Technical Architect tại Ansarada (đối tác của PYCOGroup)

  • Tổng quan về quá trình hình thành Serverless
  • Sự non trẻ của nền tảng và các vấn đề tồn đọng trong thế giới Serverless
  • Những trường hợp thích hợp nhất để áp dụng kiến trúc Serverless

Phần 2: Micro-services kết hợp cùng Azure Durable Function - Diễn giả Van Thi, Technical Architect tại PYCOGroup

  • Ưu điểm của Durable Function
  • Cốt lõi của Durable Function
  • Các pattern trong Durable Function

Thời gian & địa điểm

Thời gian: 06.30PM - 08.45PM, ngày 12 tháng 09 năm 2019

Địa điểm: Văn phòng VietnamWorks – Lầu 20, 11 Đoàn Văn Bơ, Phường 12, Quận 4, TP.HCM