$30 off During Our Annual Pro Sale. View Details »

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

    View Slide

  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

    View Slide

  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

    View Slide

  4. Quiz Game
    thomasvitale.com @vitalethomas
    @salaboy @vitalethomas
    Building applications using functions

    View Slide

  5. Serverless
    @salaboy @vitalethomas

    View Slide

  6. Serverless Architectures
    Developers focus on code
    Focus on business logic
    @salaboy @vitalethomas
    Developer
    Platform
    Infrastructure

    Provisioning
    Workload

    Management
    Dynamic

    Scaling

    View Slide

  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

    View Slide

  8. Demo
    thomasvitale.com @vitalethomas
    @salaboy @vitalethomas
    Knative Serving - From code to URL

    View Slide

  9. Functions
    @salaboy @vitalethomas

    View Slide

  10. Functions
    Functional programming model
    Triggered by
    requests or events
    Stateless Smaller scope
    Cold start Cost optimization
    @salaboy @vitalethomas

    View Slide

  11. Functions Patterns
    Synchronous Interactions
    Function
    HTTP
    Fire and Forget

    View Slide

  12. Functions Patterns
    Synchronous Interactions
    Function
    HTTP
    Request / Response

    View Slide

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

    View Slide

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

    View Slide

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

    useless containers

    View Slide

  16. Functions Patterns
    Asynchronous Interactions
    Async Processing
    Function
    HTTP
    Doing
    something that
    takes a long time
    ……………………………………………
    …………………………………………………
    ……………………………………………………
    ………………………………………………
    ………………………………………
    Results

    View Slide

  17. Functions Patterns
    Asynchronous Interactions
    Event Based
    Function
    CloudEvent CloudEvent

    View Slide

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

    View Slide

  19. Functions Patterns
    Mix and match
    Function
    Request / Reply + Events
    CloudEvent
    HTTP
    Event Router

    View Slide

  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

    View Slide

  21. Demo
    thomasvitale.com @vitalethomas
    @salaboy @vitalethomas
    Knative Functions - From code to URL (GO)

    View Slide

  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

    View Slide

  23. Functions with Spring
    @salaboy @vitalethomas

    View Slide

  24. Spring Native
    Native executables with GraalVM
    Slower

    Heavier

    Build
    Instant

    Startup
    Reduced

    Memory

    Consumption
    Instant

    Peak

    Performance
    Fewer

    Runtime

    Optimizations
    @salaboy @vitalethomas

    View Slide

  25. Functional Programming Paradigm
    Java 8 Functional Interfaces
    Supplier Function Consumer
    @salaboy @vitalethomas

    View Slide

  26. Spring Cloud Function
    Business logic as functions
    Transparent

    Type

    Conversion
    Function

    Arity
    Function

    Composition
    Reactive

    Support
    JAR

    Functions
    @salaboy @vitalethomas

    View Slide

  27. Demo
    thomasvitale.com @vitalethomas
    @salaboy @vitalethomas
    Knative Functions - From code to URL (Spring)

    View Slide

  28. Function Composition
    Data processing via functions
    uppercase() sentence()
    Data processing
    “I play the PIANO”
    “piano” “PIANO”

    View Slide

  29. Spring Cloud Function
    Deployment and integrations
    Knative CloudEvents RSocket
    Azure

    Functions
    Google Cloud
    Functions
    AWS

    Lambda
    @salaboy @vitalethomas

    View Slide

  30. Game - Architecture
    @salaboy @vitalethomas

    View Slide

  31. Kubernetes Cluster
    Function-based Game architecture
    Game architecture



    React Application



    Game FrontEnd



    Start Game



    Level X






    Get LeaderB
    Redis


    (State)
    HTTP
    SYNC



    Level 1



    View Slide

  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

    View Slide

  33. Events
    @salaboy @vitalethomas

    View Slide

  34. Knative Eventing
    Event routing and triggers
    Developer-friendly

    abstractions
    Event-driven
    architectures
    Event routing
    Polyglot support
    with CloudEvents
    Pluggable
    @salaboy @vitalethomas
    Cloud agnostic

    View Slide

  35. CloudEvents
    Interoperability and standardization
    Metadata
    Data
    Id

    Source

    Type
    Payload
    JSON

    AMQP

    Kafka

    MQTT

    View Slide

  36. Game - Events
    @salaboy @vitalethomas

    View Slide

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



    React Application



    Game FrontEnd



    Level X



    Redis
    HTTP SYNC
    Broker
    Trigger
    Score

    CloudEvent
    RSocket
    GameScore

    CloudEvent
    Trigger
    Another
    Function

    View Slide

  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

    View Slide

  39. Discount codes
    Manning
    • 35% discount code, valid for
    all products in all format

    • ctwdevoxxuk22


    • manning.com

    View Slide

  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

    View Slide

  41. Mauricio Salatino & Thomas Vitale
    Devoxx UK
    May 11th, 2022
    Knative and Spring
    Bringing back the func
    @salaboy @vitalethomas

    View Slide