Tìm Hiểu Kiến Trúc Serverless Với Azure Function

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

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à AWS Lambda 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.

Performance

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…

1. Đă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ụ

Tham khảo link này.

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

2. 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.

3. 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

4. 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ả.

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.

Đỗ Trọng Nguyên – FPT Software

 

One thought on “Tìm Hiểu Kiến Trúc Serverless Với Azure Function

  • 22/05/2017 at 10:54 sáng
    Permalink

    Tác giả có thể phân tích thêm hoặc cho 1 số CS cụ thể khi nào nên dùng mô hình serverless & khi nào ko nên ko?

    Reply

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *