GCP Professional Cloud Developer study materials
GCP Professional Cloud Developer study resources

GCP Professional Cloud Developer: Designing Highly Scalable, Secure, and Reliable Cloud-Native Applications

GCP Professional Cloud Developer · Work through your exam, one topic at a time.

All guide sections

Designing Highly Scalable, Secure, and Reliable Cloud-Native Applications

Statelessness first

Cloud-native design on Google Cloud assumes any instance can die at any moment. Push session state, upload buffers, and caches off the instance into Memorystore, Firestore, Cloud Storage, or Spanner. In-memory caching is fine as an optimization, never as a source of truth.

Decouple with the right queue

Prefer asynchronous integration over synchronous call chains. Pub/Sub fits fan-out, streaming, and event distribution; Cloud Tasks fits controlled dispatch rate, per-task retry policy, and scheduled delay. A synchronous call to a downstream service is a reliability dependency, so give every outbound call a timeout, retry with exponential backoff plus jitter, and a bounded retry count.

Know the scaling knobs per runtime

Cloud Run scales on concurrency per instance: set --concurrency, use --min-instances to avoid cold starts, and --max-instances to shield delicate backends from traffic spikes. GKE uses HorizontalPodAutoscaler with the cluster autoscaler or Autopilot; App Engine uses instance classes and automatic scaling settings. Scaling limits that matter in questions are usually downstream capacity, not the frontend.

Secure by default

Give each workload its own service account with least privilege. Never export key files: attach service accounts on GCP runtimes and use Workload Identity Federation off-GCP. Keep backends off the public internet with internal load balancing or --ingress=internal, and put Cloud Load Balancing, Cloud Armor, and IAP in front. Store credentials in Secret Manager.

Assume at-least-once delivery

Pub/Sub and Cloud Tasks can redeliver: duplicates after retries, redeploys, or ack-deadline expiry are normal. Handlers must be idempotent, and poison messages should flow to a dead-letter topic. Trap: a scenario describes double-charging after a redeploy and offers "enable exactly-once"; the correct answer is a persisted idempotency key checked inside the same transaction as the write. Rule of thumb: if a message can arrive twice, the handler must yield the same result twice.