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.

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. Serverless Architectures Developers focus on code Focus on business logic

    @salaboy @vitalethomas Developer Platform Infrastructure Provisioning Workload Management Dynamic Scaling
  5. 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
  6. Functions Functional programming model Triggered by requests or events Stateless

    Smaller scope Cold start Cost optimization @salaboy @vitalethomas
  7. Functions Patterns Asynchronous Interactions Async Processing Function HTTP Doing something

    that takes a long time …………………………………………… ………………………………………………… …………………………………………………… ……………………………………………… ……………………………………… Results
  8. 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
  9. 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
  10. Spring Native Native executables with GraalVM Slower Heavier Build Instant

    Startup Reduced Memory Consumption Instant Peak Performance Fewer Runtime Optimizations @salaboy @vitalethomas
  11. Spring Cloud Function Business logic as functions Transparent Type Conversion

    Function Arity Function Composition Reactive Support JAR Functions @salaboy @vitalethomas
  12. Spring Cloud Function Deployment and integrations Knative CloudEvents RSocket Azure

    Functions Google Cloud Functions AWS Lambda @salaboy @vitalethomas
  13. 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 …
  14. 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
  15. Knative Eventing Event routing and triggers Developer-friendly abstractions Event-driven architectures

    Event routing Polyglot support with CloudEvents Pluggable @salaboy @vitalethomas Cloud agnostic
  16. 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
  17. 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
  18. Discount codes Manning • 35% discount code, valid for all

    products in all format • ctwdevoxxuk22 • manning.com
  19. 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
  20. Mauricio Salatino & Thomas Vitale Devoxx UK May 11th, 2022

    Knative and Spring Bringing back the func @salaboy @vitalethomas