<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/migration-to-google-cloud-platform-grpc-grpc-gateway-p8cvgwiix" -->

---
title: Migration to Google Cloud Platform — gRPC & grpc-gateway
description: Yik Yak engineers detail how gRPC and grpc-gateway helped their migration from AWS to Google Cloud Platform. The post contrasts REST's lack of a canonical...
canonical: https://daily.dev/posts/migration-to-google-cloud-platform-grpc-grpc-gateway-p8cvgwiix
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Migration to Google Cloud Platform — gRPC & grpc-gateway | daily.dev
og:description: Yik Yak engineers detail how gRPC and grpc-gateway helped their migration from AWS to Google Cloud Platform. The post contrasts REST's lack of a canonical...
og:url: https://daily.dev/posts/migration-to-google-cloud-platform-grpc-grpc-gateway-p8cvgwiix
og:image: https://api.daily.dev/og/posts/p8cvGwiIX.png
og:image:alt: Migration to Google Cloud Platform — gRPC & grpc-gateway
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Migration to Google Cloud Platform — gRPC & grpc-gateway

**[gRPC Blog](https://daily.dev/sources/grpc-blog)** · 14 min read · 0 upvotes · 0 comments

## Summary

Yik Yak engineers detail how gRPC and grpc-gateway helped their migration from AWS to Google Cloud Platform. The post contrasts REST's lack of a canonical spec, weak typing, and inconsistent client implementations with gRPC's declarative, strongly-typed IDL and generated client/server stubs. Grpc-gateway let them expose REST endpoints backed by gRPC services so existing clients kept working during the migration. It also covers early adopter bugs (a Go gRPC client resource leak, GOAWAY packet support) and load balancing challenges with HTTP2 behind an nghttp2 ingress causing uneven CPU distribution across servers.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://grpc.io/blog/yikyak>

## Questions this post answers

### How can I keep existing REST clients working while migrating my backend to gRPC?

Use grpc-gateway to generate a reverse-proxy server that translates RESTful JSON requests into gRPC calls. By adding a google.api.http option to a gRPC service definition, grpc-gateway auto-generates Go handlers that route HTTP GET requests (like /api/getMessages) to the corresponding gRPC endpoint, letting existing REST clients continue working unchanged during a migration.

_daily.dev surfaces engineering writeups like this for teams weighing a gRPC migration strategy._

### What load balancing problems occur when using gRPC with HTTP2 behind an nginx or nghttp2 ingress?

gRPC's default use of HTTP2 keeps a single connection open and reused for multiple requests, which can cause uneven load distribution across backend servers. One team found that dialing the remote server per request didn't fully fix this because an nghttp2 ingress kept routing inbound requests to already-connected servers, causing one server to run at 50% CPU while another sat at 20%; removing the nghttp2 ingress reduced the variance.

_developers troubleshooting gRPC load balancing quirks can track real-world fixes like this on daily.dev._

### Why is REST considered harder to work with than gRPC for typed API contracts?

REST lacks a canonical specification and a built-in declarative way to define types, so field types can drift between server code paths, causing bugs like a boolean field sometimes serialized as 0/1 and sometimes as true/false. gRPC avoids this by using Protocol Buffers as a strongly-typed, language-independent IDL that generates consistent client and server stubs across languages, eliminating this kind of type ambiguity.

_daily.dev helps developers comparing REST and gRPC API design track these tradeoffs._

## Similar posts on daily.dev

- [gRPC vs REST Is the Wrong Question · Buf](https://daily.dev/posts/grpc-vs-rest-is-the-wrong-question-buf-xe2qehlxz) · Buf Blog · 109 upvotes · 4 comments
- [From RPC to gRPC: Understanding Remote Procedure Calls, Protocol Buffers, and Modern Distributed Systems Communication](https://daily.dev/posts/from-rpc-to-grpc-understanding-remote-procedure-calls-protocol-buffers-and-modern-distributed-sys-hdfydjpc0) · freeCodeCamp · 1 upvotes · 0 comments
- [gRPC deep dive: from service definition to wire format](https://daily.dev/posts/grpc-deep-dive-from-service-definition-to-wire-format-mykdq3gjn) · Hacker News · 0 upvotes · 0 comments
- [Kubernetes Ingress vs Gateway API](https://daily.dev/posts/kubernetes-ingress-vs-gateway-api-jwa9l6ig9) · Isovalent · 11 upvotes · 1 comments

---

Tags: [#golang](https://daily.dev/tags/golang), [#gcp](https://daily.dev/tags/gcp), [#microservices](https://daily.dev/tags/microservices), [#rest-api](https://daily.dev/tags/rest-api), [#grpc](https://daily.dev/tags/grpc)

[View this post on daily.dev](https://daily.dev/posts/migration-to-google-cloud-platform-grpc-grpc-gateway-p8cvgwiix)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Migration to Google Cloud Platform — gRPC & grpc-gateway","url":"https://daily.dev/posts/migration-to-google-cloud-platform-grpc-grpc-gateway-p8cvgwiix","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/migration-to-google-cloud-platform-grpc-grpc-gateway-p8cvgwiix"},"datePublished":"2026-08-23T07:20:25.802Z","dateModified":"2026-08-23T07:22:32.889Z","description":"Yik Yak engineers detail how gRPC and grpc-gateway helped their migration from AWS to Google Cloud Platform. The post contrasts REST's lack of a canonical...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/10aae04dfd3ba4523d83e4087201877a?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/10aae04dfd3ba4523d83e4087201877a?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"gRPC Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"gRPC Blog","logo":"https://media.daily.dev/image/upload/s--asedGCAx--/f_auto,q_auto/v1787469607/logos/grpc-blog?_a=BAMAMicg0","url":"https://daily.dev/sources/grpc-blog"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/migration-to-google-cloud-platform-grpc-grpc-gateway-p8cvgwiix","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"golang,gcp,microservices,rest-api,grpc","timeRequired":"PT14M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"gRPC Blog","item":"https://daily.dev/sources/grpc-blog"},{"@type":"ListItem","position":3,"name":"Migration to Google Cloud Platform — gRPC & grpc-gateway"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/migration-to-google-cloud-platform-grpc-grpc-gateway-p8cvgwiix#faq","mainEntity":[{"@type":"Question","name":"How can I keep existing REST clients working while migrating my backend to gRPC?","acceptedAnswer":{"@type":"Answer","text":"Use grpc-gateway to generate a reverse-proxy server that translates RESTful JSON requests into gRPC calls. By adding a google.api.http option to a gRPC service definition, grpc-gateway auto-generates Go handlers that route HTTP GET requests (like /api/getMessages) to the corresponding gRPC endpoint, letting existing REST clients continue working unchanged during a migration. daily.dev surfaces engineering writeups like this for teams weighing a gRPC migration strategy."}},{"@type":"Question","name":"What load balancing problems occur when using gRPC with HTTP2 behind an nginx or nghttp2 ingress?","acceptedAnswer":{"@type":"Answer","text":"gRPC's default use of HTTP2 keeps a single connection open and reused for multiple requests, which can cause uneven load distribution across backend servers. One team found that dialing the remote server per request didn't fully fix this because an nghttp2 ingress kept routing inbound requests to already-connected servers, causing one server to run at 50% CPU while another sat at 20%; removing the nghttp2 ingress reduced the variance. developers troubleshooting gRPC load balancing quirks can track real-world fixes like this on daily.dev."}},{"@type":"Question","name":"Why is REST considered harder to work with than gRPC for typed API contracts?","acceptedAnswer":{"@type":"Answer","text":"REST lacks a canonical specification and a built-in declarative way to define types, so field types can drift between server code paths, causing bugs like a boolean field sometimes serialized as 0/1 and sometimes as true/false. gRPC avoids this by using Protocol Buffers as a strongly-typed, language-independent IDL that generates consistent client and server stubs across languages, eliminating this kind of type ambiguity. daily.dev helps developers comparing REST and gRPC API design track these tradeoffs."}}]}
```

