# Overview A communication protocol where the client selects a remote procedure to execute, serializes the parameters, and then sends the lightweight binary data to the server.  Server decodes the message and executes the operation, and sends back the result. It is designed in a manner that make it feel similar to using local function calls. # Key Considerations # Pros - Simple and lightweight payloads; custom RPC calls with a binary encoding format can achieve better performance than generic JSON over REST - Support SSL/TLS out of the box - The strong typing helps catch errors at compil etime, rather than runtime # Cons - There are a series of issues that arise with RPC due to trying to work similar to local function calls: - Network requests (which is what RPCs are) are unpredictable. Requests can be lost, but never known why. This means it may have successfully been executed on the server, but a response was never received. How to handle this challenge? - In local functional calls, you can pass references to large objects. In RPC, you need to encode and send the whole object. - Difficult for developers to debug # Use Cases - Inter-service data exchanges on the backend within the same organization # Related Topics - [[Protocol Buffers]]