Top Banner
Baratine in Practice Nam Nguyen Software Engineer Caucho Technology, Inc. 1 Date: 2014-06-17 Location: San Diego JUG
20

Baratine in Practice

Feb 25, 2016

Download

Documents

Kathy Sander

Baratine in Practice. Date: 2014-06-17 Location: San Diego JUG. Nam Nguyen Software Engineer Caucho Technology, Inc. Baratine in Practice. Download Install Our first @ResourceService - @Modify - Multiple counters Concepts @Service - implement an example @Workers - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Baratine in Practice

1

Baratine in Practice

Nam NguyenSoftware Engineer

Caucho Technology, Inc.

Date: 2014-06-17Location: San Diego JUG

Page 2: Baratine in Practice

2

Baratine in PracticeDownloadInstallOur first @ResourceService

- @Modify- Multiple counters

Concepts@Service

- implement an example @Workers

- implement an exampleType of services chartPartitioning and clustering

Page 3: Baratine in Practice

3

Task: Baratine quick start

- Download- Install- Our first service

http://doc.baratine.io/v0.8/manual/quick-start/

Page 4: Baratine in Practice

@Journal@ResourceService(“public:///counter/{_id}”)public class CounterServiceImpl{ private long _id; private long _counter; public long get() { return _counter; }

@Modify public long incrementAndGet() { return ++_counter; }

@Modify public long decrementAndGet() { return --_counter; }

@Modify public long addAndGet(long value) { _counter = _counter + value;

return _counter; }}

INBOX

JOURNALKEY-VALUE DB

(internal)

4

OUTBOXHTTP Polling

HTTP REST

WebSocket

Java

Page 5: Baratine in Practice

5

What You Get

+ Insane low-latency concurrent performance

assign thread1. incrementAndGet()2. incrementAndGet()3. addAndGet()4. decrementAndGet()5. incrementAndGet()

assign thread6. incrementAndGet()7. ...

NO BLOCKING / LOCKING ! very CPU cache friendly (for both data and instructions)

Batch A

Batch B

• CPU core uninterrupted during batch• no context switching• no pausing• thread screams through entire batch

Page 6: Baratine in Practice

6

Batch Programming

assign thread@BeforeBatch

1 incrementAndGet()2. addAndGet()3. addAndGet()4. decrementAndGet()5. incrementAndGet()6. incrementAndGet()

@AfterBatch- flush writes

assign thread@BeforeBatch7. ...

Leave expensive operations to be executed at the end of the batch.

Inbox is empty at this point

Page 7: Baratine in Practice

7

Performance Characteristics

1 2 4 8 16 32Batch Size / Clients

Requests per Second

Baratine

Page 8: Baratine in Practice

8

Performance Characteristics

1 2 4 8 16 32Batch Size / Clients

Requests per Second

Baratine

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ServiceA to ServiceB within the same JVM

Page 9: Baratine in Practice

9

Reliable to Batch

assign thread@BeforeBatch

1 incrementAndGet()2. addAndGet()3. addAndGet()4. decrementAndGet()5. incrementAndGet()6. incrementAndGet()

@AfterBatch- flush writes

assign thread@BeforeBatch

7. ...

Safe to process in batches.

@OnCheckpoint

Page 10: Baratine in Practice

10

Putting it All Together

Freed to operatein memory safely!

▲ Operational Data

Page 11: Baratine in Practice

11

@Journal@ResourceService(“public:///counter/{_id}”)public class CounterServiceImpl{ private long _id; private long _counter; public long get() { return _counter; }

@Modify public long incrementAndGet() { return ++_counter; }

@Modify public long decrementAndGet() { return --_counter; }

@Modify public long addAndGet(long value) { _counter = _counter + value;

return _counter; }}

Page 12: Baratine in Practice

12

@Service

Barebones service, basis of @ResourceServiceSingleton, only one instance within a JVM

- No @Modify- No automatic restore- No automatic paging- No automatic checkpointing- No automatic query support- No automatic partitioning

Warning: hardcore!

Page 13: Baratine in Practice

13

@Service

Less magic: you have fine-grained control

+ @Journal+ @OnRestore+ @OnCheckpoint+ @OnActive+ @BeforeBatch+ @AfterBatch

Page 14: Baratine in Practice

14

Task: implement a logging service with a @Service

Page 15: Baratine in Practice

15

@Workers

A @Service with a thread-pool acting on the inbox. Example: hibernate, SAP, MySQL, legacy, integration

- Does not fully benefit from batching- Not single-threaded

+ Can block+ Multi-threaded

Page 16: Baratine in Practice

16

Task: implement a @Workers @Service

Page 17: Baratine in Practice

17

Types of ServicesAnnotation: @ResourceService @Service @Workers

Batching ✓ ✓ ✓*

Journaling ✓ ✓Checkpointing ✓ ✓

Paging ✓Partitioning ✓

Resource ID’s ✓Search ✓

Threaded-ness single single multi

Can Block? ✓Performance ★★★☆ ★★★★ ★☆☆☆

(manual)

Page 18: Baratine in Practice

18

Partitioning and Clustering

/auction/111/auction/444/auction/999

/auction/222/auction/555/auction/888

/auction/000/auction/333/auction/666/auction/777

192.168.1.100

192.168.1.102

192.168.1.101

Resources are partitionedby its service URL and ID

Page 19: Baratine in Practice

19

State of Baratine

GPL

Been in active development for over 2 years

v0.8.3 (alpha)

http://baratine.io (alpha)

Thank you!

stealth<

Page 20: Baratine in Practice

20

The End

Q and A