Dispatch Service
consistent hashing sharded by geohash
data is transient, in memory, and thus there is no need to replicate. (CAP: AP over CP)
single-threaded or locked matching in a shard to prevent double dispatching
Payment Service
==The key is to have an async design==, because payment systems usually have a very long latency for ACID transactions across multiple systems.
leverage event queues
payment gateway w/ Braintree, PayPal, Card.io, Alipay, etc.
logging intensively to track everything
APIs with idempotency, exponential backoff, and random jitter
UserProfile Service and Trip Service
low latency with caching
UserProfile Service has the challenge to serve users in increasing types (driver, rider, restaurant owner, eater, etc) and user schemas in different regions and countries.
Push Notification Service
Apple Push Notifications Service (not quite reliable)
Google Cloud Messaging Service GCM (it can detect the deliverability) or
SMS service is usually more reliable
https://www.geeksforgeeks.org/system-design-of-uber-app-uber-system-architecture/