Storm is a distributed real-time computation system that allows for processing unbounded streams of data. Key concepts in Storm include topologies, streams, spouts, bolts, tuples, tasks, workers, and reliability guarantees. Common design patterns in Storm include streaming joins, batching, caching with fields grouping, streaming top N computations, and using CoordinatedBolt and KeyedFairBolt for distributed RPC applications.