deep dive into openwhisk core services · • spawn docker container language runtime (js, python,...

21
Vincent Hou, Software Engineer, IBM Cloud Open Technologies http://openwhisk.org/ Deep Dive into OpenWhisk Core Services https://openwhisk-team.slack.com/ #openwhisk

Upload: others

Post on 24-May-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Vincent Hou, Software Engineer, IBM Cloud Open Technologies

http://openwhisk.org/

Deep Dive into OpenWhisk Core Services

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

#openwhisk

Page 2: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Session Topics

§ Architecture of Apache OpenWhisk

§ Core Services of Implementation

§ How to Contribute to Apache OpenWhisk

§ QA

Page 3: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Architecture of Apache OpenWhisk

Page 4: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

OpenWhisk “Core”

OpenWhisk Controller

Load Balancer Activator

HTTP request / response

Messages for Invoker

Here is the high level architecture of OpenWhisk:

OpenWhisk Platform Architecture

Router Message

Bus

Key-Value Store

Document Store

1 topic per-Invoker

Invoker Invoker Invoker •  Read message, •  Spawn Docker

container language runtime

(JS, Python, Swift, etc.)

Ansible Deployments “Source of Truth”

Deployment, Configuration

Information

•  Client endpoints •  SSL Termination

OpenWhisk Platform Components are all “Docker” containers

•  manages the Kafka cluster, tracking… −  status of nodes present in Kafka cluster −  topics, messages, and quotas.

OW CLI

RES

T

•  Actions •  Triggers •  Rules •  Namespaces •  Credentials •  Metadata •  etc.

Docker Containers

OpenWhisk APIs (CRUD)

Page 5: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

OpenWhisk “Core”

OpenWhisk Controller

Load Balancer Activator

HTTP request / response

Messages for Invoker

Here is the high level architecture of OpenWhisk:

OpenWhisk Core Services

Router Message

Bus

Key-Value Store

Document Store

1 topic per-Invoker

Invoker Invoker Invoker

RES

T l  Services containerized l  Nginx l  Controller l  CouchDB l  Consul l  Kafka & ZooKeeper l  Invoker

Docker Containers

Page 6: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Core services of Implementation

Page 7: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Nginx – Expose HTTP(S) Public Endpoint OpenWhisk launches Nginx service in a container.

l  Reverse proxy: first entry point into OpenWhisk l  Security: SSL termination

l  Install certificates. l  Install configuration file. l  Pull the image of Nginx. l  Launch the Nginx.

Ansible Role for Nginx

Page 8: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Controller – Implement Scala-based REST API Controller uses three major packages: Spray, Akka and Swagger.

•  Spray: server-side REST/HTTP support l  spray-can: HTTP server, package common/scala/src/main/scala/whisk/http l  spray-json: json implementation in scala, almost all scala files in controller l  spray-http: model of requests, responses and headers. l  spray-httpx: datastore access, marshalling, unmarshalling l  spray-routing: routing DSL for web services, request context,

authentication, etc, almost all actors in controller l  spray-client: client-side HTTP support

•  Akka: describing OpenWhisk modeling entities for API in actors and futures

•  Swagger: describing OpenWhisk API structure, able to build interactive and

neat docs, and generate client code. Standardization.

Page 9: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Controller – Implement Scala-based REST API Controller contains two sub-services: activator and load balancer, in terms of functionalities.

l  Activator: processing events produced by triggers, calling the action bound by a rule to a particular trigger. (POST to load balancer) core/controller/src/main/scala/whisk/core/controller/Triggers.scala

l  Load balancer: selecting a proper invoker to run the action, publishing

messages to message service. whisk.core.loadBalancer OpenWhisk Controller

Load Balancer Activator

HTTP request / response

Messages for Invoker

Router Message

Bus

Key-Value Store

Document Store

Page 10: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

CouchDB – maintain the system state CouchDB saves three major documents: subjects, and whisks and activations.

l  Subjects: credentials, used to authenticate and authorize by controller. l  Whisks: namespaces, and the definitions of actions, triggers, and rules, etc,

used to query by controller. l  Activations: activations, used to query by controller.

OpenWhisk Controller

Load Balancer Activator

Document Store

Service: http://<ip>:5984/_utils/

Page 11: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Consul – maintain service state Consul manages the state information of all the containerized services in OpenWhisk.

l  Load balancer accesses Consul service to decide which invoker to pick for the execution of the action.

l  Every OpenWhisk service self-register itself in Consul by Registrator service.

Key-Value Store

OpenWhisk Controller

Load Balancer Activator

http://<ip>:8500/ui/#/dc1/services

Page 12: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Kafka – Messaging service of OpenWhisk Kafka buffers the messages sent by the Controller before delivering them to the Invokers.

l  One invoker is subscribed to one topic. Communication between controller and invoker is buffered and persisted by Kafka.(System crash and heavy load covered)

l  Kafka cluster is managed by ZooKeeper: track status of nodes and also to keep track of the topics, messages, and quotas.

l  Non-blocking & blocking: asynchronous and synchronous supported. l  ActivationID is used to trace the status of running an action. l  Input to the Kafka: action to be run and parameters, sent by controller.

OpenWhisk Controller

Load Balancer Activator

Message Bus

Invoker Invoker Invoker

Messages for Invoker

1 topic per-Invoker

Page 13: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Compute Nodes (Virtual Machines)

Docker Engine

IaaS

Invokers – Run Language-Specific Docker Containers for Actions

A

OpenWhisk supports many languages (runtimes) for Actions •  JavaScript, Swift, Java, Python and more in the future…

OpenWhisk Scaling nodejs python swift java docker

Container Clusters

OpenWhisk Controller Automatically … •  Schedules the correct language runtime container for your code •  Caches Action code keeping it “warm” •  Automatically monitors performance and scales containers

“other”

Page 14: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Invokers – Most Scalable service in OpenWhisk One invoker is picked to run the action. 1. Starting the container via docker run and get the container’s IP address via docker inspect. 2. Initializing the container with the action via POST /init. 3. Run the action via POST /runDocker run: launch a new container to run the action.

Page 15: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Invoker and container

When an action is launched for the first time, its container is added to the pool for future use.

Page 16: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Invoker and container

Page 17: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Invoker and container

Page 18: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

How to contribute to OpenWhisk

Page 19: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

How to Contribute to OpenWhisk

l  Join the OpenWhisk community: http://www.apache.org/licenses/#clas. l  Communication with the OpenWhisk community: email, slack, etc. l  Create github account and configure. l  Set up local development environment: Eclipse, IntelliJ, etc. Reference: https://medium.com/openwhisk/how-to-contribute-to-openwhisk-6164c54134a6, How to contribute to OpenWhisk.

Page 20: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

Questions?

Thank you!

Page 21: Deep Dive into OpenWhisk Core Services · • Spawn Docker container language runtime (JS, Python, Swift, etc.) Ansible Deployments “Source of Truth” Deployment, Configuration

如需体验Apache OpenWhisk 请到bluemix.net注册并体验

任何问题,请微信咨询IBMOpenTech

扫码关注 IBM开源技术微讲堂 获取最新课程信息