Các nên tang Serverless mã nguồn mở

Một phần của tài liệu Khóa luận tốt nghiệp Mạng máy tính và truyền thông: Nghiên cứu triển khai và đánh giá các nền tảng Serverless mã nguồn mở dựa trên Kubernetes cho hệ thống máy chủ cận biên (Trang 32 - 39)

Dựa trên các tiêu chí lựa chọn các nền tang Serverless mã nguồn mở ở mục 3.1.1, tác giả lựa chọn ba nền tang đó là Apache OpenWhisk, Kubeless, OpenFaaS. Mỗi nền tảng đều có cồng động hỗ trợ lớn, cụ thể số sao trên Github đều trên 5000 sao.

3.2.1 Apache OpenWhisk

Apache OpenWhisk [15] là một nền tảng Serverless mã nguồn mở ban đầu được phát triển bởi IBM nhưng sau đó được chuyển qua cho Apache Incubator. Nó có sẵn

giấy phép Apache 2.0. Apache OpenWhisk cũng là công nghệ nằm sau chức năng như

20

một dịch vụ (Functions as a Service) trên đám mây công cộng (Public Cloud) của IBM,

Bluemix !. Hình 3.1 mô tả kiến trúc cấp cao của OpenWhisk.

Package

Service ecosytem

Bluemix services.

3rd party services

Self-enabled services

Package

Hình 3.1: Mô hình lập trình cua Apache OpenWhisk [1]

Mô hình lập trình OpenWhisk dựa trên ba thành phan: action, trigger va rule.

¢ Hanh động (action) là các chức năng không trang thái.

s Trình kích hoạt (trigger) là một lớp các sự kiện có thể bắt nguồn từ các nguồn

khác nhau

* Rule (quy tắc) giúp liên kết một trình kích hoạt (trigger) với một hành động

(action)

Hình 3.2 mô tả kiến trúc hệ thống của OpenWhisk. OpenWhisk bao gồm các thành

phần: Nginx, Controller, CouchDB 2, Kafka, Invoker and Consul Š.

'https://www.ibm.com/cloud

?https://couchdb.apache.org/

3https://www.consul.io/

21

* Nginx hoạt động như một proxy, giúp chuyển tiếp các yêu cầu đến bộ điều khiển.

* Bộ điều khiển là một REST API cho tất cả hành động mà người dùng thực hiện, bao gồm hành động CRUD trên các thực thể Apache OpenWhisk.

* CouchDB được sử dụng để xác thực. Sau khi người dùng được yêu cầu xác thực

dữ liệu sé được lưu xuống CouchDB và chuyển nó đến người thực thi (invoker).

* Kafka giúp bộ điều khiển và người thực thi giao tiếp được với nhau. Invoker sé

sinh ra một Docker container mới và chuyển đoạn mã cần thực thi vào function

đó. Phản hồi được chuyển sang cho người dùng và dữ liệu cũng được lưu trong

CouchDB.

* Consul là nơi lưu trữ phân tán key-value, được sử dụng để quản lý trạng thái của

OpenWhisk. Invoker quyết định có nên tái sử dụng một container hiện có (hot),

để bắt đầu một container tạm dừng (warm) hoặc để khởi động một container mới

(cold) dựa trên tình trang của container trong Consul.

Apache OpenWhisk hỗ trợ các ngôn ngữ lập trình như JavaScript, Swift, Python,

PHP, Java và mã nhị phân thực thi. Ngoài ra, nó cho phép chạy bat kỳ mã tùy chỉnh nào được đóng gói trong Docker container. OpenWhisk hỗ trợ các chức năng đồng

bộ, bất động bộ và lập lịch. Mỗi thành phần trong kiến trúc được chạy dưới dạng Docker container và có thể thu nhỏ theo thời gian thực. OpenWhisk có thể được thiết lập để chạy bằng cách sử dụng bất kỳ công cụ điều phối container nào, chẳng hạn

như Kubernetes hoặc Docker Swarm. Tuy nhiên, khả năng mở rộng (auto scaling)

của các chức năng được quản lý trực tiếp bởi bộ điều khiển (Controller) của Apache

OpenWhisk và nó không dựa vào hỗ trợ của Kubernetes. Giám sát các chức năng có

thể thực hiện bang cách tích hợp statsd !. Apache OpenWhisk cung cấp CLI, REST API endpoint và iOS SDK để tương tác với cụm OpenWhisk. Về phía cộng đồng hỗ

'https://github.com/statsd/statsd

22

E1 ~ Controllar

bid

katka

Hình 3.2: Kiến trúc hệ thống của Apache OpenWhisk [1]

trợ, Apache OpenWhisk có một cộng đồng tích cực trên Github [16], Slack !, Twitter (@openwhisk) và email ?

3.2.2 Kubeless

Kubeless * là một nền tảng Serverless mã nguồn mở được thiết kế để chạy trên Kubernetes, nền tảng này cho phép người dùng viết những đoạn mã nhỏ thành các function mà không cần phải lo lắng về hạ tầng bên dưới. Nó được triển khai trên một cụm Kubernetes và tận dụng những lợi thể tốt nhất của Kubernetes. Kubeless là dự án

!https://openwhisk-team.slack.com/

*https://openwhisk.apache.org/slack.html

3https://kubeless.io/

23

mã nguồn mở của Bitnami ! và được cấp phép theo giấy phép của Apache 2.0.

Hình 3.3: Kiến trúc của Kubeless [1]

Trong hình 3.3, Kubeless sử dụng Custom Resource Definitions (CRD) * để mở rộng Kubernetes API và tạo các chức năng được tùy chỉnh bằng Kubernetes API. Điều này cho phép các nhà phát triển sử dụng các Kubernetes API gốc để tương tác với các chức năng đã tạo như thể chúng là chức năng của Kubernetes. Các thành phần của Kubeless gồm

ằ Chức năng (function) chứa cỏc đoạn mó để thực thi và siờu dif liệu (metadata) để

mô tả chức nang đó như runtime va sự phụ thuộc (dependencies).

!https://bitnami.com/

?https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/

24

* Trigger được dùng để cấu hình tài nguyên cho các chức năng và một trigger có

thể chứa nhiều chức năng khác nhau. Chẳng hạn, HTTP (event-based và không

đồng bộ - asynchronous) và lập lịch.

* Runtime ! như môi trường hỗ trợ ngôn ngữ lập trình trong Kubeless. Hiện tai,

Kubeless hỗ trợ ngôn ngữ lập trình Python, Node.js, Ruby, PHP, Golang, .NET

và Ballerina.

Các chức năng được thực thi (invoke) thông qua việc sử dung Apache Kafka và

Zookeeper. Kubeless sử dụng Prometheus để giám sát các chức năng. Tính năng tự động mở rộng (auto scaling) dựa trên Kubernetes Horizontal Pod Autoscaler, có thể

thay đổi quy mô các chức năng dựa trên việc sử dụng CPU hoặc một số thông số khác được cấu hình trong ConfigMap. Kubeless cung cấp cả giao diện UI và CLI để dé dàng hơn cho người dùng sử dụng. Người dùng rất dễ dàng triển khai được chức năng của mình chỉ trong vài phút [17]. Kubeless có cộng đồng hỗ trợ tích cực, hiện tại đang có

trên Github 2, Slack 3 và Twitter (@kubeless sh).

3.2.3 OpenFaaS

OpenFaaS là một nền tảng Serverless mã nguồn mở có sẵn giấy phép của MIT. Nền tảng này tập trung vào hướng dễ dàng triển khai, đơn giản để sử dụng và quan trọng là mã nguồn mở. Hình 3.4 mô tả kiến trúc của OpenFaaS. OpenFaaS được chia thành hai thành phần chính là API Gateway và cơ quan theo dõi chức năng

(function watchdog). Prometheus được sử dung để theo dõi các function (chức năng)

trên OpenFaaS. Người dùng có thể chạy OpenFaaS trên nhiều công cụ quản trị điều phối container như Kubernetes, Docker Swarm và Nomad [18]

!https://kubeless.io/docs/runtimes/

*https://github.com/kubeless/kubeless

3http://slack.k8s.io/

*https://www.openfaas.com/

25

Function Watchdog API Gateway

(Ô se) & Kubernetes

docker

Hình 3.4: Kiến trúc hệ thống của OpenFaaS [1]

¿ REST | qm am Gateway Ƒ Invoke

function —

~rseeees---jU đU@-~... ÁN

ˆ javatn2.0

L_u OpenFaas | __CRUDI_, taas-netes its service:iatest

Collect R.E.D, ~--Seale up! 'Ẳ

Metrics on `

Ẩn: NATS Docker

Streaming | | Registry

ce) Prometheus x ©) pertvianager

Hình 3.5: Các thành phan của OpenFaaS [1]

OpenFaaS [18] có phép các nhà phát triển viết các function thông qua mẫu (template)

có sẵn của họ. Hiện tại, OpenFaaS có các mẫu cho các ngôn ngữ lập trình như C, Go, NodeJS, Python và Ruby. Tuy nhiên, các nhà phát triển có thể tự viết riêng va đóng góp vào các mẫu cho OpenFaaS. Nền tảng này hỗ trợ kích hoạt các function như HTTP và dựa trên sự kiện (event-based). Về cộng đồng hỗ trợ, OpenFaaS có một cồng đồng hỗ

trợ lớn và tích cực, hiện tại OpenFaaS có trên Github! với hơn 19 nghìn sao, Slack * và

Twitter (@openfaas).

!https://github.com/openfaas

*https://openwhisk-team.slack.com/

26

Một phần của tài liệu Khóa luận tốt nghiệp Mạng máy tính và truyền thông: Nghiên cứu triển khai và đánh giá các nền tảng Serverless mã nguồn mở dựa trên Kubernetes cho hệ thống máy chủ cận biên (Trang 32 - 39)

Tải bản đầy đủ (PDF)

(97 trang)