Alternatives to gRPC logo

Alternatives to gRPC

GraphQL, RabbitMQ, Kafka, REST, and MQTT are the most popular alternatives and competitors to gRPC.
2.1K
1.3K
+ 1
63

What is gRPC and what are its top alternatives?

gRPC is a high-performance open-source RPC (Remote Procedure Call) framework developed by Google. It uses HTTP/2 for transport, Protocol Buffers as the interface description language, and provides features like bi-directional streaming, flow control, and authentication. gRPC is widely used for building fast, efficient, and scalable microservices. However, one limitation of gRPC is that it can be complex to set up and may require some learning curve for developers.

  1. Thrift: Apache Thrift is an efficient and scalable RPC framework. It supports multiple programming languages and data serialization formats. Thrift is known for providing compact, fast, and cross-platform serialization.
  2. REST: Representational State Transfer (REST) is a widely used architectural style for designing networked applications. It uses standard HTTP methods like GET, POST, PUT, DELETE for communication. REST is simple and easy to use but may lack some of the features provided by gRPC.
  3. GraphQL: GraphQL is a query language for APIs that enables clients to request only the data they need. It offers flexibility and efficiency in fetching data from servers. However, GraphQL may not be as optimized for performance as gRPC.
  4. JSON-RPC: JSON-RPC is a simple and lightweight RPC protocol utilizing JSON as a data format. It is easy to implement and can be used with various programming languages. JSON-RPC lacks some advanced features present in gRPC.
  5. Akka gRPC: Akka gRPC is a high-performance and open-source gRPC framework built on top of Akka Streams. It provides tooling for building APIs and servers in Akka-based systems.
  6. Socket.IO: Socket.IO is a real-time bidirectional event-based communication library that enables websockets. It is widely used for building interactive applications and supports fallback mechanisms for older browsers.
  7. Avro: Apache Avro is a data serialization system that provides rich data structures and a compact binary format. It is often used in combination with RPC frameworks for efficient communication.
  8. ZeroMQ: ZeroMQ is a messaging library that provides an abstraction layer for various messaging patterns like pub-sub, request-reply, and pipeline. It is lightweight and supports multiple languages.
  9. RSocket: RSocket is a binary protocol for use on byte stream transports, enabling multiplexed streams and bi-directional traffic. It provides features like resumability and flow control.
  10. Solace PubSub+: Solace PubSub+ is a messaging middleware solution that offers advanced messaging capabilities like topic-based pub-sub, request-reply, and streaming. It is known for its scalability and reliability in distributed systems.

Top Alternatives to gRPC

  • GraphQL
    GraphQL

    GraphQL is a data query language and runtime designed and used at Facebook to request and deliver data to mobile and web apps since 2012. ...

  • RabbitMQ
    RabbitMQ

    RabbitMQ gives your applications a common platform to send and receive messages, and your messages a safe place to live until received. ...

  • Kafka
    Kafka

    Kafka is a distributed, partitioned, replicated commit log service. It provides the functionality of a messaging system, but with a unique design. ...

  • REST
    REST

    An architectural style for developing web services. A distributed system framework that uses Web protocols and technologies. ...

  • MQTT
    MQTT

    It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium. ...

  • SignalR
    SignalR

    SignalR allows bi-directional communication between server and client. Servers can now push content to connected clients instantly as it becomes available. SignalR supports Web Sockets, and falls back to other compatible techniques for older browsers. SignalR includes APIs for connection management (for instance, connect and disconnect events), grouping connections, and authorization. ...

  • Protobuf
    Protobuf

    Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. ...

  • JavaScript
    JavaScript

    JavaScript is most known as the scripting language for Web pages, but used in many non-browser environments as well such as node.js or Apache CouchDB. It is a prototype-based, multi-paradigm scripting language that is dynamic,and supports object-oriented, imperative, and functional programming styles. ...

gRPC alternatives & related posts

GraphQL logo

GraphQL

33.2K
27.3K
310
A data query language and runtime
33.2K
27.3K
+ 1
310
PROS OF GRAPHQL
  • 75
    Schemas defined by the requests made by the user
  • 63
    Will replace RESTful interfaces
  • 62
    The future of API's
  • 49
    The future of databases
  • 13
    Self-documenting
  • 12
    Get many resources in a single request
  • 6
    Query Language
  • 6
    Ask for what you need, get exactly that
  • 3
    Fetch different resources in one request
  • 3
    Type system
  • 3
    Evolve your API without versions
  • 2
    Ease of client creation
  • 2
    GraphiQL
  • 2
    Easy setup
  • 1
    "Open" document
  • 1
    Fast prototyping
  • 1
    Supports subscription
  • 1
    Standard
  • 1
    Good for apps that query at build time. (SSR/Gatsby)
  • 1
    1. Describe your data
  • 1
    Better versioning
  • 1
    Backed by Facebook
  • 1
    Easy to learn
CONS OF GRAPHQL
  • 4
    Hard to migrate from GraphQL to another technology
  • 4
    More code to type.
  • 2
    Takes longer to build compared to schemaless.
  • 1
    No support for caching
  • 1
    All the pros sound like NFT pitches
  • 1
    No support for streaming
  • 1
    Works just like any other API at runtime
  • 1
    N+1 fetch problem
  • 1
    No built in security

related GraphQL posts

Shared insights
on
Node.jsNode.jsGraphQLGraphQLMongoDBMongoDB

I just finished the very first version of my new hobby project: #MovieGeeks. It is a minimalist online movie catalog for you to save the movies you want to see and for rating the movies you already saw. This is just the beginning as I am planning to add more features on the lines of sharing and discovery

For the #BackEnd I decided to use Node.js , GraphQL and MongoDB:

  1. Node.js has a huge community so it will always be a safe choice in terms of libraries and finding solutions to problems you may have

  2. GraphQL because I needed to improve my skills with it and because I was never comfortable with the usual REST approach. I believe GraphQL is a better option as it feels more natural to write apis, it improves the development velocity, by definition it fixes the over-fetching and under-fetching problem that is so common on REST apis, and on top of that, the community is getting bigger and bigger.

  3. MongoDB was my choice for the database as I already have a lot of experience working on it and because, despite of some bad reputation it has acquired in the last months, I still believe it is a powerful database for at least a very long list of use cases such as the one I needed for my website

See more
Nick Rockwell
SVP, Engineering at Fastly · | 46 upvotes · 3.5M views

When I joined NYT there was already broad dissatisfaction with the LAMP (Linux Apache HTTP Server MySQL PHP) Stack and the front end framework, in particular. So, I wasn't passing judgment on it. I mean, LAMP's fine, you can do good work in LAMP. It's a little dated at this point, but it's not ... I didn't want to rip it out for its own sake, but everyone else was like, "We don't like this, it's really inflexible." And I remember from being outside the company when that was called MIT FIVE when it had launched. And been observing it from the outside, and I was like, you guys took so long to do that and you did it so carefully, and yet you're not happy with your decisions. Why is that? That was more the impetus. If we're going to do this again, how are we going to do it in a way that we're gonna get a better result?

So we're moving quickly away from LAMP, I would say. So, right now, the new front end is React based and using Apollo. And we've been in a long, protracted, gradual rollout of the core experiences.

React is now talking to GraphQL as a primary API. There's a Node.js back end, to the front end, which is mainly for server-side rendering, as well.

Behind there, the main repository for the GraphQL server is a big table repository, that we call Bodega because it's a convenience store. And that reads off of a Kafka pipeline.

See more
RabbitMQ logo

RabbitMQ

20.9K
18.4K
527
Open source multiprotocol messaging broker
20.9K
18.4K
+ 1
527
PROS OF RABBITMQ
  • 234
    It's fast and it works with good metrics/monitoring
  • 79
    Ease of configuration
  • 59
    I like the admin interface
  • 50
    Easy to set-up and start with
  • 21
    Durable
  • 18
    Intuitive work through python
  • 18
    Standard protocols
  • 10
    Written primarily in Erlang
  • 8
    Simply superb
  • 6
    Completeness of messaging patterns
  • 3
    Scales to 1 million messages per second
  • 3
    Reliable
  • 2
    Distributed
  • 2
    Supports MQTT
  • 2
    Better than most traditional queue based message broker
  • 2
    Supports AMQP
  • 1
    Clusterable
  • 1
    Clear documentation with different scripting language
  • 1
    Great ui
  • 1
    Inubit Integration
  • 1
    Better routing system
  • 1
    High performance
  • 1
    Runs on Open Telecom Platform
  • 1
    Delayed messages
  • 1
    Reliability
  • 1
    Open-source
CONS OF RABBITMQ
  • 9
    Too complicated cluster/HA config and management
  • 6
    Needs Erlang runtime. Need ops good with Erlang runtime
  • 5
    Configuration must be done first, not by your code
  • 4
    Slow

related RabbitMQ posts

James Cunningham
Operations Engineer at Sentry · | 18 upvotes · 1.7M views
Shared insights
on
CeleryCeleryRabbitMQRabbitMQ
at

As Sentry runs throughout the day, there are about 50 different offline tasks that we execute—anything from “process this event, pretty please” to “send all of these cool people some emails.” There are some that we execute once a day and some that execute thousands per second.

Managing this variety requires a reliably high-throughput message-passing technology. We use Celery's RabbitMQ implementation, and we stumbled upon a great feature called Federation that allows us to partition our task queue across any number of RabbitMQ servers and gives us the confidence that, if any single server gets backlogged, others will pitch in and distribute some of the backlogged tasks to their consumers.

#MessageQueue

See more

Around the time of their Series A, Pinterest’s stack included Python and Django, with Tornado and Node.js as web servers. Memcached / Membase and Redis handled caching, with RabbitMQ handling queueing. Nginx, HAproxy and Varnish managed static-delivery and load-balancing, with persistent data storage handled by MySQL.

See more
Kafka logo

Kafka

23.1K
21.7K
607
Distributed, fault tolerant, high throughput pub-sub messaging system
23.1K
21.7K
+ 1
607
PROS OF KAFKA
  • 126
    High-throughput
  • 119
    Distributed
  • 92
    Scalable
  • 86
    High-Performance
  • 66
    Durable
  • 38
    Publish-Subscribe
  • 19
    Simple-to-use
  • 18
    Open source
  • 12
    Written in Scala and java. Runs on JVM
  • 9
    Message broker + Streaming system
  • 4
    KSQL
  • 4
    Avro schema integration
  • 4
    Robust
  • 3
    Suport Multiple clients
  • 2
    Extremely good parallelism constructs
  • 2
    Partioned, replayable log
  • 1
    Simple publisher / multi-subscriber model
  • 1
    Fun
  • 1
    Flexible
CONS OF KAFKA
  • 32
    Non-Java clients are second-class citizens
  • 29
    Needs Zookeeper
  • 9
    Operational difficulties
  • 5
    Terrible Packaging

related Kafka posts

Nick Rockwell
SVP, Engineering at Fastly · | 46 upvotes · 3.5M views

When I joined NYT there was already broad dissatisfaction with the LAMP (Linux Apache HTTP Server MySQL PHP) Stack and the front end framework, in particular. So, I wasn't passing judgment on it. I mean, LAMP's fine, you can do good work in LAMP. It's a little dated at this point, but it's not ... I didn't want to rip it out for its own sake, but everyone else was like, "We don't like this, it's really inflexible." And I remember from being outside the company when that was called MIT FIVE when it had launched. And been observing it from the outside, and I was like, you guys took so long to do that and you did it so carefully, and yet you're not happy with your decisions. Why is that? That was more the impetus. If we're going to do this again, how are we going to do it in a way that we're gonna get a better result?

So we're moving quickly away from LAMP, I would say. So, right now, the new front end is React based and using Apollo. And we've been in a long, protracted, gradual rollout of the core experiences.

React is now talking to GraphQL as a primary API. There's a Node.js back end, to the front end, which is mainly for server-side rendering, as well.

Behind there, the main repository for the GraphQL server is a big table repository, that we call Bodega because it's a convenience store. And that reads off of a Kafka pipeline.

See more
Ashish Singh
Tech Lead, Big Data Platform at Pinterest · | 38 upvotes · 3M views

To provide employees with the critical need of interactive querying, we’ve worked with Presto, an open-source distributed SQL query engine, over the years. Operating Presto at Pinterest’s scale has involved resolving quite a few challenges like, supporting deeply nested and huge thrift schemas, slow/ bad worker detection and remediation, auto-scaling cluster, graceful cluster shutdown and impersonation support for ldap authenticator.

Our infrastructure is built on top of Amazon EC2 and we leverage Amazon S3 for storing our data. This separates compute and storage layers, and allows multiple compute clusters to share the S3 data.

We have hundreds of petabytes of data and tens of thousands of Apache Hive tables. Our Presto clusters are comprised of a fleet of 450 r4.8xl EC2 instances. Presto clusters together have over 100 TBs of memory and 14K vcpu cores. Within Pinterest, we have close to more than 1,000 monthly active users (out of total 1,600+ Pinterest employees) using Presto, who run about 400K queries on these clusters per month.

Each query submitted to Presto cluster is logged to a Kafka topic via Singer. Singer is a logging agent built at Pinterest and we talked about it in a previous post. Each query is logged when it is submitted and when it finishes. When a Presto cluster crashes, we will have query submitted events without corresponding query finished events. These events enable us to capture the effect of cluster crashes over time.

Each Presto cluster at Pinterest has workers on a mix of dedicated AWS EC2 instances and Kubernetes pods. Kubernetes platform provides us with the capability to add and remove workers from a Presto cluster very quickly. The best-case latency on bringing up a new worker on Kubernetes is less than a minute. However, when the Kubernetes cluster itself is out of resources and needs to scale up, it can take up to ten minutes. Some other advantages of deploying on Kubernetes platform is that our Presto deployment becomes agnostic of cloud vendor, instance types, OS, etc.

#BigData #AWS #DataScience #DataEngineering

See more
REST logo

REST

20
192
0
A software architectural style
20
192
+ 1
0
PROS OF REST
  • 4
    Popularity
CONS OF REST
    Be the first to leave a con

    related REST posts

    MQTT logo

    MQTT

    595
    570
    7
    A machine-to-machine Internet of Things connectivity protocol
    595
    570
    + 1
    7
    PROS OF MQTT
    • 3
      Varying levels of Quality of Service to fit a range of
    • 2
      Lightweight with a relatively small data footprint
    • 2
      Very easy to configure and use with open source tools
    CONS OF MQTT
    • 1
      Easy to configure in an unsecure manner

    related MQTT posts

    Kindly suggest the best tool for generating 10Mn+ concurrent user load. The tool must support MQTT traffic, REST API, support to interfaces such as Kafka, websockets, persistence HTTP connection, auth type support to assess the support /coverage.

    The tool can be integrated into CI pipelines like Azure Pipelines, GitHub, and Jenkins.

    See more
    Reza Saadat
    IoT Solutions Architect at GreenEdge · | 5 upvotes · 86.9K views
    Shared insights
    on
    MQTTMQTTNATSNATS

    I want to use NATS for my IoT Platform and replace it instead of the MQTT broker. is there any preferred added value to do that?

    See more
    SignalR logo

    SignalR

    489
    1.2K
    146
    A new library for ASP.NET developers that makes developing real-time web functionality easy.
    489
    1.2K
    + 1
    146
    PROS OF SIGNALR
    • 32
      Supports .NET server
    • 25
      Real-time
    • 18
      Free
    • 16
      Fallback to SSE, forever frame, long polling
    • 15
      WebSockets
    • 10
      Simple
    • 9
      Open source
    • 8
      Ease of use
    • 8
      JSON
    • 5
      Cool
    • 0
      Azure
    CONS OF SIGNALR
    • 2
      Expertise hard to get
    • 2
      Requires jQuery
    • 1
      Weak iOS and Android support
    • 1
      Big differences between ASP.NET and Core versions

    related SignalR posts

    Shared insights
    on
    SignalRSignalRMSSQLMSSQLAngularJSAngularJS.NET.NET

    I'm working on a project where I need to both send real-time updates for specific data sets, along with providing notifications to the users after long-running processes have been completed (SSE).

    The project is using .NET Framework, AngularJS, & MSSQL. I understand that SignalR is nice as a polyfill for .NET and you can scale with a backplane, but I was wondering if there was a more efficient/effective technology for this?

    See more

    Hi everyone! I am trying to implement a chat module in my product but it is not stable. My backend is in ASP.NET Core with EF Core, and my frontend is in Angular. Since I am already using dotnet, I used SignalR as a socket connection provider. At the moment, it works when the user logs in, the chats are loaded and the user is notified if there is any unread message just like any other app does by displaying a badge and number of unread chats. When the user navigates to chat, it loads the messages of chat. To avoid user waiting for messages I have stored the messages locally in a state management store and when the user switches the chat, it first loads messages from the store and then sends a request to server if there is any other message that is not on local.

    The problem starts with multiple connections when single account is connected from multiple clients/browsers. From backend, I check if user is connected to SignalR socket then I send the message to all connections of user it does not work properly, this part is highly unstable. secondly, How can I improve the response of message loading? I only load 25 messages at the start.

    Is there any article describing how Slack, Google Chat or MS Teams is handling the browser chat? it would be of great help.

    Thanks

    See more
    Protobuf logo

    Protobuf

    2.6K
    382
    0
    Google's data interchange format
    2.6K
    382
    + 1
    0
    PROS OF PROTOBUF
      Be the first to leave a pro
      CONS OF PROTOBUF
        Be the first to leave a con

        related Protobuf posts

        Joshua Dean Küpper
        CEO at Scrayos UG (haftungsbeschränkt) · | 12 upvotes · 347.7K views

        We've already been monitoring Agones for a few years now, but we only adapted Kubernetes in mid 2021, so we could never use it until then. Transitioning to Kubernetes has overall been a blast. There's definitely a steep learning curve associated with it, but for us, it was certainly worth it. And Agones plays definitely a part in it.

        We previously scheduled our game servers with Docker Compose and Docker Swarm, but that always felt a little brittle and like a really "manual" process, even though everything was already dockerized. For matchmaking, we didn't have any solution yet.

        After we did tons of local testing, we deployed our first production-ready Kubernetes cluster with #kubespray and deployed Agones (with Helm) on it. The installation was very easy and the official chart had just the right amount of knobs for us!

        The aspect, that we were the most stunned about, is how seamless Agones integrates into the Kubernetes infrastructure. It reuses existing mechanisms like the Health Pings and extends them with more resource states and other properties that are unique to game servers. But you're still free to use it however you like: One GameServer per Game-Session, one GameServer for multiple Game-Sessions (in parallel or reusing existing servers), custom allocation mechanisms, webhook-based scaling, ... we didn't run into any dead ends yet.

        One thing, that I was a little worried about in the beginning, was the SDK integration, as there was no official one for Minecraft/Java. And the two available inofficial ones didn't satisfy our requirements for the SDK. Therefore, we went and developed our own SDK and ... it was super easy! Agones does publish their Protobuf files and so we could generate the stubs with #Protoc. The existing documentation regarding Client-SDKs from Agones was a great help in writing our own documentation for the interface methods.

        And they even have excellent tooling for testing your own SDK implementations. With the use of Testcontainers we could just spin up the local SDK testing image for each of the integration tests and could confirm that our SDK is working fine. We discovered a very small inconsistency for one of the interface methods, submitted an issue and a corresponding PR and it was merged within less than 24 hours.

        We've now been using Agones for a few months and it has proven to be very reliable, easy to manage and just a great tool in general.

        See more
        JavaScript logo

        JavaScript

        351.2K
        267.4K
        8.1K
        Lightweight, interpreted, object-oriented language with first-class functions
        351.2K
        267.4K
        + 1
        8.1K
        PROS OF JAVASCRIPT
        • 1.7K
          Can be used on frontend/backend
        • 1.5K
          It's everywhere
        • 1.2K
          Lots of great frameworks
        • 897
          Fast
        • 745
          Light weight
        • 425
          Flexible
        • 392
          You can't get a device today that doesn't run js
        • 286
          Non-blocking i/o
        • 237
          Ubiquitousness
        • 191
          Expressive
        • 55
          Extended functionality to web pages
        • 49
          Relatively easy language
        • 46
          Executed on the client side
        • 30
          Relatively fast to the end user
        • 25
          Pure Javascript
        • 21
          Functional programming
        • 15
          Async
        • 13
          Full-stack
        • 12
          Setup is easy
        • 12
          Future Language of The Web
        • 12
          Its everywhere
        • 11
          Because I love functions
        • 11
          JavaScript is the New PHP
        • 10
          Like it or not, JS is part of the web standard
        • 9
          Expansive community
        • 9
          Everyone use it
        • 9
          Can be used in backend, frontend and DB
        • 9
          Easy
        • 8
          Most Popular Language in the World
        • 8
          Powerful
        • 8
          Can be used both as frontend and backend as well
        • 8
          For the good parts
        • 8
          No need to use PHP
        • 8
          Easy to hire developers
        • 7
          Agile, packages simple to use
        • 7
          Love-hate relationship
        • 7
          Photoshop has 3 JS runtimes built in
        • 7
          Evolution of C
        • 7
          It's fun
        • 7
          Hard not to use
        • 7
          Versitile
        • 7
          Its fun and fast
        • 7
          Nice
        • 7
          Popularized Class-Less Architecture & Lambdas
        • 7
          Supports lambdas and closures
        • 6
          It let's me use Babel & Typescript
        • 6
          Can be used on frontend/backend/Mobile/create PRO Ui
        • 6
          1.6K Can be used on frontend/backend
        • 6
          Client side JS uses the visitors CPU to save Server Res
        • 6
          Easy to make something
        • 5
          Clojurescript
        • 5
          Promise relationship
        • 5
          Stockholm Syndrome
        • 5
          Function expressions are useful for callbacks
        • 5
          Scope manipulation
        • 5
          Everywhere
        • 5
          Client processing
        • 5
          What to add
        • 4
          Because it is so simple and lightweight
        • 4
          Only Programming language on browser
        • 1
          Test
        • 1
          Hard to learn
        • 1
          Test2
        • 1
          Not the best
        • 1
          Easy to understand
        • 1
          Subskill #4
        • 1
          Easy to learn
        • 0
          Hard 彤
        CONS OF JAVASCRIPT
        • 22
          A constant moving target, too much churn
        • 20
          Horribly inconsistent
        • 15
          Javascript is the New PHP
        • 9
          No ability to monitor memory utilitization
        • 8
          Shows Zero output in case of ANY error
        • 7
          Thinks strange results are better than errors
        • 6
          Can be ugly
        • 3
          No GitHub
        • 2
          Slow

        related JavaScript posts

        Zach Holman

        Oof. I have truly hated JavaScript for a long time. Like, for over twenty years now. Like, since the Clinton administration. It's always been a nightmare to deal with all of the aspects of that silly language.

        But wowza, things have changed. Tooling is just way, way better. I'm primarily web-oriented, and using React and Apollo together the past few years really opened my eyes to building rich apps. And I deeply apologize for using the phrase rich apps; I don't think I've ever said such Enterprisey words before.

        But yeah, things are different now. I still love Rails, and still use it for a lot of apps I build. But it's that silly rich apps phrase that's the problem. Users have way more comprehensive expectations than they did even five years ago, and the JS community does a good job at building tools and tech that tackle the problems of making heavy, complicated UI and frontend work.

        Obviously there's a lot of things happening here, so just saying "JavaScript isn't terrible" might encompass a huge amount of libraries and frameworks. But if you're like me, yeah, give things another shot- I'm somehow not hating on JavaScript anymore and... gulp... I kinda love it.

        See more
        Conor Myhrvold
        Tech Brand Mgr, Office of CTO at Uber · | 44 upvotes · 10.1M views

        How Uber developed the open source, end-to-end distributed tracing Jaeger , now a CNCF project:

        Distributed tracing is quickly becoming a must-have component in the tools that organizations use to monitor their complex, microservice-based architectures. At Uber, our open source distributed tracing system Jaeger saw large-scale internal adoption throughout 2016, integrated into hundreds of microservices and now recording thousands of traces every second.

        Here is the story of how we got here, from investigating off-the-shelf solutions like Zipkin, to why we switched from pull to push architecture, and how distributed tracing will continue to evolve:

        https://eng.uber.com/distributed-tracing/

        (GitHub Pages : https://www.jaegertracing.io/, GitHub: https://github.com/jaegertracing/jaeger)

        Bindings/Operator: Python Java Node.js Go C++ Kubernetes JavaScript OpenShift C# Apache Spark

        See more