Serverless là gì? Hãy sẵn sàng với serverless!

9Chia sẽ

Facebook

Bạn đang đọc:

TwitterKhái niệm về serverless là gì thì cũng không còn mới lạ lắm cho nhiều người, tuy nhiên để thực sự sử dụng, thưởng thức ưu khuyết điểm trong thực tiễn thì cũng không phải nhiều lắm. Sau một thời hạn nghiên cứu và điều tra về serverless, mình tổng kết một vài kinh nghiệm tay nghề cá thể, cố gắng nỗ lực lý giải đơn thuần để người mới thuận tiện tiếp cận nghành nghề dịch vụ này .

Serverless là gì ?

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.

Điều quan trọng và khác biệt nhất trong serverless là bạn chỉ trả tiền khi và chỉ những phần bạn sử dụng. Giả sử bạn có một máy chủ ảo, thì thường sẽ được tính tiền trọn gói bao gồm thời gian chạy 24/7 trong 1 tháng, CPU và RAM, băng thông, lưu trữ. Bạn vẫn sẽ phải trả tiền hàng tháng đều đặn cho dù cái máy chủ ảo đó không chạy, hoặc chỉ sử dụng 5~10% công suất thì bạn vẫn phải trả trọn gói. Hiểu một cách nôm na, thì serverless như gói cước điện thoại được tính theo block giây, gọi bao nhiêu tính tiền bấy nhiêu, còn máy chủ ảo thường thì phải trả tiền thuê bao hàng tháng dù có phải sử dụng hay không.

Ưu và điểm yếu kém của serverless

Ưu điểm

Xây dụng ứng dụng serverless đồng nghĩa tương quan với việc bạn chỉ tập trung chuyên sâu vào mẫu sản phẩm cốt lõi thay vì phải lo ngại về việc quản trị và quản lý và vận hành nhiều sever hoặc thời hạn chạy, dù trên nền tảng đám mây hay tự kiến thiết xây dựng mạng lưới hệ thống sever. Sự cắt giảm công sức của con người tổng thể và toàn diện này sẽ giúp cho những nhà tăng trưởng dành thời hạn và nguồn năng lượng để tập trung chuyên sâu vào việc kiến thiết xây dựng những loại sản phẩm tuyệt vời có quy mô linh động và không thay đổi 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 sáng tạo độc đáo tuyệt vời nhưng không tuyệt vời và hoàn hảo nhất, serverless có những yếu tố riêng mà bạn cũng phải tâm lý trước khi quyết định hành động 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…

Xem thêm:

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

Có rất nhiều trường hợp hoàn toàn có thể ứng dụng được serverless, điểm chung là tổng thể những ứng dụng không dính dáng đến điểm yếu của 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 😀 (Xem thêm Graphql là gì).

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

So sánh 1 số ít nhà cung ứng số 1

Hiện nay có rất nhiều nhà sản xuất dịch vụ giúp bạn tạo ra những functions sử dụng quy mô serverless một cách khá thuận tiện :

  • AWS Lambda: nói về thị phần cung cấp hạ tầng cloud hiện nay thì AWS vấn đang dẫn đầu và họ cũng đưa ra dịch Lambda để người dùng có thể sử dụng và tạo ra các functions trên mô hình serverless. Khi kết hợp với các dịch vụ khác như API Gateway, S3,.. thì có thể tạo được một API server hay một hệ thống tự động xử lí khi có file upload lên S3. AWS Lambda hỗ trợ khá nhiều ngôn ngữ như Node.js, Java, C#, Python,…
  • Google Cloud Function: thằng này chỉ hỗ trợ Nodejs
  • Azure Functions: hàng của Microsoft, hỗ trợ C#, JavaScript, F#, Python, Batch, PHP, PowerShell

Còn nhiều nhà cung ứng khác như Kubeless, Fn, … tuy nhiên 3 ông ở trên có lẽ rằng có thị phần lớn nhất và được chăm sóc hơn. Ở dưới là chi tiết cụ thể so sánh 1 số thông số kỹ thuật giữa AWS Lambda, Google Cloud Function và Azure FunctionTính năngAWS LambdaGoogle CloudAzure FunctionsKhả năng mở rộngTự độngTự độngBằng tay hoặc theo plan đặt trướcSố Function tối đaKhông giới hạn1000 trên 1 projectKhông giới hạnXử lí đồng thời1000 trên 1 account 1 region (soft limit)Không giới hạnKhông giới hạnThời gian xử lí tối đa300 sec (5 min)540 seconds (9 minutes)300 sec (5 min)Ngôn ngữJavaScript, Java, C#, and PythonOnly JavaScriptC#, JavaScript, F#, Python, Batch, PHP, PowerShellCài đặt dependenciesĐóng gói trong source packpagenpm package.jsonNpm, NuGetDeploymentsChỉ dùng ZIP upload (to Lambda or S3)ZIP upload, Cloud Storage hoặc Cloud Source RepositoriesVisual Studio Team Services, OneDrive, Local Git repository, GitHub, Bitbucket, Dropbox, External repositoryBiến môi trườngCóChưa hỗ trợApp Settings và ConnectionStrings trong App ServicesVersioningVersions và aliasesCloud Source branch/tagCloud Source branch/tagEvent-drivenS3, SNS, SES, DynamoDB, Kinesis, CloudWatch, Cognito, API Gateway, CodeCommit, etc.Cloud Pub/Sub hoặc Cloud Storage Object Change NotificationsBlob, EventHub, Generic WebHook, GitHub WebHook, Queue, Http, ServiceBus Queue, Service Bus Topic, Timer triggersHỗ trợ HTTP(S)API GatewayHTTP triggerHTTP triggerOrchestrationAWS Step FunctionsChưa hõ trợAzure Logic AppsLoggingCloudWatch LogsStackdriver LoggingApp Services monitoringMonitoringCloudWatch & X-RayStackdriver MonitoringApplication InsightsIn-browser code editorCóChỉ cho Cloud Source RepositoriesFunctions environment, App Service editorGranular IAMIAM rolesChưa hỗ trợIAM rolesPricingfree 1M requests, sau đó $0.20/1M requests, thêm $0.00001667/GB-secfree 1M requests, sau đó $0.40/1M requests, thêm $0.00000231/GB-secfree 1M requests, sau đó $0.20/1M requests, thêm $0.000016/GB-s

Xây dựng mạng lưới hệ thống để trở thành nhà phân phối serverless

Vì sự nổi trội về ưu điểm của serverless, nên lúc bấy giờ cũng đã có 1 số ít mã nguồn mở để kiến thiết xây dựng thành nền tảng cung ứng serverlessOpenFaaS – Serverless Functions Made Simplehttps://github.com/openfaas/faasFireCracker – Secure and fast microVMs for serverless computinghttps://github.com/firecracker-microvm/firecrackerMình thì chỉ chăm sóc tới việc xài thôi, nên không tìm hiểu và khám phá được ở mảng này .

Fullstack Station Tips

Ngày nay khi mà những công cụ tương hỗ lập trình viên tập trung chuyên sâu vào việc thiết kế xây dựng mẫu sản phẩm càng nhiều, thì rõ ràng chính lập trình viên chính là những người hưởng lợi nhất. Serverless cũng là tương lai của những lập trình viên, khi không còn phụ thuộc vào vào phần cứng, sever nữa .Serverless giúp cho tất cả chúng ta không còn lo về ngân sách duy trì sever, không còn lo khi loại sản phẩm chưa có lệch giá đã phải trả tiền duy trì. Cho dù serverless là không hoàn hảo nhất, nhưng với những ưu điểm nhiều hơn khuyết điểm và năng lực ứng dụng to lớn, serverless là một mảnh đất phì nhiêu cho bạn tăng trưởng .Quan điểm của Fullstack Station là đa năng, gọn nhẹ và không nhờ vào, muốn trở thành lập trình viên độc lập thì càng nên học và ứng dụng serverless .

Tham khảo :

http://tech.vtijapan.co.jp/serverless-gioi-thieu-chung-chung/

https://serverless.com/learn/use-cases/

Xem thêm:

https://www.alibabacloud.com/blog/4-use-cases-of-serverless-architecture_593862https://epsagon.com/the-best-5-use-cases-for-the-serverless-beginner/

Source:
Category: