← Back to list

FOQS and Modern Distributed Messaging Systems

Kafka, SQS, Pub/Sub, RabbitMQ — Architecture, Core Concepts & Why They Were Created

Kiamars Mirzaee · 2026-02-18 19:41 · 0 claps · 4.3 min read
#kafka #sqs #rabbitmq #amazon-sqs #google-pub-sub
Open on Medium ↗
Wiki topics: 🏛️ · Architecture

FOQS and Modern Distributed Messaging Systems

Kafka, SQS, Pub/Sub, RabbitMQ — Architecture, Core Concepts & Why They Were Created

At internet scale, messaging infrastructure is not optional — it is the backbone of the system.

Meta’s FOQS (Facebook Ordered Queuing Service) is one example of an internal, horizontally scalable, persistent priority queue built to handle massive asynchronous workloads.

Conceptually, FOQS sits in the same ecosystem as:

  • Apache Kafka
  • Amazon SQS
  • Google Pub/Sub
  • RabbitMQ

But each of these systems was created to solve different problems — and their architectural choices reflect those motivations.

Let’s break them down like a senior engineer would:

  • Why each system was created
  • The core concepts
  • The core architecture
  • Where they differ from FOQS

1️⃣ FOQS (Facebook Ordered Queuing Service)

Why FOQS Was Created

Meta operates at extreme scale:

  • Billions of users
  • Real-time feed updates
  • Notifications
  • ML pipelines
  • Background task scheduling

Traditional FIFO queues weren’t sufficient. Meta needed:

  • Priority-based processing
  • Massive horizontal scalability
  • Persistence
  • Strict ordering guarantees per shard
  • Fault tolerance under constant failure

FOQS was built to handle asynchronous workloads with priority-aware scheduling at hyperscale.

Core Concepts

  • Persistent distributed priority queue
  • Horizontally partitioned (sharded)
  • Ordered processing within shards
  • Durable storage
  • At-least-once delivery
  • High throughput + low latency

The defining feature: priority-based ordering, not just FIFO logs.

Core Architecture (High-Level)

Typical design principles:

  • Sharded queue partitions
  • Leader per shard
  • Replicated storage
  • Durable message log
  • Worker pull-based consumption
  • Retry & visibility timeout mechanisms

Think of it as:

A distributed, persistent, priority-aware task scheduling fabric.

2️⃣ Apache Kafka

Why Kafka Was Created

Kafka was created at LinkedIn to solve:

  • Log aggregation
  • Event streaming
  • Activity tracking
  • Large-scale data pipelines

The key challenge:

Move large volumes of event data reliably and replay it efficiently.

Kafka wasn’t designed as a task queue — it was designed as a distributed commit log.

Core Concept

Kafka is:

  • An append-only distributed log
  • Partitioned
  • Replicated
  • Pull-based consumption
  • High-throughput event streaming system

It treats events as immutable records in a log.

Core Architecture

  • Topics → partitioned
  • Each partition → ordered log
  • Producers append records
  • Consumers read via offsets
  • Brokers replicate partitions
  • ZooKeeper (historically) / KRaft for coordination

Key design principle:

Ordering is per partition, not global.

How Kafka Differs from FOQS

Kafka = data streaming backbone FOQS = priority task execution backbone

3️⃣ Amazon SQS

Why SQS Was Created

Amazon built SQS to support:

  • Decoupled microservices
  • Elastic cloud applications
  • Serverless architectures
  • Fault-tolerant distributed systems

The goal:

Make distributed systems simpler by abstracting queue management.

Core Concepts

  • Fully managed distributed queue
  • At-least-once delivery
  • Visibility timeout
  • Dead-letter queues
  • Standard and FIFO variants

SQS abstracts infrastructure completely.

Core Architecture (Conceptual)

While internal implementation isn’t public, conceptually:

  • Distributed storage backend
  • Multi-AZ replication
  • Redundant message copies
  • Visibility timeout model
  • Eventually consistent distributed queue

SQS optimizes for:

  • Reliability
  • Simplicity
  • Elastic scaling

Not for strict ordering at massive throughput.

SQS vs FOQS

SQS = general distributed decoupling layer FOQS = hyperscale internal priority scheduling system

4️⃣ Google Pub/Sub

Why Pub/Sub Was Created

Google built Pub/Sub for:

  • Event-driven systems
  • Data ingestion pipelines
  • Analytics pipelines
  • Cloud-native architectures

The mission:

Provide global-scale, real-time messaging infrastructure.

Core Concepts

  • Topic-based messaging
  • Publisher → topic → subscriber
  • Message retention
  • Ack-based processing
  • Horizontal scaling by default

Pub/Sub is event-driven, not task-driven.

Core Architecture

  • Distributed message brokers
  • Globally replicated storage
  • Push and pull subscriptions
  • At-least-once delivery
  • Automatic scaling

Strong emphasis on:

  • Durability
  • Scalability
  • Cloud-native abstraction

Pub/Sub vs FOQS

Pub/Sub = event distribution fabric FOQS = prioritized asynchronous job processing

5️⃣ RabbitMQ

Why RabbitMQ Was Created

RabbitMQ implements the AMQP protocol and was designed for:

  • Enterprise messaging
  • Reliable inter-service communication
  • Flexible routing patterns
  • Fine-grained delivery guarantees

It targets traditional enterprise workloads.

Core Concepts

  • Exchanges
  • Queues
  • Bindings
  • Routing keys
  • Ack-based consumption
  • Optional priority queues

RabbitMQ focuses on routing flexibility.

Core Architecture

  • Broker-based model
  • Exchange routes messages
  • Queue stores messages
  • Consumers pull or receive pushes
  • Supports clustering
  • Durable queues optional

It’s more feature-rich in routing than Kafka.

RabbitMQ vs FOQS

RabbitMQ = flexible message broker FOQS = massive distributed priority scheduler

Architectural Philosophy Comparison

Big Design Differences

1️⃣ Log vs Queue

  • Kafka = log (replayable)
  • FOQS/SQS/RabbitMQ = queue (consume & delete)

2️⃣ Priority Handling

  • FOQS → Native priority scheduling
  • RabbitMQ → Optional
  • SQS → Limited
  • Kafka → Not supported natively

3️⃣ Replay Capability

  • Kafka → Strong replay model
  • Pub/Sub → Limited retention replay
  • FOQS → Task execution focused, not replay-driven

4️⃣ Scaling Strategy

  • Kafka → Partition scaling
  • SQS → Service-level scaling
  • Pub/Sub → Global distributed fabric
  • FOQS → Sharded priority partitions

Final Takeaway

Each system reflects the environment it was born in:

  • Kafka was born in data streaming.
  • SQS was born in cloud decoupling.
  • Pub/Sub was born in global event distribution.
  • RabbitMQ was born in enterprise messaging.
  • FOQS was born in hyperscale priority task orchestration.

There is no “best” messaging system — only the one aligned with your workload’s constraints:

  • Do you need replay?
  • Do you need strict ordering?
  • Do you need priority scheduling?
  • Do you need global fan-out?
  • Do you need simple managed infrastructure?

As senior engineers, understanding the architectural intent behind each system matters more than memorizing features. Because architecture is always a reflection of scale, failure assumptions, and workload shape.


메타데이터
post_id
385a55f5f481
slug
foqs-and-modern-distributed-messaging-systems-385a55f5f481
url
https://medium.com/@kiamars.mirzaee/foqs-and-modern-distributed-messaging-systems-385a55f5f481
canonical_url
https://medium.com/@kiamars.mirzaee/foqs-and-modern-distributed-messaging-systems-385a55f5f481
author_url
https://medium.com/@kiamars.mirzaee
status
ok
fetched_at
2026-06-29 22:44:20