Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Knative and Spring: Bringing back the func

Knative and Spring: Bringing back the func

Kubernetes is now a standard to deploy and manage containerized applications. How do functions fit into the cloud-native space in 2022? What does it take to write a function in Java or any other language and get it up and running in a Kubernetes cluster?

We’ll show with practical examples and a live demo how developers can focus on the business logic while the platform takes care of supporting event-driven and serverless workloads in a polyglot environment.

- CloudEvents provide a language and transport-agnostic way to describe events.
- Knative Eventing routes CloudEvents between producers and consumers so that developers don’t have to worry about which message broker is used under the hood (e.g. RabbitMQ, Kafka, cloud-provider specific).
- Frameworks like Spring Cloud Functions let developers focus on implementing the business logic instead of dealing with infrastructural concerns and integrations with event brokers.
- GraalVM and libraries like Spring Native make it possible to build serverless applications in Java and take advantage of the scale-to-zero feature offered by Knative Serving.
- Cloud Native Buildpacks solve the problem of building production-ready containers end to end, offering support for multiple languages and frameworks, and focusing on performance and security.

To demonstrate how all these tools can work together, we will show how Knative `func` combines them and provide developers with a Dockerfile-free and Kubernetes YAML-free experience.

C20b9829daddbee16e359b0a750660a5?s=128

Thomas Vitale

May 12, 2022
Tweet

More Decks by Thomas Vitale

Other Decks in Technology

Transcript

  1. Mauricio Salatino & Thomas Vitale Devoxx UK May 11th, 2022

    Knative and Spring Bringing back the func @salaboy @vitalethomas
  2. Mauricio Salatino VMware - Knative OSS * a.k.a @Salaboy *

    Sta ff Engineer - Knative Eventing tech lead for VMware * Knative OSS core contributor * Passionate about Functions, Platforms, Open Source and Kubernetes salaboy.com
  3. Systematic * Software Architect at Systematic, Denmark. * Author of

    “Cloud Native Spring in Action” (Manning). * Spring Security and Spring Cloud contributor. Thomas Vitale thomasvitale.com @vitalethomas
  4. Quiz Game thomasvitale.com @vitalethomas @salaboy @vitalethomas Building applications using functions

  5. Serverless @salaboy @vitalethomas

  6. Serverless Architectures Developers focus on code Focus on business logic

    @salaboy @vitalethomas Developer Platform Infrastructure Provisioning Workload Management Dynamic Scaling
  7. Knative Serving Serverless Containers on Kubernetes Developer-friendly abstractions From code

    to URL Autoscaling Scaling to zero Progressive Rollouts Request-driven Event-driven @salaboy @vitalethomas Cloud agnostic
  8. Demo thomasvitale.com @vitalethomas @salaboy @vitalethomas Knative Serving - From code

    to URL
  9. Functions @salaboy @vitalethomas

  10. Functions Functional programming model Triggered by requests or events Stateless

    Smaller scope Cold start Cost optimization @salaboy @vitalethomas
  11. Functions Patterns Synchronous Interactions Function HTTP Fire and Forget

  12. Functions Patterns Synchronous Interactions Function HTTP Request / Response

  13. Functions Patterns Synchronous Interactions Function HTTP Request / Response (Sync)

    State
  14. Functions Patterns Synchronous Interactions Function HTTP Request / Response (Scaling)

    State Function Function Load Balancer
  15. Functions Patterns Synchronous Interactions HTTP Request / Response (Scaling) State

    Load Balancer Not running useless containers
  16. Functions Patterns Asynchronous Interactions Async Processing Function HTTP Doing something

    that takes a long time …………………………………………… ………………………………………………… …………………………………………………… ……………………………………………… ……………………………………… Results
  17. Functions Patterns Asynchronous Interactions Event Based Function CloudEvent CloudEvent

  18. Functions Patterns Asynchronous Interactions Chaining Functions Function CloudEvent Event Router

    Function Function
  19. Functions Patterns Mix and match Function Request / Reply +

    Events CloudEvent HTTP Event Router
  20. Knative Functions Working with the func CLI @salaboy @vitalethomas func

    create ‣Initialize project ‣Polyglot support ‣Java, Go, Python 1 func build ‣Build and containerize ‣Use Buildpacks ‣No Docker fi le 2 func deploy ‣Run on Kubernetes ‣Knative deployment ‣No YAML 3
  21. Demo thomasvitale.com @vitalethomas @salaboy @vitalethomas Knative Functions - From code

    to URL (GO)
  22. Func - extras In active development, join the community! *

    External template repos * func run * On-cluster build, no Docker locally * 1.0 GA is on the roadmap
  23. Functions with Spring @salaboy @vitalethomas

  24. Spring Native Native executables with GraalVM Slower Heavier Build Instant

    Startup Reduced Memory Consumption Instant Peak Performance Fewer Runtime Optimizations @salaboy @vitalethomas
  25. Functional Programming Paradigm Java 8 Functional Interfaces Supplier<O> Function<I,O> Consumer<I>

    @salaboy @vitalethomas
  26. Spring Cloud Function Business logic as functions Transparent Type Conversion

    Function Arity Function Composition Reactive Support JAR Functions @salaboy @vitalethomas
  27. Demo thomasvitale.com @vitalethomas @salaboy @vitalethomas Knative Functions - From code

    to URL (Spring)
  28. Function Composition Data processing via functions uppercase() sentence() Data processing

    “I play the PIANO” “piano” “PIANO”
  29. Spring Cloud Function Deployment and integrations Knative CloudEvents RSocket Azure

    Functions Google Cloud Functions AWS Lambda @salaboy @vitalethomas
  30. Game - Architecture @salaboy @vitalethomas

  31. Kubernetes Cluster Function-based Game architecture Game architecture <Client Side> React

    Application <Orchestrator> Game FrontEnd <Function> Start Game <Function> Level X … <Function> Get LeaderB Redis (State) HTTP SYNC <Function> Level 1 …
  32. Takeaways and challenges Synchronous functions Functions scale up and down

    based on demand An Orchestrator is needed Synchronising state is hard Make sure that the data store is not a bottleneck Latency can become an issue @salaboy @vitalethomas
  33. Events @salaboy @vitalethomas

  34. Knative Eventing Event routing and triggers Developer-friendly abstractions Event-driven architectures

    Event routing Polyglot support with CloudEvents Pluggable @salaboy @vitalethomas Cloud agnostic
  35. CloudEvents Interoperability and standardization Metadata Data Id Source Type Payload

    JSON AMQP Kafka MQTT
  36. Game - Events @salaboy @vitalethomas

  37. Routing Events with Knative Eventing CloudEvents & RSocket Kubernetes Cluster

    <Client Side> React Application <Orchestrator> Game FrontEnd <Function> Level X … Redis HTTP SYNC Broker Trigger Score CloudEvent RSocket GameScore CloudEvent Trigger Another Function
  38. Takeaways and challenges Eventing An event-based approach enable more reactive

    scenarios Knative Eventing abstracts the message broker implementations CloudEvents provide a standard structure for sharing data Monitoring is required to understand how data is fl owing We need to deal with eventual consistency in our applications @salaboy @vitalethomas
  39. Discount codes Manning • 35% discount code, valid for all

    products in all format • ctwdevoxxuk22 • manning.com
  40. Resources Source code • Learn more about the game: •

    https://github.com/salaboy/from-monolith-to-k8s/tree/main/game • Deploy the game on Kubernetes: • https://github.com/ThomasVitale/eventing-game • Spring Cloud Function samples: • https://github.com/ThomasVitale/devoxxuk-2022-knative-spring-func
  41. Mauricio Salatino & Thomas Vitale Devoxx UK May 11th, 2022

    Knative and Spring Bringing back the func @salaboy @vitalethomas