SlideShare una empresa de Scribd logo
1 de 109
Descargar para leer sin conexión
Système distribué de
calculs financiers
Par Xavier Bucchiotty
ME
@xbucchiotty

https://github.com/xbucchiotty

http://blog.xebia.fr/author/xbucchiotty
Build a
testable,
composable and
scalable
cash-flow system
Step 1

Step 2

Step 3

Step 4

Stream API

Iteratees

Akka actor

Akka cluster
Use case
Financial debt management
CAUTION
POC d'une architecture distribuee de calculs financiers
initial = 1000 €
duration = 5 years
fixed interets rate = 5%
Date

1000 €
Amort

Interests

Outstanding

2013-01-01

200 €

50 €

800 €

2014-01-01

200 €

40 €

600 €

2015-01-01

200 €

30 €

400 €

2016-01-01

200 €

20 €

200 €

2017-01-01

200 €

10 €

0 €
initial = 1000 €
duration = 5 years
fixed interets rate = 5%
Date

1000 €
Amort

Interests

Outstanding

2013-01-01

200 €

50 €

800 €

2014-01-01

200 €

40 €

600 €

2015-01-01

200 €

30 €

400 €

2016-01-01

200 €

20 €

200 €

2017-01-01

200 €

10 €

0 €

date = last date + (1 year)
initial = 1000 €
duration = 5 years
fixed interets rate = 5%
Date

1000 €
Amort

Interests

Outstanding

2013-01-01

200 €

50 €

800 €

2014-01-01

200 €

40 €

600 €

2015-01-01

200 €

30 €

400 €

2016-01-01

200 €

20 €

200 €

2017-01-01

200 €

10 €

0 €

amort = initial / duration
initial = 1000 €
duration = 5 years
fixed interets rate = 5%
Date

1000 €
Amort

Interests

Outstanding

2013-01-01

200 €

50 €

800 €

2014-01-01

200 €

40 €

600 €

2015-01-01

200 €

30 €

400 €

2016-01-01

200 €

20 €

200 €

2017-01-01

200 €

10 €

0 €

outstanding = last oustanding - amort
initial = 1000 €
duration = 5 years
fixed interets rate = 5%
Date

1000 €
Amort

Interests

Outstanding

2013-01-01

200 €

50 €

800 €

2014-01-01

200 €

40 €

600 €

2015-01-01

200 €

30 €

400 €

2016-01-01

200 €

20 €

200 €

2017-01-01

200 €

10 €

0 €

interests = last outstanding * rate
val f = (last: Row) => new Row {
def date =
last.date + (1 year)
def amortization =
last amortization
def outstanding =
last.outstanding - amortization
def interests =
last.outstanding * fixedRate
}
Step 1
Stream API
Date

Amort

Interests

Outstanding

2013-01-01

200 €

50 €

800 €

2014-01-01

200 €

40 €

600 €

2015-01-01

200 €

30 €

400 €

2016-01-01

200 €

20 €

200 €

2017-01-01

200 €

10 €

0 €
Date

Amort

Interests

Outstanding

first

2013-01-01

200 €

50 €

800 €

f(first)

2014-01-01

200 €

40 €

600 €

f(f(first))

2015-01-01

200 €

30 €

400 €

2016-01-01

200 €

20 €

200 €

2017-01-01

200 €

10 €

0 €
case class Loan( ... ) {
def first: Row
def f:(Row => Row)
def rows =
Stream.iterate(first)(f)
.take(duration)
}
case class Portfolio(loans: Seq[Loan]) {
def rows =
loans.stream.flatMap(_.rows)
}
Date

Amort

Interests

Total paid

2013-01-01

200 €

40 €

240 €

2015-01-01

200 €

30 €

230 €

200 €

20 €

220 €

2017-01-01

200 €

10 €

210 €

2013-01-01

200 €

50 €

250 €

2014-01-01

200 €

40 €

240 €

2015-01-01

200 €

30 €

230 €

2016-01-01

200 €

20 €

220 €

2017-01-01

200 €

10 €

210 €

2013-01-01

200 €

50 €

250 €

2014-01-01
Loan 3

250 €

2016-01-01

Loan 2

50 €

2014-01-01
Loan 1

200 €

200 €

40 €

240 €

2015-01-01

200 €

30 €

230 €

2016-01-01

200 €

20 €

220 €

2017-01-01

200 €

10 €

210 €

Total

3450 €
// Produce rows
val totalPaid = portfolio.rows
// Transform rows to amount
.map(row => row.interests + row.amortization)
//Consume amount
.foldLeft(0 EUR)(_ + _)
// Produce rows
val totalPaid = portfolio.rows
// Transform rows to amount
.map(row => row.interests + row.amortization)
type RowProducer = Iterable[Row]
type RowTransformer[T] = (Row=>T)
//Consume amount
.foldLeft(0 EUR)(_ + _)
type AmountConsumer[T] = (Iterable[Amount]=>T)
RowProducer
(Iterable[Row])

//Loan
Stream.iterate(first)(f) take duration
//Porfolio
loans => loans flatMap (loan => loan.rows)

+ on demand computation
- sequential computation
RowTransformer
(Row => T)

object RowTransformer {
val totalPaid = (row: Row) =>
row.interests + row.amortization
}

+ function composition
- type limited to «map»
AmountConsumer
(Iterable[Amount] => T)

object AmountConsumer {
def sum = (rows: Iterable[Amount]) =>
rows.foldLeft(Amount(0, EUR))(_ + _)
}

+ function composition
- synchronism
Step 1

Stream API
5000 loans
50 rows

~ 560 ms
Pros

Cons

On demand computation

Sequential computation

Function composition

Synchronism
Transformation limited to «map»
Step 2
Iteratees
Integrating Play iteratees
libraryDependencies ++= Seq(
"com.typesafe.play" %%
"play-iteratees" %
"2.2.0-RC2"
)
Producer
Enumerator

Input

Status

Iteratee
Consumer
Enumerator
Iteratees are immutable
Input

Status

Asynchronous by design
Type safe
Iteratee
Enumerator
enumerate and interleave
case class Loan(initial: Amount,
duration: Int,
rowIt: RowIt) {
def rows(implicit ctx: ExecutionContext) =
Enumerator.enumerate(
Stream.iterate(first)(f).take(duration)
)
}

Data producer
case class Portfolio(loans: Seq[Loansan]) {
def rows(implicit ctx: ExecutionContext) =
Enumerator.interleave(loans.map(_.rows))
}

producers can be
combined
Date

Amort

Interests

Total paid

2013-01-01

200 €

50 €

250 €

2014-01-01

200 €

40 €

240 €

2015-01-01

200 €

30 €

230 €

2016-01-01

200 €

20 €

220 €

2017-01-01

200 €

10 €

2013-01-01

200 €

50 €

210 €
250 €

2014-01-01

200 €

40 €

240 €

2015-01-01

200 €

30 €

230 €

2016-01-01

200 €

20 €

220 €

2017-01-01

200 €

10 €

210 €

2013-01-01

200 €

50 €

250 €

2014-01-01

200 €

40 €

240 €

2015-01-01

200 €

30 €

230 €

2016-01-01

200 €

20 €

220 €

2017-01-01

200 €

10 €

210 €
3450 €

Total
Iteratee
Consumer as a state machine
Iteratees consume
Input
object Input {
case class El[+E](e: E)
case object Empty
case object EOF
}
and propagates a
state
object Step {
case class Done[+A, E]
(a: A, remaining: Input[E])
case class Cont[E, +A]
(k: Input[E] => Iteratee[E, A])
case class Error[E]
(msg: String, input: Input[E])
}
Enumerator

Status

Continue

Iteratee

Input

El(...)

def step = ...
val count = 1

computes

Iteratee
def step = ...
val count = 0
Enumerator

Status

Done

Iteratee

Input

def step = ...
val count = 1

EOF

computes

Iteratee
def step = ...
val count = 1
Enumerator

Status

Error

Input

Iteratee

El(...)

def step = ...
val error = "Runtime Error"

computes

Iteratee
def step = ...
val count = 1
val last: RowConsumer[Option[Row]] = {
def step(last: Option[Row]): K[Row,Option[Row]]= {
case Input.Empty => Cont(step(last))
case Input.EOF => Done(last, Input.EOF)
case Input.El(e) => Cont(step(Some(e)))
}
Cont(step(Option.empty[Row]))
}
object AmountConsumer {
val sum: AmountConsumer[Amount] =
(rows: Iterable[Amount]) =>
rows.foldLeft(Amount(0, EUR))(_ + _)
}
object AmountConsumer {
val sum: AmountConsumer[Amount] =
Iteratee.fold[Amount, Amount]
(Amount(0, EUR))(_ + _)
}
import RowTransformer.totalPaid
import AmountConsumer.sum
val totalPaidComputation: Future[Amount] =
portfolio.rows.run(sum)
import RowTransformer.totalPaid
import AmountConsumer.sum
val totalPaidComputation: Future[Amount] =
portfolio.rows |>>> sum
Enumeratee
map and filter
Producer
Enumerator

Input

Status

Iteratee
Consumer
Producer
Enumerator
Input[A]

Transformation
Enumeratee

Status

Input[B]

Iteratee
Consumer
object RowTransformer {
val totalPaid =
Enumeratee.map[Row](row =>
row.interests + row.amortization
)
}

Data transformation
def until(date: DateMidnight) =
Enumeratee.filter[Row](
row => !row.date.isAfter(date)
)

Data filtering
type RowProducer

= Iterable[Row]

type RowTransformer[T]

= (Row=>T)

type AmountConsumer[T]

= (Iterable[Amount]=>T)

type RowProducer

= Enumerator[Row]

type RowTransformer[T]

= Enumeratee[Row, T]

type AmountConsumer[T]

= Iteratee[Amount, T]
Futures are
composable
map, flatMap, filter
onComplete, onSuccess, onError, recover
// Produce rows
val totalPaidComputation: Future[Amount] =
portfolio.rows &> totalPaid |>>> sum
// Blocking the thread to wait for the result
val totalPaid =
Await.result(
totalPaidComputation,
atMost = defaultTimeout)
totalPaid should equal(3480 EUR)
We still have function composition
and prepares the code for asynchronism
RowProducer
//Loan
Enumerator.enumerate(
Stream.iterate(first)(f).take(duration)
)
//Porfolio
Enumerator.interleave(loans.map(_.rows))

+ on demand computation
+ parallel computation
RowTransformer
val totalPaid = Enumeratee.map[Row](row =>
row.interests + row.amortization
)

+ Function composition
+ map, filter, ...
AmountConsumer
def sum = Iteratee.fold[Amount, Amount]
(Amount(0, EUR))(_ + _)

+ Function composition
+ Asynchronism
Step 1

Step 2

Stream API

Iteratees

5000 loans
50 rows

5000 loans
50 rows

~ 560 ms

~ 3500 ms

?
simple test
complex test
Thread.sleep((Math.random() * 1000) % 2) toLong)
Step 1

Step 2

Stream API

Iteratees

5000 loans
50 rows

5000 loans
50 rows

~ 560 ms

~ 3500 ms

with pause

with pause

~ 144900 ms

~ 157285 ms

?
Cost of using this
implementation of iteratees
is greater than gain of
interleaving for such small
operations
Bulk interleaving
//Portfolio
val split =
loans.map(_.stream)
.grouped(loans.size / 4)
Step 1

Step 2

Stream API

Iteratees

5000 loans
50 rows

5000 loans
50 rows

~ 560 ms

~ 4571 ms

with pause

with pause

~ 144900 ms

~ 39042 ms
Pros

Cons

On demand computation

Sequential computation

Function composition

Synchronism
Transformation limited to «map»
Pros
On demand computation
Function composition
Sequential computation
Synchronism

Cons
Pros

Cons

On demand computation

No error management

Function composition

No elasticity

Parallel computation

No resilience

Asynchronism
Step 3
Akka actor
Integrating Akka
libraryDependencies ++= Seq(
"com.typesafe.akka" %%
"akka-actor" %
"2.2.0"
)
Actors are objects
They communicate with each other by
messages
asynchronously
class Backend extends Actor {
def receive = {
case Compute(loan) =>
sender.tell(
msg = loan.stream.toList,
sender = self)
}
}
case class Compute(loan: Loan)
case class Loan
def rows(implicit calculator: ActorRef,
ctx: ExecutionContext) = {
val responseFuture =
ask(calculator,Compute(this))
val rowsFuture = responseFuture
.mapTo[List[Row]]
rowsFuture.map(Enumerator.enumerate(_))
)
}
}
val system =
ActorSystem.create("ScalaIOSystem")
val calculator = system.actorOf(Props[Backend]
.withRouter(
RoundRobinRouter(nrOfInstances = 10)
)
,"calculator")
}
Supervision
val simpleStrategy = OneForOneStrategy() {
case _: AskTimeoutException => Resume
case _: RuntimeException => Escalate
}
system.actorOf(Props[Backend]
...
.withSupervisorStrategy(simpleStrategy)),
"calculator")
Routee 1

Compute

Router

Routee 2

Routee 3
Routee 1

AskTimeoutException

Router

Routee 2
Resume

Routee 3
Actor System
Routee 1

Router

Routee 2

Routee 3
RowProducer
//Loan
ask(calculator,Compute(this))
.mapTo[List[Row]]
.map(Enumerator.enumerate(_))
//Porfolio
Enumerator.interleave(loans.map(_.rows))

+ parallel computation
- on demand computation
RowTransformer
val totalPaid = Enumeratee.map[Row](row =>
row.interests + row.amortization
)

+ Nothing changed
AmountConsumer
def sum = Iteratee.fold[Amount, Amount]
(Amount(0, EUR))(_ + _)

+ Nothing changed
Step 1

Step 2

Step 3

Stream API

Iteratees

Akka actor

5000 loans
50 rows

5000 loans
50 rows

5000 loans
50 rows

~ 560 ms

~ 4571 ms

~ 4271 ms

with pause

with pause

with pause

~ 144900 ms

~ 39042 ms

~ 40882 ms
Pros

Cons

On demand computation

No error management

Function composition

No elasticity

Parallel computation

No resilience

Asynchronism
Pros

Cons

No error management

On demand computation

Function composition

No elasticity

Parallel computation

No resilience

Asynchronism
Pros

Cons

Error management

No on demand computation

Function composition

No elasticity

Parallel computation

No resilience

Asynchronism
Step 4
Akka cluster
Integrating Akka Cluster
libraryDependencies ++= Seq(
"com.typesafe.akka" %%
"akka-cluster" %
"2.2.0"
)
Cluster Router
ClusterRouterConfig

Can create actors on different nodes of the cluster
Role
Local actors or not
Control number of actors per node per system
Cluster Router
AdaptiveLoadBalancingRouter

Collect metrics (CPU, HEAP, LOAD) via JMX or Hyperic Sigar
and make load balancing
val calculator = system.actorOf(Props[Backend]
.withRouter(
RoundRobinRouter(nrOfInstances = 10)
)
,"calculator")
}
val calculator = system.actorOf(Props[Backend]
.withRouter(ClusterRouterConfig(
local = localRouter,
settings = clusterSettings)
)
, "calculator")
}
Actor System
Routee 3

Actor System
Routee 1

Routee 4

Elasticity

Router

Routee 5

Routee 3

Routee 6

Actor System
application.conf
cluster {
seed-nodes = [
"akka.tcp://ScalaIOSystem@127.0.0.1:2551",
"akka.tcp://ScalaIOSystem@127.0.0.1:2552"
]
auto-down = on
}
Actor System
Routee 3

Actor System
Routee 1

Routee 4

Resilience

Router

Routee 5

Routee 3

Routee 6

Actor System
RowProducer
//Loan
ask(calculator,Compute(this))
.mapTo[List[Row]]
.map(Enumerator.enumerate(_))
//Porfolio
Enumerator.interleave(loans.map(_.rows))

+ Nothing changed
RowTransformer
val totalPaid = Enumeratee.map[Row](row =>
row.interests + row.amortization
)

+ Nothing changed
AmountConsumer
def sum = Iteratee.fold[Amount, Amount]
(Amount(0, EUR))(_ + _)

+ Nothing changed
Pros

Cons

Error management

No on demand computation

Function composition

No elasticity

Parallel computation

No resilience

Asynchronism
Pros
Error management
Function composition
Parallel computation
Asynchronism
No elasticity
No resilience

Cons
No on demand computation
Pros

Cons

Error management

No on demand computation

Function composition

Network serialization

Parallel computation
Asynchronism
Elasticity
Resilience
Step 1

Step 2

Step 3

Step 4

Stream API

Iteratees

Akka actor

Akka cluster

5000 loans
50 rows

5000 loans
50 rows

5000 loans
50 rows

5000 loans
50 rows

~ 560 ms

~ 4571 ms

~ 4271 ms

~ 6213 ms

with pause

with pause

with pause

with pause

~ 144900 ms

~ 39042 ms

~ 40882 ms

~ 77957 ms
1 node / 2 actors
Step 1

Step 2

Step 3

Step 4

Stream API

Iteratees

Akka actor

Akka cluster

5000 loans
50 rows

5000 loans
50 rows

5000 loans
50 rows

5000 loans
50 rows

~ 560 ms

~ 4571 ms

~ 4271 ms

~ 5547 ms

with pause

with pause

with pause

with pause

~ 144900 ms

~ 39042 ms

~ 40882 ms

~ 39695 ms
2 nodes / 4 actors
Conclusion
Step 1

Step 2

Step 3

Step 4

Stream API

Iteratees

Akka actor

Akka cluster

powerful library

elegant API

error
management

elasticity

low memory

enable
asynchronism
and parallelism

control on
parallel execution
via configuration

resilience

performance
when single
threaded

monitoring
It’s all about trade-off
But do you really need
distribution?
Hot subject
Recet blog post from «Mandubian» for Scalaz stream machines and
iteratees [1]
Recent presentation from «Heather Miller» for spores (distribuables
closures) [2]
Recent release of Scala 2.10.3 and performance optimization of Promise
Release candidate of play-iteratee module with performance optimization
Lots of stuff in the roadmap of Akka cluster 2.3.0
Hot subject

[1] : http://mandubian.com/2013/08/21/playztream/

[2] : https://speakerdeck.com/heathermiller/on-pickles-and-sporesimproving-support-for-distributed-programming-in-scala
THANK
YOU

FOR watching

Merci!

Más contenido relacionado

La actualidad más candente

Migrating one of the most popular e commerce platforms to mongodb
Migrating one of the most popular e commerce platforms to mongodbMigrating one of the most popular e commerce platforms to mongodb
Migrating one of the most popular e commerce platforms to mongodbMongoDB
 
FLATMAP ZAT SHIT : les monades expliquées aux geeks (Devoxx France 2013)
FLATMAP ZAT SHIT : les monades expliquées aux geeks (Devoxx France 2013)FLATMAP ZAT SHIT : les monades expliquées aux geeks (Devoxx France 2013)
FLATMAP ZAT SHIT : les monades expliquées aux geeks (Devoxx France 2013)François Sarradin
 
Answer key chapter 4
Answer key chapter 4Answer key chapter 4
Answer key chapter 4Phannith Met
 
TensorFlow in Practice
TensorFlow in PracticeTensorFlow in Practice
TensorFlow in Practiceindico data
 
Processing Collections with Java8 Stream APIs
Processing Collections with Java8 Stream APIsProcessing Collections with Java8 Stream APIs
Processing Collections with Java8 Stream APIsZameer Ahmed Shaik
 
C++ L02-Conversion+enum+Operators
C++ L02-Conversion+enum+OperatorsC++ L02-Conversion+enum+Operators
C++ L02-Conversion+enum+OperatorsMohammad Shaker
 
Intermediate Microeconomic Theory Cheat Sheet 3
Intermediate Microeconomic Theory Cheat Sheet 3Intermediate Microeconomic Theory Cheat Sheet 3
Intermediate Microeconomic Theory Cheat Sheet 3Laurel Ayuyao
 
F# Presentation
F# PresentationF# Presentation
F# Presentationmrkurt
 
SPL 6.1 | Advanced problems on Operators and Math.h function in C
SPL 6.1 | Advanced problems on Operators and Math.h function in CSPL 6.1 | Advanced problems on Operators and Math.h function in C
SPL 6.1 | Advanced problems on Operators and Math.h function in CMohammad Imam Hossain
 
C tech questions
C tech questionsC tech questions
C tech questionsvijay00791
 
Fat Arrow (ES6)
Fat Arrow (ES6)Fat Arrow (ES6)
Fat Arrow (ES6)Ryan Ewing
 

La actualidad más candente (18)

Migrating one of the most popular e commerce platforms to mongodb
Migrating one of the most popular e commerce platforms to mongodbMigrating one of the most popular e commerce platforms to mongodb
Migrating one of the most popular e commerce platforms to mongodb
 
FLATMAP ZAT SHIT : les monades expliquées aux geeks (Devoxx France 2013)
FLATMAP ZAT SHIT : les monades expliquées aux geeks (Devoxx France 2013)FLATMAP ZAT SHIT : les monades expliquées aux geeks (Devoxx France 2013)
FLATMAP ZAT SHIT : les monades expliquées aux geeks (Devoxx France 2013)
 
C++ L11-Polymorphism
C++ L11-PolymorphismC++ L11-Polymorphism
C++ L11-Polymorphism
 
Day 1
Day 1Day 1
Day 1
 
Answer key chapter 4
Answer key chapter 4Answer key chapter 4
Answer key chapter 4
 
informatics practices practical file
informatics practices practical fileinformatics practices practical file
informatics practices practical file
 
TensorFlow in Practice
TensorFlow in PracticeTensorFlow in Practice
TensorFlow in Practice
 
C++ L10-Inheritance
C++ L10-InheritanceC++ L10-Inheritance
C++ L10-Inheritance
 
Processing Collections with Java8 Stream APIs
Processing Collections with Java8 Stream APIsProcessing Collections with Java8 Stream APIs
Processing Collections with Java8 Stream APIs
 
Quality Python Homework Help
Quality Python Homework HelpQuality Python Homework Help
Quality Python Homework Help
 
Vcs5
Vcs5Vcs5
Vcs5
 
C++ L02-Conversion+enum+Operators
C++ L02-Conversion+enum+OperatorsC++ L02-Conversion+enum+Operators
C++ L02-Conversion+enum+Operators
 
Intermediate Microeconomic Theory Cheat Sheet 3
Intermediate Microeconomic Theory Cheat Sheet 3Intermediate Microeconomic Theory Cheat Sheet 3
Intermediate Microeconomic Theory Cheat Sheet 3
 
F# Presentation
F# PresentationF# Presentation
F# Presentation
 
SPL 6.1 | Advanced problems on Operators and Math.h function in C
SPL 6.1 | Advanced problems on Operators and Math.h function in CSPL 6.1 | Advanced problems on Operators and Math.h function in C
SPL 6.1 | Advanced problems on Operators and Math.h function in C
 
C Language Lecture 17
C Language Lecture 17C Language Lecture 17
C Language Lecture 17
 
C tech questions
C tech questionsC tech questions
C tech questions
 
Fat Arrow (ES6)
Fat Arrow (ES6)Fat Arrow (ES6)
Fat Arrow (ES6)
 

Destacado

Comunicación digital
Comunicación digitalComunicación digital
Comunicación digitalIreneitorres
 
Double page spread analysis complete
Double page spread analysis completeDouble page spread analysis complete
Double page spread analysis completematt_roberts
 
Verklighetsuppfattning
VerklighetsuppfattningVerklighetsuppfattning
Verklighetsuppfattningmyranfyran
 
Hotel Cafezal em Vitoria da Conquista
Hotel Cafezal em Vitoria da ConquistaHotel Cafezal em Vitoria da Conquista
Hotel Cafezal em Vitoria da ConquistaYuri Bispo
 
Matemáticas
MatemáticasMatemáticas
MatemáticasIriste
 
Estetisk verksamhet
Estetisk verksamhetEstetisk verksamhet
Estetisk verksamhetmyranfyran
 
Ciencias sociales
Ciencias socialesCiencias sociales
Ciencias socialesIriste
 
Entrepreneurs Roadmap by BPlanExperts
Entrepreneurs Roadmap by BPlanExpertsEntrepreneurs Roadmap by BPlanExperts
Entrepreneurs Roadmap by BPlanExpertsPresentationGFX
 
левитин цели и задачи научной журналистики из книги научная журналистика фи...
левитин цели и задачи научной журналистики   из книги научная журналистика фи...левитин цели и задачи научной журналистики   из книги научная журналистика фи...
левитин цели и задачи научной журналистики из книги научная журналистика фи...Ecolife Journal
 
Equinox waters edge brochure1040 Favista Real Estate
Equinox waters edge brochure1040 Favista Real Estate Equinox waters edge brochure1040 Favista Real Estate
Equinox waters edge brochure1040 Favista Real Estate Favista Real Estate
 
Somer final presentation (evaluation)
Somer final presentation (evaluation)Somer final presentation (evaluation)
Somer final presentation (evaluation)Sunshine97
 
Proceso induccion sena
Proceso induccion senaProceso induccion sena
Proceso induccion senagwallens
 

Destacado (20)

Comunicación digital
Comunicación digitalComunicación digital
Comunicación digital
 
Quotes of Pestec IPM
Quotes of Pestec IPM Quotes of Pestec IPM
Quotes of Pestec IPM
 
Rap affects
Rap affectsRap affects
Rap affects
 
Double page spread analysis complete
Double page spread analysis completeDouble page spread analysis complete
Double page spread analysis complete
 
Verklighetsuppfattning
VerklighetsuppfattningVerklighetsuppfattning
Verklighetsuppfattning
 
Hotel Cafezal em Vitoria da Conquista
Hotel Cafezal em Vitoria da ConquistaHotel Cafezal em Vitoria da Conquista
Hotel Cafezal em Vitoria da Conquista
 
Descontraindo
DescontraindoDescontraindo
Descontraindo
 
Audicity
AudicityAudicity
Audicity
 
Matemáticas
MatemáticasMatemáticas
Matemáticas
 
Digicel Surinam: Ahorros inteligentes
Digicel Surinam: Ahorros inteligentesDigicel Surinam: Ahorros inteligentes
Digicel Surinam: Ahorros inteligentes
 
Estetisk verksamhet
Estetisk verksamhetEstetisk verksamhet
Estetisk verksamhet
 
Ciencias sociales
Ciencias socialesCiencias sociales
Ciencias sociales
 
Audacity
AudacityAudacity
Audacity
 
Entrepreneurs Roadmap by BPlanExperts
Entrepreneurs Roadmap by BPlanExpertsEntrepreneurs Roadmap by BPlanExperts
Entrepreneurs Roadmap by BPlanExperts
 
левитин цели и задачи научной журналистики из книги научная журналистика фи...
левитин цели и задачи научной журналистики   из книги научная журналистика фи...левитин цели и задачи научной журналистики   из книги научная журналистика фи...
левитин цели и задачи научной журналистики из книги научная журналистика фи...
 
A blessed day
A blessed dayA blessed day
A blessed day
 
Equinox waters edge brochure1040 Favista Real Estate
Equinox waters edge brochure1040 Favista Real Estate Equinox waters edge brochure1040 Favista Real Estate
Equinox waters edge brochure1040 Favista Real Estate
 
Motorik
MotorikMotorik
Motorik
 
Somer final presentation (evaluation)
Somer final presentation (evaluation)Somer final presentation (evaluation)
Somer final presentation (evaluation)
 
Proceso induccion sena
Proceso induccion senaProceso induccion sena
Proceso induccion sena
 

Similar a POC d'une architecture distribuee de calculs financiers

Adopting F# at SBTech
Adopting F# at SBTechAdopting F# at SBTech
Adopting F# at SBTechAntya Dev
 
Code quailty metrics demystified
Code quailty metrics demystifiedCode quailty metrics demystified
Code quailty metrics demystifiedJeroen Resoort
 
Introducing the WSO2 Complex Event Processor
Introducing the WSO2 Complex Event ProcessorIntroducing the WSO2 Complex Event Processor
Introducing the WSO2 Complex Event ProcessorWSO2
 
Akka: Actor Design & Communication Technics
Akka: Actor Design & Communication TechnicsAkka: Actor Design & Communication Technics
Akka: Actor Design & Communication TechnicsAlex Fruzenshtein
 
Very basic functional design patterns
Very basic functional design patternsVery basic functional design patterns
Very basic functional design patternsTomasz Kowal
 
Small pieces loosely joined
Small pieces loosely joinedSmall pieces loosely joined
Small pieces loosely joinedennui2342
 
Reactive programming every day
Reactive programming every dayReactive programming every day
Reactive programming every dayVadym Khondar
 
Rajeev oops 2nd march
Rajeev oops 2nd marchRajeev oops 2nd march
Rajeev oops 2nd marchRajeev Sharan
 
12th CBSE Practical File
12th CBSE Practical File12th CBSE Practical File
12th CBSE Practical FileAshwin Francis
 
Type safe embedded domain-specific languages
Type safe embedded domain-specific languagesType safe embedded domain-specific languages
Type safe embedded domain-specific languagesArthur Xavier
 
Java Foundations: Data Types and Type Conversion
Java Foundations: Data Types and Type ConversionJava Foundations: Data Types and Type Conversion
Java Foundations: Data Types and Type ConversionSvetlin Nakov
 
Complex Event Processor 3.0.0 - An overview of upcoming features
Complex Event Processor 3.0.0 - An overview of upcoming features Complex Event Processor 3.0.0 - An overview of upcoming features
Complex Event Processor 3.0.0 - An overview of upcoming features WSO2
 
Taming Distribution: Formal Protocols for Akka Typed
Taming Distribution: Formal Protocols for Akka TypedTaming Distribution: Formal Protocols for Akka Typed
Taming Distribution: Formal Protocols for Akka TypedRoland Kuhn
 
aming distribution: formal protocols for Akka Typed
aming distribution: formal protocols for Akka Typedaming distribution: formal protocols for Akka Typed
aming distribution: formal protocols for Akka TypedJ On The Beach
 

Similar a POC d'une architecture distribuee de calculs financiers (20)

Adopting F# at SBTech
Adopting F# at SBTechAdopting F# at SBTech
Adopting F# at SBTech
 
F sharp - an overview
F sharp - an overviewF sharp - an overview
F sharp - an overview
 
Code quailty metrics demystified
Code quailty metrics demystifiedCode quailty metrics demystified
Code quailty metrics demystified
 
Introducing the WSO2 Complex Event Processor
Introducing the WSO2 Complex Event ProcessorIntroducing the WSO2 Complex Event Processor
Introducing the WSO2 Complex Event Processor
 
Intro to Akka Streams
Intro to Akka StreamsIntro to Akka Streams
Intro to Akka Streams
 
Akka: Actor Design & Communication Technics
Akka: Actor Design & Communication TechnicsAkka: Actor Design & Communication Technics
Akka: Actor Design & Communication Technics
 
Time for Functions
Time for FunctionsTime for Functions
Time for Functions
 
Very basic functional design patterns
Very basic functional design patternsVery basic functional design patterns
Very basic functional design patterns
 
web3j Overview
web3j Overviewweb3j Overview
web3j Overview
 
Object Oriented Programming with C++
Object Oriented Programming with C++Object Oriented Programming with C++
Object Oriented Programming with C++
 
Small pieces loosely joined
Small pieces loosely joinedSmall pieces loosely joined
Small pieces loosely joined
 
Reactive programming every day
Reactive programming every dayReactive programming every day
Reactive programming every day
 
Rajeev oops 2nd march
Rajeev oops 2nd marchRajeev oops 2nd march
Rajeev oops 2nd march
 
12th CBSE Practical File
12th CBSE Practical File12th CBSE Practical File
12th CBSE Practical File
 
operators.ppt
operators.pptoperators.ppt
operators.ppt
 
Type safe embedded domain-specific languages
Type safe embedded domain-specific languagesType safe embedded domain-specific languages
Type safe embedded domain-specific languages
 
Java Foundations: Data Types and Type Conversion
Java Foundations: Data Types and Type ConversionJava Foundations: Data Types and Type Conversion
Java Foundations: Data Types and Type Conversion
 
Complex Event Processor 3.0.0 - An overview of upcoming features
Complex Event Processor 3.0.0 - An overview of upcoming features Complex Event Processor 3.0.0 - An overview of upcoming features
Complex Event Processor 3.0.0 - An overview of upcoming features
 
Taming Distribution: Formal Protocols for Akka Typed
Taming Distribution: Formal Protocols for Akka TypedTaming Distribution: Formal Protocols for Akka Typed
Taming Distribution: Formal Protocols for Akka Typed
 
aming distribution: formal protocols for Akka Typed
aming distribution: formal protocols for Akka Typedaming distribution: formal protocols for Akka Typed
aming distribution: formal protocols for Akka Typed
 

Último

Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioChristian Posta
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
IEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK GuideIEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK GuideHironori Washizaki
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"DianaGray10
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...Daniel Zivkovic
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-pyJamie (Taka) Wang
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 

Último (20)

Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
IEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK GuideIEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
20230104 - machine vision
20230104 - machine vision20230104 - machine vision
20230104 - machine vision
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-py
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 

POC d'une architecture distribuee de calculs financiers