odmor za rest uz - javacro · • grpc vs thrift vs spring boot (mvc - json) • stress test api-a...
TRANSCRIPT
![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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/2.jpg)
• 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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/3.jpg)
• 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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/5.jpg)
![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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/6.jpg)
• 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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/7.jpg)
![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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/8.jpg)
• 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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/10.jpg)
• 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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/12.jpg)
• 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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/13.jpg)
• 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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/17.jpg)
• 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](https://reader033.vdocuments.us/reader033/viewer/2022042223/5ec98d4eb7511a59e711a07f/html5/thumbnails/18.jpg)
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!