Slide 1

Slide 1 text

#EuRuKo2024  @FerPeralesM Fernando Perales  @FerPeralesM Let's Give REST a rest: Exploring the state of gRPC in Ruby

Slide 2

Slide 2 text

#EuRuKo2024  @FerPeralesM

Slide 3

Slide 3 text

#EuRuKo2024  @FerPeralesM • Development Team Lead @ thoughtbot • From Guadalajara, Mexico • RubyMX organizer and host • Co-organizer @ RailsBridge Mexican chapter Illustration by instagram.com/@layered_space

Slide 4

Slide 4 text

#EuRuKo2024  @FerPeralesM An odyssey to get here GDL 🚎 BJX BJX 🛫 IAH 
 
 IAH 🛫 FRA FRA 🛫 SJJ

Slide 5

Slide 5 text

#EuRuKo2024  @FerPeralesM

Slide 6

Slide 6 text

#EuRuKo2024  @FerPeralesM Story time

Slide 7

Slide 7 text

#EuRuKo2024  @FerPeralesM Joined a RoR consultancy as a trainee in February 2013

Slide 8

Slide 8 text

#EuRuKo2024  @FerPeralesM Left that company in October 2016 to join a startup

Slide 9

Slide 9 text

#EuRuKo2024  @FerPeralesM Why?

Slide 10

Slide 10 text

#EuRuKo2024  @FerPeralesM The stack

Slide 11

Slide 11 text

#EuRuKo2024  @FerPeralesM The stack • Go • Cassandra • Kubernetes • Angular 2 • gRPC + protobuf

Slide 12

Slide 12 text

#EuRuKo2024  @FerPeralesM The stack • Go • Cassandra • Kubernetes • Angular 2 • gRPC + protobuf

Slide 13

Slide 13 text

#EuRuKo2024  @FerPeralesM 5 months later…

Slide 14

Slide 14 text

#EuRuKo2024  @FerPeralesM

Slide 15

Slide 15 text

#EuRuKo2024  @FerPeralesM Joined another RoR consultancy in June 2017

Slide 16

Slide 16 text

#EuRuKo2024  @FerPeralesM I’ve been doing RoR full time since then!

Slide 17

Slide 17 text

#EuRuKo2024  @FerPeralesM #blessed 🙏

Slide 18

Slide 18 text

#EuRuKo2024  @FerPeralesM Tried to bring gRPC + protobuf into my Ruby world

Slide 19

Slide 19 text

#EuRuKo2024  @FerPeralesM No luck

Slide 20

Slide 20 text

#EuRuKo2024  @FerPeralesM Why is gRPC more popular in some languages than in others?

Slide 21

Slide 21 text

#EuRuKo2024  @FerPeralesM

Slide 22

Slide 22 text

#EuRuKo2024  @FerPeralesM

Slide 23

Slide 23 text

#EuRuKo2024  @FerPeralesM

Slide 24

Slide 24 text

#EuRuKo2024  @FerPeralesM

Slide 25

Slide 25 text

#EuRuKo2024  @FerPeralesM

Slide 26

Slide 26 text

#EuRuKo2024  @FerPeralesM

Slide 27

Slide 27 text

#EuRuKo2024  @FerPeralesM A travel to the past

Slide 28

Slide 28 text

#EuRuKo2024  @FerPeralesM 1993 - 1994

Slide 29

Slide 29 text

#EuRuKo2024  @FerPeralesM 🌍

Slide 30

Slide 30 text

#EuRuKo2024  @FerPeralesM W3C and IETF

Slide 31

Slide 31 text

#EuRuKo2024  @FerPeralesM Roy Fielding

Slide 32

Slide 32 text

#EuRuKo2024  @FerPeralesM REST

Slide 33

Slide 33 text

#EuRuKo2024  @FerPeralesM Architectural Styles and the Design of Network-based Software

Slide 34

Slide 34 text

#EuRuKo2024  @FerPeralesM https://upload.wikimedia.org/wikipedia/commons/8/83/REST_information_model.png

Slide 35

Slide 35 text

#EuRuKo2024  @FerPeralesM https://upload.wikimedia.org/wikipedia/commons/8/83/REST_information_model.png

Slide 36

Slide 36 text

#EuRuKo2024  @FerPeralesM Another travel to the past (future)

Slide 37

Slide 37 text

#EuRuKo2024  @FerPeralesM 2016

Slide 38

Slide 38 text

#EuRuKo2024  @FerPeralesM Microservices era ✨

Slide 39

Slide 39 text

#EuRuKo2024  @FerPeralesM August 2016

Slide 40

Slide 40 text

#EuRuKo2024  @FerPeralesM

Slide 41

Slide 41 text

#EuRuKo2024  @FerPeralesM

Slide 42

Slide 42 text

#EuRuKo2024  @FerPeralesM RPC

Slide 43

Slide 43 text

#EuRuKo2024  @FerPeralesM gRPC characteristics

Slide 44

Slide 44 text

#EuRuKo2024  @FerPeralesM Definition of services and contracts

Slide 45

Slide 45 text

#EuRuKo2024  @FerPeralesM Protocol Buffers (protobuf)

Slide 46

Slide 46 text

#EuRuKo2024  @FerPeralesM

Slide 47

Slide 47 text

#EuRuKo2024  @FerPeralesM Four types of method calls

Slide 48

Slide 48 text

#EuRuKo2024  @FerPeralesM

Slide 49

Slide 49 text

#EuRuKo2024  @FerPeralesM

Slide 50

Slide 50 text

#EuRuKo2024  @FerPeralesM

Slide 51

Slide 51 text

#EuRuKo2024  @FerPeralesM

Slide 52

Slide 52 text

#EuRuKo2024  @FerPeralesM

Slide 53

Slide 53 text

#EuRuKo2024  @FerPeralesM  FerPerales/grpc_demo

Slide 54

Slide 54 text

#EuRuKo2024  @FerPeralesM Definition of contracts

Slide 55

Slide 55 text

#EuRuKo2024  @FerPeralesM

Slide 56

Slide 56 text

#EuRuKo2024  @FerPeralesM Creating our server

Slide 57

Slide 57 text

#EuRuKo2024  @FerPeralesM Code generation

Slide 58

Slide 58 text

#EuRuKo2024  @FerPeralesM For Ruby: grpc_tools_ruby_protoc -I ../protos --ruby_out=./ server/lib —grpc_out=./server/lib ../protos/hello.proto

Slide 59

Slide 59 text

#EuRuKo2024  @FerPeralesM

Slide 60

Slide 60 text

#EuRuKo2024  @FerPeralesM

Slide 61

Slide 61 text

#EuRuKo2024  @FerPeralesM Implement our service

Slide 62

Slide 62 text

#EuRuKo2024  @FerPeralesM

Slide 63

Slide 63 text

#EuRuKo2024  @FerPeralesM Creating our server

Slide 64

Slide 64 text

#EuRuKo2024  @FerPeralesM

Slide 65

Slide 65 text

#EuRuKo2024  @FerPeralesM Creating our client

Slide 66

Slide 66 text

#EuRuKo2024  @FerPeralesM Code generation

Slide 67

Slide 67 text

#EuRuKo2024  @FerPeralesM For Ruby: grpc_tools_ruby_protoc -I ../protos --ruby_out=./ client/lib —grpc_out=./client/lib ../protos/hello.proto

Slide 68

Slide 68 text

#EuRuKo2024  @FerPeralesM

Slide 69

Slide 69 text

#EuRuKo2024  @FerPeralesM

Slide 70

Slide 70 text

#EuRuKo2024  @FerPeralesM Implement our client

Slide 71

Slide 71 text

#EuRuKo2024  @FerPeralesM

Slide 72

Slide 72 text

#EuRuKo2024  @FerPeralesM Running the server

Slide 73

Slide 73 text

#EuRuKo2024  @FerPeralesM ruby server/app/server.rb

Slide 74

Slide 74 text

#EuRuKo2024  @FerPeralesM Client calls say_hello in server

Slide 75

Slide 75 text

#EuRuKo2024  @FerPeralesM ruby client/app/client.rb “Euruko 2024!”

Slide 76

Slide 76 text

#EuRuKo2024  @FerPeralesM

Slide 77

Slide 77 text

#EuRuKo2024  @FerPeralesM

Slide 78

Slide 78 text

#EuRuKo2024  @FerPeralesM Advantages of using gRPC + profobufs

Slide 79

Slide 79 text

#EuRuKo2024  @FerPeralesM /api/v{n+1}

Slide 80

Slide 80 text

#EuRuKo2024  @FerPeralesM How protobuf helps with versioning?

Slide 81

Slide 81 text

#EuRuKo2024  @FerPeralesM

Slide 82

Slide 82 text

#EuRuKo2024  @FerPeralesM

Slide 83

Slide 83 text

#EuRuKo2024  @FerPeralesM Performance

Slide 84

Slide 84 text

#EuRuKo2024  @FerPeralesM Disadvantages of using gRPC + protobuf

Slide 85

Slide 85 text

#EuRuKo2024  @FerPeralesM Implementation

Slide 86

Slide 86 text

#EuRuKo2024  @FerPeralesM Debugging

Slide 87

Slide 87 text

#EuRuKo2024  @FerPeralesM When should we use gRPC?

Slide 88

Slide 88 text

#EuRuKo2024  @FerPeralesM It depends™

Slide 89

Slide 89 text

#EuRuKo2024  @FerPeralesM PoC

Slide 90

Slide 90 text

#EuRuKo2024  @FerPeralesM Multi language systems

Slide 91

Slide 91 text

#EuRuKo2024  @FerPeralesM Microservices

Slide 92

Slide 92 text

#EuRuKo2024  @FerPeralesM Internal communication systems

Slide 93

Slide 93 text

#EuRuKo2024  @FerPeralesM Low-bandwidth networks

Slide 94

Slide 94 text

#EuRuKo2024  @FerPeralesM As one of your innovation tokens

Slide 95

Slide 95 text

#EuRuKo2024  @FerPeralesM boringtechnology.club

Slide 96

Slide 96 text

#EuRuKo2024  @FerPeralesM Why is gRPC more popular in some language than in others?

Slide 97

Slide 97 text

#EuRuKo2024  @FerPeralesM 🤷

Slide 98

Slide 98 text

#EuRuKo2024  @FerPeralesM …

Slide 99

Slide 99 text

#EuRuKo2024  @FerPeralesM Some guesses

Slide 100

Slide 100 text

#EuRuKo2024  @FerPeralesM Strong ties with micro services

Slide 101

Slide 101 text

#EuRuKo2024  @FerPeralesM REST APIs are enough most of the time

Slide 102

Slide 102 text

#EuRuKo2024  @FerPeralesM Speed is not everything

Slide 103

Slide 103 text

#EuRuKo2024  @FerPeralesM That’s why most of us don’t go to work by plane*

Slide 104

Slide 104 text

#EuRuKo2024  @FerPeralesM Thank you! me@ferperales.net linkedin.com/in/ferperales 🤖 Upcoming thoughtbot events 🤖 In-person office hours - October 10th & 11th - London thoughtbot open summit - October 25th - online