携程Apollo配置中心架构介绍

85 篇文章 6 订阅
订阅专栏
47 篇文章 4 订阅
订阅专栏
15 篇文章 2 订阅
订阅专栏

俗话说”麻雀虽小,五脏俱全“,有人说想看开源源码却不知道什么好,事实上,那些流行多年,广受好评的开源工程都是很值得一读的。今天我们介绍Apollo配置中心的基本情况,之所以介绍这个,主要是因为公司里用的配置中心就是这个,最近要做一次技术分享, 所以就调研了一下发现很多设计非常简介高效,值得学习,这里整理几个最重要的内容。

目录

1.介绍

1.1 介绍

1.2 架构演进

1.2.1 Apollo架构V1

1.2.2 Apollo架构V2

1.2.3 Apollo架构V3

1.2.4 Apollo架构V4

1.2.5 Apollo架构V5

1.3 主要模块

1.3.1 四个核心模块

1.3.2 三个辅助服务发现模块

1.4 核心工作流程

2. 消息推送流程

2.1 发送ReleaseMessage的实现方式

2.2 Config Service通知客户端的实现方式

2.3 客户端设计

参考文献


1.介绍

1.1 介绍

Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

Apollo目前在国内开发者社区比较热,在Github上有超过5k颗星,在国内众多互联网公司有落地案例,可以说Apollo是目前配置中心产品领域Number1的产品,其成熟度和企业级特性要远远强于Spring Cloud体系中的Spring Cloud Config产品。

Apollo的整体流程如下:

  1. 用户在配置中心对配置进行修改并发布

  2. 配置中心通知Apollo客户端有配置更新

  3. Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用

1.2 架构演进

1.2.1 Apollo架构V1

如果不考虑分布式微服务架构中的服务发现问题,Apollo的最简架构如下图所示:

Apollo V1架构

要点:

  1. ConfigService是一个独立的微服务,服务于Client进行配置获取。

  2. Client和ConfigService保持长连接,通过一种推拉结合(push & pull)的模式,在实现配置实时更新的同时,保证配置更新不丢失。

  3. AdminService是一个独立的微服务,服务于Portal进行配置管理。Portal通过调用AdminService进行配置管理和发布。

  4. ConfigService和AdminService共享ConfigDB,ConfigDB中存放项目在某个环境中的配置信息。ConfigService/AdminService/ConfigDB三者在每个环境(DEV/FAT/UAT/PRO)中都要部署一份。

  5. Protal有一个独立的PortalDB,存放用户权限、项目和配置的元数据信息。Protal只需部署一份,它可以管理多套环境。

1.2.2 Apollo架构V2

为了保证高可用,ConfigService和AdminService都是无状态以集群方式部署的,这个时候就存在一个服务发现问题:Client怎么找到ConfigService?Portal怎么找到AdminService?为了解决这个问题,Apollo在其架构中引入了Eureka服务注册中心组件,实现微服务间的服务注册和发现,更新后的架构如下图所示:

要点:

  1. Config/AdminService启动后都会注册到Eureka服务注册中心,并定期发送保活心跳。

  2. Eureka采用集群方式部署,使用分布式一致性协议保证每个实例的状态最终一致。

1.2.3 Apollo架构V3

我们知道Eureka是自带服务发现的Java客户端的,如果Apollo只支持Java客户端接入,不支持其它语言客户端接入的话,那么Client和Portal只需要引入Eureka的Java客户端,就可以实现服务发现功能。发现目标服务后,通过客户端软负载(SLB,例如Ribbon)就可以路由到目标服务实例。这是一个经典的微服务架构,基于Eureka实现服务注册发现+客户端Ribbon配合实现软路由,如下图所示:

1.2.4 Apollo架构V4

在携程,应用场景不仅有Java,还有很多遗留的.Net应用。Apollo的作者也考虑到开源到社区以后,很多客户应用是非Java的。但是Eureka(包括Ribbon软负载)原生仅支持Java客户端,如果要为多语言开发Eureka/Ribbon客户端,这个工作量很大也不可控。为此,Apollo的作者引入了MetaServer这个角色,它其实是一个Eureka的Proxy,将Eureka的服务发现接口以更简单明确的HTTP接口的形式暴露出来,方便Client/Protal通过简单的HTTPClient就可以查询到Config/AdminService的地址列表。获取到服务实例地址列表之后,再以简单的客户端软负载(Client SLB)策略路由定位到目标实例,并发起调用。

现在还有一个问题,MetaServer本身也是无状态以集群方式部署的,那么Client/Protal该如何发现MetaServer呢?一种传统的做法是借助硬件或者软件负载均衡器,例如在携程采用的是扩展后的NginxLB(也称Software Load Balancer),由运维为MetaServer集群配置一个域名,指向NginxLB集群,NginxLB再对MetaServer进行负载均衡和流量转发。Client/Portal通过域名+NginxLB间接访问MetaServer集群。

引入MetaServer和NginxLB之后的架构如下图所示:

1.2.5 Apollo架构V5

V4版本已经是比较完整的Apollo架构全貌,现在还剩下最后一个环节:Portal也是无状态以集群方式部署的,用户如何发现和访问Portal?答案也是简单的传统做法,用户通过域名+NginxLB间接访问Portal集群。

所以V5版本是包括用户端的最终的Apollo架构全貌,如下图所示:

1.3 主要模块

1.3.1 四个核心模块

下面是Apollo的七个模块,其中四个模块是和功能相关的核心模块,另外三个模块是辅助服务发现的模块:

  1. ConfigService

    • 提供配置获取接口

    • 提供配置推送接口

    • 服务于Apollo客户端

  2. AdminService

    • 提供配置管理接口

    • 提供配置修改发布接口

    • 服务于管理界面Portal

  3. Client

    • 为应用获取配置,支持实时更新

    • 通过MetaServer获取ConfigService的服务列表

    • 使用客户端软负载SLB方式调用ConfigService

  4. Portal

    • 配置管理界面

    • 通过MetaServer获取AdminService的服务列表

    • 使用客户端软负载SLB方式调用AdminService

    • 基于Angular做的

1.3.2 三个辅助服务发现模块

  1. Eureka

    • 用于服务发现和注册

    • Config/AdminService注册实例并定期报心跳

    • 和ConfigService住在一起部署

  2. MetaServer

    • 主要用于跨语言支持

    • Portal通过域名访问MetaServer获取AdminService的地址列表

    • Client通过域名访问MetaServer获取ConfigService的地址列表

    • 逻辑角色,和ConfigService住在一起部署

  3. NginxLB

    • 也主要针对跨语言支持的

    • 和域名系统配合,协助Portal访问MetaServer获取AdminService地址列表

    • 和域名系统配合,协助Client访问MetaServer获取ConfigService地址列表

    • 和域名系统配合,协助用户访问Portal进行配置管理

1.4 核心工作流程

官网有比较明确的说明,详细参考 Apollo

核心是:Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试。

2. 消息推送流程

在配置中心中,最重要的功能就是配置发布后实时推送到客户端。下面我们简要看一下这块是怎么设计实现的。

  上图简要描述了配置发布的大致过程:

  1. 用户在Portal操作配置发布

  2. Portal调用Admin Service的接口操作发布

  3. Admin Service发布配置后,发送ReleaseMessage给各个Config Service

  4. Config Service收到ReleaseMessage后,通知对应的客户端

2.1 发送ReleaseMessage的实现方式

Admin Service在配置发布后,需要通知所有的Config Service有配置发布,从而Config Service可以通知对应的客户端来拉取最新的配置。

从概念上来看,这是一个典型的消息使用场景,Admin Service作为producer发出消息,各个Config Service作为consumer消费消息。通过一个消息组件(Message Queue)就能很好的实现Admin Service和Config Service的解耦。

在实现上,考虑到Apollo的实际使用场景,以及为了尽可能减少外部依赖,没有采用外部的消息中间件,而是通过数据库实现了一个简单的消息队列。

这个工作过程就是一侧负责插入数据到DB,然后几个客户端定时扫描表,如果找到自己要处理的类型,就启动执行。具体实现方式如下:

  1. Admin Service在配置发布后会往ReleaseMessage表插入一条消息记录,消息内容就是配置发布的AppId+Cluster+Namespace,参见DatabaseMessageSender

  2. Config Service有一个线程会每秒扫描一次ReleaseMessage表,看看是否有新的消息记录,参见ReleaseMessageScanner。

  3. Config Service如果发现有新的消息记录,那么就会通知到所有的消息监听器ReleaseMessageListener,例如NotificationControllerV2,消息监听器的注册过程参见ConfigServiceAutoConfiguration

  4. NotificationControllerV2得到配置发布的AppId+Cluster+Namespace后,会通知对应的客户端。

2.2 Config Service通知客户端的实现方式

上一节中简要描述了NotificationControllerV2是如何得知有配置发布的,那NotificationControllerV2在得知有配置发布后是如何通知到客户端的呢?

实现方式如下:

  1. 客户端会发起一个Http请求到NotificationControllerV2

  2. NotificationControllerV2不会立即返回结果,而是通过Spring DeferredResult把请求挂起。

  3. 如果在60秒内没有该客户端关心的配置发布,那么会返回Http状态码304给客户端。

  4. 如果有该客户端关心的配置发布,NotificationControllerV2会调用DeferredResult的setResult方法,传入有配置变化的namespace信息,同时该请求会立即返回。客户端从返回的结果中获取到配置变化的namespace后,会立即请求Config Service获取该namespace的最新配置。

2.3 客户端设计

 上图简要描述了Apollo客户端的实现原理:

  1. 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。(通过Http Long Polling实现)

  2. 客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。

    • 这是一个fallback机制,为了防止推送机制失效导致配置不更新

    • 客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified

    • 定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: apollo.refreshInterval来覆盖,单位为分钟。

  3. 客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中

  4. 客户端会把从服务端获取到的配置在本地文件系统缓存一份。在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置

  5. 应用程序可以从Apollo客户端获取最新的配置、订阅配置更新通知

参考文献

Apollo

Apollo 程框架 开源配置
java_2017_csdn的博客
01-08 360
Apollo(阿波罗)是程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
Apollo统一配置中心的搭建和使用(java)
K宝的博客
04-21 921
https://blog.csdn.net/luhong327/article/details/81453001#commentBox 一.Apollo配置中心介绍 1、What is Apollo 1.1Apollo简介 Apollo(阿波罗)是程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。...
程一面:分布式配置系统Apollo是如何实时更新配置的?
最新发布
2301_82243769的博客
04-17 611
这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!成功只会留给那些有准备的人!
Apollo配置中心架构剖析
summer_fish的专栏
08-01 1772
Apollo(阿波罗)是程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo目前在国内开发者社区比较热,在Github上有超过5k颗星,在国内众多互联网公司有落地案例,可以说Apollo是目前配置中心产品领域Number1的产品,其成熟度和企业级特性要远远强于SpringCloud体系中的SpringCloudConfig产品。...
由浅入深剖析 Apollo(阿波罗)架构
Clearlove_S7的博客
05-28 3265
Apollo(阿波罗)是程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo 目前在国内开发者社区比较热,在Github上有超过 5k 颗星,在国内众多互联网公司有落地案例,可以说 Apollo 是目前配置中心产品领域 Number1 的产品,其成熟度和企业级特性要远远强于 Spring Cloud 体系中的 Spring Cloud Config 产品。
Apollo配置中心架构深度剖析
01-27
Apollo(阿波罗)[参考附录]是程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于...
apollo配置中心spi实现代码.zip
02-20
apollo配置中心spi实现代码.zip apollo配置中心spi实现,配置文件位置等的修改
Apollo配置中心软件安装包
09-27
apollo配置中心软件安装包,一键解压配置安装。linux, windows, zip,官网原版,部署架构,适配springboot,cloud微服务配置中心安装包
Springboot项目如何使用apollo配置中心
08-25
主要介绍了Springboot项目如何使用apollo配置中心,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Nacos 的强大对手!!apollo 程 莫属!!
艾利克斯冰的博客
01-25 899
请关注“IT技术馆”公众号,进行关注,馆长会每天更新资源和更新技术文章等。馆长准备了很多学习资料,其中包含。
想要学习程的Apollo框架?这篇绝对够了!
镜悬xhs
02-02 1242
​最近的工作,需要基于Apollo做一套可以支持实时修改系统配置信息的参数校验框架。 Apollo的源码不久前曾经研究过,不过那时候写的笔记不知道放到哪了。因此,今天写篇文章,记录下Apollo的源码和相关核心逻辑。 1. 依赖包引入 <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>red-apollo-client</artifactI...
Apollo微服务配置中心详解
热门推荐
Dbh321的博客
06-30 2万+
Apollo(阿波罗)是程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。。。。。
apollo配置中心—概述
weixin_37636101的博客
09-18 875
官方介绍:        Apollo(阿波罗)是程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。 Java客户端不依赖任何框架,能够运行于所有J...
我们放弃了Nacos作为配置中心,转而选择了这款神器~
公众号-老炮说Java
01-30 76
目前,我们所有微服务的配置中心都没有采用Nacos,而是选择了另一款程开源的分布式配置中心Apollo,今天就跟大家详细介绍一下这款神级配置中心1. 基本概念由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用。1.1、背景随着程序功能的日益复杂,程序的配置日益增多,各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越高,配置修改后实时生效,灰...
Apollo(阿波罗)程开源配置管理中心
weixin_30575309的博客
08-03 99
一、背景 最近公司订单中心重构,利用spring boot集成apollo配置中心,因此学习一下apollo配置中心 因为如今程序功能越来越复杂,程序的配置日益增多:各种功能的开关、参数配置、服务器地址、数据库链接等对于配置的期望值越来越高:配置修改后实时生效、灰度发布、分环境、分集群管理配置、完善的权限、审核机制等。 所以传统的配置文件越来越无法满足开发人员的需求。所以就有了apollo...
程阿波罗apollo学习
chongzhusong1067的博客
07-29 381
一、总结: 1.管理:应用管理、命名空间管理、部门管理、用户管理、角色管理、权限管理、审计管理 2.数据结构:应用、元素item、元素变更记录、元素发布记录、元素灰度规则(临时命名空间) 1.使用:配置服务器地址、配置本地缓存地址,配置环境evn、配置集群、配置appid 2.使用配置...
Apollo原理
art_code的博客
11-20 2405
Apollo原理 https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E8%AE%BE%E8%AE%A1 提交就是 提交给客户端 刷新最新值到缓存 上图简要描述了Apollo客户端的实现原理: 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的...
apollo配置中心面试题
08-18
以下是一些关于Apollo配置中心的可能面试题: 1. 什么是Apollo配置中心? 2. Apollo配置中心的主要功能是什么? 3. Apollo配置中心如何实现配置的动态更新? 4. Apollo配置中心架构是怎样的? 5. 请解释一下Apollo配置中心的命名空间(Namespace)的概念和作用。 6. Apollo配置中心如何保证配置的一致性和可靠性? 7. Apollo配置中心支持哪些语言和框架? 8. 请描述一下在使用Apollo配置中心时的开发流程。 9. Apollo配置中心的优势和适用场景是什么? 10. 你有没有在项目中使用过Apollo配置中心?可以分享一下你的经验吗? 这些问题旨在了解应聘者对Apollo配置中心的理解和熟悉程度,以及他们在实际项目中的应用经验。当然,实际的面试题可能会根据具体的岗位要求和面试官的关注点有所不同。

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

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

热门文章

  • 程序员专属浪漫:如何用java代码画❤️ 40561
  • Linux C编程下没有 itoa()函数的问题 38485
  • Ubuntu在vmware虚拟机无法上网的解决方法 37118
  • nacos-server配置中心连接数据库失败的解决方法 31361
  • 色度抽样(4:2:0)到底是什么意思? 31259

分类专栏

  • spring家族 7篇
  • 一个项目征服Java 47篇
  • HTTP与Tomcat 18篇
  • 程序人生 4篇
  • 精通redis 15篇
  • JavaEE 85篇
  • 算法从0到神 1篇
  • 算法 187篇
  • JVM 10篇
  • java基本功 15篇
  • python 9篇
  • kafka 1篇
  • Zookeeper 3篇
  • 多线程与高并发 32篇
  • 云原生 1篇
  • SpringCloud
  • pythn
  • go 2篇
  • 杂七杂八 19篇
  • 图像处理与检索 4篇
  • Linux研究 27篇
  • 学习心得与计算机哲学 16篇
  • 视频处理 9篇
  • C/C++编程 18篇
  • QT5编程 6篇
  • live555研究 1篇
  • 嵌入式技术 1篇
  • H.265/HEVC 4篇
  • 重返狼群-面试笔记 2篇
  • 重返狼群

最新评论

  • 【redis13】集群前奏:sentinel模式

    CSDN-Ada助手: 恭喜你这篇博客进入【CSDN每天值得看】榜单,全部的排名请看 https://bbs.csdn.net/topics/617972531。

  • 递归与回溯4:一文彻底理解回溯

    小铺d_d: 我是这样理解的,比如说你想1234取3位,最外一层for循环实际控制的是进入递归的位置,一开始选择1进入递归,下一次再进入递归选2,再递归一次选3,满足条件return,返回的地方是dfs下面的那个执行函数remove,因为remove,所以 1 2 3变成了 1 2 (path是全局变量,这也是在if语句那里为什么ans添加的是path的副本而不是path),退了一层后,继续判断当前层, i++,之后变成 1 2 4,变成1 2 4之后呢,在返回到remove的地方,因为 变成 1 2 ,然后再退变成了1(这里我理解的是,他要回到最开始进入递归的地方,也就是1),然后for循环再控制下一个递归的起始位置也就是2。 总而言之,for循环控制一个数进入递归,选择完包含这个数的所有情况后,还会退回到这个数的位置,然后,i++选择下一个数

  • 递归与回溯4:一文彻底理解回溯

    xtx212851795150: 还 是 不 懂表情包

  • 经典递归问题:青蛙跳台阶,跳1个,2个或者3个

    struggleforlifee: 我也没想明白

  • cms.pod around line 457: Expected text after =item, not a number 的解决方法

    都不吃大白菜: 也可以将make install 替换为 make install_sw 安装openssl但不带man页面

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 年报—当你还在犹豫不决的时候,别人已经走了很远了
  • 【SpringBoot5】SpringBoot如何找到我们写的类的
  • 【SpringBoot4】如何理解SpringBoot的约定大于配置
2024
02月 8篇
01月 39篇
2023年6篇
2022年98篇
2021年219篇
2020年15篇
2019年5篇
2018年7篇
2017年3篇
2016年40篇
2015年6篇
2014年19篇
2013年6篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵横千里,捭阖四方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司通化网站优化推广塘坑阿里店铺托管多少钱同乐网站优化多少钱定西网站搜索优化宿州建设网站报价三明关键词排名哪家好那曲网站优化排名哪家好滨州模板网站建设哪家好丹竹头网站推广方案推荐郑州网站定制推荐海南模板网站建设报价景德镇百姓网标王公司迁安网页设计多少钱龙岩英文网站建设报价西乡百度竞价包年推广达州网站优化推广公司昌都网站制作设计多少钱蚌埠关键词按天收费价格陇南外贸网站设计公司延边百度爱采购多少钱益阳百度seo推荐郴州百度标王推荐襄阳网络广告推广多少钱榆林优化价格太原网站优化按天计费推荐临猗网站seo优化报价宝安网络推广哪家好南山建站哪家好衡阳百姓网标王推广公司抚顺设计公司网站推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化