Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Azure Function kiến trúc Serverless

Lời nói đầu

Là một nhà phát triển ứng dụng web, có lẽ bạn đã khá quen thuộc với mô hình Front-end – Back end (Client – Server). Trong mô hình này, Front-end được cài đặt ở client side, Back end được cài đặt ở server.
Hình dưới là mô hình truyền thống vẫn hay được sử dụng
Image result for front end backend architecture
Với mô hình kiến trúc trên, khi deploy, developer cần phải setup một server bao gồm Web server và database server, do đó có thể dẫn tới những hạn chế sau
  • Khó khăn trong việc deploy, setup server.
  • Tốn kém chi phí bảo trì server.
Tuy nhiên ngày nay khi dịch vụ điện toán đám mây phát triển, thì có một cách tiếp cận mới để giải quyết vấn đề trên đó là sử dụng kiến trúc Serverless.


Serverless là gì?

Ở mô hình client – server, bạn cần thuê hoặc mua một máy chủ để deploy ứng dụng của mình. Nhưng đối với Serverless computing, bạn sẽ không cần quan tâm đến việc này. Chỉ cần đăng kí dịch vụ đối với nhà cung cấp, họ sẽ cung cấp và quản lý tài nguyên giúp bạn. Bạn chỉ việc viết code và không cần quan tâm đến việc deploy và cơ sở hạ tầng để chạy ứng dụng.  
Serverless có 2 dịch vụ chính

Backend as Service (BaaS)

Với BaaS, thay vì phải viết code ở phần backend (Java, .NET), bạn sẽ sử dụng 3rd party APIs để thực hiện những xử lý logic ở phần server. Có rất nhiều đơn vị thứ 3 cung cấp dịch vụ này như Parse, FirebaseAWS Cognito…Cách này khá tiện lợi vì giảm được effort viết code phần backend nhưng có nhược điểm là phụ thuộc nhiều vào bên thứ 3

Function as Service (FaaS)

Ở mô hình này, bạn sẽ phải viết code ở phần backend, nhưng thay vì deploy lên server, bạn deploy dưới dạng một function. Như vậy cách này bạn sẽ chủ động hơn đối với phần backend và không cần quan tâm đến server. Function này sẽ được gọi dưới dạng RestAPI, bạn sẽ trả tiền theo số lần gọi function của mình
Dịch vụ FaaS khá nổi tiếng là do của Amazon

Ưu nhược điểm của Serverless

Tuy nhiên, bất kì hệ thống nào cũng có điểm mạnh và điểm yếu riêng. Kiến trúc Serverless cũng vậy, Serverless có những điểm mạnh như sau

Lower Cost

Bạn không cần phải tốn chi phí quản lý vào bảo trì server, nhà cung cấp dịch vụ sẽ tính tiền theo số lần gọi function.

Scalability

Cũng giống như các dịch vụ cloud, khi số lượng request tăng cao, hệ thống sẽ tự tạo thêm process khi có nhiều request. Bạn không cần phải đầu tư nâng cấp server như mô hình client-server truyền thống.

More time for user experience

User không cần quan tâm đến việc xây dựng server, chỉ việc tập trung vào coding, mọi việc còn lại sẽ do nhà cung cấp dịch vụ lo.
Và những điểm yếu như sau

Security

Để sử dụng tài nguyên hiệu quả, nhà cung cấp dịch vụ có thể cài đặt ứng dụng của nhiều khách hàng khác nhau trên cùng một server vật lý. Điều đó tiềm ẩn nguy cơ về bảo mật, nếu như ứng dụng của bạn làm việc với dữ liệu quan trọng.

Perfomance

Serverless không hoạt động hiệu quả đối với ứng dụng dạng long-running. Một request trên serverless sẽ tốn nhiều thời gian hơn chạy trên server riêng.

Vendor lock-in

Ứng dụng của bạn phụ thuộc hoàn toàn vào nhà cung cấp dịch vụ, nên bạn không có toàn quyền control ứng dụng của mình, sẽ gặp khó khăn trong quá trình debug.

Hướng dẫn deploy ứng dụng với Azure Function

Phần này sẽ giới thiệu một case study cụ thể về Serverless Architecture
Microsoft Azure Function là dịch vụ Function as a service khá nổi tiếng của Microsoft, cho phép run code của bạn trên server, hỗ trợ C#, JavaScript…

Đăng kí dịch vụ

Bạn cần đăng kí 1 Microsoft account, Azure function cho phép developer dùng thử dịch vụ
Visit link dưới
Azure function cung cấp sẵn một số scenario và ngôn ngữ lập trình cho developer lựa chọn
Trong trường hợp này chọn Webhook + API và ngôn ngữ lập trình là C# hoặc JavaScript Create this function. Microsoft sẽ setup và deploy server cho bạn

Tạo function

Click nút + để tạo một function
Azure cung cấp sẵn một số ngôn ngữ như C#, JavScript và một số scenario để bạn lựa chọn. Trong trường hợp này, bạn có thể lựa chọn HttpTrigger, function này được chạy khi có HttpRequest
Đặt tên hàm là GetCurrentDateTime, chúng ta sẽ viết một Azure function đơn giản trả về thời gian hiện tại.

Start coding

Viết code như bình thường
using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)

{
   await Task.Yield();
   log.Info("C# HTTP trigger function processed a request.");
   string currentTime = DateTime.Now.ToString("h:mm:ss tt");
   return currentTime == null
       ? req.CreateResponse(HttpStatusCode.BadRequest, "Can not get current time")
: req.CreateResponse(HttpStatusCode.OK, "Current Time is " + currentTime);
   }
Sau đó chọn Get Function URL để lấy đường link
Đường link này chính là URL request bạn sẽ sử dụng để call từ ứng dụng của mình


Test function


Bây giờ bạn có thể test Azure Function của mình được rồi. Cách tiện lợi nhất là sử dụng tool add-in của Chrome là PostMan.
Copy đường link vào PostMan rồi ấn nút Send là được kết quả done

Lời kết

Qua ví dụ trên, bạn có thể thấy, sử dụng kiến trúc Serverless khiến cho việc deploy source code trở nên rất đơn giản và tiết kiệm thời gian. Developer chỉ cần tập trung vào viết code và không cần quan tâm đến việc setup, deploy trên server.
Mặc dù còn có một số hạn chế, nhưng Serverless sẽ là một xu hướng công nghệ mới trong tương lai.

Đăng nhận xét

0 Nhận xét