Nowadays when REST is popping out everywhere and every single API is a REST service, a single mention to RPC seems like a time travel into the past. In the shadows of REST's glory, Google has quietly made and open sourced it's RPC framework (intuitively) called gRPC under the slogan "boilerplate to high-performance scalable APIs". Considering popular names already using it, looks like there's much more to a story than it seems. What's it all about? What's wrong with JSON and REST? And why does HTTP matter?
1. Odmor za REST uz
Karlo Novak, SV Group d.o.o.
karlo.novak@svgroup.hr
2. • REST i ostala klasika
• RPC
• gRPC, Protobuf, HTTP2
• gRPC i Java
• The great showdown!
– gRPC, Thrift, Spring MVC, JAX-WS
• ...i mikroservisi
Sadržaj
3. • Sučelje za pristup podacima ili funkcionalnostima
neke aplikacije/sustava
• API = REST ?
– Bitka za naziv REST je izgubljena!
API naš svagdašnji
4. Vrste API-a
REST RPC SOAP
Serijalizacija JSON, XML Binary XML
Tipovi - XML-RPC
JSON-RPC
Custom
Document
RPC
Implementacije JAX-RS
Spring MVC REST
Play Framework
gRPC
Thrift
HttpInvoker
JAX-WS
Spring WS
REST RPC SOAP
Serijalizacija JSON, XML Binary XML
Tipovi - XML-RPC
JSON-RPC
Custom
Document
RPC
Implementacije JAX-RS
Spring MVC REST
Play Framework
gRPC
Thrift
HttpInvoker
JAX-WS
Spring WS
7. • 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
8.
9. • RPC framework iz Google-a
• HTTP/2, Protocol Buffers v3
• Protocol Buffers IDL
• Podržava 10 jezika (Java, C, nodejs...)
• Out of the box security
• Mikroservisi!
gRPC
11. • Google, razni jezici, neovisan o platformi
• Kao XML (samo „kao”!) no brži, manji i jednostavniji
Protobuf
- čitljivost
- podrška
- brz
- shematiziran
- strong typing
14. • Baziran na Nettyu
• Maven plugin (protoc)
• Blocking, Future, Observer stub
gRPC i Java
15. The great showdown!
• gRPC vs Thrift vs Spring Boot (MVC - JSON) vs JAX-WS
(CXF)
• 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
https://github.com/karlonovak/grpc-javacro17
16. Spring MVC REST 217 sec.
Thrift 42 sec.gRPC 44 sec.
JAX –WS, CXF 447 sec.
Obrada 1.000.000 requestova
17.
18. • 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!!!
19. Zaključak
• (punokrvni) REST je kompliciran
• RPC je fleksibiliniji
• gRPC je brz, jako brz
• Zamjena za REST i JSON?
– Ovisi o veličini throughputa
– Ne podržava browsere (još)
Nije srebni metak
20. I want YOU to ask a question
karlo.novak@svgroup.hr
Hvala!
Editor's Notes
Ja sam Karlo, danas ćemo pričati o.. Bla bla
Što je API i kako funkcionira?Što se smatra API-em?Zašto se uz API automatski veže i REST...?Ima li alternative?
Objasniti vrste API-a da se dobije široka slika
REST je striktan, nema tipove, uglavnom rabi JSON
RPC je fleksibilan, ali uglavnom se da svesti na ove kategorije i binarnu serijalizaciju
SOAP se zapravo ne natječe protiv REST i RPC jer se SOAP moze rabit za RPC, ali ga treba spomenuti
Objasniti što je REST- kompleksan, mnogo zahtjeva, klijenti se teško pišu
- decoupling, nema contracta
većina vjerojatno ne piše REST API
REST preko HTTP-a koristi razne metode kao glagole tj. akcije nad resursima, fokus su resursi, kod RPC-a... (next slide)
Objasniti i usporediti s REST-om
Slack ima svoj RPC API koji koristi JSON, radi se o custom implementaciji (nije JSON-RPC)
Objasniti što je gRPC, otkud Googleu motivacija da ga napravi i na koje se 3 stvari temelji (RPC – HTTP2 – Protobuf)
Objasniti dodatno gRPC, objasniti da se klijenti generiraju za razne platforme, klijent i server su povezani. Kako bi REST ovdje izgledao?
Što su protobuf, prednosti i mane
Objasniti HTTP1, usporediti ga s HTTP2-om (objasniti slabosti i stvari koje ispravlja, čini boljima)
Kako je gRPC implementiran u Javi i zašto ga je super koristiti iz Jave (API je super, jednostavan, podržava blocking i non-blocking, lagana Maven integracija, performanse)
Mikroservisi promoviraju višejezičnost, višeplatformnost (različite baze, serveri ovisno o servisu)
gRPC omogućava da se različiti servisi na temelju definicija generiraju u različite klijente servere
Performanse jer se kod hrpe poziva HTTP 1 i 2 i JSON i Protobuf razlikuju