Skip to main content

设计模式与常见问题

系统架构​

Event-driven architectures​

How would you design the event-driven architecture for a newsfeed?

"The design would involve a publish-subscribe model where user actions are events that are published to a messaging system. Subscribers, such as the newsfeed service, would consume these events to update the feed.

  • Event producers: User actions (post, like, comment, share).
  • Event consumers: Newsfeed service, notification service.
  • Event brokers: Kafka, RabbitMQ, or AWS SNS/SQS.
  • Feed generation: Real-time vs. pre-generated feeds using fan-out on write or lazy loading strategies."
  • Datastores: NoSQL databases like Cassandra for the feed, Elasticsearch for search.
  • Caching: Memcached or Redis to cache hot data.

How would you handle peak traffic in an event-driven live streaming service like Facebook Live?

"To handle peak traffic, we can:

  • Use a scalable messaging system to handle the surge in events.
  • Implement backpressure mechanisms to manage event flow.
  • Utilize auto-scaling in the cloud to dynamically allocate resources.
  • Employ load balancers to distribute traffic evenly.

"How can you ensure ordered delivery of product purchase events in an e-commerce platform like Amazon?"

  • Message Queue Partitioning: Use a message queue that supports partitioning, and partition events based on a consistent key, such as user ID or order ID, to ensure that events for the same entity are processed in order.
  • Sequential Event Numbering: Assign a sequential number to each event at the source, allowing the consumer to process them in the correct order even if they arrive out of sequence.
  • Exactly-Once Delivery Semantics: Utilize message brokers that support exactly-once delivery semantics to prevent duplicate processing and maintain event order integrity.
  • Ordered Processing Queues: Implement ordered queues in the consumer service, ensuring that events are processed one at a time in the order they are received.
  • Event Store with Versioning: Use an event store where events are appended with a version number that indicates the order, and have the consumer service check the version to process events sequentially.

"How would you ensure consistency across distributed services in an event-driven architecture for an e-commerce platform?"

"Implement the CQRS pattern to separate the write model (commands) from the read model (queries). Use event sourcing to ensure all changes are captured as events, which can then be projected into the read model, ensuring eventual consistency across the services."

"Can you explain how you would implement idempotency in event processing for an e-commerce platform?"

"To implement idempotency:

  • Assign a unique identifier to each event.
  • Make the event handling operation idempotent by checking if the event has already been processed before acting on it.
  • Use idempotent receivers that can handle duplicate messages without side effects.
  • Store the state of processed events in a datastore."

Examples

  1. Stream analytics

Resources

  1. Event-driven architectures
  2. What is an Event-Driven Architecture?

Microservice​

Monolithic​

Peer-to-Peer​

Serverless architecture​

交互与发布​

Asynchronous Request-Reply Pattern​

Publisher-Subscriber Pattern​

数据管理​

CQRS Pattern​

Event Sourcing Pattern​

Sharding Pattern​

Geode Pattern​

一致性与安全​

Compensating Transaction Pattern​

Saga Distributed Transactions Pattern​

Valet Key Pattern​

缓存与效率​

Cache-Aside Pattern​

Rate Limiting Pattern​

Fan-Out/Fan-In Strategy​

通用​

Ambassador Pattern​

Anti-corruption Layer Pattern​

Gatekeeper Pattern​

Health Endpoint Monitoring Pattern​

Retry Pattern & Circuit Breaker Pattern​