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