Spring Cloud Function
Going Serverless
Orkhan Gasimov
Digital Transformation Architect @ GlobalLogic
15 years of software engineering;
training & mentorship;
author of trainings about:
Microservices;
Spring Cloud;
Akka;
2Speaker
Concepts
Architecture
Features
Examples
3Agenda
Evolution
Distributed Application Design
5
Enterprise
Evolution
6
Enterprise
App Server
Evolution
7
Enterprise
App Server
Module
Module
Module
Module
Evolution
8
Enterprise
Evolution
App Server 1
Module
Module
Module
Module
App Server N
Module
Module
Module
Module
9
Enterprise
Evolution
App Server 1
Module
Module
Module
Module
App Server N
Module
Module
Module
Module
Admin Server
Deployment & Configuration
10
Enterprise
Evolution
Module
Module
Module
Module
Module
Module
Module
Module
Admin Server
Deployment & Configuration
11
Enterprise
Evolution
App
App
App
App
App
App
App
App
Admin Server
Deployment & Configuration
12
Enterprise
Evolution
App
App
App
App
App
App
App
App
Discovery & Configuration
Microservices
13
Enterprise
Evolution
App
App
App
App
App
App
App
App
App
App
App App
App
App
App
App
App
App
App
App
Discovery & Configuration
Microservices
14
Enterprise
Evolution
App
App
App
App
App
App
App
App
App
App
App App
App
App
App
App
App
App
App
App
Server
Discovery & Configuration
Microservices
15
Enterprise
Evolution
App
App
App
App
App
App
App
App
App
App
App App
App
App
App
App
App
App
App
App
Server
Modules
Discovery & Configuration
Microservices
16
Enterprise
Evolution
App
App
App
App
App
App
App
App
App
App
App App
App
App
App
App
App
App
App
App
Server
Modules
Fn
Discovery & Configuration
Microservices
17
Enterprise
Evolution
App
App
App
App
App
App
App
App
App
App
App App
App
App
App
App
App
App
App
App
Server
Modules
Fn ?
Discovery & Configuration
Microservices
18
Enterprise
Evolution
App
App
App
App
App
App
App
App
App
App
App App
App
App
App
App
App
App
App
App
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Discovery & Configuration
Microservices
19
Enterprise
Evolution
App
App
App
App
App
App
App
App
App
App
App App
App
App
App
App
App
App
App
App
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Server
Modules
Fn ?
Discovery & Configuration
Microservices
20
Enterprise
Evolution
App
App
App
App
App
App
App
App
Discovery & Configuration
Microservices
21
Enterprise
Evolution
Microservices
Discovery & Configuration
App App App App
App App App App
22
Enterprise
Evolution
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Discovery & Configuration
Microservices Functions
23
Enterprise
Evolution
Distributed Functions
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Microservices Functions
Discovery & Configuration
24
Enterprise
Evolution
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Distributed Functions
Microservices Functions
Discovery & Configuration
HTTP
25
Enterprise
Evolution
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Distributed Functions
Microservices Functions
Discovery & Configuration
MQHTTP
26
Enterprise
Evolution
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Discovery & Configuration Spring
Distributed Functions
Microservices Functions
MQHTTP
27
Enterprise
Evolution
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Discovery & Configuration
MQHTTP
Cloud Spring
Distributed Functions
Microservices Functions
28Monolith
Sales
Warehouse
Accounting
Discounts
Client
29Service-Oriented
Sales
Warehouse
Accounting
Discounts
Client
Sales
Sales
30Scalability
Sales
Warehouse
Accounting
Discounts
Client
31API Gateway
Sales
Sales
Sales
Warehouse
Accounting
Discounts
Client API Gateway
32Service Discovery
Sales
Sales
Sales
Warehouse
Accounting
Discounts
Client API Gateway
Service
Registry
Users
Accounting
Warehouse
33Dynamic Coordination
Sales
Sales
Warehouse
Accounting
Discounts
Client API Gateway
Service
Registry
34CQRS + Event Sourcing
Client API Gateway
Command
Query
35CQRS + Event Sourcing
Query
Command
Client API Gateway
Command
Query
36CQRS + Event Sourcing
Query
Command
Client API Gateway
Service
Registry
Command
Query
37CQRS + Event Sourcing
Query
Command
Client API Gateway
Service
Registry
Command
Query
DB DB
38CQRS + Event Sourcing
Event
Store
Query
Command
Client API Gateway
Service
Registry
Command
Query
DB DB
39CQRS + Event Sourcing
Event
Handler
Event
Store
Query
Command
Client API Gateway
Service
Registry
Command
Query
DB DB
40CQRS + Event Sourcing
Fn Fn Fn
Event
Handler
Event
Store
Query
Command
Client API Gateway
Service
Registry
Command
Query
DB DB
41Functions
Sales Database
42Functions
Sales
HTTP
Database
43Functions
Sales
HTTP
Database
MQ
44Functions
Sales
HTTP HTTP
Database
MQ
Sales
HTTP HTTP
Database
MQ
45Functions
Sales
HTTP HTTP
MQ
Database
MQ
46Functions
Sales
HTTP HTTP
MQ
Database
MQ
Accounting
Discounts
Warehouse
Spring Cloud Function
Serverless & X-Platform
48Components
Service Service Service
49Components
Service Service Service
Repository Repository RepositoryRepository
50Components
Controller
Service
Controller
Service Service
Repository Repository RepositoryRepository
51Components
Controller
Service
Controller
Service Service
Repository Repository RepositoryRepository
DTO DTO
Entity Entity Entity Entity
52Components
Controller
Service
Controller
Service Service
Repository Repository RepositoryRepository
DTO DTO
Entity Entity Entity Entity
53Components
Service
Function
Function
Function
Function
Functions
Spring Cloud Function
55Functions
Function
56Functions
Supplier Function
57Functions
Supplier ConsumerFunction
Beans
Functions as Beans
59Beans
Declare function as beans
@SpringBootApplication
public class TestApp {
60Beans
Declare function as beans
@SpringBootApplication
public class TestApp {
@Bean
public Function<Flux<String>, Flux<String>> upperCase() {
return flux -> flux.map(String::toUpperCase);
}
61Beans
Declare function as beans
@SpringBootApplication
public class TestApp {
@Bean
public Function<Flux<String>, Flux<String>> upperCase() {
return flux -> flux.map(String::toUpperCase);
}
@Bean
public Supplier<String> helloWorld() {
return () -> "Hello World";
}
62Beans
Declare function as beans
@SpringBootApplication
public class TestApp {
@Bean
public Function<Flux<String>, Flux<String>> upperCase() {
return flux -> flux.map(String::toUpperCase);
}
@Bean
public Supplier<String> helloWorld() {
return () -> "Hello World";
}
public static void main(String[] args) {
SpringApplication.run(TestApp.class, args);
}
}
63Beans
@Component
public class HelloWorld implements Supplier<String> {
@Override
public String get() {
return "Hello World";
}
}
64Beans
@Component
public class HelloWorld implements Supplier<String> {
@Override
public String get() {
return "Hello World";
}
}
@Component
public class UpperCase implements Function<Flux<String>, Flux<String>> {
@Override
public Flux<String> apply(Flux<String> flux) {
return flux.map(String::toUpperCase);
}
}
65Beans
@SpringBootApplication
public class TestApp {
public static void main(String[] args) {
SpringApplication.run(TestApp.class, args);
}
}
@Component
public class HelloWorld implements Supplier<String> {
@Override
public String get() {
return "Hello World";
}
}
@Component
public class UpperCase implements Function<Flux<String>, Flux<String>> {
@Override
public Flux<String> apply(Flux<String> flux) {
return flux.map(String::toUpperCase);
}
}
Web
Functions as Endpoints
67Endpoints
Supplier ConsumerFunction
68Endpoints
Supplier ConsumerFunction
69Endpoints
Supplier ConsumerFunction
70Endpoints
Supplier ConsumerFunction
Deploy functions as HTTP Endpoints
71Web
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-function-web</artifactId>
</dependency>
Stream
Functions on Stream handlers
73Handlers
Supplier ConsumerFunction
74Handlers
Supplier ConsumerFunction
Source SinkProcessor
Deploy functions as Stream handlers
75Stream
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-{rabbit/kafka/...}</artifactId>
</dependency>
76Stream
spring:
profiles: upper
cloud:
stream:
bindings:
input:
destination: hello
output:
destination: upper
function:
stream:
sink:
name: upperCase
source:
name: upperCase
77Stream
spring:
profiles: hello
cloud:
stream:
bindings:
output:
destination: hello
function:
stream:
sink:
enabled: false
source:
name: helloWorld
Deployment
Functions anywhere
• Cloud
• Amazon AWS
• Microsoft Azure
• Apache OpenWhisk
79Deployment
• Cloud
• Amazon AWS
• Microsoft Azure
• Apache OpenWhisk
• Spring Cloud Data Flow
• Kubernetes
• Cloud Foundry
• Mesos
• Spark
80Deployment
81Spring Cloud Data Flow
82Spring Cloud Data Flow
Data Flow
Server
83Spring Cloud Data Flow
Data Flow
Server
Admin
UI/CLI
84Spring Cloud Data Flow
Data Flow
Server
Admin
UI/CLI
Maven Repo
85Spring Cloud Data Flow
Data Flow
Server
Admin
UI/CLI
MQ
Maven Repo
86Spring Cloud Data Flow
Supplier ConsumerFunction
Source SinkProcessor
87Spring Cloud Data Flow
Supplier ConsumerFunction
Source Processor Sink
file aggregator aggregate-counter
ftp bridge cassandra
gemfire filter counter
gemfire-cq groovy-filter field-value-counter
http groovy-transform file
jdbc header-enricher ftp
jms httpclient gemfire
load-generator pmml gpfdist
loggregator python-http hdfs
mail python-jython hdfs-dataset
mongodb scriptable-transform jdbc
mqtt splitter log
rabbit
tasklaunchrequest-
transform
mongodb
s3 tcp-client mqtt
sftp tensorflow pgcopy
syslog transform rabbit
tcp twitter-sentiment redis-pubsub
tcp-client router
time s3
trigger sftp
triggertask task-launcher-cloudfoundry
twitterstream task-launcher-local
task-launcher-yarn
tcp
throughput
websocket
Examples
Projects & Usage
90Examples
• Projects
• Media Processing
• Data Processing Pipelines
• Financial Calculators
• Use-cases
• Semi-universal deployment model
• Separation of independent function from service logic
• On-prem FaaS
• Proprietary FaaS platform
Summary
Distributed Functions
92
Enterprise
Summary
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Discovery & Configuration
MQHTTP
Cloud Spring
Distributed Functions
Microservices Functions
93Summary
• Functions as Beans
• Serverless & X-Platform
• Web
• Streaming
• Cloud
• Data Flow
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Fn
Discovery & Configuration
MQHTTP
Cloud Spring
Distributed Functions
Thank You!
http://orkhan.io
http://fb.com/groups/reactive.distributed

Spring Cloud Function — Going Serverless