Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a...

19
Odmor za REST uz Karlo Novak, SV Group d.o.o. [email protected]

Transcript of Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a...

Page 1: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

Odmor za REST uz

Karlo Novak, SV Group [email protected]

Page 2: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

• REST i ostala klasika

• RPC

• gRPC, Protobuf, HTTP2

• gRPC i Java

• The great showdown!

– gRPC, Thrift, Spring MVC

• ...i mikroservisi

Sadržaj

Page 3: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

• Sučelje za pristup podacima ili

funkcionalnostima neke aplikacije/sustava

• API = REST ?

– Bitka za naziv REST je izgubljena!

API naš svagdašnji

Page 4: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

REST

Vi stvarno pišete REST servise?

Page 5: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I
Page 6: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

• Fokus na akcijama, ne resursima

• Contract između klijenta i servera

• Nije nužno vezan uz HTTP

• Najčešće rabi binarne protokole

– Protobuf, TBinary, CBOR

• Postoji dugi niz godina...

– Java RMI, Spring HttpInvoker, NFS, XML-

RPC, CORBA itd.

RPC

Page 7: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I
Page 8: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

• RPC framework iz Google-a

• HTTP/2, Protocol Buffers v3

• Protocol Buffers IDL

• Podržava 10 jezika (Java, C, nodejs...)

• Mikroservisi!

gRPC

Page 9: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

gRPC

Page 10: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

• Google, razni jezici, neovisan o platformi

• Kao XML (samo „kao!”) no brži, manji i

jednostavniji

Protobuf

- čitljivost

- podrška- brz

- shematiziran

- strong typing

Page 11: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

ProtobufPredefinirani tipovi, defaultne vrijednosti verzioniranje, višejezičnost....

Page 12: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

• Binaran prijenos

• Multiplexing

HTTP/2

• Kompresija headera

• Bidirectional streaming

Page 13: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

• Baziran na Nettyu

• Maven plugin (protoc)

• Blocking, Future, Observer stub

gRPC i Java

Page 14: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

The great showdown!

• gRPC vs Thrift vs Spring Boot (MVC - JSON)

• Stress test API-a koji prima request:

– Integer requestId, String sender, String greeting

• I vraća response:

– Integer requestId, Boolean success

50 korisnika, 20.000 iteracija, 1.000.000 requestova

Page 15: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

Spring

217 sec.Thrift

42 sec.

gRPC

44 sec.

Obrada

1.000.000

requestova

Page 16: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

Response

kroz vrijeme

Page 17: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

• Višejezičnost & višeplatformnost

• Odaberite jezik koji odgovara problemu/servisu

• Lagana izmjena i kombiniranje tehnologija

generiranjem klijenata i servera

• Performanse!

– Mikroservisi su teški na HTTP pozivima

– HTTP2 i Protobuf čine razliku

MIKROSERVISI!!!

Page 18: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

Zaključak

• (punokrvni) REST je kompliciran

• RPC je fleksibiliniji

• gRPC je brz, jako brz

• Zamjena za REST i JSON?

– Ovisi o veličini throughputa

Nije srebni metak, nije za svakoga!

Page 19: Odmor za REST uz - JavaCRO · • gRPC vs Thrift vs Spring Boot (MVC - JSON) • Stress test API-a koji prima request: – Integer requestId, String sender, String greeting • I

A sad vi...

[email protected]