python:Cascading Failures Pattern 项目结构介绍了一个珠宝行业全流程业务系统中级联失效反模式的Python实现。系统采用分层架构设计包含配置管理、异常处理、日志记录、业务节点模型、报告服务和失效传导服务等模块。当某个关键业务节点(如加工生产)发生故障时会触发多米诺效应导致后续依赖节点相继失效最终使整个系统崩溃。演示代码模拟了这一过程加工生产节点失效后质检、包装、物流等下游节点依次崩溃系统生成详细崩溃报告显示9个节点失效2个节点正常。该实现展示了强依赖系统中故障传导的严重后果以及采用分层设计和单一职责原则构建健壮系统的重要性。# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Cascading Failures Pattern 级联失效反模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/5 7:55 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : settings.py 全局业务配置 职责统一管理所有常量、流程、枚举便于维护 from typing import List # 珠宝行业标准全业务流程强依赖顺序 JEWELRY_BUSINESS_PROCESS: List[str] [ 原料采购核验, 设计制图, 加工生产, 质检, 包装, 物流, 财务, 营销推广, 业务, 人事行政, IT ] # 系统配置 FAILURE_PROPAGATION_DELAY 0.5 # 失效传导延迟秒 SYSTEM_NAME 珠宝行业全流程业务系统 VERSION 1.0.0 - Enterprise Edition # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Cascading Failures Pattern 级联失效反模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/5 7:55 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : exceptions.py 自定义业务异常 职责统一异常体系便于上层捕获与监控 class BusinessBaseException(Exception): 业务异常基类 pass class NodeNotFoundException(BusinessBaseException): 业务节点不存在异常 def __init__(self, node_name: str): self.msg f业务节点【{node_name}】不存在 super().__init__(self.msg) class SystemAlreadyCollapsedException(BusinessBaseException): 系统已崩溃异常 def __init__(self): self.msg 系统已完全崩溃无法执行任何操作 super().__init__(self.msg) # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Cascading Failures Pattern 级联失效反模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/5 7:58 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : logger.py 企业级日志工具 职责统一日志格式支持文件控制台输出 import logging import sys from datetime import datetime def get_logger(name: str JewelrySystem) - logging.Logger: 公共日志 :param name: :return: logger logging.getLogger(name) logger.setLevel(logging.INFO) logger.handlers.clear() formatter logging.Formatter( fmt%(asctime)s | %(levelname)-7s | %(message)s, datefmt%Y-%m-%d %H:%M:%S ) console_handler logging.StreamHandler(sys.stdout) console_handler.setFormatter(formatter) logger.addHandler(console_handler) return logger # 全局单例日志 logger get_logger() # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Cascading Failures Pattern 级联失效反模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/5 7:56 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : business_node.py 领域实体 业务节点实体 职责纯数据模型无业务逻辑单一职责 from dataclasses import dataclass from typing import List from enum import Enum from CascadingFailuresPattern.core.exceptions import NodeNotFoundException,BusinessBaseException,SystemAlreadyCollapsedException class NodeStatus(str, Enum): 节点状态枚举 NORMAL 正常运行 FAILED 失效瘫痪 SYSTEM_COLLAPSED 系统整体崩溃 dataclass class BusinessNode: 单个业务节点 name: str status: NodeStatus NodeStatus.NORMAL dataclass class BusinessSystem: 业务系统实体 system_name: str process: List[str] nodes: List[BusinessNode] failed_nodes: List[BusinessNode] is_collapsed: bool False def get_node(self, node_name: str) - BusinessNode: 根据名称获取节点 :param node_name: :return: for node in self.nodes: if node.name node_name: return node raise NodeNotFoundException(node_name) # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Cascading Failures Pattern 级联失效反模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/5 7:59 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : report_service.py 系统崩溃报告服务 职责仅负责生成、打印报告职责单一 from CascadingFailuresPattern.core.business_node import BusinessSystem from CascadingFailuresPattern.common.logger import logger class ReportService: 报告服务 staticmethod def generate_collapse_report(system: BusinessSystem) - None: 生成级联失效最终报告 :param system: :return: total len(system.nodes) failed len(system.failed_nodes) normal total - failed logger.info( * 100) logger.info( 珠宝行业级联失效反模式 - 最终崩溃报告) logger.info( * 100) logger.info(f系统名称{system.system_name}) logger.info(f总节点数{total}) logger.info(f正常节点{normal} 个) logger.info(f失效节点{failed} 个) logger.info(f失效链路{ → .join([n.name for n in system.failed_nodes])}) logger.info(f系统状态{✅ 正常 if not system.is_collapsed else 完全崩溃级联失效触发}) logger.info( * 100) # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Cascading Failures Pattern 级联失效反模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/5 8:01 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : failure_service.py 失效传导服务 级联失效核心服务 职责仅负责失效判断、传导、状态更新 import time from CascadingFailuresPattern.core.business_node import BusinessSystem, BusinessNode, NodeStatus from CascadingFailuresPattern.core.exceptions import SystemAlreadyCollapsedException from CascadingFailuresPattern.config.settings import FAILURE_PROPAGATION_DELAY from CascadingFailuresPattern.common.logger import logger class CascadingFailureService: 失效传导服务 def __init__(self, system: BusinessSystem): self.system system def trigger_failure(self, failed_node_name: str) - None: 触发单个节点失效启动级联传导 :param failed_node_name: :return: if self.system.is_collapsed: raise SystemAlreadyCollapsedException() # 1. 获取故障节点 failed_node self.system.get_node(failed_node_name) logger.critical(f 初始故障业务节点【{failed_node_name}】发生致命失效) # 2. 标记节点失效 failed_node.status NodeStatus.FAILED self.system.failed_nodes.append(failed_node) # 3. 执行多米诺传导 self._propagate_failure(failed_node) # 4. 标记系统崩溃 self.system.is_collapsed True def _propagate_failure(self, start_node: BusinessNode) - None: 级联传导上游失效 → 下游全部失效 :param start_node: :return: process self.system.process start_idx process.index(start_node.name) for i in range(start_idx 1, len(process)): time.sleep(FAILURE_PROPAGATION_DELAY) node_name process[i] node self.system.get_node(node_name) node.status NodeStatus.FAILED self.system.failed_nodes.append(node) logger.error(f 级联失效【{node_name}】因上游依赖崩溃无法运行)调用# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Cascading Failures Pattern 级联失效反模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/5 8:03 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : CascadingFailuresBll.py 系统入口 职责初始化、组装依赖、启动流程 from CascadingFailuresPattern.config.settings import JEWELRY_BUSINESS_PROCESS, SYSTEM_NAME, VERSION from CascadingFailuresPattern.core.business_node import BusinessNode, BusinessSystem from CascadingFailuresPattern.service.failure_service import CascadingFailureService from CascadingFailuresPattern.service.report_service import ReportService from CascadingFailuresPattern.common.logger import logger class CascadingFailuresBll(object): def init_jewelry_system(self) - BusinessSystem: 初始化企业级珠宝业务系统 nodes [BusinessNode(namestep) for step in JEWELRY_BUSINESS_PROCESS] return BusinessSystem( system_nameSYSTEM_NAME, processJEWELRY_BUSINESS_PROCESS, nodesnodes, failed_nodes[] ) def demo(self): :return: logger.info(f 启动 {SYSTEM_NAME} | {VERSION}) logger.info(✅ 系统初始化完成架构企业级分层架构\n) # 1. 初始化系统 system self.init_jewelry_system() # 2. 初始化服务依赖注入 failure_service CascadingFailureService(system) report_service ReportService() try: # 模拟故障 # 可替换IT / 加工生产 / 原料采购核验 / 质检 / 人事行政 failure_service.trigger_failure(加工生产) except Exception as e: logger.error(f❌ 系统异常{str(e)}) finally: # 3. 生成最终报告 report_service.generate_collapse_report(system)输出请输入序号选择要展示的设计模式输入0/q退出59 ✅ 你选择了序号59对应级联失效反模式选项模式 2026-07-05 08:07:42 - INFO - 启动 珠宝行业全流程业务系统 | 1.0.0 - Enterprise Edition [2026-07-05 08:07:42] [INFO] [JewelrySystem] CascadingFailuresBll.py:46 - 启动 珠宝行业全流程业务系统 | 1.0.0 - Enterprise Edition 展示【CascadingFailures Pattern函数式选项模式】示例 2026-07-05 08:07:42 | INFO | 启动 珠宝行业全流程业务系统 | 1.0.0 - Enterprise Edition 2026-07-05 08:07:42 - INFO - ✅ 系统初始化完成架构企业级分层架构 [2026-07-05 08:07:42] [INFO] [JewelrySystem] CascadingFailuresBll.py:47 - ✅ 系统初始化完成架构企业级分层架构 2026-07-05 08:07:42 - CRITICAL - 初始故障业务节点【加工生产】发生致命失效 [2026-07-05 08:07:42] [CRITICAL] [JewelrySystem] failure_service.py:43 - 初始故障业务节点【加工生产】发生致命失效 2026-07-05 08:07:42 | INFO | ✅ 系统初始化完成架构企业级分层架构 2026-07-05 08:07:42 | CRITICAL | 初始故障业务节点【加工生产】发生致命失效 2026-07-05 08:07:43 - ERROR - 级联失效【质检】因上游依赖崩溃无法运行 [2026-07-05 08:07:43] [ERROR] [JewelrySystem] failure_service.py:70 - 级联失效【质检】因上游依赖崩溃无法运行 2026-07-05 08:07:43 | ERROR | 级联失效【质检】因上游依赖崩溃无法运行 2026-07-05 08:07:43 | ERROR | 级联失效【包装】因上游依赖崩溃无法运行 2026-07-05 08:07:43 - ERROR - 级联失效【包装】因上游依赖崩溃无法运行 [2026-07-05 08:07:43] [ERROR] [JewelrySystem] failure_service.py:70 - 级联失效【包装】因上游依赖崩溃无法运行 2026-07-05 08:07:44 | ERROR | 级联失效【物流】因上游依赖崩溃无法运行 2026-07-05 08:07:44 - ERROR - 级联失效【物流】因上游依赖崩溃无法运行 [2026-07-05 08:07:44] [ERROR] [JewelrySystem] failure_service.py:70 - 级联失效【物流】因上游依赖崩溃无法运行 2026-07-05 08:07:44 - ERROR - 级联失效【财务】因上游依赖崩溃无法运行 [2026-07-05 08:07:44] [ERROR] [JewelrySystem] failure_service.py:70 - 级联失效【财务】因上游依赖崩溃无法运行 2026-07-05 08:07:44 | ERROR | 级联失效【财务】因上游依赖崩溃无法运行 2026-07-05 08:07:45 - ERROR - 级联失效【营销推广】因上游依赖崩溃无法运行 [2026-07-05 08:07:45] [ERROR] [JewelrySystem] failure_service.py:70 - 级联失效【营销推广】因上游依赖崩溃无法运行 2026-07-05 08:07:45 | ERROR | 级联失效【营销推广】因上游依赖崩溃无法运行 2026-07-05 08:07:45 - ERROR - 级联失效【业务】因上游依赖崩溃无法运行 [2026-07-05 08:07:45] [ERROR] [JewelrySystem] failure_service.py:70 - 级联失效【业务】因上游依赖崩溃无法运行 2026-07-05 08:07:45 | ERROR | 级联失效【业务】因上游依赖崩溃无法运行 2026-07-05 08:07:46 | ERROR | 级联失效【人事行政】因上游依赖崩溃无法运行 2026-07-05 08:07:46 - ERROR - 级联失效【人事行政】因上游依赖崩溃无法运行 [2026-07-05 08:07:46] [ERROR] [JewelrySystem] failure_service.py:70 - 级联失效【人事行政】因上游依赖崩溃无法运行 2026-07-05 08:07:46 - ERROR - 级联失效【IT】因上游依赖崩溃无法运行 [2026-07-05 08:07:46] [ERROR] [JewelrySystem] failure_service.py:70 - 级联失效【IT】因上游依赖崩溃无法运行 2026-07-05 08:07:46 - INFO - [2026-07-05 08:07:46] [INFO] [JewelrySystem] report_service.py:36 - 2026-07-05 08:07:46 - INFO - 珠宝行业级联失效反模式 - 最终崩溃报告 [2026-07-05 08:07:46] [INFO] [JewelrySystem] report_service.py:37 - 珠宝行业级联失效反模式 - 最终崩溃报告 2026-07-05 08:07:46 - INFO - [2026-07-05 08:07:46] [INFO] [JewelrySystem] report_service.py:38 - 2026-07-05 08:07:46 - INFO - 系统名称珠宝行业全流程业务系统 [2026-07-05 08:07:46] [INFO] [JewelrySystem] report_service.py:39 - 系统名称珠宝行业全流程业务系统 2026-07-05 08:07:46 - INFO - 总节点数11 [2026-07-05 08:07:46] [INFO] [JewelrySystem] report_service.py:40 - 总节点数11 2026-07-05 08:07:46 - INFO - 正常节点2 个 [2026-07-05 08:07:46] [INFO] [JewelrySystem] report_service.py:41 - 正常节点2 个 2026-07-05 08:07:46 - INFO - 失效节点9 个 [2026-07-05 08:07:46] [INFO] [JewelrySystem] report_service.py:42 - 失效节点9 个 2026-07-05 08:07:46 - INFO - 失效链路加工生产 → 质检 → 包装 → 物流 → 财务 → 营销推广 → 业务 → 人事行政 → IT [2026-07-05 08:07:46] [INFO] [JewelrySystem] report_service.py:43 - 失效链路加工生产 → 质检 → 包装 → 物流 → 财务 → 营销推广 → 业务 → 人事行政 → IT 2026-07-05 08:07:46 - INFO - 系统状态 完全崩溃级联失效触发 [2026-07-05 08:07:46] [INFO] [JewelrySystem] report_service.py:44 - 系统状态 完全崩溃级联失效触发 2026-07-05 08:07:46 - INFO - [2026-07-05 08:07:46] [INFO] [JewelrySystem] report_service.py:45 - 2026-07-05 08:07:46 | ERROR | 级联失效【IT】因上游依赖崩溃无法运行 2026-07-05 08:07:46 | INFO | 2026-07-05 08:07:46 | INFO | 珠宝行业级联失效反模式 - 最终崩溃报告 2026-07-05 08:07:46 | INFO | 2026-07-05 08:07:46 | INFO | 系统名称珠宝行业全流程业务系统 2026-07-05 08:07:46 | INFO | 总节点数11 2026-07-05 08:07:46 | INFO | 正常节点2 个 2026-07-05 08:07:46 | INFO | 失效节点9 个 2026-07-05 08:07:46 | INFO | 失效链路加工生产 → 质检 → 包装 → 物流 → 财务 → 营销推广 → 业务 → 人事行政 → IT 2026-07-05 08:07:46 | INFO | 系统状态 完全崩溃级联失效触发 2026-07-05 08:07:46 | INFO |