网页制作与网站建设课堂实录,网站改版建议策划书,网站建设教学廊坊,中国建设工程造价网站背景说明#xff1a;
ES高性能全文索引#xff0c;如果不会用#xff0c;或者没有用过#xff0c;在面试中#xff0c;会非常吃亏。
所以ES的实操和底层原理#xff0c;大家要好好准备。
另外#xff0c;ES调优是一个非常、非常核心的面试知识点#xff0c;大家要非…背景说明
ES高性能全文索引如果不会用或者没有用过在面试中会非常吃亏。
所以ES的实操和底层原理大家要好好准备。
另外ES调优是一个非常、非常核心的面试知识点大家要非常重视。
在40岁老架构师 尼恩的读者交流群(50)中其ES相关面试题是一个非常、非常高频的交流话题。
近段时间有小伙伴面试极兔说遇到一个ES 海量数据 调优的面试题 ES在承载海量数据在查询时会存在什么问题如何优化 社群中还遇到过大概的变种 形式110亿级 ES 索引单次查询在5-10s要调优10倍怎么办 形式2ES 海量索引单次查询速度太慢如何调优 形式3ES 在数据量很大的情况下数十亿级别如何提高查询效率 形式4后面的变种应该有很多变种…具体可以在尼恩社群交流。 这里对这个面试题系列尼恩给大家 做一下系统化、体系化的梳理使得大家可以充分展示一下大家雄厚的 “技术肌肉”
让面试官爱到 “不能自已、口水直流”。
同时也一并把这个 题目以及参考答案收入咱们的《尼恩Java面试宝典》 V48版供后面的小伙伴参考提升大家的 3高 架构、设计、开发水平实现技术自由。 注本文以 PDF 持续更新最新尼恩 架构笔记、面试题 的PDF文件请从这里获取码云 首先说一下自己对ES性能的认识
首先可以说明一下自己的使用经验ES 性能并没有想象中那么好的。
下面是一个权威数据腾讯云的ES集群性能数据3个节点性能测试吞吐量中位数 50qps。 ES集群吞吐量的测试数据
参见Elasticsearch Service 8核32G 3节点集群性能测试 - 产品简介 - 文档中心 - 腾讯云 (tencent.com)
所以很多时候ES数据量大了特别是有几亿条数据的时候实际上性能很差。
在这事上尼恩就有切实体会。
在2017、2018年左右尼恩维护一个30个节点的集群架构亿级文档。 数据规模大概1亿doc 1TB的容量。
在那个集群上有的慢搜索最长rt在5-10s。
你可能会蒙 怎么那么久 5~10s
记得当时候17年的时候尼恩为30个节点的es集群做优化吞吐量 从 5qps 优化到 100qps 竟然耗费了1个月
当然最终尼恩借用秒杀理论搞定 并发场景的 性能问题实现了 在 瞬间高并发 流量1W用户同时访问的情况下用户的rt在2秒以内 特别说明尼恩的秒杀不是一般的秒杀至少抽取了3个大型项目的工业实操具体请参考尼恩的秒杀架构。 总之ES 性能优化是一个很大的难题。
在解决的时候不要期待着随手调一个参数、两个参数就可以万能的应对所有的性能慢的场景。
解决这个问题要系统化、体系化、全面化思考。
那么要做到数十亿数据查询毫秒级响应有哪些措施呢
措施一调大内存缓存越大越好
调大内存缓存越大越好主要指的是Filesystem Cache越大越好。 ES的内存在构成上比较复杂具体请参考 尼恩3高笔记中的Data Node 内存溢出的快速恢复方案 为啥要调大Filesystem Cache呢
ES查询的时候会有大量的mmap操作在mmap操作的时候OS会将磁盘文件里的segment数据加载到 Filesystem Cache 缓存里面去。 完整Filesystem Cache 的内容请参见尼恩的葵花宝典对这部分难点内容的介绍非常系统和全面。 总之ES严重依赖于底层的 filesystem cache你如果给 filesystem cache 更多的内存尽量让内存可以容纳所有的 idx segment file 索引数据文件
那么在搜索的时候就基本都是走内存的性能会非常高。
具体来说性能差距究竟可以有多大
我们之前很多的测试和压测如果通过磁盘IO完成搜索一般秒级返回可能是1秒、5秒、10秒。
但如果是走 filesystem cache那么一般来说性能比走磁盘IO要快一个数量级基本上就是10ms、50ms、100ms、几百毫秒不等。
这里还可以给面试官说点真实的数据。
假设一套 es 节点有 3 台机器每台机器64G内存总内存就是 64 * 3 192G。
每台机器给 es jvm heap 是 32G留给 filesystem cache 是 32G
总共集群里给 filesystem cache 的就是 32 * 3 96G 内存。
而此时整个磁盘上索引数据文件假设在 3 台机器上一共占用了 1T 的磁盘容量es 数据量是 1T那么每台机器的数据量是 300G。
此时
filesystem cache 的内存才 100Ges 数据量是 1T
十分之一的数据可以放内存十分之9的数据在查询命中的时候需要进行临时的磁盘加载。
结论是十分之9的搜索操作性能在 秒级。
提升性能的策略是提升内存命中的比例两个思路
拼命调大内存。减少索引index 索引大小。
所以亿级索引、海量索引的调优措施之一简单来讲希望全部命中在内存而不是在磁盘。
或者说如果 缓存不了全部数据那就至少可以容纳你的总数据量的一半。
比如索引数据控制在 100G如果内存留给 filesystem cache 的是 100G这样的话数据几乎全部走内存来搜索性能非常之高一般可以在 1 秒以内。
问题是增大内存是高成本的措施很多公司不一定舍得这份投入。
怎么办
措施二缩容缩小index 索引 如果第一点做不到怎么办呢 没有必要在一个点死耗条条道路同罗马东方不亮西方亮。
增大内存搞不定的话可以逆向思考。就是减少索引index 索引大小。
目标就一个还是把索引加载到内存或者至少能加载一半。
比如有一行数据id,name,age … 30 个字段。而搜索的时候只需要根据 name,age 2个字段来搜索。
这样搜索的时候其余的28个字段是和搜索无关的占了90%以上。结果这部分搜索无关数据硬是占据了 es 机器上的 filesystem cache 的空间单条数据的数据量越大就会导致 filesystem cahce 能缓存的数据就越少。
所以优化的策略就是减少索引index 数据量。
仅仅写入 es 中要用来检索的少数几个字段就可以了比如说就写入id,name,age 三个字段。
那么问题来了在哪里存放全量数据呢
一般是建议用 es hbase 架构。es中保存hbase的key 根据key 去habse取全量数据。
hbase 的特点是适用于海量数据的在线存储就是对 hbase 可以写入海量数据但是不要做复杂的搜索。
当然在hbase中做很简单的一些根据 rowkey或者范围进行查询的这么一个操作就可以了。
用 es hbase 架构从 es 中根据 name 和 age 去搜索拿到的结果可能就 20 个 rowkey然后根据rowkeydoc id到 hbase 里去查询每个 doc id 对应的完整的数据给查出来再返回给前端。 关于完整 es hbase 架构, 非常重要也非常精彩是一个大大的简历亮点 关于这个实操尼恩后面会进行详细介绍具体请关注群消息。 优化的结果
然后你从 es 检索可能就花费 100ms然后再根据 es 返回的 id 去 hbase 里查询查 20 条数据可能也就耗费个 100ms
架构整改之前1T 数据都放 es会每次查询都是 5~10s架构整改之后现在可能性能就会很高每次查询就是 200ms。
结论性能提升50倍多。
措施三冷热分离 如果索引的数据量还是减不下来怎么办。 比如说无论怎么进行索引的瘦身无论怎么进行索引的缩容索引还是远大于内存。
比如索引瘦身之后还是有300G而 filesystem cache 只有100G索引大小远远大于内存大小怎么办
条条道路同罗马东方不亮西方办法总比问题多。 方法之一冷热分离 方式之2数据预热 方式之3… 怎么做冷热分离呢
冷数据将大量的访问很少、频率很低的数据单独写一个索引热数据将大量的访问很大、频率很高的数据单独写一个索引
目标还是一个搜索的时候进行内存IO而不是磁盘IO。 为啥磁盘IO慢请参见尼恩的葵花宝典。 这样可以确保热数据在被加载到filesystem os cache 之后.
怎么能保证冷索引不把热索引从内存寄出去呢
这个主要是 Linux 内核的 LRU内存淘汰算法导致的当系统内存不足时Memcached 和 Redis 都是使用 LRU算法 来淘汰内存的。 尼恩提示这里很容易出现连环炮面试题 内存淘汰算法 相关的试题。 LRULeast Recently Used 中文翻译是 最近最少使用 的意思其原理就是当内存不足时淘汰系统中最少使用的内存这样对系统性能的损耗是最小的。用过 Memcached 或者 Redis 的同学应该都了解过 LRU算法。 有关内存淘汰算法请看尼恩的 caffeine 底层源码和实操 里边介绍了lru、lfu、window-tiny-lfu三大内存淘汰算法非常细致。 足以秒晕面试官。 一般来说由于热数据频繁访问一般就会比较高的概率留在 filesystem os cache 里不会让冷数据给冲刷掉。
假设有 6 台机器2 个索引一个放冷数据一个放热数据每个索引 3 个 shard。
大量的时间是在访问热数据 index热数据可能就占总数据量的 10%此时数据量很少几乎全都驻留 filesystem cache 里面了就可以通过内存IO完成而不是磁盘IO从而实现性能优化。
少量的冷数据访问可能大量数据是在磁盘上的此时性能差点也无所谓了。
冷热分离之后保障了90%的请求在1s以内。
措施四数据预热 冷热分离之后如何确保热数据一直处于 filesystem cache 里 有效的措施是数据预热 怎么预热呢
简单的说就是提前访问一下让数据进入 filesystem cache 里面去。
复杂点的措施就是做一个专门的缓存预热子系统就是对热数据每隔一段时间访问一下让数据进入 filesystem cache 里面去。
那么那些是热点数据呢怎识别热点数据呢
比如电商秒杀你可以将平时查看最多的一些商品比如说 iphone 8可以提前访问一次刷到 filesystem cache 里去。搜索的时候直接从内存里搜索了没有走磁盘IO速度很快。
有些热点数据是可以提前预知的但是更多的热点数据不实时产生的的老天爷都不知道什么时候到了怎么办
这里涉及到 热点探测系统。
有了缓存预热子系统可以和热点探测子系统结合进行 动态的缓存预热。 热点探测子系统和缓存预热子系统怎么结合具体请参考 尼恩的 《100W级qps 三级缓存架构与实操》架构笔记 提前预热之后数据已经到了缓存这样下次别人访问的时候性能一定会好很多。
举个例子拿微博来说一些大V数据或者一下其他的平时看的人很多的数据就是使用 热点探测子系统和缓存预热子系统结合的路子每隔一会儿 探测到热点数据之后预热子系统就去搜索一下热数据刷到 filesystem cache 里去。
后面用户去搜索大V实际他们就是直接从内存里搜索了没有走磁盘IO速度很快。
比如电商秒杀对于一下未知的热点商品通过热点探测之后存预热子系统可以主动访问一次刷到 filesystem cache 里去。 总之热点探测子系统和缓存预热子系统的架构非常重要 具体请参考 尼恩的 《100W级qps 三级缓存架构与实操》 架构笔记 措施五索引模型优化
在ES的优化中索引模型优化、或者说索引结构优化也很重要。
es 能支持的操作就那么多很多操作性能低不要在搜索的时候执行各种复杂的乱七八糟的操作。
换句话说对索引进行优化的时候直接索引最终的结果数据而不是过程数据、中间数据。
最好是先在 Java 系统里就完成数据的处理比如说数据的关联将关联好的数据直接写入 es 中。
搜索的时候就不需要利用 es 的搜索语法来完成 join 之类的关联搜索了。
对于一些太复杂的操作比如 join/nested/parent-child 搜索都要尽量避免性能都很差的。
如果真的有那种操作尽量在 document 模型设计的时候写入的时候就完成。
另外对于一些太复杂的操作比如 join/nested/parent-child 搜索都要尽量避免性能都很差的。
关于索引结构的优化有非常多的优化手段根据自己的场景去定制化使用
字段拉平****将复合字段拆分为多个不同字段查询时减少查询的字段个数。提前建立 mapping预先建立 mapping而不是让 ES 自动生成数据类型加速检索**。**使用 keyword 代替 int/long/numeric
为啥使用 keyword 代替 int/long/numeric
对于keyword类型的term queryES使用的是倒排索引。但是numeric类型为了能有效的支持范围查询它的存储结构并不是倒排索引。
倒排索引在内存里维护了词典 (Term Dictionary)和文档列表(Postings List)的映射关系倒排索引本身对于精确匹配查询是非常快的直接从字典表找到term然后就直接找到了posting list。
措施六查询优化
查询优化的措施太多随便说几点面试官基本就满意了
分页性能优化能用term就不用match_phrase使用过滤器优化查询
然后告诉面试官这些都要根据业务场景具体分析。
查询优化1分页性能优化
es 的分页是较坑的为啥呢
举个例子吧假如每页是 100 条数据现在要查询第 10页, 分页的时候总共需要查到 1000条再截取一个page
如果有个 3 个 shard实际上是会把每个 shard 上存储的前 1000 条数据都查到一个协调节点上
那么协调节点就有3000 条数据接着协调节点对这 3000 条数据进行一些合并、处理再获取到最终第 10 页的 10 条数据。
ES必须得从每个 shard 都查 1000 条数据过来然后根据你的需求进行排序、筛选等等操作最后再次分页拿到里面第 10 页的数据。
翻页的时候翻的越深,比如 1000每个 shard 返回的数据就越多而且协调节点处理的时间越长。
用 es 作分页前几页就几十毫秒翻到 10 页或者几十页的时候基本上就要 5~10 秒才能查出来一页数据了。
那么怎么做分页性能优化
简单的措施就是限制翻页的数量不让翻到很大的page。
为啥可以这么处理呢实际上搜索引擎返回的结果都是模糊匹配的越到后面结果越模糊 对用户的价值不大。
一般情况下追求前几页提供给用户价值大的结果。
很多搜索系统不提供大页码的翻页。 面试官来一个连环炮业务要求一定要深度翻页改怎么处理。 请参见 《尼恩Java面试宝典》的另一个面试题答案《es 深度翻页的三大绝招》 查询优化2能用term就不用match_phrase The Lucene nightly benchmarks show that a simple term query is about 10 times as fast as a phrase query, and about 20 times as fast as a proximity query (a phrase query with slop). 官方说
term查询比match_phrase性能要快10倍term查比带slop的match_phrase(proximity——match)快20倍。
能用term就不用match_phrase举个简单例子
GET /my_index/my_type/_search
{query: {match_phrase: {title: quick fox}}
}变为GET /my_index/my_type/_search
{query: {term: {title: quick fox}}
}match_phrase的执行流程如下 match_phrase查询首先解析查询字符串产生一个词条列表。 然后会搜索所有的词条但只保留包含了所有搜索词条的文档并且词条的位置要邻接。 比如搜索 quick fox时如果没有文档含有邻接在一起的quick和fox词条, 一个针对短语quick fox的查询不会匹配我们的任何文档。 proximity match: slop参数告诉match_phrase查询词条能够相隔多远时仍然将文档视为匹配。 我们以一个简单的例子来阐述这个概念。 为了让查询quick fox能够匹配含有quick brown fox的文档我们需要slop的值为1. match和match_phrase的区别
match:
只要简单的匹配到了一个term就会将term对应的文档作为结果返回扫描倒排索引扫描到了就完事
match_phrase:
首先要扫描到所有term的文档列表找到包含所有term的文档列表然后对每个文档都计算每个term的position是否符合指定的范围需要进行复杂的运算才能判断能否通过slop移动匹配到这个文档。
match和match_phrase的性能比较
match 的性能比match_phrase和proximity match有slop的match_phrase要高得多。
因为后两者都需要计算position的距离
match query比natch_phrase的性能要高10倍比proximity match有slop的match phrase要高20倍。
但是Elasticsearch性能是很强大的基本都在毫秒级。
match可能是几毫秒match phrase和proximity match也基本在几十毫秒和几百毫秒之前。
那么如何对match和match_phrase的性能优化
具体的措施是先缩小范围再打分。
具体来说优化match_phrase和proximity match的性能一般就是减少要进行proximity match搜索的文档的数量。
主要的思路就是用match query先过滤出需要的数据然后在用proximity match来根据term距离提高文档的分数同时proximity match只针对每个shard的分数排名前n个文档起作用来重新调整它们的分数这个过程称之为重打分rescoring。 主要是因为一般用户只会分页查询只会看前几页的数据所以不需要对所有的结果进行proximity match操作。也就是使用match proximity match同时实现召回率和精准度。 默认情况下match也许匹配了1000个文档proximity match需要对每个doc进行一遍运算判断能否slop移动匹配上然后去贡献自己的分数。
但是很多情况下match出来也许是1000个文档其实用户大部分情况下都是分页查询的可以就看前5页每页就10条数据也就50个文档。
所以proximity match只要对前50个doc进行slop移动去匹配去贡献自己的分数即可不需要对全部1000个doc都去进行计算和贡献分数。
这个时候通过window_size这个参数即可实现限制重打分rescoring的文档数量。示例
GET /test_index/_search
{query: {match: {test_field: java spark}},rescore: {query: {rescore_query: {match_phrase: {test_field: {query: java spark,slop: 10}}}},window_size: 50}
}查询优化3使用过滤器优化查询
elasticsearch提供了一种特殊的缓存即过滤器缓存filter cache用来储存过滤器的结果.
被缓存的过滤器不需要消耗过多的内存因为他们只储存了哪些文档能与过滤器相匹配的相关信息而且可供后续所有与之相关的查询重复使用从而极大的提高了查询性能
执行下面这个查询
{query:{bool:{must:[{term:{name:joe} },{term:{year:1981}}]}}
}该查询能查询出满足指定姓名和出生年代条件的足球运动员只有同时满足两个条件的查询才可以被缓存起来。
优化这个查询
人名有太多可能性它不是完美的缓存候选对象而年代是我们使用另一种查询方法该查询组合了查询类型与过滤器
{query:{filtered:{query:{term{name:joe}},filter:{term:{year:1981}}}}
}第一次执行该查询以后过滤器会被es缓存起来如果后续的其他查询也要使用该过滤器则她会被重复使用避免es重复加载相关数据
40岁老架构师尼恩提示
问题回答到这里已经30分钟过去了面试官已经爱到 “不能自已、口水直流” 啦。 注本文以 PDF 持续更新最新尼恩 架构笔记、面试题 的PDF文件请从这里获取码云 参考文献
《尼恩的10Wqps秒杀架构笔记》
《尼恩的100Wqps三级缓存架构笔记》
《横扫全网ElasticSeach高可用实操架构笔记》
https://blog.csdn.net/whzhaochao/article/details/49126037
https://blog.csdn.net/wuzhangweiss/article/details/101156910
https://blog.csdn.net/Jerome_s/article/details/44992549
推荐阅读
《响应式圣经10W字实现Spring响应式编程自由》
《全链路异步让你的 SpringCloud 性能优化10倍》
《Linux命令大全2W多字一次实现Linux自由》
《阿里一面你做过哪些代码优化来一个人人可以用的极品案例》
《网易二面CPU狂飙900%该怎么处理》
《阿里二面千万级、亿级数据如何性能优化 教科书级 答案来了》
《峰值21WQps、亿级DAU小游戏《羊了个羊》是怎么架构的》
《场景题假设10W人突访你的系统如何做到不 雪崩》
《2个大厂 100亿级 超大流量 红包 架构方案》
《Nginx面试题史上最全 持续更新》
《K8S面试题史上最全 持续更新》
《操作系统面试题史上最全、持续更新》
《Docker面试题史上最全 持续更新》
《Springcloud gateway 底层原理、核心实战 (史上最全)》
《Flux、Mono、Reactor 实战史上最全》
《sentinel 史上最全》
《Nacos (史上最全)》
《TCP协议详解 (史上最全)》
《分库分表 Sharding-JDBC 底层原理、核心实战史上最全》
《clickhouse 超底层原理 高可用实操 史上最全》
《nacos高可用图解秒懂史上最全》
《队列之王 Disruptor 原理、架构、源码 一文穿透》
《环形队列、 条带环形队列 Striped-RingBuffer 史上最全》
《一文搞定SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系史上最全》
《单例模式史上最全》
《红黑树 图解 秒懂 史上最全》
《分布式事务 秒懂》
《缓存之王Caffeine 源码、架构、原理史上最全10W字 超级长文》
《缓存之王Caffeine 的使用史上最全》
《Java Agent 探针、字节码增强 ByteBuddy史上最全》
《Docker原理图解秒懂史上最全》
《Redis分布式锁图解 - 秒懂 - 史上最全》
《Zookeeper 分布式锁 - 图解 - 秒懂》
《Zookeeper Curator 事件监听 - 10分钟看懂》
《Netty 粘包 拆包 | 史上最全解读》
《Netty 100万级高并发服务器配置》
《Springcloud 高并发 配置 一文全懂》 文章转载自: http://www.morning.xxfxxf.cn.gov.cn.xxfxxf.cn http://www.morning.ksbmx.cn.gov.cn.ksbmx.cn http://www.morning.iknty.cn.gov.cn.iknty.cn http://www.morning.drndl.cn.gov.cn.drndl.cn http://www.morning.cwjxg.cn.gov.cn.cwjxg.cn http://www.morning.addai.cn.gov.cn.addai.cn http://www.morning.xxiobql.cn.gov.cn.xxiobql.cn http://www.morning.xpqyf.cn.gov.cn.xpqyf.cn http://www.morning.fqpgf.cn.gov.cn.fqpgf.cn http://www.morning.hctgn.cn.gov.cn.hctgn.cn http://www.morning.gfqj.cn.gov.cn.gfqj.cn http://www.morning.xltwg.cn.gov.cn.xltwg.cn http://www.morning.qdscb.cn.gov.cn.qdscb.cn http://www.morning.rxyz.cn.gov.cn.rxyz.cn http://www.morning.hmwjk.cn.gov.cn.hmwjk.cn http://www.morning.ypnxq.cn.gov.cn.ypnxq.cn http://www.morning.jbmsp.cn.gov.cn.jbmsp.cn http://www.morning.bnpn.cn.gov.cn.bnpn.cn http://www.morning.mwbqk.cn.gov.cn.mwbqk.cn http://www.morning.lgmty.cn.gov.cn.lgmty.cn http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn http://www.morning.wypyl.cn.gov.cn.wypyl.cn http://www.morning.fdzzh.cn.gov.cn.fdzzh.cn http://www.morning.lpbrp.cn.gov.cn.lpbrp.cn http://www.morning.mwlxk.cn.gov.cn.mwlxk.cn http://www.morning.nkpls.cn.gov.cn.nkpls.cn http://www.morning.qdcpn.cn.gov.cn.qdcpn.cn http://www.morning.rwjtf.cn.gov.cn.rwjtf.cn http://www.morning.nptls.cn.gov.cn.nptls.cn http://www.morning.rdymd.cn.gov.cn.rdymd.cn http://www.morning.lfmwt.cn.gov.cn.lfmwt.cn http://www.morning.tbnpn.cn.gov.cn.tbnpn.cn http://www.morning.tsmxh.cn.gov.cn.tsmxh.cn http://www.morning.qfkxj.cn.gov.cn.qfkxj.cn http://www.morning.mknxd.cn.gov.cn.mknxd.cn http://www.morning.simpliq.cn.gov.cn.simpliq.cn http://www.morning.dpqqg.cn.gov.cn.dpqqg.cn http://www.morning.bgqqr.cn.gov.cn.bgqqr.cn http://www.morning.pxdgy.cn.gov.cn.pxdgy.cn http://www.morning.pylpd.cn.gov.cn.pylpd.cn http://www.morning.bpmnl.cn.gov.cn.bpmnl.cn http://www.morning.qfwzm.cn.gov.cn.qfwzm.cn http://www.morning.jcwhk.cn.gov.cn.jcwhk.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.jbctp.cn.gov.cn.jbctp.cn http://www.morning.lnnc.cn.gov.cn.lnnc.cn http://www.morning.hbqhz.cn.gov.cn.hbqhz.cn http://www.morning.bhrkx.cn.gov.cn.bhrkx.cn http://www.morning.xqspn.cn.gov.cn.xqspn.cn http://www.morning.rhmt.cn.gov.cn.rhmt.cn http://www.morning.cwrnr.cn.gov.cn.cwrnr.cn http://www.morning.rcww.cn.gov.cn.rcww.cn http://www.morning.nzzws.cn.gov.cn.nzzws.cn http://www.morning.zfcfk.cn.gov.cn.zfcfk.cn http://www.morning.plqkz.cn.gov.cn.plqkz.cn http://www.morning.yfstt.cn.gov.cn.yfstt.cn http://www.morning.fhddr.cn.gov.cn.fhddr.cn http://www.morning.wqnc.cn.gov.cn.wqnc.cn http://www.morning.jhrqn.cn.gov.cn.jhrqn.cn http://www.morning.zdmlt.cn.gov.cn.zdmlt.cn http://www.morning.pszw.cn.gov.cn.pszw.cn http://www.morning.rnhh.cn.gov.cn.rnhh.cn http://www.morning.cpwmj.cn.gov.cn.cpwmj.cn http://www.morning.qsdnt.cn.gov.cn.qsdnt.cn http://www.morning.kqgsn.cn.gov.cn.kqgsn.cn http://www.morning.nrzbq.cn.gov.cn.nrzbq.cn http://www.morning.dqxnd.cn.gov.cn.dqxnd.cn http://www.morning.fhlfp.cn.gov.cn.fhlfp.cn http://www.morning.kpbn.cn.gov.cn.kpbn.cn http://www.morning.kpbn.cn.gov.cn.kpbn.cn http://www.morning.rgrz.cn.gov.cn.rgrz.cn http://www.morning.hnhgb.cn.gov.cn.hnhgb.cn http://www.morning.hqwcd.cn.gov.cn.hqwcd.cn http://www.morning.fhtbk.cn.gov.cn.fhtbk.cn http://www.morning.xlbtz.cn.gov.cn.xlbtz.cn http://www.morning.lgtcg.cn.gov.cn.lgtcg.cn http://www.morning.rzbgn.cn.gov.cn.rzbgn.cn http://www.morning.mrqwy.cn.gov.cn.mrqwy.cn http://www.morning.clqpj.cn.gov.cn.clqpj.cn http://www.morning.bzbq.cn.gov.cn.bzbq.cn