Top Banner
OpenWhisk on Mesos Tyson Norris/Dragos Dascalita Haut, Adobe Systems, Inc.
28

OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

May 30, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

OpenWhisk on MesosTyson Norris/Dragos Dascalita Haut, Adobe Systems, Inc.

Page 2: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

OPENWHISK ON MESOS

Page 3: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

SERVERLESS BACKGROUND

OPERATIONAL EVOLUTION

Page 4: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

SERVERLESS BACKGROUND

CUSTOMER FOCUSED DEVELOPMENT

Page 5: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

SERVERLESS BACKGROUND

CUSTOMER FOCUSED EXTENSIONS

Page 6: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

A DEMO

ALEXA SKILLS - A SERVERLESS USE CASE

▸ Demo

▸ Associate Alexa skills with serverless functions

Page 7: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

EXTENDING ADOBE ANALYTICS WITH ALEXA

Runtime “How many page views this month ?”

I feel like we should speak maybe for a 3-4 minutes why do we care so much about serverless and end that with this demo, and then get into more details of how. WDYT ? I could cover the motivation part too.

Tyson: not just why server less is important for us, but also “why running your own platform” ( Serverless infrastructure vs app specific server less )

Page 8: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

SERVERLESS BACKGROUND

INSIDE OPENWHISK

Page 9: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

ORIGINAL WHISK

OPENWHISK

▸ “Apache OpenWhisk is a serverless, open source cloud platform that executes functions in response to events at any scale.”

▸ Or: functions in docker containers

▸ And: CLI + API = function management

Page 10: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

ORIGINAL WHISK

OPENWHISK CONCEPTS

▸ Controller + Invoker

▸ Execution flow

Page 11: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

ORIGINAL WHISK

OPENWHISK SCALING

▸ Add an Invoker

▸ Invoker will advertise itself via Kafka

▸ Controller will register it and monitor its health

But…

▸ We’re a Mesos shop.

▸ We don’t want competing cluster (or container) managers

▸ Can I use mesos to manage the cluster?

▸ Can I use mesos to control my containers that invoke actions?

Page 12: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

YES!WITH SOME MINOR CHANGES

Page 13: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

MESOS FRAMEWORKS

HOW TO MESOS IN AKKA

▸ OpenWhisk is an Akka application (Scala)

▸ OpenWhisk uses docker to launch containers

▸ Put a Mesos Actor in there!

But…

▸ What Mesos Actor?

Page 14: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

MESOS FRAMEWORKS

MESOSIFICATION IN 3 STEPS

▸ Build a Mesos Actor

▸ Make OpenWhisk extensible

▸ Launch Mesos Tasks

Page 15: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

MESOS ACTOR

A MESOS ACTOR IN AKKA

▸ Existing libraries didn’t fit (Scala, HTTP API)

Let’s build a new one!

▸ Akka HTTP + Akka Streams

▸ https://github.com/adobe-apiplatform/mesos-actor

Page 16: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

MESOS ACTOR

A MESOS ACTOR IN AKKA

▸ Mesos HTTP + Protobuf messages -> Scala classes + Akka Messages

Page 17: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

MESOS ACTOR

A SHORT DEMO

▸ Mesos cluster using docker-compose

▸ SampleFramework

▸ TaskMatcher - matching pending tasks to offers - default is “first match”

▸ TaskBuilder - building TaskInfo protobuf from requirements - default is “verbatim”

▸ K.I.S.S. - A simplified interface to Mesos task launching

▸ DEMO

Page 18: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

PENDING WORK

MESOS-ACTOR TODO

▸ Framework ID persistence (zookeeper, etc)

▸ Reconcile on startup (next update received will reset tasks)

▸ HA (multiple framework instances, leader election, shared task state - based on Akka Clustering)

▸ Multi-master redirect (redirect to current leader)

▸ Re-subscribe after disconnect (in master/framework failover)

▸ Mesos roles

Page 19: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

BACK TO OPENWHISK

A SERVERLESS PLATFORM ON MESOS

▸ YOUR servers

▸ YOUR Mesos cluster

▸ Operators expand/contract Mesos cluster

▸ OpenWhisk Alterations

▸ Controller - none

▸ Invoker - ContainerFactory

Page 20: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

OPENWHISK CHANGES

INVOKER - BEFORE

Page 21: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

OPENWHISK CHANGES

OPENWHISK INVOKER

▸ Invoker changes

▸ Deploy: 1 per cluster (instead of 1 per host!)*

▸ Configure: MesosContainerFactory SPI (instead of DockerContainerFactory)

▸ Configure: LogDriverLogStore SPI (instead of DockerLogStore)

* HA? Details later

Page 22: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

OPENWHISK CHANGES

INVOKER - AFTER

Page 23: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

AKKA CLUSTER

HA IN THE AKKA CLUSTER

Page 24: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

AKKA CLUSTER

1. AKKA CLUSTER

▸ Shared container state

▸ All cluster nodes have visibility to same container pool

▸ 1 leader

▸ Single leader is responsible for streaming Mesos messages from master

Page 25: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

AKKA CLUSTER

2. FRAMEWORK FAILOVER

▸ Shared container state

▸ Containers remain when scheduler stream is interrupted

▸ New Containers cannot be created until new scheduler instance resumes

▸ Mitigate downtime with “prewarm containers”

▸ 1 leader

▸ New leader is elected by Akka

▸ New leader will create new subscription to Mesos master with the same FrameworkID

▸ Reconcile existing tasks

▸ Resume managing containers

Page 26: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

OPENWHISK CHANGES

OPENWHISK DETAILS

Page 27: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

OPENWHISK CHANGES

OPENWHISK ALTERATIONS

▸ SPI - service provider interface: “Service Provider Interface (SPI) is an API intended to be implemented or extended by a third party. It can be used to enable framework extension and replaceable components.”

trait ContainerFactory { def createContainer(tid: TransactionId, name: String, actionImage: ExecManifest.ImageName, userProvidedImage: Boolean, memory: ByteSize)(implicit config: WhiskConfig, logging:Logging): Future[Container] }

trait LogStore { def containerParameters: Map[String, String] def logs(activation: WhiskActivation): Future[ActivationLogs] def collectLogs(container:Container, action: ExecutableWhiskAction) (implicit transid: TransactionId): Future[Vector[String]] }

Page 28: OpenWhisk on Mesos...ORIGINAL WHISK OPENWHISK SCALING Add an Invoker Invoker will advertise itself via Kafka Controller will register it and monitor its health But… We’re a Mesos

OPENWHISK CHANGES

OPENWHISK ALTERATIONS

▸ ContainerFactory SPI (PR#2659)

▸ MesosContainerFactory (coming soon)

▸ LogStore SPI (PR#2695)

▸ SplunkLogStore