分布式事务解决方案及实现

一、事务的ACID原则

数据库事务的几个特性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily),简称就是ACID。

原子性:操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。
一致性:事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
隔离性:在该事务执行的过程中,无论发生的任何数据的改变都应该只存在于该事务之中,对外界不存在任何影响。只有在事务确定正确提交之后,才会显示该事务对数据的改变。其他事务才能获取到这些改变后的数据。
持久性:当事务正确完成后,它对于数据的改变是永久性的。

二、什么是分布式事务

事务在单系统中的表现:多次数据库操作用事务进行管理,来保证ACID原则。
在这里插入图片描述

但是如果各个模块都是单独独立出来的微服务,进行了分布式部署,单系统里的事务将不能保证各个数据库操作的一致性,因此就需要分布式事务来进行统一管理。
在这里插入图片描述

三、分布式事务实现方案

现在的分布式事务实现方案有多种,有些已经被淘汰,如基于XA的两段式提交、TCC解决方案,还有本地消息表、MQ事务消息,还有一些开源的事务中间件,如LCN、GTS。

1、基于XA的两阶段提交方案
  XA 它包含两个部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如 Oracle、DB2 这些商业数据库都实现了 XA 接口,而事务管理器作为全局的协调者,负责各个本地资源的提交和回滚。

两阶段提交方案应用非常广泛,几乎所有商业OLTP (On-Line Transaction Processing)数据库都支持XA协议。但是两阶段提交方案开发复杂、锁定资源时间长,对性能影响很大,基本不适合解决微服务事务问题。
在这里插入图片描述

2、TCC解决方案
  TCC方案在电商、金融领域落地较多。TCC方案其实是两阶段提交的一种改进。其将整个业务逻辑的每个分支显式的分成了Try、Confirm、Cancel三个操作。

Try 阶段主要是对业务系统做检测及资源预留,完成业务的准备工作。

Confirm 阶段主要是对业务系统做确认提交,Try阶段执行成功并开始执行 Confirm阶段时,默认 Confirm阶段是不会出错的。即:只要Try成功,Confirm一定成功。

Cancel 阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。

基本原理如下图所示:
在这里插入图片描述

事务开始时,业务应用会向事务协调器注册启动事务。之后业务应用会调用所有服务的try接口,完成一阶段准备。之后事务协调器会根据try接口返回情况,决定调用confirm接口或者cancel接口。如果接口调用失败,会进行重试。

微服务倡导服务的轻量化、易部署,而TCC方案中很多事务的处理逻辑需要应用自己编码实现,复杂且开发量大。

3、本地消息表 (异步确保)
  本地消息表是国外的 ebay 搞出来的一套方案,如图所示:
在这里插入图片描述

我们首先需要在本地数据新建一张本地消息表,然后我们必须还要一个MQ(不一定是mq,但必须是类似的中间件)。

消息表怎么创建呢?这个表应该包括这些字段: id, biz_id, biz_type, msg, msg_result, msg_desc,atime,try_count。分别表示uuid,业务id,业务类型,消息内容,消息结果(成功或失败),消息描述,创建时间,重试次数, 其中biz_id,msg_desc字段是可选的。

实现思路为:

A 系统在自己本地一个事务里操作同时,插入一条数据到消息表;
接着 A 系统将这个消息发送到 MQ 中去;
B 系统接收到消息之后,在一个事务里,往自己本地消息表里插入一条数据,同时执行其他的业务操作,如果这个消息已经被处理过了,那么此时这个事务会回滚,这样保证不会重复处理消息;
B 系统执行成功之后,就会更新自己本地消息表的状态以及 A 系统消息表的状态;
如果 B 系统处理失败了,那么就不会更新消息表状态,那么此时 A 系统会定时扫描自己的消息表,如果有未处理的消息,会再次发送到 MQ 中去,让 B 再次处理;
这个方案保证了最终一致性,哪怕 B 事务失败了,但是 A 会不断重发消息,直到 B 那边成功为止。
  这个方案严重依赖于数据库的消息表来管理事务,这样在高并发的情况下难以扩展,同时要在数据库中额外添加一个与实际业务无关的消息表来实现分布式事务,繁琐。

4、MQ事务消息
  直接基于 MQ 来实现事务,不再用本地的消息表。有一些第三方的MQ是支持事务消息的,比如RocketMQ,他们支持事务消息的方式也是类似于采用的二阶段提交,但是市面上一些主流的MQ都是不支持事务消息的,比如 RabbitMQ 和 Kafka 都不支持。
在这里插入图片描述

实现思想为:

A 系统先发送一个 prepared 消息到 mq,如果这个 prepared 消息发送失败那么就直接取消操作别执行了;
如果这个消息发送成功过了,那么接着执行本地事务,如果成功就告诉 mq 发送确认消息,如果失败就告诉 mq 回滚消息;
如果发送了确认消息,那么此时 B 系统会接收到确认消息,然后执行本地的事务;
mq 会自动定时轮询所有 prepared 消息回调你的接口,问你,这个消息是不是本地事务处理失败了,所有没发送确认的消息,是继续重试还是回滚?一般来说这里你就可以查下数据库看之前本地事务是否执行,如果回滚了,那么这里也回滚吧。这个就是避免可能本地事务执行成功了,而确认消息却发送失败了。
这个方案里,要是系统 B 的事务失败了咋办?重试咯,自动不断重试直到成功,如果实在是不行,要么就是针对重要的资金类业务进行回滚,比如 B 系统本地回滚后,想办法通知系统 A 也回滚;或者是发送报警由人工来手工回滚和补偿。
  这种方案缺点就是实现难度大,而且主流MQ不支持。

5、分布式事务中间件解决方案
  分布式事务中间件其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。典型代表有:阿里的GTS(https://www.aliyun.com/aliware/txc)、开源应用LCN。

其实现原理如下:
在这里插入图片描述

四、LCN分布式事务框架

1、LCN框架的由来
  在设计框架之初的1.0 ~ 2.0的版本时,框架设计的步骤是如下的,各取其首字母得来的LCN命名。

锁定事务单元(lock)、确认事务模块状态(confirm)、通知事务(notify)

2、LCN框架相关资料

tx-lcn Github地址:https://github.com/codingapi/tx-lcn
tx-lcn服务下载地址:https://pan.baidu.com/s/1cLKAeE#list/path=%2F
tx-lcn服务源码地址:https://github.com/codingapi/tx-lcn/tree/master/tx-manager

3、LCN框架核心执行步骤

创建事务组:是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。

添加事务组:添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。

关闭事务组:是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。

如图所示,如果调用顺序为A{业务A,B{业务B}}这种A包含B的方式,那么正常调用时序图为:

在这里插入图片描述
  如果B发生异常,那么时序图为: 
  在这里插入图片描述

如果调用顺序为A{业务A},B{业务B}这种A先于B的方式,那么B发生异常时的时序图为:

在这里插入图片描述

4、LCN应用
  4.1、搭建tx-manager服务
  LCN是通过一个独立的微服务tx-manager作为分布式事务控制服务端(事务协调器)。需要执行分布式事务控制的微服务应用都通过远程服务调用的方式,在tx-manager上标记事务组,在执行事务处理后,将本地事务状态发送到tx-manager中对应的事务组上,tx-manager会根据具体的状态来通知相应的微服务应用提交或回滚。

tx-manager也是使用Spring Cloud开发的一个微服务应用,在搭建过程上是非常简单的。下载tx-manager事务协调器zip压缩包:https://pan.baidu.com/s/1cLKAeE#list/path=%2F
压缩包解压后内容如下:
在这里插入图片描述

修改application.properties配置文件,提供本地微服务应用的Eureka注册中心配置、redis配置。其中redis是事务协调器在处理事务组时使用的临时存储。


##########################txmanager-start#######################
#服务端口
server.port=8899

#tx-manager不得修改
spring.application.name=tx-manager

spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/static/
###########################txmanager-end#######################

# eureka地址:由于txManager也是一个SpringCloud的微服务,因此也要注册服务,交由Eureka Server管理
eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/
eureka.instance.prefer-ip-address=true

#############################redis-start#########################
## redis 单点环境配置:LCN采用Redis记录事务状态组状态,并基于事务组状态管理分布式事务
# redis
spring.redis.database=0
spring.redis.timeout=0
spring.redis.host=192.168.1.136
spring.redis.port=6379
spring.redis.pool.max-active=100
spring.redis.pool.max-wait=3000
spring.redis.pool.max-idle=200
spring.redis.pool.min-idle=50
spring.redis.pool.timeout=600
##############################redis-end##########################

###############################LCN-start########################
tm.transaction.netty.delaytime = 5
tm.transaction.netty.hearttime = 15
tm.redis.savemaxtime=30
tm.socket.port=9999
tm.socket.maxconnection=100
tm.compensate.auto=false
tm.compensate.notifyUrl=http://ip:port/path
tm.compensate.tryTime=30
tm.compensate.maxWaitTime=5000

logging.level.com.codingapi=debug

将修改后的application.properties配置文件打包到tx-manager-x.x.x.jar中,替代jar中原有的默认配置文件。

使用命令: java -jar tx-manager-x.x.x.jar启动微服务。

测试tx-manager事务协调器是否启动成功可以访问http://ip:8899/。如下结果代表事务协调器启动成功:

4.2、在微服务中使用LCN实现分布式事务管理
  在所有需要处理分布式事务的微服务中增加下述依赖:为统一资源版本,使用properties统一管理版本信息。

<properties>
    <lcn.last.version>4.1.0</lcn.last.version>
</properties>
<dependency>
    <groupId>com.codingapi</groupId>
    <!-- 此例采用SpringCloud,如果是dubbo需要引用另一个包 -->
    <artifactId>transaction-springcloud</artifactId>
    <version>${lcn.last.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.codingapi</groupId>
    <artifactId>tx-plugins-db</artifactId>
    <version>${lcn.last.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

在全局配置文件中增加下述配置:

# 定义事务协调器所在位置。根据具体环境定义其中的IP地址和端口。
tm.manager.url=http://127.0.0.1:8899/tx/manager/

使用LCN做分布式事务管理时,微服务应用内必须提供一个用于获取txUrl(txUrl就是全局配置文件中定义的tm.manager.url)的类型实现,这个类可以使用独立应用定义,在微服务应用中引入。具体如下:

@Service
public class TxManagerTxUrlServiceImpl implements TxManagerTxUrlService {

    @Value("${tm.manager.url}")
    private String url;

    @Override
    public String getTxUrl() {
        return url;
    }
}

在分布式事务管理代码中增加注解@TxTransaction。在业务调用方增加的注解需要属性isStart=true。而被调用方则不需要定义任何的注解属性。如:

A服务调用了B服务,那么A服务中代码:

@TxTransaction(isStart=true)
@Transactional
public void trade() {
    //本地调用
    tradeDao.save();
    //远程调用方
    orderService.order();
}

B服务中代码:

@Transactional
@TxTransaction
public void order() {
    //本地调用
    orderDao.save();
}

其中@Transactional用于管理本地事务,而@TxTransaction管理分布式事务,当需要回滚时,调用本地自带的事务管理器进行回滚。

Ins咸鱼的日常生活
关注 关注
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
springboot分布式事务解决方案LCN
02-24
本文来自于csdn,将从原理,调用时序图,客户端,启动类配置代理连接池,测试代码和效果这几个方面来阐述分布式事务解决方案LCN。对比LCN和saga(华为apache孵化器项目),LCN使用代理连接池封装补偿方法,saga需要...
分布式事务6种解决方案(超详细)
义笔记
06-19 1万+
typora-root-url: ./分布式事务图片 typora-copy-images-to: ./分布式事务图片 分布式事务六种解决方案 前言 事务想必大家并不陌生,严格意义上讲事务应该具备ACID,目前常见的分布式事务解决方案包括2PC、3PC、TCC、本地消息表、消息事物、最大努力通知等。 ACID 原子性:一个事物内的所有操作都要全执行或者都不执行 一致性:事务前后数据的完整性必须保持一致 隔离性:多个事务并发执行,不能被其他事物的操作所干扰 持久性:事务一旦提交,它的改变应该是持久性的
分布式事务解决方案:7种常见解决方案汇总
小识的博客
10-29 4907
二阶段提交协议 为了解决分布式事务的问题,出现了很多协议,如2PC(二阶段提交协议)、3PC(三阶段提交协议) 在二阶段提交协议中有一个事务管理器和多个资源管理器。事务管理器分两阶段协调资源管理器。 一阶段:事务管理器告诉资源管理器准备执行事务,并锁住需要的资源。当准备完成后,资源管理器向事务管理器报告已准备就绪。 二阶段:如果所有资源管理器都准备成功,第二阶段事务管理器回要求所有的资源管理器执行提交操作。如果任一资源管理器在第一阶段返回准备失败,那么事务管理器回要求所有的资源管理器在第二阶段执行回滚操作.
分布式事务最经典的七种解决方案
weixin_70730532的博客
05-29 2万+
前言: 随着业务的快速发展、业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构。随之而来就必然遇到分布式事务这个难题,这篇文章总结了分布式事务最经典的解决方案,分享给大家。 基础理论 在讲解具体方案之前,我们先了解一下分布式事务所涉及到的基础理论知识。 我们拿转账作为例子,A需要转100元给B,那么需要给A的余额-100元,给B的余额+100元,整个转账要保证,A-100和B+100同时成功,或者同时失败。看看在各种场景下,是如何解决这个问题的。 事务 把多条语句作
分布式事务几种解决方案
qq_33449307的博客
05-09 1527
分布式事务 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 以商品流水账单为例,我们拆分为商品购买系统,订单系统,支付系统。 用户看中一件商品,点击购买。 商品购买系统响应用户的点击,向订单系统插入一条订单信息。
分布式事务的8种解决方案(荣耀典藏版)
人生若只初相见@的博客
12-27 2万+
今天将带大家探讨分布式事务里的“八奇技”,帮助大家在实际的分布式系统中更好地运用事务。
Hmily柔性分布式事务解决方案-其他
06-12
Hmily是柔性分布式事务解决方案,提供了TCC 与 TAC 模式。它以零侵入以及快速集成方式能够方便的被业务进行整合。在性能上,日志存储异步(可选)以及使用异步执行的方式,不损耗业务方法方法。之前是由我个人开发,...
分布式事务解决方案.zip
01-15
通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、...
distributed-transaction分布式事务解决方案
最新发布
03-15
分布式事务解决方案,常见的解决方案有:可靠消息最终一致性、最大努力通知型、TCC补偿性,项目示例基于Spring Cloud实现可靠消息最终一致性和TCC补偿性。
springboot多数据源即分布式事务解决方案
10-16
实现系统对多数据源的操作。 实现系统对多数据源的分布式事务管理,包括事务的提交和回滚。
事务 | Spring Cloud 分布式事务管理 LCN、GTX、ByteTCC
热门推荐
双鬼带单
03-18 7万+
事务 | Spring Cloud 分布式事务管理 LCN、GTX、ByteTCC 在微服务如火如荼的情况下,越来越多的项目开始尝试改造成微服务架构,微服务即带来了项目开发的方便性,又提高了运维难度以及网络不可靠的概率. Spring Cloud 分布式事务管理 单体式架构 微服务架构 优点: 缺点: 分布式事务的引入 分布式事务解决方案 基于XA协议的两阶段提交 消息事务+最终一致性 TCC编程模式 具体实现 LCN B...
分布式事务有这一篇就够了!
i_deAc的博客
10-07 1099
分布式事务 文章目录分布式事务1. 基础概念1.1 什么是事务1.2 本地事务1.3 分布式事务1.4 分布式事务产生的情景2. 分布式事务基础理论2.1 CAP理论2.1.1 理解CAPC - ConsistencyA - AvailabilityP - Partition tolerance2.1.2 CAP组合方式CAP的组合方式2.1.3 总结2.2 BASE 理论3. 分布式事务解决方案之 2PC3.1 什么是 2PC3.2 解决方案3.2.1 XA 方案3.2.2 Seata 方案3.3 小结4
分布式事务解决方案
湖人•总冠军
06-26 1万+
分布式事务的实现主要有以下 5 种方案: XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案 两阶段提交方案/XA方案 所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不...
分布式事务的几种解决方案
zhoupenghui168的博客
04-28 7888
分布式事务的几种解决方案:2PC,3PC,TCC,最大努力通知,MQ消息事务,可靠消息最终一致性
分布式事务六种解决方案
软件开发实战项目分享
03-06 1369
事务(Transaction)是操作数据库中某个数据项的一个程序执行单元(unit)。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。事务的四个特征: 1、Atomic原子性 事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程中,要么全部执行成功,要么全部不执行,任何一项失败,整个事务回滚,只有全部都执行成功,整个事务才算成功。
分布式事务管理
java编程学习_java基础教程_booyzhang的博客
07-22 477
一、分布式事务的概述 1、本地事务 1)、事务介绍 事务是访问数据库的一个操作序列(一条或多条程序语句),数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换为另一种状态。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)的缩写。 事务ACID特性: 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发
【第九章】 Spring的事务 之 9.4 声明式事务 ——跟我学spring3
jinnianshilongnian的专栏
03-07 412
9.4  声明式事务 9.4.1  声明式事务概述        从上节编程式实现事务管理可以深刻体会到编程式事务的痛苦,即使通过代理配置方式也是不小的工作量。        本节将介绍声明式事务支持,使用该方式后最大的获益是简单,事务管理不再是令人痛苦的,而且此方式属于无侵入式,对业务逻辑实现无影响。        接下来先来看看声明式事务如何实现吧。 9.4.2  声明式...
分布式事务
qq_52030298的博客
09-21 150
分布式事务,正常开启事务@Transactional(rollbackFor = Exception.class),增加分布式事务发起端增加注解:@TxTransaction(isStart = true)接收端增加注解:@TxTransaction,发起端一定要获取并抛出接收端的异常,否则事务不生效。
华为内部java软件项目开发过程中,使用的比较成熟的分布式事务解决方案是哪些,具体代码如何实现
05-27
在华为内部,XA协议的分布式事务解决方案通常使用Seata框架来实现。 具体的实现步骤如下: 1. 在分布式事务的发起方(一般为业务系统)使用Seata提供的`@GlobalTransactional`注解标识事务方法。 2. 在事务方法中...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 青龙面板搭建及记录踩过的坑 11934
  • Node Sass does not yet support your current environment: Windows 64-bit然如何解决,cnpm此问题解决方法 11827
  • 解决sql关键字冲突处理方法 3619
  • Oracle数据库PLSQL的中文乱码显示全是问号 3389
  • 申请CCC(City Colleges of Chicago)教育邮箱 3189

最新评论

  • 青龙面板搭建及记录踩过的坑

    我真的是个菜鸟,求大佬带!: 这个bizCode和bizMsg都没有啊

  • 记关于依赖引入了,但是import还是红色,注解不生效

    SikoyiSama: 原来是IDEA的缓存问题,感谢!

  • 青龙面板搭建及记录踩过的坑

    安筱珃: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory timeout: warning: disabling core dumps failed: Interrupted system call,请问一下这种脚本错误怎么解决

  • Node Sass does not yet support your current environment: Windows 64-bit然如何解决,cnpm此问题解决方法

    bugubuguniao: 报错变成这个 Node Sass version 6.0.1 is incompatible with ^4.0.0.,切换又变成Windows 64-bit循环了

  • Node Sass does not yet support your current environment: Windows 64-bit然如何解决,cnpm此问题解决方法

    bugubuguniao: 牛逼开始卡bug了

大家在看

  • Amesim应用篇-制冷剂压焓图软件Coolpack简介与冷媒流量评估 399
  • Linux用docker安装Elasticsearch&&SpringBoot整合ES 42
  • 引力为什么会让时间变慢,给你通俗的解读
  • 深入剖析—【服务器硬件】与【Nginx配置】:从基础到实战 192
  • 打造超级用户体系的阵法解析——基于企业定制开发AI智能名片S2B2C商城系统小程序的会员制五步循环法

最新文章

  • 青龙面板搭建及记录踩过的坑
  • 关于注册登录写法
  • 数据类型 2020/12/8
2022年1篇
2020年24篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源宠物店起名那里可以起名字楠女孩起名字饺子店起姓名大全白羊座是几月几日到几月几日生日绝世战王叶九州小说免费阅读公司起名检验如果还有明天美剧的属猴人起名宜什么起名比较好的字北京女孩起名车臣战争电影小沈阳歌曲下一站作文洪兴太子项姓起名宝宝起名大全哪里好鞍山银行梦到丢东西轰天龙虎会冒险岛战士加点爱情公寓电影汽车电子起名顾辰凌美雪全文小说免费阅读女孩起名那个雨好zoosex电脑耳机没有声音三级警司xxxmovies电影频道直播淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化