首页 > 滚动 > > 内容页

观察:如何快速实现一个定时器

2023-03-25 05:26:03 腾讯云

导语

定时器(Timer)是一种在业务开发中常用的组件,主要用在执行延时通知任务上。本文以笔者在微信工作中的实践作为基础,介绍如何使用平时部门最常用的组件快速实现一个业务常用的分布式定时器服务。同时介绍了过程中遇到问题的一些解决方案,希望能够给类似场景提供一些解决思路。

1.什么是定时器

定时器(Timer)是一种在指定时间开始执行某一任务的工具(也有周期性反复执行某一任务的Timer,我们这里暂不讨论)。它常常与延迟队列这一概念关联。 那么在什么场景下我才需要使用定时器呢?

我们先看看以下业务场景:


【资料图】

当订单一直处于未支付状态时,如何及时的关闭订单,并退还库存?如何定期检查处于退款状态的订单是否已经退款成功?新创建店铺,N天内没有上传商品,系统如何知道该信息,并发送激活短信?

为了解决以上问题,最简单直接的办法就是定时去扫表。每个业务都要维护一个自己的扫表逻辑。 当业务越来越多时,我们会发现扫表部分的逻辑会非常类似。我们可以考虑将这部分逻辑从具体的业务逻辑里面抽出来,变成一个公共的部分。这个时候定时器就出场了。

2.定时器的本质

一个定时器本质上是这样的一个数据结构:deadline越近的任务拥有越高优先级,提供以下几种基本操作:

Add 新增任务Delete 删除任务Run 执行到期的任务/到期通知对应业务处理Update 更新到期时间 (可选)

Run通常有两种工作方式:

1.轮询

每隔一个时间片就去查找哪些任务已经到期;

2.睡眠/唤醒

不停地查找deadline最近的任务,如到期则执行;否则sleep直到其到期。

在sleep期间,如果有任务被Add或Delete,则deadline最近的任务有可能改变,线程会被唤醒并重新进行1的逻辑。

它的设计目标通常包含以下几点要求:

支持任务提交(消息发布)、任务删除、任务通知(消息订阅)等基本功能。消息传输可靠性:消息进入延迟队列以后,保证至少被消费一次(到期通知保证At-least-once ,追求Exactly-once)。数据可靠性:数据需要持久化,防止丢失。高可用性:至少得支持多实例部署。挂掉一个实例后,还有后备实例继续提供服务,可横向扩展。实时性:尽最大努力准时交付信息,允许存在一定的时间误差,误差范围可控。

3.数据结构

下面我们谈谈定时器的数据结构。定时器通常与延迟队列密不可分,延时队列是什么?顾名思义它是一种带有延迟功能的消息队列。而延迟队列底层通常可以采用以下几种数据结构之一来实现:

有序链表,这个最直观,最好理解。堆,应用实例如Java JDK中的DelayQueue、Go内置的定时器等。时间轮/多级时间轮,应用实例如Linux内核定时器、Netty工具类HashedWheelTimer、Kafka内部定时器等。

这里重点介绍一下时间轮(TimeWheel)。一个时间轮是一个环形结构,可以想象成时钟,分为很多格子,一个格子代表一段时间(越短Timer精度越高),并用一个List保存在该格子上到期的所有任务,同时一个指针随着时间流逝一格一格转动,并执行对应List中所有到期的任务。任务通过取模决定应该放入哪个格子。示意图如下所示:

如果任务的时间跨度很大,数量也多,传统的单轮时间轮会造成任务的round很大,单个格子的任务List很长,并会维持很长一段时间。这时可将Wheel按时间粒度分级(与水表的思想很像),示意图如下所示:

时间轮是一种比较优雅的实现方式,且如果采用多级时间轮时其效率也是比较高的。

4.业界实现方案

业界对于定时器/延时队列的工程实践,则通常基于以下几种方案来实现:

基于Redis ZSet实现。采用某些自带延时选项的队列实现,如RabbitMQ、Beanstalkd、腾讯TDMQ等。基于Timing-Wheel时间轮算法实现。

其中《你真的知道怎么实现一个延迟队列吗?》一文详细介绍了具体的实现方式,大家有兴趣可以阅读下。

5.方案详述

介绍完定时器的背景知识,接下来看下我们系统的实现。我们先看一下需求背景。在我们组的实际业务中,有延迟任务的需求。一种典型的应用场景是:商户发起扣费请求后,立刻为用户下发扣费前通知,24小时后完成扣费;或者发券给用户,3天后通知用户券过期。基于这种需求背景,我们引出了定时器的开发需求。

我们首先调研了公司内外的定时器实现,避免重复造轮子。调研了诸如例如公司外部的Quartz、有赞的延时队列等,以及公司内部的PCG tikker、TDMQ等,以及微信支付内部包括营销、代扣、支付分等团队的一些实现方案。最后从可用性、可靠性、易用性、时效性以及代码风格、运维代价等角度考虑,我们决定参考前人的一些优秀的技术方案,并根据我们团队的技术积累和组件情况,设计和实现一套定时器方案。

首先要确定定时器的存储数据结构。这里借鉴了时间轮的思想,基于微信团队最常用的分布式存储组件tablekv进行任务的持久化存储。使用到tablekv的原因是它天然支持按uin分表,分表数可以做到千万级别以上;其次其单表支持的记录数非常高,读写效率也很高,还可以如mysql一样按指定的条件筛选任务。

我们的目标是实现秒级时间戳精度,任务到期只需要单次通知业务方。故我们方案主要的思路是基于tablekv按任务执行时间分表,也就是使用使用方指定的start_time(时间戳)作为分表的uin,也即是时间轮bucket。为什么不使用多轮时间轮?主要是因为首先kv支持单表上亿数据, 其二kv分表数可以非常多,例如我们使用1000万个分表需要约115天的间隔才会被哈希分配到同一分表内。故暂时不需要使用到多轮时间轮。

最终我们采用的分表数为1000w,uin=时间戳mod分表数。这里有一个注意点,通过mod分表数进行Key收敛, 是为了避免时间戳递增导致的key无限扩张的问题。示例图如下所示:

任务持久化存储之后,我们采用一个Daemon程序执行定期扫表任务,将到期的任务取出,最后将请求中带的业务信息(biz_data添加任务时带来,定时器透传,不关注其具体内容)回调通知业务方。这么一看流程还是很简单的。

这里扫描的流程类似上面讲的时间轮算法,会有一个指针(我们在这里不妨称之为time_pointer)不断向后移动,保证不会漏掉任何一个bucket的任务。这里我们采用的是commkv(可以简单理解为可以按照key-value形式读写的kv,其底层仍是基于tablekv实现)存储CurrentTime,也就是当前处理到的时间戳。每次轮询时Daemon都会通过GetByKey接口获取到CurrentTime,若大于当前机器时间,则sleep一段时间。若小于等于当前机器时间,则取出tablekv中以CurrentTime为uin的分表的TaskList进行处理。本次轮询结束,则CurrentTime加一,再通过SetByKey设置回commkv。这个部分的工作模式我们可以简称为Scheduler。

Scheduler拿到任务后只需要回调通知业务方即可。如果采用同步通知业务方的方式,由于业务方的超时情况是不可控的,则一个任务的投递时间可能会较长,导致拖慢这个时间点的任务整体通知进度。故而这里自然而然想到采用异步解耦的方式。即将任务发布至事件中心(微信内部的高可用、高可靠的消息平台,支持事务和非事务消息。由于一个任务的投递到事件中心的时间仅为几十ms,理论上任务量级不大时1s内都可以处理完。此时time_pointer会紧跟当前时间戳。当大量任务需要处理时,需要采用多线程/多协程的方式并发处理,保证任务的准时交付。broker订阅事件中心的消息,接受到消息后由broker回调通知业务方,故broker也充当了Notifier的角色。整体架构图如下所示:

主要模块包括:

任务扫描Daemon:充当Scheduler的角色。扫描所有到期任务,投递到事件中心,让它通知broker,由broker的Notifier通知业务方。

定时器broker:集业务接入、Notifier两者功能于一身。

任务状态机图如下所示,只有两种状态。当任务插入kv成功时即为pending状态,当任务成功被取出并通知业务方成功时即为finish状态。

6.实现细节与难点思考

下面就上面的方案涉及的几个技术细节进行进一步的解释。

6.1 业务隔离

通过biz_type定义不同的业务类型,不同的biz_type可以定义不同的优先级(目前暂未支持),任务中保存biz_type信息。

业务信息(主键为biz_type)采用配置中心进行配置管理。方便新业务的接入和配置变更。业务接入时,需要在配置中添加诸如回调通知信息、回调重试次数限制、回调限频等参数。业务隔离的目的在于使各个接入业务不受其他业务的影响,这一点由于目前我们的定时器用于支持本团队内部业务的特点,仅采取对不同的业务执行不同业务限频规则的策略,并未做太多优化工作,就不详述了。

6.2 时间轮空转问题

由于1000w分表,肯定是大部分Bucket为空,时间轮的指针推进存在低效问题。联想到在饭店排号时,常有店员来登记现场尚存的号码,就是因为可以跳过一些号码,加快叫号进度。同理,为了减少这种“空推进”,Kafka引入了DelayQueue,以bucket为单位入队,每当有bucket到期,即queue.poll能拿到结果时,才进行时间的“推进”,减少了线程空转的开销。在这里类似的,我们也可以做一个优化,维护一个有序队列,保存表不为空的时间戳。大家可以思考一下如何实现,具体方案不再详述。

6.3 限频

由于定时器需要写kv,还需要回调通知业务方。因此需要考虑对调用下游服务做限频,保证下游服务不会雪崩。这是一个分布式限频的问题。这里使用到的是微信支付的限频组件。保证1.任务插入时不超过定时器管理员配置的频率。 2.Notifier回调通知业务方时不超过业务方申请接入时配置的频率。这里保证了1.kv和事件中心不会压力太大。2.下游业务方不会受到超过其处理能力的请求量的冲击。

6.4 分布式单实例容灾

出于容灾的目的,我们希望Daemon具有容灾能力。换言之若有Daemon实例异常挂起或退出,其他机器的实例进程可以继续执行任务。但同时我们又希望同一时刻只需要一个实例运行,即“分布式单实例”。所以我们完整的需求可以归纳为“分布式单实例容灾部署”

实现这一目标,方式有很多种,例如:

接入“调度中心”,由调度中心来负责调度各个机器各节点在执行任务前先分布式抢锁,只有成功占用锁资源的节点才能执行任务各节点通过通信选出“master"来执行逻辑,并通过心跳包持续通信,若“master”掉线,则备机取代成为master继续执行

主要从开发成本,运维支撑两方面来考虑,选取了基于chubby分布式锁的方案来实现单实例容灾部署。这也使得我们真正执行业务逻辑的机器具有随机性。

6.5 可靠交付

这是一个核心问题,如何保证任务的通知满足At-least-once的要求?

我们系统主要通过以下两种方式来保证。

1.任务达到时即存入tablekv持久化存储,任务成功通知业务方才设置过期(保留一段时间后删除),故而所有任务都是落地数据,保证事后可以对账。

2.引入可靠事件中心。在这里使用的是事件中心的普通消息,而非事务消息。实质是当做一个高可用性的消息队列。

这里引入消息队列的意义在于:

将任务调度和任务执行解耦(调度服务并不需要关心任务执行结果)。异步化,保证调度服务的高效执行,调度服务的执行是以ms为单位。借助消息队列实现任务的可靠消费。

事件中心相比普通的消息队列还具有哪些优点呢?

某些消息队列可能丢消息(由其实现机制决定),而事件中心本身底层的分布式架构,使得事件中心保证极高的可用性和可靠性,基本可以忽略丢消息的情况。事件中心支持按照配置的不同事件梯度进行多次重试(回调时间可以配置)。事件中心可以根据自定义业务ID进行消息去重。

事件中心的引入,基本保证了任务从Scheduler到Notifier的可靠性。

当然,最为完备的方式,是增加另一个异步Daemon作为兜底策略,扫出所有超时还未交付的任务进行投递。这里思路较为简单,不再详述。

6.6 及时交付

若同一时间点有大量任务需要处理,如果采用串行发布至事件中心,则仍可能导致任务的回调通知不及时。这里自然而然想到采用多线程/多协程的方式并发处理。在本系统中,我们使用到了微信的BatchTask库,BatchTask是这样一个库,它把每一个需要并发执行的RPC任务封装成一个函数闭包(返回值+执行函数+参数),然后调度协程(BatchTask的底层协程为libco)去执行这些任务。对于已有的同步函数,可以很方便的通过BatchTask的Api去实现任务的批量执行。Daemon将发布事件的任务提交到BatchTask创建的线程池+协程池(线程和协程数可以根据参数调整)中,充分利用流水线和并发,可以将任务List处理的整体时延大大缩短,尽最大努力及时通知业务方。

6.7 任务过期删除

从节省存储资源考虑,任务通知业务成功后应当删除。但删除应该是一个异步的过程,因为还需要保留一段时间方便查询日志等。这种情况,通常的实现方式是启动一个Daemon异步删除已完成的任务。我们系统中,是利用了tablekv的自动删除机制,回调通知业务完成后,除了设置任务状态为完成外,同时通过tablekv的update接口设置kv的过期时间为1个月,避免了异步Daemon扫表删除任务,简化了实现。

6.8 其他风险项

1.由于time_pointer的CurrentTime初始值置为首次运行的Daemon实例的机器时间,而每次轮询时都会对比当前Daemon实例的机器时间与CurrentTime的差别,故机器时间出错可能会影响任务的正常调度。这里考虑到现网机器均有时间校正脚本在跑,这个问题基本可以忽略。

2.本系统的架构对微信事件中心构成了强依赖。定时器的可用性和可靠性依赖于事件中心的可用性和可靠性。虽然目前事件中心的可用性和可靠性都非常高,但如果要考虑所有异常情况,则事件中心的短暂不可用、或者对于订阅者消息出队的延迟和堆积,都是需要正视的问题。一个解决方案是使用MQ做双链路的消息投递,解决对于事件中心单点依赖的问题。

结语

这里的定时器服务目前仅用于支持境外的定时器需求,调用量级尚不大,已可满足业务基本要求。如果要支撑更高的任务量级,还需要做更多的思考和优化。随时欢迎大家和和我交流探讨。

加入我们

微信境外支付团队在不断追求卓越的路上寻找同路人,欢迎加入我们的团队。

x 广告
最近更新

观察:如何快速实现一个定时器

2023-03-25

环球观天下!圣诞节儿歌贝瓦儿歌_圣诞节儿歌

2023-03-25

斗牛技巧和概率5张牌_斗牛技巧

2023-03-24

假面骑士Geats:说说四位支持者所追求的东西,都是属于感情的一部分-视点

2023-03-24

如何举报一个网站_全球快看

2023-03-24

河南长葛市开展“两看两讲两比”活动推进“五星”支部创建

2023-03-24

记者谈纳帅下课:表现不稳定&球员反对他,拜仁不想错过图赫尔|当前观察

2023-03-24

美财长说准备采取更多行动确保银行存款安全 环球通讯

2023-03-24

【热闻】云岩区大凹村:绘就幸福街 打造舒心港

2023-03-24

东宝生物:公司已实现药典二部明胶的销售 开发苏州贝朗作为药典二部明胶的明星客户

2023-03-24

当前热门:颈椎病治疗5个小窍门_7个有效的颈椎病的自我治疗方法

2023-03-24

如何查找之前的QQ聊天记录

2023-03-24

闻气味、想脱单?瓦屋山野生大熊猫集体出游_世界观察

2023-03-24

焦点消息!盐湖股份:近年来,公司钾肥产量维持在500万吨左右

2023-03-24

我国科学家发现耐碱基因可使作物增产

2023-03-24

环球速看:送女友 足浴磨脚器5.9元

2023-03-24

文丘里混合器与射流器的区别_文丘里混合器-环球简讯

2023-03-24

每日热议!关于弹簧钢成分分类

2023-03-23

【世界速看料】结婚的秘密郑雅文结局_结婚的秘密

2023-03-23

环球今热点:Java循环运行时暂停一段时间

2023-03-23

11万元现金被盗嫌疑人拒不认罪,一组编码成破案关键…… 热点聚焦

2023-03-23

世界热推荐:硅谷银行破产、瑞信银行被收购,一文读懂欧美银行业为何持续波动|钛度图闻

2023-03-23

美联储加息“靴子”落地 A股迎来反弹 能持续多久?

2023-03-23

安徽一市教育局原局长受审!被控受贿900多万! 环球今热点

2023-03-23

一键加油怎么操作 天天视讯

2023-03-23

大众v6有什么车型 全球视点

2023-03-23

全国水利工程供水能力超过8900亿立方米 全球热讯

2023-03-23

复方鲜竹沥液的功效_复方鲜竹沥液的功效 每日简讯

2023-03-23

快看:凯发电气:公司并不是国资控股企业

2023-03-23

稳经济 促发展 强信心 | 做好企业“娘家人” 助企纾困解难题

2023-03-23

郭守敬主持修订了什么东西|前沿热点

2023-03-23

嵯峨天皇_嵯峨

2023-03-23

3月23日起,天府机场公交专线增至5条均24小时运行

2023-03-22

海南开展“六水共治 共护母亲河”节水宣传活动

2023-03-22

光棍节分别是几月几号

2023-03-22

股票期权是什么意思?股票期权交易规则是什么?

2023-03-22

环球实时:与你相遇,怦然“新”动 郑州11中开展学生社团纳新活动

2023-03-22

天津养老金上调方案最新消息2022-2023 天津退休金计算公式2022-2023计算举例

2023-03-22

身体这2处“越痛”,说明血管堵得越严重,不能拖,该清理血栓了

2023-03-22

天天热讯:1至2月全区规上工业增加值比增7.7%

2023-03-22

内蒙古发布暴雪橙色预警-天天快消息

2023-03-22

被多国“疯抢”的中国罐头为啥这么火 海外需求持续增长创新高!

2023-03-22

全球新消息丨金智科技(002090):3月21日北向资金减持2.8万股

2023-03-22

什么是主营业务成本_什么是主营业务

2023-03-22

翘首企盼的意思_企盼的意思

2023-03-21

艾罗能源3月28日上交所首发上会

2023-03-21

的网点是什么意思_的网点意思是什么|天天快消息

2023-03-21

天天快看点丨鱼肝油的功效与作用是什么呢_鱼肝油的功效与作用

2023-03-21

每日短讯:支付宝蚂蚁庄园小课堂2019年11月21日

2023-03-21

当前看点!2023陇南二诊各科试卷及答案解析汇总_更新中

2023-03-21

环球热点评!吉林省高速公路春季养护工作全面启动

2023-03-21

今日性冷淡房间装修风格_性冷淡fa

2023-03-21

锦瑟无端五十弦一弦一柱思华年的意思_锦瑟无端五十弦一弦一柱思华年

2023-03-21

天润工业: 2022年度独立董事述职报告(姚春德) 世界报道

2023-03-20

天天视点!格罗宁根球员安抚愤怒球迷 反遭球迷挥拳正中面门

2023-03-20

铁矿石遭遇监管层持续打压,瑞信事件再度发酵,钢价预计反复偏弱震荡为主_天天实时

2023-03-20

王者荣耀世冠:AG无缘决赛,一诺巅峰对决严重失误,赛后表情落寞

2023-03-20

每日观察!小汽车申请摇号网站登录_小车摇号申请网

2023-03-20

醋溜豆芽用什么醋 醋溜豆芽用哪种醋|每日讯息

2023-03-20

仓山区举行社工周宣传活动 “一小一老”齐动手为小区添绿|天天快播

2023-03-20

购买合同纠纷怎么处理 焦点热讯

2023-03-20

惊字组词并写一句话_惊字组词-当前速递

2023-03-19

莆田怎么读音是什么_莆田怎么读

2023-03-19

今日关注:工业白油属于什么油种_工业白油属于什么油

2023-03-19

跟着旅发大会游山东|即刻出发,开启度假模式! 环球资讯

2023-03-19

03月19日06时广东肇庆疫情数据 阳了以后为什么会腰疼?应该怎么办?

2023-03-19

今日视点:今日魔兽世界《德拉诺之王》的满级是多少或者90级?100级什么时候开?

2023-03-19

艾菲尔丁:每当我累了都会整理队长袖标,鞭策自己千万不能倒下

2023-03-18

金铲铲之战造物之主第三关攻略图_金铲铲之战造物之主第三关

2023-03-18

程门立雪的意思_悬梁刺股是什么意思-世界看点

2023-03-18

全球今日报丨房地产营销总监岗位职责要求_房地产营销总监岗位职责

2023-03-18

晨读丨3月18日,关注健康每一天-天天时快讯

2023-03-18

足坛一夜:阿森纳爆冷倒下,曼联5-1晋级,尤文3-0,罗马2-0|环球聚焦

2023-03-18

骉犇羴猋鱻鑫森淼焱垚怎么读_三个鬼念什么

2023-03-18

白云山: 广州白云山医药集团股份有限公司独立董事关于对外担保情况的专项说明 新视野

2023-03-17

形容美丽漂亮的成语_形容女人漂亮的成语-热门看点

2023-03-17

世界时讯:明日10点开抢!成都高新区合作街道联合美团等平台发放700万元消费券

2023-03-17

【新要闻】羽生结弦_说一说羽生结弦的简介

2023-03-17

营收首破1000亿!“猪企一哥”拟跨界光伏!-全球新要闻

2023-03-17

观热点:QQ自由幻想战士技能配置_qq自由幻想战士

2023-03-17

国米祝哲科37岁生日快乐,效力1年多赢得1个意杯和2个意超级杯

2023-03-17

世界新动态:古井贡酒(000596):3月16日北向资金减持9.59万股

2023-03-17

天宝伏妖录txt百度云全本番外(天宝伏妖录txt百度云完整版)_天天新视野

2023-03-16

看电影、玩游戏……深圳福田街道水围社区多形式开展社工周宣传活动

2023-03-16

89家直销企业共同倡议:"激发直销市场活力 推动行业高质量发展"|天天观察

2023-03-16

女子深夜点三次白酒外卖!小哥报警救了她:原本想轻身_前沿热点

2023-03-16

科普课堂需要更多“魔法老师”

2023-03-16

谷歌地图安卓应用的黑暗模式终于来了-每日报道

2023-03-16

思维列控:3月15日融资买入473.44万元,融资融券余额1.15亿元_全球快资讯

2023-03-16

mba是什么意思中文翻译_mba是什么意思

2023-03-16

天天动态:瑞士方面考虑的选项还包括分拆瑞士信贷、与瑞银合并

2023-03-16

液晶显示器尺寸规格表_液晶显示器尺寸对照表|天天快播

2023-03-15

今天最新消息 当下爆火的心理咨询,真的有那么神奇吗?

2023-03-15

消息![Golang]Go的channel

2023-03-15

焦点速递!重庆市委书记袁家军:千方百计扩大有效需求加快建设现代化产业体系

2023-03-15

天天精选!珠海景山索道/滑道小孩老人能坐吗

2023-03-15

观焦点:消费贷 内卷、套路和灰产

2023-03-15

风号浪吼的反义词_风号浪吼的拼音

2023-03-15

看点:申请号码步骤_申请号码

2023-03-15

资讯|2023内蒙古阿拉善畅游卡兰州站推介会成功举办

2023-03-14

天天微资讯!江苏盱眙发出全国首份家庭教育指导委托函

2023-03-14

招商投资促进工作大会召开 2023年九龙坡要这样干!

2023-03-14

台式电脑怎么用无线路由器连wifi上网_台式机怎么用无线路由器

2023-03-14

林子闳的电视剧_林子闳

2023-03-14

世界讯息:3月14日虚拟电厂板块跌幅达2%

2023-03-14

天天短讯!雄韬股份03月13日获深股通增持30.95万股

2023-03-14

哈尔滨新闻资讯频道直播_哈尔滨新闻资讯频道

2023-03-14

绿康生化: 独立董事关于公司第四届董事会第二十四次(临时)会议相关事项的独立意见

2023-03-13

人报甘头条 | 甘肃:全面放开农民工参加城乡居民基本医疗保险户籍限制

2023-03-13

快资讯丨浦江县气象台发布霜冻蓝色预警【Ⅳ级/一般】【2023-03-13】

2023-03-13

今日快讯:奥斯卡|开场明讽威尔·史密斯,脱口秀天王吉米·坎摩尔:打人就可拿影帝

2023-03-13

当前短讯!盘龙区教研员“驻点式”下校与名师工作室联动教研活动

2023-03-13

环球视讯!阵风7到8级!青岛今天晴间多云,市区最高气温12℃,最低气温7℃

2023-03-13

环球观速讯丨都挺好:明玉最爱的人原来是他,一个瞬间,令人感怀

2023-03-13

李典和张辽的关系很不好,他们二人是因为什么原因结怨的?

2023-03-12

张佳坊乡推动经济高质量发展|当前关注

2023-03-12

东风系疯狂“杀价”背后,合资车或将面临全线“崩盘”?|全球观焦点

2023-03-12

肚子越来越大怎么才能减掉_肚子越来越大怎么回事-环球消息

2023-03-12

里程碑!乔治生涯三分命中数达到2000记

2023-03-12

戏曲小仓娃卷席筒全集_小仓娃卷席筒全集

2023-03-12

固定资产折旧会计分录_折旧的会计分录

2023-03-11

阳了应该怎么办-阳性感染者如何用药 03月11日14时内蒙古乌海疫情数据 速看

2023-03-11

在芝加哥数十年来最高的新办公楼110NWacker预售

2023-03-11

照片大小怎么改到2mb_照片大小怎么改到2m-天天新消息

2023-03-11

可怕的福建人 焦点日报

2023-03-11

新车报讯:增加镀铬格栅设计本田思域新增申报图-天天讯息

2023-03-11

腾冲市属于什么档次_腾冲市属于哪个市

2023-03-11

03月11日00时河南漯河疫情数据 阳了以后为什么会腰疼?应该怎么办?

2023-03-11

注意!多家银行公告清理睡眠卡和超量卡

2023-03-10

这就是您必须正确调整汽车后视镜的方法 焦点资讯

2023-03-10

李家超将赴京列席十四届全国人大一次会议闭幕会_全球聚看点

2023-03-10

queenier_queenie_环球滚动

2023-03-10

二次元兽设图片_二次元兽血沸腾

2023-03-10

今日热议:经常头痛是什么原因_经常头痛挂哪个科室

2023-03-10

投资成本是什么科目_投资成本

2023-03-10

表兄弟合影发朋友圈说说_表兄弟 焦点热讯

2023-03-10

傻瓜别让眼泪乖乖流是什么歌 傻瓜别让眼泪乖乖流是哪首歌歌词

2023-03-10

扁鹊治病的故事视频动画_扁鹊治病的故事视频-环球观察

2023-03-09

win10以兼容性运行这个程序_win10系统开启程序兼容性助手的方法_当前报道

2023-03-09

美众议院否决从叙利亚撤军决议 叙外交部谴责美非法干预-要闻速递

2023-03-09

长春汽车消费券还剩多少钱?怎么查询余额?

2023-03-09

天天快报!怎样把多个文件压缩打包_多个文件怎么打包压缩

2023-03-09

兰州:用实际行动传承雷锋精神 每日速看

2023-03-09

每日动态!张文雄律师_张文雄老婆照片

2023-03-09

今日热文:国家级海洋牧场示范区——乐东普盛海洋牧场建设揭秘

2023-03-09

天天短讯!萨克斯的音色由什么决定_音色由什么决定

2023-03-09

天娱数科3月9日快速上涨

2023-03-09

裁判安排 | 北京时间3月12日1:00,那不勒...

2023-03-09

摩羯座今日运势超准摩羯座财位方向_摩羯座今日运势超准 时快讯

2023-03-09

提成工作合同范本(精选55篇)

2023-03-09

当前简讯:盐城鑫风新能源开发有限公司

2023-03-08

泠鸢yousa有什么黑料_泠鸢yousa本人照片曝光 世界看热讯

2023-03-08

天力锂能(301152.SZ):安徽天力获得高新技术企业认定

2023-03-08

袁天罡

2023-03-08

跳空行情中如何做到伦敦金保本

2023-03-08

奉节甲高镇第五届万亩油菜花赏花季启动 天天头条

2023-03-08

天天短讯!凸面镜和凹面镜的区别

2023-03-08

要闻:虾子的做法大全家常做法_虾子的做法大全

2023-03-08

全球观察:亚煞极

2023-03-08

焦点热讯:映光计划_对于映光计划简单介绍

2023-03-08

如何用ps处理照片上的文字_如何用ps处理照片

2023-03-08

环球快资讯:0.0是什么意思

2023-03-08

春蚕到死丝方尽蜡炬成灰泪始干英文_春蚕到死丝方尽蜡炬成灰泪始干

2023-03-08

绿光森林电视剧|速看

2023-03-08

珊瑚朴_关于珊瑚朴的介绍 今日最新

2023-03-08

2023广东油价今日价格表(不断更新)

2023-03-07

天津泰达队员简介

2023-03-07

天天亮点!新奥尔良烤翅调料用法_新奥尔良烤翅做法

2023-03-07

热头条丨女生毕业礼宣布出柜

2023-03-07

宁夏大学教务处信息管理系统官网_宁夏大学教务处信息管理系统-当前速读

2023-03-07

“之前不知道毒品还能做成糖果,多亏带孩子来听一听”_每日消息

2023-03-07

【天天新视野】棉袄

2023-03-07

3月14日开启魅友招募!魅族 20 系列或亮相魅族史上最大新品发布会-焦点播报

2023-03-07

天天新资讯:适合清唱的歌曲

2023-03-07

世界简讯:抗炎抗氧化,春天的韭菜这样吃最好

2023-03-07

地下城迷你黑暗武士属性 dnf宠物迷你黑暗武士

2023-03-07

鮀-天天速递

2023-03-07

黄山奇石课后三幅图各写一段话仙女弹琴_黄山奇石课后三幅图各写一段话

2023-03-07

铺面和垫底在肉肉植物种植中的作用及其注意事项

2023-03-07

环球聚焦:桂林市2022—2023首届足协杯落幕,天龙·骁蒙羊肉馆队摘得桂冠

2023-03-06

全球实时:变通执行权

2023-03-06

环球今亮点!侄子的英文_侄子和外甥的区别

2023-03-06

全球热议:韩日“最大悬案”有解了?拜登欢迎,他们却批评!

2023-03-06

离婚时有过错方是否少分财产 世界今热点

2023-03-06

当前时讯:香港拟建廉政学院 推广反贪经验

2023-03-06

每日速看!属兔的女明星:宋茜

2023-03-06

Jennie摔伤后首露面,脸部浮肿明显,被媒体拍到后一脸不好意思

2023-03-06

我你中间加什么字大全_我你中间加一个字大全-全球播报

2023-03-06

当前消息!合肥高新区:线上线下联动发力,助力企业招才引智

2023-03-06

全球热门:万物沐春!惊蛰时节大步回暖 全国春雷地图看哪里雷声隆隆

2023-03-06

万事顺遂是什么意思酷知经验网_万事顺遂是什么意思

2023-03-06

热文:中国汽车品牌极限突围,从斗图开始?

2023-03-06

九株益生菌浓缩液

2023-03-06

山东省政府批复!同意

2023-03-06

当前速读:warframe 法老

2023-03-05

焦点!中信银行(00998)向原A股股东配售股份申请获得上交所受理

2023-03-05

天天微速讯:河北省省考成绩什么时候出来

2023-03-05

全国早稻育秧达13% 小麦苗情好于常年-焦点热闻

2023-03-05

招行信用卡利息怎么计算

2023-03-05

【环球播资讯】23岁男子在哥哥去世后,和嫂子一起生活,对侄子很好,侄子却不和他亲近,男子去世后侄子说:我是他儿子

2023-03-05