首页 > 资讯 > > 内容页

如何快速实现一个定时器_世界观点

2023-03-27 00:52:23 腾讯云

导语

定时器(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-27

当前通讯!最新国庆节祝福语 文字简短(九篇)

2023-03-26

医保门诊报销是怎么报销的?医保门诊报销流程是怎么样的?-环球微动态

2023-03-26

天津社保4050优惠有哪些?补贴标准最高多少钱?

2023-03-26

琵琶虾的家常做法

2023-03-26

世界速递!如何评价姜文导演

2023-03-26

券商评级一周速览:324 只个股获券商关注,朗姿股份目标涨幅达 94.29%

2023-03-26

在宝威 老师好 | 2023我是宝威幼教代言人——生活老师篇

2023-03-26

环球热推荐:10月份适合去哪旅游_10月份去哪旅游最好

2023-03-26

网红直播怎么赚钱的_直播怎么赚钱的_环球新要闻

2023-03-26

孔雀美人鱼怎么画

2023-03-25

连城县农林考察团赴广州开展对口合作交流

2023-03-25

全球热文:聊城市RCEP企业服务中心揭牌在市跨境电商产业园揭牌

2023-03-25

每日速递:瞎子聋子哑巴瘸子笑话_聋子听到哑巴说瞎子看见了爱情 这句话是什么意思

2023-03-25

全球快播:郏怎么读

2023-03-25

目瞪口噤_全球快看点

2023-03-25

卡萨帝CR7燃气热水器:这么多黑科技的加持,也太出色的性能了吧!-天天新资讯

2023-03-25

剑南春董事长被判5年,罚款4亿元

2023-03-25

求gl盗墓类小说类似探虚陵的-环球快消息

2023-03-25

大宗交易:机构账户卖出金种子酒529.66万元(03-24)

2023-03-25

环球播报:柴桑大姐透露了五个消息,有一个消息让我眼里噙满泪水

2023-03-25

安英蓝海集团多少员工_安英蓝海集团

2023-03-25

放心买,安心退!江苏发布全国首个线下无理由退货省级标准

2023-03-24

桂林三里店社区最大的开放式老旧小区即将完成改造_天天速讯

2023-03-24

每日快报!钱塘江观潮地点在哪里

2023-03-24

日用品厂家直销一手货源网站有哪些_世界看点

2023-03-24

全球头条:美团2022年营收2200亿元同比增长23% 净利润28亿元

2023-03-24

以案说法丨快递丢失后下载APP可退赔?陷阱! 焦点观察

2023-03-24

世界时讯:微信怎么写文章,可以转发的那种_微信如何转发文章

2023-03-24

电影《长空之王》发布国风版海报 每日聚焦

2023-03-24

今日快看!石家庄市里有什么好玩的地方

2023-03-24

焦点要闻:莱茵河多瑙河地图_莱茵河

2023-03-24

速递!get√多一点·膳食篇① | 春季多吃这四样,让你身体更健康

2023-03-24

3月机票预订相较2019年增长明显 旅游城市“淡季不淡”-世界今热点

2023-03-24

环球热讯:内蒙古成立“老兵宣讲团”131个

2023-03-24

懿怎么读音(懿字怎么读)

2023-03-24

全球今头条!南京五月有什么花_五月有什么花

2023-03-24

智能网联汽车发生事故谁赔偿有答案了!江苏地方立法草案公开征求意见

2023-03-23

数字赋能 科技兴农 “田间地头”奏响农业高质量发展“春之曲”

2023-03-23

环球快报:凯里市税务局:个税汇算优先办 便民春风送温暖

2023-03-23

武磊数据:3次射门&被犯规2次,4次地面对抗赢得3次|世界球精选

2023-03-23

全球最新:海外new things | 新加坡锂电池回收技术初创「Green Li-ion」Pre-B轮融资2050万美元,计划扩大回收设备的生产规模

2023-03-23

管鲍之交文言文原文

2023-03-23

世界微头条丨恒铭达:将于3月30日下午采用网络远程方式举行2022年度业绩说明会

2023-03-23

工业灯塔十城行·深圳|中国(深圳)综研院副院长郭万达:“企业+市场”是深圳制造业创新之道-每日看点

2023-03-23

智驾能力堪比老司机,阿维塔11单电机版上市前就火了一把 世界速看

2023-03-23

北京西城为125名区管干部举办荣誉退休仪式 每日焦点

2023-03-23

即时焦点:酒鬼酒:3月22日融资买入6361.21万元,融资融券余额17.79亿元

2023-03-23

天天快消息!曝曼联收购案截止日再推迟 卡塔尔财团未提交新报价

2023-03-23

有哪些可以搜索企业名录的软件 环球快消息

2023-03-23

武冈市气象局发布雷雨大风蓝色预警【Ⅳ级/一般】

2023-03-23

每日看点!合肥市临泉路第二小学图片_合肥市临泉路第二小学

2023-03-22

枞阳县狮峰山物业管理有限责任公司_关于枞阳县狮峰山物业管理有限责任公司简述|焦点速看

2023-03-22

今日快讯:四时田园杂兴其三十一的诗意

2023-03-22

2023黄山纪念币银行预约时间及方式(四川地区)-世界实时

2023-03-22

为什么电脑上安装不了王者荣耀(为什么电脑版的王者荣耀安装不了)

2023-03-22

三友联众:继电器生产的原材料占产品成本较大比例 全球看热讯

2023-03-22

gd 10086 cnm_gd 10086 cn

2023-03-22

中天科技管理层水平欠佳?分拆出尔反尔或暴露其业务短板

2023-03-22

环球快资讯:隔夜美股 | 耶伦讲话提振市场信心 三大指数上涨

2023-03-22

3月22日生意社聚合氯化铝基准价为1877.50元/吨

2023-03-22

当前动态:药学专业技术工作报告_专业技术工作报告

2023-03-22

日本是非移民国家吗?如何移民日本?_天天快播

2023-03-22

数字特殊符号1到50_数字特殊符号-环球速递

2023-03-21

52岁农行副行长张毅因工作需要辞职,担任该职位不到1年半

2023-03-21

短讯!涉案400余万元!江西永丰警方抓获3名利用POS机刷卡套现嫌犯

2023-03-21

银行旺季结束工作总结(精选8篇)_环球实时

2023-03-21

上海有医生感染禽流感死亡?是反复出现、反复被澄清的谣言-全球热闻

2023-03-21

腐竹怎么泡快点_腐竹怎么泡才快 最新资讯

2023-03-21

如何自制减肥茶_自制减肥茶步骤 世界讯息

2023-03-21

勇士的信仰怎么双转职|快看点

2023-03-21

大街南站举办高血压中医讲座

2023-03-21

环球实时:2023年3月20日山东省甲基丙烯酸异冰片酯价格最新行情预测

2023-03-20

新鲜天麻怎么晒干才不会空心?|世界焦点

2023-03-20

上海期货交易所3月20日镍仓单下跌

2023-03-20

如何稀释溶液_稀释溶液的方法

2023-03-20

23津渤海SCP006今日发布发行公告|世界百事通

2023-03-20

蓝帆医疗董秘回复:依托蓝帆医疗全球科创总部及产业化基地项目,建成后将成为医疗领域人才和技术的聚集和发展中心

2023-03-20

燃烧的橡树:存文学中短篇小说选_关于燃烧的橡树:存文学中短篇小说选介绍

2023-03-20

甘肃白银:老工业基地奔向创新之城

2023-03-20

里弗斯打趣赛程:飞回去打1个主场就4连客 我们只是回家洗个衣服 世界观天下

2023-03-19

天天快资讯:乏力腹胀皮肤发黄 赶紧看医生

2023-03-19

我爱你三千遍英文歌词_我爱你吗歌词 天天播报

2023-03-19

SpringBoot人脸识别登录注册,附源码

2023-03-19

打造环虹口足球场文化消费圈 “2023樱to生活节”开幕

2023-03-19

全球今头条!appreciate的用法以及常见词组_appreciate可用作形容词吗

2023-03-19

连环画在线看免费_连环画在线|当前消息

2023-03-18

申购中签是什么意思

2023-03-18

冠县贾镇:市民热线解民忧尽心尽力办实事 热资讯

2023-03-18

省十四届人大常委会第一次会议闭幕-天天新消息

2023-03-18

19届三中全会召开时间和地点_19届三中全会召开时间 新视野

2023-03-18

全球热推荐:盘古路

2023-03-18

青岛西海岸新区杨家山里花海观赏指南(时间+交通)

2023-03-18

方大特钢: 方大特钢2022年年度利润分配预案公告

2023-03-17

WTT新加坡大满贯 | 马龙、王楚钦强势挺进四强 热闻

2023-03-17

广西百色田林县周六产假几天?

2023-03-17

焦点热文:浙江湖州长兴县泗安镇进一步提升食品安全社会共治水平

2023-03-17

为1100万 母校给肄业生上了最后一课 网友:占了法理失了温情 世界看热讯

2023-03-17

科瑞思:深耕研发奠定成长基石,磁性元器件绕线龙头开启新股申购|环球信息

2023-03-17

环球快报:构思筛选_关于构思筛选简述

2023-03-17

全球百事通!测控技术与仪器专业考研方向学校排名_测控技术与仪器专业考研方向

2023-03-17

最新资讯:朱俊华在督查重点项目工作时强调 破难攻坚抓项目 全力以赴促发展

2023-03-16

昆山台企勇迎挑战韧性足|焦点讯息

2023-03-16

值得思考!北京85-94被深圳逆转,冠军班底是否该“翻篇”? 当前讯息

2023-03-16

大动作招商强磁场吸金 “营”家金昌用诚意换成绩

2023-03-16

环球微动态丨“专精特新”企业思明堂,深耕儿童弱视等视功能训练

2023-03-16

全球即时:西安财经大学是一本还是二本大学是几本在全国排名多少名

2023-03-16

当前头条:预付式消费如何“避坑”?

2023-03-16

天天看热讯:德国柏林发生枪击案 造成至少两人受伤

2023-03-16

2019年五一到底放几天假_2019年五一放几天假

2023-03-16

瑞金市开展“扫黄打非”宣传活动

2023-03-15

我们该如何正确饮酒_如何正确的健康的饮酒 环球通讯

2023-03-15

环球关注:loadAD(1403); moveAD("ad-01"); 首页 资讯 新品 技术 市场 报告 财经 视点 访谈 专题 文库 视频 会展 求职 招聘 培训 商城 在线研讨会

2023-03-15

“归来”与“出发” 在双向奔赴中链接全球

2023-03-15

武汉大学樱花盛放 花开浪漫满校园 全球速看料

2023-03-15

金螳螂董秘回复:公司将不断开拓市场,并且会向EPC、医疗等方向发力-看热讯

2023-03-15

西芹怎么炒_炒西芹的做法

2023-03-15

环球观热点:角鲨烯哪个牌子好

2023-03-15

手上的大动脉在哪里_手上的动脉在哪-当前热点

2023-03-15

河南襄城县志愿者用夹子捡玻璃碎片被质疑作秀 组织者回应-天天新动态

2023-03-14

浙江东日: 浙江东日股份有限公司第九届董事会第十四次会议决议公告

2023-03-14

三友联众:2023年家电大概率会回暖,但目前不是很明朗_每日热点

2023-03-14

每日看点!手握开放麦,生活是最后和最真的舞台

2023-03-14

当前速递!山东雄富土木工程有限公司

2023-03-14

思维导图法记单词_思维导图法

2023-03-14

德琪医药-B(06996):ATG-022用于治疗晚期及转移性实体瘤的I期CLINCH研究申请在中国获批

2023-03-14

海虹的做法蒸几分钟可以吃_海虹的做法 全球新视野

2023-03-14

【成语漫话世界】利欲熏心-天天新要闻

2023-03-13

当前热议!绵阳交通发展集团“80后”总经理王彬力被查,长期在国企工作

2023-03-13

全球播报:教育部、中消协提示:校外培训有风险,报班需谨慎

2023-03-13

原发性肝癌介入治疗是什么意思_肝癌介入治疗是什么意思

2023-03-13

世界聚焦:2023年北京玉渊潭早樱什么时候开花?在哪里?

2023-03-13

不良人:漠北岐国谈判是李星云和张子凡做的局?导演回应了

2023-03-13

天天要闻:国联证券给予宁德时代买入评级,22年业绩符合预期,动力储能双线发力

2023-03-13

环球观天下!阳了应该怎么办-阳性感染者如何用药 03月13日00时安徽六安疫情数据

2023-03-13

真有狐仙吗?揭开狐仙的终极秘密_狐仙真的存在

2023-03-12

【联锁对抗S10预赛】优秀作战记录分享 世界短讯

2023-03-12

进贤县气象台更新大风黄色预警信号【III级/较重】【2023-03-12】

2023-03-12

世界快讯:学历“围城”如何打破?

2023-03-12

英超主客场进球均上双,哈兰德为阿圭罗后曼城第二人 世界热议

2023-03-12

这些笔记本适用人群:世界上最挑剔的人!_全球信息

2023-03-11

3 月 11 日起,广州南站往返香港西九龙站列车增至 28 趟

2023-03-11

社区里来了“法律智囊团”_全球滚动

2023-03-11

岳云鹏电影燕子叫啥名_岳云鹏燕子什么梗出自哪部电影

2023-03-11

世界百事通!红米饭南瓜汤歌词_红米饭南瓜汤歌词介绍

2023-03-11

中国蜂产品协会

2023-03-11

信安世纪:融资净买入196.59万元,融资余额4661.58万元(03-10)|天天短讯

2023-03-11

海客瀛洲连云港_海客瀛洲

2023-03-11

数据有效性怎么设置下拉选项_数据有效性怎么设置下拉菜单

2023-03-10

记者:球迷组织红魔联竞购曼联,资金来自球迷资助和私人投资

2023-03-10

全球微速讯:陈澄代表——推动国防动员和后备力量建设高质量发展

2023-03-10

全球消息!幻象染料的制作方法_幻象染料在哪买

2023-03-10

湖北广电(000665)3月10日主力资金净卖出3533.98万元_每日速读

2023-03-10

长城证券手机版炼金术2.00_长城证券手机版_全球快播报

2023-03-10

罗志祥生日

2023-03-10

罗牛山:拟向特定对象发行股票的相关事宜正在推进中 每日热议

2023-03-10

每日热门:中文学习的难与乐(来华留学生讲中国故事)

2023-03-10

图文店铺装修_图文店装修图片 今日热议

2023-03-10

睡前小动作长高10厘米_什么动作可以在睡前长高10厘米

2023-03-10

12万的雪铁龙C6,谁爱买谁买。 天天要闻

2023-03-10

前沿热点:平潭岛蓝眼泪_平潭岛

2023-03-09

景逸论坛动力提升颜哥_景逸论坛 世界聚看点

2023-03-09

波轮洗衣机怎么清洗污垢 环球新动态

2023-03-09

天天快资讯丨据《布鲁塞尔时报》3月9日报道,比利时通讯社最新公布数据显示,比利时目前一个鸡蛋的平均价格为16.37欧分,与上周相比价格上涨了3%,而去年同期为7欧分

2023-03-09

每日时讯!南阳市人才引进补贴线上申请入口

2023-03-09

我的世界虎牙战神_直播虎牙我的世界 每日观察

2023-03-09

缯读音_缯

2023-03-09

明日方舟不同国家的特色 游戏多开切换IP方法_今日视点

2023-03-09

钱塘江大潮的相关资料五十字_钱塘江大潮资料50字 今热点

2023-03-09

单位集资房属于什么类型的房子

2023-03-09

半场-维蒂尼亚失空门马尔基尼奥斯伤退 拜仁0-0暂平巴黎

2023-03-09

环球速讯:守望先锋客服人工服务_守望先锋客服

2023-03-09

稻草人好词好句摘抄赏析_稻草人好词好句摘抄-全球今日报

2023-03-09

简讯:手机桌面皮肤(桌面皮肤)

2023-03-08

小高层和高层的区别多层_小高层和高层的区别_天天热点

2023-03-08

消息人士:比亚迪计划在中国、欧洲和日本推出商用车_每日热闻

2023-03-08

待我长发齐腰什么意思

2023-03-08

天天视讯!3月8日安庆吉港白鳍豚水泥价格动态

2023-03-08

数位联合电信_关于数位联合电信简介|今日报

2023-03-08

实时:射击之星

2023-03-08

科技与豪华兼具,魏牌蓝山内饰官图发布-当前热门

2023-03-08

曹襄|焦点关注

2023-03-08

百思买的视频游戏销售是构建新索尼PS5或Xbox Series X库的简便方法

2023-03-08

眼角膜的价格多少钱一个_眼角膜的价格 当前消息

2023-03-08

假如爱有天意歌词

2023-03-08

眼底内科和外科的区别_肿瘤内科与外科的区别

2023-03-08

惯性矩的单位 全球新视野

2023-03-07

天天热消息:当日快讯:路维光电:目前掩膜版价格较为稳定

2023-03-07

【环球热闻】shower什么意思

2023-03-07

春天天气很“任性” 合肥气温即将“过山车” 速讯

2023-03-07

绝对力量名词解释_绝对力量

2023-03-07

当前简讯:延庆生活网

2023-03-07

长春市九台区气象局发布沙尘蓝色预警【IV级/一般】【2023-03-07】

2023-03-07

湖南图书馆

2023-03-07

全球百事通!湖南社保局电话号码_湖南社保局

2023-03-07

信息:印度本财年上半年小麦出口金额增加一倍多

2023-03-07

触舰复飞 环球精选

2023-03-07

丰田bZ3的尴尬:能奔着比亚迪三电去买它,为啥不买原装比亚迪?-视点

2023-03-07

java 3d

2023-03-07

推销基建法案不忘提高铁 这是怎么一回事?-环球信息

2023-03-07