Due to the complexity of the current software systems and the diversity of their architectural styles and component models, architecture-based reliability is becoming a more important quality requirement than ever before. Architecturebased reliability efforts depend on the behavior of individual components and their interactions with respect to their influences on the system reliability. Depending on different viewpoints and assumptions, a component takes various definitions and forms. As a result, numerous reliability works that involve varieties of the underlying strategies, objectives, and parameters are proposed for software architectures. Classifying these efforts is important for creating and selecting potential solutions that handle the reliability of software applications. In this paper, we provide a taxonomy of architecture-based reliability efforts. We classify these efforts according to the reliability goals, component abstraction, and level of granularity. We explain the existing techniques considering their assumptions with respect to these classification parameters and provide detailed description about the specific issues and considerations of each class.