当前位置: 首页 > news >正文 地方社区网站 备案福州app外包 news 2025/10/28 6:31:48 地方社区网站 备案,福州app外包,关注网站怎么做,怎么做跳转网站分布式事务 分布式事务是指跨多个独立服务或系统的事务管理#xff0c;以确保这些服务中的数据变更要么全部成功#xff0c;要么全部回滚#xff0c;从而保证数据的一致性。在微服务架构和分布式系统中#xff0c;由于业务逻辑往往会跨多个服务#xff0c;传统的单体事务…分布式事务 分布式事务是指跨多个独立服务或系统的事务管理以确保这些服务中的数据变更要么全部成功要么全部回滚从而保证数据的一致性。在微服务架构和分布式系统中由于业务逻辑往往会跨多个服务传统的单体事务无法覆盖因此需要通过分布式事务来保障一致性。 三种数据一致性模型 强一致性系统保证每个读操作都将返回最近的写操作的结果即任何时间点客户端都将看到相同的数据视图。弱一致性放宽了一致性保证允许在不同节点之间的数据访问之间存在一定程度的不一致性以换取更高的性能和可用性。最终一致性允许在系统发生分区或网络故障后经过一段时间系统将最终达到一致状态。 刚性事务 刚性事务Rigid Transaction也称为强一致性事务遵循严格的ACID特性原子性、一致性、隔离性、持久性确保所有操作都严格按照要求执行要么全部成功要么全部回滚。刚性事务常用于金融系统、银行转账等场景要求数据高度一致不能有任何误差。 在分布式系统中实现刚性事务通常采用2PC或3PC协议但这些协议会带来较高的性能开销同时存在同步阻塞等问题。因此刚性事务适合对数据一致性要求极高、但允许较高事务延迟的场景。 2PC或3PC协议根据 XA 规范衍生而来XA 规范将分布式事务处理模型中涉及到了角色主要分为了应用程序AP、事务管理器TM和资源管理器RM AP(Application Program)应用程序本身。RM(Resource Manager)资源管理器也就是事务的参与者绝大部分情况下就是指数据库一个分布式事务往往涉及到多个资源管理器。TM(Transaction Manager)事务管理器负责管理全局事务分配事务唯一标识监控事务的执行进度并负责事务的提交、回滚、失败恢复等。 两阶段提交 2PCTwo-Phase Commit Protocol两阶段提交协议是分布式系统中广泛使用的一种协议用于保证事务跨多个节点参与者一致地提交或回滚。 两阶段提交协议分为两个阶段准备阶段和提交阶段。 准备阶段 事务管理器TM 向所有事务参与者资源管理器RM 发送 准备提交prepare 的请求。每个事务参与者在收到请求后执行以下操作 执行本地数据库事务预操作比如写 redo log / undo log 日志保留修改如将数据写入暂存区域或进行日志记录但不提交。若该操作能够成功完成并保证后续提交则返回同意消息。若遇到错误或不能确保事务提交成功则返回拒绝消息。 在准备阶段事务参与者只是准备提交尚未实际提交事务。这使得系统仍然处于一致性状态。 提交阶段 如果所有事务参与者都返回了同意消息事务管理器向所有参与者发送提交Commit请求。 各参与者收到提交消息后正式提交事务操作释放锁清除临时数据并通知事务管理器提交成功。 如果任何一个事务参与者返回拒绝消息事务管理器向所有参与者发送回滚Rollback请求。 各参与者收到回滚消息后撤销预操作将状态恢复到事务开始之前。 在提交阶段如果某个参与者出现故障事务管理器会根据超时或故障检测机制来决定事务状态尽量使所有节点最终保持一致。 存在的问题 同步阻塞在事务提交的过程中如果事务管理者出现故障所有的事务参与者会进入阻塞状态等待事务管理者的进一步指令导致整个系统的事务处理停滞不能继续执行其他事务。单点故障事务管理器是单点故障如果事务管理器在提交阶段崩溃系统将无法知道事务的最终状态容易导致数据不一致。数据不一致风险在提交阶段若事务管理器在发送提交或回滚请求后崩溃可能导致部分参与者收到提交请求而部分未收到从而造成数据不一致。 三阶段提交 3PCThree-Phase Commit Protocol三阶段提交协议是在两阶段提交协议的基础上进一步改进的分布式事务一致性协议通过增加预提交阶段增强了系统的容错能力和处理网络分区的能力以解决2PC的同步阻塞问题和单点故障风险。 准备阶段 事务管理器TM 向所有事务参与者资源管理器RM 发送「准备请求」询问它们是否能够完成事务提交操作。每个事务参与者收到「准备请求」后如果认为自己可以完成事务则返回同意消息如果认为无法完成则返回拒绝消息。事务管理器收集所有参与者的响应 若所有事务参与者都返回同意消息则进入预提交阶段。若任何一个事务参与者返回拒绝消息则进入终止阶段并通知所有参与者回滚事务。 预提交阶段 如果所有事务参与者在第一阶段都返回了同意消息事务管理器向所有参与者发送「预提交请求」。每个事务参与者收到「预提交请求」后执行本地数据库事务预操作记录日志保存即将提交的事务信息以确保即使事务管理器故障也能恢复状态。如果事务参与者成功执行了事务预操作发送预提交成功给事务管理器如果执行失败返回预提交失败给事务管理器。预提交阶段通过提前记录事务信息保证即使事务管理器故障事务参与者也能够通过日志记录自我恢复。事务管理器在等待一段时间后收集所有参与者的响应 若所有参与者都返回预提交成功事务管理器进入提交阶段。若任意一个参与者返回预提交失败则事务管理器进入终止阶段并通知所有参与者回滚事务。 提交阶段 若事务管理器在预提交阶段收到所有参与者的预提交成功则向所有参与者发送「事务提交请求」。 各参与者收到提交请求后正式提交事务操作释放锁清除临时数据并返回提交完成。 若事务管理器在预提交阶段未收到所有参与者的响应或检测到参与者或事务管理器自身出现故障则事务管理器向所有参与者发送「事务回滚请求」。 各参与者收到回滚请求后撤销事务并返回回滚完成。 优缺点 虽然 3PC 通过引入超时机制和预提交阶段一定程度上解决了 2PC 的同步阻塞和单点故障的问题但是依然存在数据不一致的问题同时也引入了一些新问题比如性能糟糕。 解决同步阻塞在3PC中通过预提交阶段参与者在实际提交前达成共识状态具备了超时控制和独立决策的条件。即使协调者故障参与者也能在超时后依据自身状态决定提交或回滚从而有效避免了因协调者故障导致的长时间同步阻塞问题。解决单点故障在3PC中事务参与者引入了超时机制当事务管理者挂掉后事务参与者在等待超时后可以根据自身的状态来进行决策如提交或回滚不必依赖事务管理者的指令从而降低了事务管理者的单点故障风险。 存在的问题 网络分区风险3PC试图通过在预提交阶段前引入准备阶段来减少阻塞问题但如果在该阶段发生网络分区事务管理器和参与者之间的通信可能会断开。此时部分参与者可能会继续提交事务而其他未收到指令的参与者则可能回滚从而导致数据不一致。性能降低3PC虽然解决了一些2PC的阻塞问题但增加的确认阶段和处理步骤使得事务处理的整体延迟变高。在高并发环境下系统性能和响应速度可能会受到影响导致事务处理效率较低。数据不一致风险虽然3PC引入了超时机制但当事务管理器在预提交阶段准备提交崩溃且没有及时恢复时参与者可能会依据超时策略决定提交或回滚导致不同参与者采取了不同的事务状态从而产生数据不一致。 柔性事务 柔性事务Flexible Transaction也称为最终一致性事务放宽了对事务的严格性要求允许系统在短期内出现不一致只要在一段时间后达成最终一致性即可。柔性事务通常不完全遵循ACID特性而采用BASE理论基本可用、软状态、最终一致在保证系统可用性的同时降低了对一致性的强制要求。 柔性事务广泛应用于电商订单处理、社交应用等对实时性和高可用性要求高但数据一致性可延迟的场景。 柔性事务常见的实现方式包括 TCCTry-Confirm-Cancel将事务分解为三个步骤先尝试Try再确认Confirm或取消Cancel。可靠消息事务利用消息队列确保最终一致性通过消息重试机制来保证事务操作的最终完成。补偿事务通过补偿机制在出现错误时对事务进行回滚。 TCC TCCTry-Confirm-Cancel是一种分布式事务解决方案特别适用于柔性事务场景。TCC通过将事务分解为三个步骤来确保最终一致性提供对事务操作的更加灵活的控制。 执行流程 Try尝试阶段事务参与者尝试执行本地事务并对全局事务预留业务资源。如果 try 阶段执行成功参与者会返回一个成功标识否则会返回一个失败标识。Confirm确认阶段如果所有参与者的 try 阶段都执行成功则协调者通知所有参与者提交事务执行 confirm 阶段。这时参与者将在本地提交事务并处理全局事务预留的资源。Cancel取消阶段如果任意参与者在 try 阶段或 Confirm 阶段执行失败则协调者通知所有参与者回滚事务执行 cancel 阶段。这时参与者将释放预留的业务资源。 如果Confirm或者Cancel执行失败可以采用重试的方式减少因为网络问题导致TM没有接收到消息的情况此外还可以采用异常监控、日志记录和人工干预的方式来保证事务的一致性。 对于Confirm执行失败还可以采用执行Cancel操作的方式撤销在Try阶段预留的事务资源。 典型示例 假设我们有一个转账服务需要从 A 账户转账 100 元到 B 账户同时从 A 账户转账 200 元到 C 账户总计从 A 账户中扣减 300 元。整个事务流程分为 Try、Confirm 和 Cancel 三个阶段 Try 阶段转账服务首先冻结 A 账户的 300 元以确保后续转账的可用性和一致性。Confirm 阶段如果所有 Try 操作都成功执行转账服务进入 Confirm 阶段实际执行转账操作。此时A 账户的冻结金额解冻系统将 100 元转入 B 账户200 元转入 C 账户完成资金划转。Cancel 阶段如果在 Try 阶段某一步失败则系统进入 Cancel 阶段对 A 账户的冻结金额进行解冻处理保证资金不受影响如果 Confirm 阶段中某步转账失败例如 A 到 B 的转账失败而 A 到 C 的转账已完成则需要通过 C 到 A 的逆向转账操作将金额退回保证 A 账户资金最终一致。 通过这种方式TCC 模式确保了分布式事务的最终一致性即使在部分失败的情况下系统也能通过回滚或补偿机制恢复到一致状态。 存在的问题 空回滚在TCC协议中如果某些参与者在Try阶段成功而其他参与者失败此时所有参与者需要执行Cancel操作。对于那些在Try阶段没有成功的参与者来说执行Cancel操作就成为一次空回滚。如果业务没有有效地识别和处理空回滚可能会导致异常错误甚至可能导致Cancel一直失败最终使整个分布式事务失败。悬挂事务在TCC执行一阶段的Try操作阶段时可能出现网络拥堵导致超时事务协调器会触发二阶段的Cancel操作。而下游的节点由于网络延迟先接收到了Cancel网络恢复后会在Cancel后再次接收到Try请求这就导致该节点Try操作占用的资源无法释放造成事务悬挂。 解决方案 通过引入分布式事务记录表可以解决上述两个问题。该表中两个关键字段一个是 tx_id 字段用于保存本次处理的事务ID另一个是 state 字段用于记录本次事务的执行状态。 当后续在进行Try、Confirm和Cancel操作时都需要在本地事务中创建或修改这条记录。 CREATE TABLE distribute_transaction (tx_id varchar(128) NOT NULL COMMENT 事务id,state int(1) DEFAULT NULL COMMENT 事务状态0:try1:confirm2:cancel,PRIMARY KEY (tx_id) )解决空回滚当一个事务参与者接受到Cancel请求时先去事务记录表中查询是否存在当前事务 trx_id 的Try操作的记录如果记录不存在则说明Try操作并未成功此时可以直接跳过Cancel避免执行空回滚。解决悬挂事务当一个事务参与者接收到Try请求时先去事务记录表中查询是否存在当前事务 trx_id 的Cancel操作的记录如果存在说明执行Try操作会导致事务悬挂无法释放资源拒绝本次Try请求。 MQ事务消息 RocketMQ 事务消息是一种可靠的消息传输机制用于保证分布式事务的最终一致性。事务消息允许将消息的发送与本地事务绑定在一起使得即使在网络异常或系统故障情况下消息也能最终达到一致状态。 执行流程 下图为MQ事务消息的总体执行流程 RocketMQ 的事务消息通过 TransactionListener 接口实现其执行流程总体上可以分为四个步骤 发送半消息消息发送方给 MQ Broker 发送一条 Half 消息即半消息。半消息会存储在 Broker 的事务消息日志中且该半消息暂时无法被消费。执行本地事务半消息发送成功后Broker 会通知消息发送方执行本地事务消息发送方可以根据本地事务的执行情况判断是否需要提交该事务消息。发送提交或回滚消息如果本地事务执行成功发送方会通知 Broker 提交该事务消息使得消息被消费者消费如果本地事务执行失败发送方会通知 Broker 回滚该事务消息并将该半消息从事务消息日志中删除不会被消费者消费。回查事务状态如果 Broker 在规定时间内没有收到 COMMIT 和 ROLLBACK 消息会向消息发送方发送一个回查请求根据请求的回调结果判断是否需要提交或回滚事务消息。 相关问题 半消息发送失败了如何处理 在 RocketMQ 事务消息的一致性解决方案中应用程序即消息发送方是先发送半消息后执行的本地事务。因此如果半消息发送失败了直接进行消息重发即可不会造成数据不一致的问题。 为什么需要先发送半消息 主要原因是本地事务执行完成后再发送消息如果消息发送失败那么 Broker 将无法感知本地事务的执行状态。 如果先执行完本地事务消息再发送消息当发送消息失败时消费者没有半消息提供的本地事务的任何信息因此 Broker 无法去回查本地事务的状态。 通过先发送半消息Broker 可以在日志中记录该半消息进而获知该事务的“初步状态”。如果半消息在超时内没有完成提交或回滚Broker 就可以发起回查以此来确保事务消息的最终一致性。因此半消息为 Broker 提供了识别和查询特定事务状态的依据。 本地消息表 本地消息表Local Message Table同样也是一种分布式系统中常用的可靠消息传递方案。其核心思想是在发送消息的业务系统中在消息发送方创建一个本地消息表用于记录每一条需要发送的消息并通过定时任务确保消息的可靠传递。 执行流程 一个典型的本地消息表结构如下 字段类型说明idVARCHAR(36)消息ID唯一标识contentTEXT消息内容statusINT消息状态0: 待发送1: 已发送2: 已完成retry_countINT重试次数create_timeTIMESTAMP创建时间update_timeTIMESTAMP最后更新时间 该方案主要将分布式事务拆分成了本地事务和消息事务两个部分具体执行流程如下 执行本地事务首先由消息发送方开启本地事务在本地事务中执行具体的业务操作。业务操作执行成功后发送方将需要通知到其他服务的消息记录在本地消息表中并设置消息状态为 「待发送」。定时任务发送消息在本地消息表中消息初始状态为 「待发送」 。业务系统通过定时任务周期性地扫描本地消息表找到所有 「待发送」 状态的消息将其发送到消息队列并将状态设置为 「已发送」。定时任务的时间间隔可以根据业务需求设置。保证消息一致性消息发送到消息队列后可以通过消息重试机制防止因网络问题导致传递的消息丢失问题消息传递到消费者后可以通过消费者确认机制、消息幂等处理来保证消息的一致性。返回消费结果消费者消费完毕后返回消费结果给生产者。生产者接收到消费者的消费确认后根据消息的唯一ID将本地消息表中对应消息的状态更新为 「已完成」。 相关问题 如果步骤1和2失败如何处理 当本地事务执行失败时由于此阶段将业务操作和消息表写入放在了同一个事务中即使步骤1和2执行失败事务也可以通过回滚恢复数据保证业务操作和消息表写入的一致性。 如果步骤3中的消息发送失败如何处理 需要在消息发送方开启一个定时任务不断的扫描本地消息表中状态为 「待发送」 的消息对于未发送成功的消息重新投递。 如果步骤4和5失败如何处理 依靠消费者的确认机制和重试机制如果消息丢失或者处理失败则重新进行投递。此外还可以借助死信队列进行额外处理。 如果步骤6和7失败即本地消息表更新失败如何处理 执行到这里时已经可以保证消息发送方和消息接收方的业务数据保持一致了但是本地消息表的数据还未更新。消息接收方可以设置定时任务定期扫描本地消息表中的消息如果消息为 「已发送」 而不是 「已完成」可以通过重试来再次尝试更新本地消息的状态。此外消息发送方可以设置定时任务主动查询消费者的业务状态如果消息被正常消费可以直接更新本地消息表。 Saga Saga 是一种分布式事务管理模式主要用于解决微服务架构中跨多个服务的事务一致性问题。Saga模式通过将一个大事务分解成一系列小的局部事务并通过补偿机制来保证最终一致性从而避免了传统的分布式事务如2PC或3PC带来的性能瓶颈和复杂性。 协调式 编排式Saga是由一个中央协调者来控制整个Saga事务的执行流程。协调者负责决定每个局部事务的执行顺序处理每个局部事务的成功或失败并在必要时触发补偿操作。 编排式 编排式没有中央协调者而是通过事件驱动的方式来协调各个局部事务的执行。每个服务通过发布事件来通知其他服务其他服务根据事件决定是否执行后续操作或进行补偿。 对比 编排式Saga适用于事务流程较为清晰、需要集中控制的场景尤其是在业务流程复杂且需要监控和调度时。它具有较强的控制能力但可能会带来单点故障问题。 事件驱动式Saga适用于高可扩展性、去中心化的分布式系统适合松耦合的微服务架构。它更加灵活但在实现上需要处理更复杂的事件和状态管理。 特性编排式Orchestration事件驱动式Choreography控制方式中央协调者控制事务执行各个服务通过事件进行事务协作事务执行顺序顺序执行协调者决定后续事务的执行各个服务根据事件决定执行顺序补偿操作由协调者决定是否进行补偿操作由各服务根据事件决定补偿操作扩展性较差协调者可能成为瓶颈高服务间解耦易于扩展耦合度高服务需要与协调者交互低服务间解耦事件驱动单点故障问题是协调者故障会影响整个事务否没有单点故障问题监控与调试相对简单所有操作由协调者管理较为复杂需要事件追踪和状态管理 最大努力通知 在最大努力通知机制中发送方会尽最大可能确保通知送达目标通常通过重试机制提高通知的到达率。在此过程中若出现网络通信故障或消息队列异常就可能导致消息传递失败即消息可能会丢失。因此最大努力通知机制不能完全保证接收方一定能收到每条消息但会尽最大努力确保消息通知的完成。 最大努力通知常见实现生产者重试机制、消费者重试机制、死信队列、定时任务重试 最大努力通知适合在以下场景中使用 日志记录日志记录的发送可以采用最大努力通知的方式保证不影响主业务流程。非核心业务流程例如积分更新、通知消息推送等在用户体验上容错性较高的场景。 事务对比 TCC和2PC/3PC 适用场景 TCC提供最终一致性允许短时间内的数据不一致通过补偿机制在失败后恢复状态。适合对响应速度要求高、允许一定延迟一致性的场景如电商订单处理、支付等需要预留资源的业务。2PC提供强一致性确保所有参与者最终的状态保持一致要么全部成功提交要么全部回滚。适合对一致性要求高的场景如金融系统、银行转账等场景要求数据高度一致不能有任何误差。 执行流程 TCC三阶段模型主要包括Try预留资源、Confirm提交、Cancel补偿/撤销在Try或Confirm阶段执行失败可以进行Cancel补偿。2PC两阶段模型主要包括Prepare准备和Commit提交无独立的回滚机制。 容错和恢复机制 TCC每个阶段都有独立的失败处理通过Cancel阶段的补偿操作可以回滚已预留的资源。2PC容错能力较弱尤其在协调者宕机的情况下易发生资源锁死恢复依赖协调者的重启和日志记录。 实现方式 TCC是业务层面的分布式事务不会一直持有资源的锁性能较好。TCC 方案允许各个参与者自定义Try、Confirm和Cancel事务逻辑对业务侵入性较高但具有较好的灵活性和可恢复性。2PC是资源层面的分布式事务需要数据库支持XA协议在两阶段提交的整个过程中会一直持有资源的锁一般高并发性能会比较差。2PC 方案由协调者统一管理事务状态能确保强一致性但在分布式系统中较为耗时且在网络中断或协调者失败时可能会出现阻塞问题。 特点TCC2PC事务管理由业务逻辑分阶段管理由协调者统一管理阶段划分Try、Confirm、Cancel准备阶段、提交阶段执行方式预留资源确认/取消业务执行准备阶段锁定资源正式提交/回滚一致性最终一致性强一致性资源锁定时间较短较长可能导致阻塞容错机制允许自定义重试和补偿协调者故障会阻塞事务性能较高灵活性好较低且有单点故障风险 MQ事务消息本地消息表最大努力通知 适用场景 MQ事务消息适用于金融交易、订单支付等场景尤其适合对系统一致性和事务可靠性要求较高的场景。事务消息能确保在消息发送和本地事务之间的一致性。本地消息表适用于异步处理或延迟处理尤其是在高并发、大流量场景中可以通过本地消息表和定时任务确保消息可靠性。最大努力通知适用于容忍一定消息丢失的场景例如日志记录、通知推送等业务这类业务的容错性较高不需要完全保证每条消息的送达只要尽最大努力确保通知的到达即可。 执行流程 MQ事务消息消息发送方先发送半消息到 Broker此时消息不可消费但 Broker 会记录该消息状态。接着执行本地事务根据执行结果发送方通知 Broker 提交或回滚消息决定消息是否可消费。如果 Broker 在规定时间内未收到确认会向发送方发起回查请求以确保消息状态和事务最终一致。本地消息表发送方在本地事务中记录消息到本地消息表确保消息与业务操作同步执行且一致。记录的消息状态为“待发送”定时任务定期扫描表中待发送的消息将其发送至消息队列。消息成功消费后消费者通过确认机制通知发送方发送方将消息状态更新为“已完成”。最大努力通知发送方在消息发送过程中尽量保证消息成功传递给接收方即使遇到网络问题也会进行多次重试。发送失败的消息会进入重试队列或死信队列以便后续重发或进一步处理。尽管此机制不能保证百分百的消息送达但通过多层次的重试和降级措施努力减少消息丢失。 容错和恢复机制 MQ事务消息消息发送方先发送半消息到 Broker 并记录状态接着执行本地事务。根据事务结果决定提交或回滚该消息如果 Broker 未收到确认将回查事务状态确保消息最终一致性。本地消息表本地事务中将消息记录到本地消息表并设为“待发送”由定时任务扫描发送至消息队列。消息消费成功后更新状态为“已完成”保证业务和消息的最终一致。最大努力通知发送方通过多次重试确保消息尽量传递成功遇到异常则进入重试或死信队列处理。尽管不能确保百分百送达通过重试和降级机制尽量减少消息丢失。 性能与复杂度 MQ事务消息性能较低因为每次发送消息都需要和本地事务进行绑定并且涉及到消息提交或回滚的操作。系统复杂度较高需要处理回查等操作。本地消息表性能相对较好通过定时任务和本地消息表机制不需要等待事务的回查但需要额外的定时任务和表管理且数据库的存储压力较大。最大努力通知性能最好消息的发送与本地事务并不绑定只需要通过重试机制和死信队列保证尽最大努力将消息送达。适用于容忍一定丢失的业务场景。 特点MQ事务消息本地消息表最大努力通知适用场景需要保证分布式事务一致性的场景不要求强一致性确保消息最终送达容忍一定消息丢失的场景执行流程发送半消息 - 执行本地事务 - 提交/回滚消息 - 回查事务状态执行本地事务 - 记录消息 - 定时任务发送消息 - 消费者确认尽最大努力发送消息 - 重试机制/死信队列容错机制通过回查机制保证最终一致性通过定时任务和重试机制保证消息可靠性重试机制和死信队列无法完全保证送达一致性强一致性消息与事务绑定最终一致性依赖重试机制和确认机制无法保证一致性只能最大努力保证送达性能较低涉及事务回查等操作较高通过定时任务和重试机制管理较高适合对性能要求高但不要求严格一致性的场景 文章转载自: http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn http://www.morning.mrcpy.cn.gov.cn.mrcpy.cn http://www.morning.prddj.cn.gov.cn.prddj.cn http://www.morning.jykzy.cn.gov.cn.jykzy.cn http://www.morning.rjxwq.cn.gov.cn.rjxwq.cn http://www.morning.flpjy.cn.gov.cn.flpjy.cn http://www.morning.qnrpj.cn.gov.cn.qnrpj.cn http://www.morning.zzfjh.cn.gov.cn.zzfjh.cn http://www.morning.sftrt.cn.gov.cn.sftrt.cn http://www.morning.ghphp.cn.gov.cn.ghphp.cn http://www.morning.mtmph.cn.gov.cn.mtmph.cn http://www.morning.ryxgk.cn.gov.cn.ryxgk.cn http://www.morning.nrqnj.cn.gov.cn.nrqnj.cn http://www.morning.qtfss.cn.gov.cn.qtfss.cn http://www.morning.hbxnb.cn.gov.cn.hbxnb.cn http://www.morning.yrctp.cn.gov.cn.yrctp.cn http://www.morning.wpmlp.cn.gov.cn.wpmlp.cn http://www.morning.ryzgp.cn.gov.cn.ryzgp.cn http://www.morning.bkylg.cn.gov.cn.bkylg.cn http://www.morning.mslsn.cn.gov.cn.mslsn.cn http://www.morning.mxtjl.cn.gov.cn.mxtjl.cn http://www.morning.wbns.cn.gov.cn.wbns.cn http://www.morning.qpsxz.cn.gov.cn.qpsxz.cn http://www.morning.ypmqy.cn.gov.cn.ypmqy.cn http://www.morning.lsqxh.cn.gov.cn.lsqxh.cn http://www.morning.yunease.com.gov.cn.yunease.com http://www.morning.zdydj.cn.gov.cn.zdydj.cn http://www.morning.fydsr.cn.gov.cn.fydsr.cn http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn http://www.morning.kfmlf.cn.gov.cn.kfmlf.cn http://www.morning.lswgs.cn.gov.cn.lswgs.cn http://www.morning.tqsgt.cn.gov.cn.tqsgt.cn http://www.morning.blxor.com.gov.cn.blxor.com http://www.morning.ldcsw.cn.gov.cn.ldcsw.cn http://www.morning.ffrys.cn.gov.cn.ffrys.cn http://www.morning.bnrnb.cn.gov.cn.bnrnb.cn http://www.morning.cwknc.cn.gov.cn.cwknc.cn http://www.morning.muniubangcaishui.cn.gov.cn.muniubangcaishui.cn http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn http://www.morning.hlppp.cn.gov.cn.hlppp.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn http://www.morning.wflsk.cn.gov.cn.wflsk.cn http://www.morning.kkwbw.cn.gov.cn.kkwbw.cn http://www.morning.hryhq.cn.gov.cn.hryhq.cn http://www.morning.tldfp.cn.gov.cn.tldfp.cn http://www.morning.xkjrs.cn.gov.cn.xkjrs.cn http://www.morning.dtmjn.cn.gov.cn.dtmjn.cn http://www.morning.xqcgb.cn.gov.cn.xqcgb.cn http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn http://www.morning.qgjp.cn.gov.cn.qgjp.cn http://www.morning.smnxr.cn.gov.cn.smnxr.cn http://www.morning.tqrbl.cn.gov.cn.tqrbl.cn http://www.morning.ntzfl.cn.gov.cn.ntzfl.cn http://www.morning.grryh.cn.gov.cn.grryh.cn http://www.morning.mtrz.cn.gov.cn.mtrz.cn http://www.morning.pljxz.cn.gov.cn.pljxz.cn http://www.morning.rkrcd.cn.gov.cn.rkrcd.cn http://www.morning.nshhf.cn.gov.cn.nshhf.cn http://www.morning.plhyc.cn.gov.cn.plhyc.cn http://www.morning.zjqwr.cn.gov.cn.zjqwr.cn http://www.morning.lmrcq.cn.gov.cn.lmrcq.cn http://www.morning.djxnn.cn.gov.cn.djxnn.cn http://www.morning.dbfj.cn.gov.cn.dbfj.cn http://www.morning.kwpnx.cn.gov.cn.kwpnx.cn http://www.morning.xylxm.cn.gov.cn.xylxm.cn http://www.morning.jfymz.cn.gov.cn.jfymz.cn http://www.morning.rqxtb.cn.gov.cn.rqxtb.cn http://www.morning.bjsites.com.gov.cn.bjsites.com http://www.morning.cmrfl.cn.gov.cn.cmrfl.cn http://www.morning.qngcq.cn.gov.cn.qngcq.cn http://www.morning.xjnjb.cn.gov.cn.xjnjb.cn http://www.morning.xkjrq.cn.gov.cn.xkjrq.cn http://www.morning.tkxr.cn.gov.cn.tkxr.cn http://www.morning.tgfjm.cn.gov.cn.tgfjm.cn http://www.morning.nqrfd.cn.gov.cn.nqrfd.cn http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn http://www.morning.ryysc.cn.gov.cn.ryysc.cn http://www.morning.nllst.cn.gov.cn.nllst.cn http://www.morning.lwwnq.cn.gov.cn.lwwnq.cn http://www.morning.kngqd.cn.gov.cn.kngqd.cn 查看全文 http://www.tj-hxxt.cn/news/255953.html 相关文章: 带后台管理的网站模板wordpress栏目出现404 晋江企业网站建设动易网站后台编辑器无效问题 个人网站如何备案苏州广告公司招聘 男女性男女直接做的视频网站怎么把别人网站模板下载出来 有哪些网站能够免费找到素材网站开发与维护书 东莞企业网站制wordpress poststatus 互联网网站制作制作网站需要什么知识 怎么用网站做chmwordpress 树状目录 网站后台显示不了网页一般用什么语言编写 高端定制网站开发网站模板设计济南工装定制公司 英文网站建站公司怎么做淘宝优惠券网站 上传的网站打不开川畅咨询 的网络营销怎么做 站长平台怎么添加网站无锡本地模板网站建设 网站写动态新闻有什么好处装修网站怎么建设 网站建设策划ppt做体育赛事网站公司 网站的营销推广方案及预算高端营销网站建设 淘宝客做网站怎么赚钱互联网门户网站建设管理 总结 网站网站开发网上支付网页设计与制作项目 外贸推广网站有哪些做网站的空间和服务器 学校网站建设步骤过程做婚介打么网站好 南昌营销网站建设跑腿app开发价格表 合肥网站建设找佳达无锡全网营销方案 行政机关网站建设的意义制作网站需要什么语言 文小库公文写作网站商城网站开发背景 房地产公司网站建设模板做旅游视频网站 自己做图片的网站链接个人企业网站 同ip网站有什么危害做公众号app网站app吗 江苏省建设工程交易中心网站网站维护 上海 郑州网站建设动态手机网站建设哪个好 企业网站打不开的原因visio网站建设流程图