HDFS 基本概念

HDFS是Hadoop Distribute File System 的简称,也就是Hadoop的一个分布式文件系统。

一、HDFS的主要设计理念

1、存储超大文件

  这里的“超大文件”是指几百MB、GB甚至TB级别的文件。

2、最高效的访问模式是 一次写入、多次读取(流式数据访问)

  HDFS存储的数据集作为hadoop的分析对象。在数据集生成后,长时间在此数据集上进行各种分析。每次分析都将设计该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。

3、运行在普通廉价的服务器上

HDFS设计理念之一就是让它能运行在普通的硬件之上,即便硬件出现故障,也可以通过容错策略来保证数据的高可用。

二、HDFS的忌讳

1、将HDFS用于对数据访问要求低延迟的场景

  由于HDFS是为高数据吞吐量应用而设计的,必然以高延迟为代价。

2、存储大量小文件

  HDFS中元数据(文件的基本信息)存储在namenode的内存中,而namenode为单点,小文件数量大到一定程度,namenode内存就吃不消了。

三、HDFS基本概念

数据块(block):大文件会被分割成多个block进行存储,block大小默认为64MB。每一个block会在多个datanode上存储多份副本,默认是3份。

namenode:namenode负责管理文件目录、文件和block的对应关系以及block和datanode的对应关系。

datanode:datanode就负责存储了,当然大部分容错机制都是在datanode上实现的。

四、HDFS基本架构图 

点击查看原图

图中有几个概念需要介绍一下

Rack 是指机柜的意思,一个block的三个副本通常会保存到两个或者两个以上的机柜中(当然是机柜中的服务器),这样做的目的是做防灾容错,因为发生一个机柜掉电或者一个机柜的交换机挂了的概率还是蛮高的。

五、HDFS写文件流程 

点击查看原图

思考:

在datanode执行create file后,namenode采用什么策略给client分配datanode?

  顺序写入三个datanode,写入过程中有一个datanode挂掉了,如何容错?

  client往datanode写入数据时挂掉了,怎么容错?

六、HDFS读文件流程 

点击查看原图

思考:namenode挂掉了怎么办,这个时候HDFS是否有相应的容错方案。

发表在 storage | HDFS 基本概念已关闭评论

系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式

一.系统吞度量要素:

  一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

        QPS(TPS):每秒钟request/事务 数量

        并发数: 系统同时处理的request/事务数

        响应时间:  一般取平均响应时间

(很多人经常会把并发数和TPS理解混淆)

理解了上面三个要素的意义之后,就能推算出它们之间的关系:
QPS(TPS)= 并发数/平均响应时间    或者   并发数 = QPS*平均响应时间
        一个典型的上班签到系统,早上8点上班,7点半到8点的30分钟的时间里用户会登录签到系统进行签到。公司员工为1000人,平均每个员上登录签到系统的时长为5分钟。可以用下面的方法计算。
QPS = 1000/(30*60) 事务/秒
平均响应时间为 = 5*60  秒
并发数= QPS*平均响应时间 = 1000/(30*60) *(5*60)=166.7

        一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。

决定系统响应时间要素

我们做项目要排计划,可以多人同时并发做多项任务,也可以一个人或者多个人串行工作,始终会有一条关键路径,这条路径就是项目的工期。

系统一次调用的响应时间跟项目计划一样,也有一条关键路径,这个关键路径是就是系统影响时间;

关键路径是有CPU运算、IO、外部系统响应等等组成。

二.系统吞吐量评估:

我们在做系统设计的时候就需要考虑CPU运算、IO、外部系统响应因素造成的影响以及对系统性能的初步预估。

而通常境况下,我们面对需求,我们评估出来的出来QPS、并发数之外,还有另外一个维度:日PV。

通过观察系统的访问日志发现,在用户量很大的情况下,各个时间周期内的同一时间段的访问流量几乎一样。比如工作日的每天早上。只要能拿到日流量图和QPS我们就可以推算日流量。

通常的技术方法:

        1. 找出系统的最高TPS和日PV,这两个要素有相对比较稳定的关系(除了放假、季节性因素影响之外)

        2. 通过压力测试或者经验预估,得出最高TPS,然后跟进1的关系,计算出系统最高的日吞吐量。B2B中文和淘宝面对的客户群不一样,这两个客户群的网络行为不应用,他们之间的TPS和PV关系比例也不一样。



A)淘宝

淘宝流量图:

点击查看原图

淘宝的TPS和PV之间的关系通常为  最高TPS:PV大约为 1 : 11*3600 (相当于按最高TPS访问11个小时,这个是商品详情的场景,不同的应用场景会有一些不同)

B) B2B中文站

B2B的TPS和PV之间的关系不同的系统不同的应用场景比例变化比较大,粗略估计在1 : 8个小时左右的关系(09年对offerdetail的流量分析数据)。旺铺和offerdetail这两个比例相差很大,可能是因为爬虫暂的比例较高的原因导致。

在淘宝环境下,假设我们压力测试出的TPS为100,那么这个系统的日吞吐量=100*11*3600=396万

这个是在简单(单一url)的情况下,有些页面,一个页面有多个request,系统的实际吞吐量还要小。

无论有无思考时间(T_think),测试所得的TPS值和并发虚拟用户数(U_concurrent)、Loadrunner读取的交易响应时间(T_response)之间有以下关系(稳定运行情况下):

TPS=U_concurrent / (T_response+T_think)。

并发数、QPS、平均响应时间三者之间关系

点击查看原图

   上图横坐标是并发用户数。绿线是CPU使用率;紫线是吞吐量,即QPS;蓝线是时延。
    开始,系统只有一个用户,CPU工作肯定是不饱合的。一方面该服务器可能有多个cpu,但是只处理单个进程,另一方面,在处理一个进程中,有些阶段可能是IO阶段,这个时候会造成CPU等待,但是有没有其他请 求进程可以被处理)。随着并发用户数的增加,CPU利用率上升,QPS相应也增加(公式为QPS=并发用户数/平均响应时间。)随着并发用户数的增加,平均响应时间也在增加,而且平均响应时间的增加是一个指数增加曲线。而当并发数增加到很大时,每秒钟都会有很多请求需要处理,会造成进程(线程)频繁切换,反正真正用于处理请求的时间变少,每秒能够处 理的请求数反而变少,同时用户的请求等待时间也会变大,甚至超过用户的心理底线。

来源:http://www.cnblogs.com/jackei/

软件性能测试的基本概念和计算公式

一、软件性能的关注点

对一个软件做性能测试时需要关注那些性能呢?

我们想想在软件设计、部署、使用、维护中一共有哪些角色的参与,然后再考虑这些角色各自关注的性能点是什么,作为一个软件性能测试工程师,我们又该关注什么?

首先,开发软件的目的是为了让用户使用,我们先站在用户的角度分析一下,用户需要关注哪些性能。

对于用户来说,当点击一个按钮、链接或发出一条指令开始,到系统把结果已用户感知的形式展现出来为止,这个过程所消耗的时间是用户对这个软件性能的直观印象。也就是我们所说的响应时间,当相应时间较小时,用户体验是很好的,当然用户体验的响应时间包括个人主观因素和客观响应时间,在设计软件时,我们就需要考虑到如何更好地结合这两部分达到用户最佳的体验。如:用户在大数据量查询时,我们可以将先提取出来的数据展示给用户,在用户看的过程中继续进行数据检索,这时用户并不知道我们后台在做什么。

用户关注的是用户操作的相应时间。

其次,我们站在管理员的角度考虑需要关注的性能点。

1、 相应时间

2、 服务器资源使用情况是否合理

3、 应用服务器和数据库资源使用是否合理

4、 系统能否实现扩展

5、 系统最多支持多少用户访问、系统最大业务处理量是多少

6、 系统性能可能存在的瓶颈在哪里

7、 更换那些设备可以提高性能

8、 系统能否支持7×24小时的业务访问

再次,站在开发(设计)人员角度去考虑。

1、 架构设计是否合理

2、 数据库设计是否合理

3、 代码是否存在性能方面的问题

4、 系统中是否有不合理的内存使用方式

5、 系统中是否存在不合理的线程同步方式

6、 系统中是否存在不合理的资源竞争

那么站在性能测试工程师的角度,我们要关注什么呢?

一句话,我们要关注以上所有的性能点。

二、软件性能的几个主要术语

1、响应时间:对请求作出响应所需要的时间

网络传输时间:N1+N2+N3+N4

应用服务器处理时间:A1+A3

数据库服务器处理时间:A2

响应时间=N1+N2+N3+N4+A1+A3+A2

2、并发用户数的计算公式

系统用户数:系统额定的用户数量,如一个OA系统,可能使用该系统的用户总数是5000个,那么这个数量,就是系统用户数。

同时在线用户数:在一定的时间范围内,最大的同时在线用户数量。

同时在线用户数=每秒请求数RPS(吞吐量)+并发连接数+平均用户思考时间

平均并发用户数的计算:C=nL / T

其中C是平均的并发用户数,n是平均每天访问用户数(login session),L是一天内用户从登录到退出的平均时间(login session的平均时间),T是考察时间长度(一天内多长时间有用户使用系统)

并发用户数峰值计算:C^约等于C + 3*根号C

其中C^是并发用户峰值,C是平均并发用户数,该公式遵循泊松分布理论。

3、吞吐量的计算公式

指单位时间内系统处理用户的请求数

从业务角度看,吞吐量可以用:请求数/秒、页面数/秒、人数/天或处理业务数/小时等单位来衡量

从网络角度看,吞吐量可以用:字节/秒来衡量

对于交互式应用来说,吞吐量指标反映的是服务器承受的压力,他能够说明系统的负载能力

以不同方式表达的吞吐量可以说明不同层次的问题,例如,以字节数/秒方式可以表示数要受网络基础设施、服务器架构、应用服务器制约等方面的瓶颈;已请求数/秒的方式表示主要是受应用服务器和应用代码的制约体现出的瓶颈。

当没有遇到性能瓶颈的时候,吞吐量与虚拟用户数之间存在一定的联系,可以采用以下公式计算:F=VU * R /

其中F为吞吐量,VU表示虚拟用户个数,R表示每个虚拟用户发出的请求数,T表示性能测试所用的时间

4、性能计数器

是描述服务器或操作系统性能的一些数据指标,如使用内存数、进程时间,在性能测试中发挥着“监控和分析”的作用,尤其是在分析统统可扩展性、进行新能瓶颈定位时有着非常关键的作用。

资源利用率:指系统各种资源的使用情况,如cpu占用率为68%,内存占用率为55%,一般使用“资源实际使用/总的资源可用量”形成资源利用率。

5、思考时间的计算公式

Think Time,从业务角度来看,这个时间指用户进行操作时每个请求之间的时间间隔,而在做新能测试时,为了模拟这样的时间间隔,引入了思考时间这个概念,来更加真实的模拟用户的操作。

在吞吐量这个公式中F=VU * R / T说明吞吐量F是VU数量、每个用户发出的请求数R和时间T的函数,而其中的R又可以用时间T和用户思考时间TS来计算:R = T / TS

下面给出一个计算思考时间的一般步骤:

A、首先计算出系统的并发用户数

C=nL / T F=R×C

B、统计出系统平均的吞吐量

F=VU * R / T R×C = VU * R / T

C、统计出平均每个用户发出的请求数量

R=u*C*T/VU

D、根据公式计算出思考时间

TS=T/R

 

转自 http://www.ha97.com/5095.html

发表在 storage | 系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式已关闭评论

首批“全国旅游价格信得过景区”名单

景区名称 等级
北京市
通州区大运河森林公园 4A
北京韩美林艺术馆 4A
小汤山现代农业科技示范园 4A
朝阳公园 4A
中华民族园 4A
紫檀博物馆 4A
石花洞 4A
云居寺 4A
周口店北京人遗址博物馆 4A
戒台寺景区 4A
八达岭水关长城 4A
北京野鸭湖国家湿地公园 4A
北京延庆松山森林旅游区 4A
日坛公园 3A
庆丰公园 3A
古塔公园 3A
黄芩仙谷 3A
北京顺鑫绿色度假村 3A
通州区运河公园 3A
中国民兵武器装备陈列馆 3A
爨柏景区 3A
十八潭景区 3A
桃源仙谷 3A
首云国家矿山公园 3A
青菁顶景区 3A
白龙潭 3A
北京古崖居风景名胜区 3A
万芳亭公园 2A
小龙门国家森林公园 2A
灵山景区 2A
八达岭世界葡萄博览中心 非A
天津市
天津古文化街旅游区(津门故里) 5A
天津盘山风景名胜区 5A
天津黄崖关长城风景游览区 4A
天津蓟县独乐寺 4A
天津热带植物观光园 4A
天津水上公园 4A
天津杨柳青博物馆(石家大院) 4A
仁爱团泊湖·国际休闲博览园 4A
天津滨海航母主题公园 4A
意大利风情旅游区 4A
宁园旅游景区 4A
天津海昌极地海洋世界景区 4A
天津周恩来邓颖超纪念馆景区 4A
天津凯旋王国主题游乐园景区 4A
精武门·中华武林园 4A
梨木台景区 4A
天津希乐少儿休闲旅游区 4A
天津欢乐谷 4A
天津五大道文化旅游区 4A
天津杨柳青庄园 4A
天津水高庄园 4A
天津东疆湾景区 4A
九龙山国家森林公园 3A
民俗博物馆(天后宫) 3A
天津市老城博物馆 3A
东丽湖温泉度假旅游区 3A
天津梁启超纪念馆 3A
天津利顺德大饭店 3A
应大皮衣博物馆 3A
滨海茶淀葡萄科技园 3A
杨柳青园艺科技博览园 3A
天津峰山药王古寺 3A
天津大港奥林匹克博物馆 3A
天津港博览馆 3A
北塘特色旅游区 3A
天津市世博华明馆 3A
天津凌奥创意产业园 3A
张家窝食用菌休闲园 3A
李叔同故居纪念馆 3A
曹家花园 3A
曹禺故居纪念馆(曹禺剧院) 3A
西双塘民俗风景区 3A
天津觉悟社纪念馆 3A
南普公园 3A
蓟州溶洞 3A
天津智利风情园 3A
平津战役天津前线指挥部旧址陈列馆 2A
天津一二·九抗日救亡运动纪念馆 2A
元古奇石林 2A
中山公园 2A
金汤桥会师公园 2A
杨柳青年画馆 2A
安家大院藏珍馆 2A
耳闸公园 2A
华明示范镇宅基地复垦设施农业园 2A
河北省
石家庄西柏坡景区 5A
秦皇岛市山海关景区 5A
保定市野三坡景区 5A
保定市安新白洋淀景区 5A
石家庄市天桂山景区 4A
石家庄市驼梁景区 4A
石家庄市黑山大峡谷景区 4A
石家庄市拦道石红色生态风景区 4A
石家庄市佛光山景区 4A
石家庄市紫云山景区 4A
石家庄市沕沕水景区 4A
石家庄市西苑温泉景区 4A
石家庄市藤龙山景区 4A
石家庄市东方巨龟苑景区 4A
石家庄市隆兴寺景区 4A
石家庄市荣国府景区 4A
石家庄市嶂石岩景区 4A
石家庄市国御温泉度假小镇 4A
石家庄市苍岩山景区 4A
石家庄市华北军区烈士陵园 4A
承德市丰宁京北第一草原景区 4A
承德市双塔山景区 4A
承德市隆化董存瑞纪念馆 4A
承德市兴隆溶洞景区 4A
秦皇岛市乐岛欢乐海洋公园 4A
秦皇岛市长寿山景区 4A
秦皇岛市角山景区 4A
秦皇岛市华夏庄园景区 4A
秦皇岛市旅游滑沙活动中心 4A
秦皇岛市祖山景区 4A
秦皇岛市新澳海底世界 4A
秦皇岛市南戴河国际娱乐中心 4A
唐山市清东陵 4A
唐山市乐亭李大钊纪念馆及故居 4A
唐山市迁安山叶口自然风景区 4A
唐山市曹妃甸湿地景区 4A
唐山市丰南唐津运河旅游区 4A
唐山市滦州古城 4A
唐山市开滦国家矿山公园 4A
唐山市菩提岛景区 4A
唐山市月坨岛景区 4A
唐山市景忠山旅游区 4A
唐山市万佛园景区 4A
唐山市青山关旅游区 4A
张家口市怀来黄龙山庄旅游区 4A
张家口市下花园鸡鸣山景区 4A
张家口市涿鹿黄帝城景区 4A
张家口市安家沟生态旅游区 4A
张家口市沽源塞外庄园 4A
张家口市沽源沽水福源景区 4A
廊坊市香河第一城景区 4A
廊坊市文化公园 4A
廊坊市自然公园 4A
廊坊市金丰农科园 4A
廊坊市香河金钥匙景区 4A
保定市鱼谷洞景区 4A
保定市晋察冀边区革命纪念馆 4A
保定市满城汉墓景区 4A
保定市冉庄地道战遗址 4A
保定市曲阳北岳庙景区 4A
保定市曲阳虎山风景区 4A
沧州市吴桥杂技大世界 4A
沧州市东光铁佛寺 4A
衡水市武强年画博物馆 4A
衡水湖景区 4A
邢台市崆山白云洞 4A
邢台市前南峪生态旅游区 4A
邢台市九龙峡景区 4A
邢台市天梯山景区 4A
邢台市天河山景区 4A
邢台市云梦山景区 4A
邢台市扁鹊庙 4A
邢台大峡谷景区 4A
邯郸市娲皇宫景区 4A
邯郸市太行五指山旅游区 4A
邯郸市129师司令部旧址 4A
邯郸市京娘湖风景区 4A
邯郸市东山文化博艺园 4A
邯郸市响堂山风景名胜区 4A
邯郸市赵苑公园 4A
邯郸市长寿村景区 4A
邯郸市古武当山景区 4A
邯郸市晋冀鲁豫革命纪念园 4A
邯郸市七步沟景区 4A
邯郸市广府古城旅游区 4A
辛集国际皮革城 4A
石家庄市仙台山景区 3A
石家庄市高远红木博览城 3A
承德市魁星楼景区 3A
承德市丰宁白云古洞景区 3A
承德市六里坪--九龙潭景区 3A
承德市奇石谷景区 3A
承德市辽河源国家森林公园 3A
承德市宽城蟠龙湖景区 3A
承德市平泉泽州园景区 3A
秦皇岛市碣石山景区 3A
秦皇岛市昌黎葡萄沟景区 3A
秦皇岛市王家大院景区 3A
唐山玉田县净觉寺 3A
迁西五虎山旅游区 3A
唐山市迁西县喜峰口旅游景区 3A
唐山市遵化禅林寺古银杏风景园 3A
唐山市青龙湖生态旅游度假景区 3A
蒙牛乳业(唐山)有限公司旅游景区 3A
唐山抗震纪念馆 3A
张家口市蔚县飞狐峪空中草原景区 3A
张家口市崇礼翠云山景区 3A
张家口市崇礼翠云山滑雪度假景区 3A
张家口市张北野狐岭要塞景区 3A
廊坊市华御温泉度假村 3A
廊坊市国际会展中心 3A
廊坊市霸州李少春纪念馆 3A
廊坊市霸州华夏民间收藏馆 3A
廊坊市霸州胜芳古镇 3A
廊坊市刘凌沧郭慕熙艺术馆 3A
廊坊市天圆山庄生态园景区 3A
保定市顺平腰山王氏庄园 3A
沧州市纪晓岚文化园 3A
沧州市肃宁中国裘皮城 3A
沧州市黄骅海盐博物馆景区 3A
沧州市河间府署景区 3A
衡水市绿岛空中戏水乐园 3A
邢台市清河县羊绒制品城 3A
邯郸市黄粱梦吕仙祠景区 3A
邯郸市元宝山风景区 3A
邯郸市铜雀三台遗址公园 3A
邯郸市邺令公园 3A
邯郸市盛名度假村 3A
邯郸市磁州窑博物馆 3A
定州市黄家葡萄酒庄 3A
石家庄市赵云庙景区 2A
承德市城隍庙景区 2A
承德市关帝庙景区 2A
承德市九龙松景区 2A
承德市丰宁千松坝森林公园 2A
承德市隆化县茅荆坝森林公园 2A
承德市宽城县都山景区 2A
承德市宽城县万塔黄崖景区 2A
承德市滦平县花溪梨园景区 2A
承德市围场县大清猎苑景区 2A
承德市宽城县菁润观光园景区 2A
承德市宽城县宝山休闲庄园景区 2A
承德市宽城县塞北江南景区 2A
秦皇岛市五峰山景区李大钊革命活动旧址景区 2A
秦皇岛市六峪山庄 2A
秦皇岛市鲍子沟景区 2A
秦皇岛市翡翠岛景区 2A
秦皇岛市天马山景区 2A
秦皇岛市天马湖景区 2A
唐山市滦县文峰塔 2A
唐山市遵化卧龙山自然风景区 2A
唐山市玉田县农福缘景区 2A
唐山市大城山公园 2A
唐山市潘家峪惨案纪念馆红色旅游景区 2A
唐山市遵化黄花山风景区 2A
唐山市遵化上关湖景区 2A
张家口市蔚县老君洞景区 2A
张家口市云松雾柳庄园 2A
张家口市怀来天漠旅游区 2A
张家口市塞北蒙古大营 2A
张家口市水云间假日会馆 2A
张家口市怀来容辰庄园 2A
廊坊市灵山寺景区 2A
廊坊市水一方休闲垂钓园 2A
廊坊市大城京作红木家具旅游基地 2A
廊坊市固安屈家营古音乐会堂 2A
廊坊市大厂北坞清真寺 2A
廊坊市香河新城广场 2A
廊坊市安次区绿岛庄园 2A
廊坊市天胜园农业生态观光园 2A
廊坊市永清县金华湖度假村 2A
廊坊市永清县观音禅寺 2A
安国市毛主席视察纪念馆 2A
安国中药文化博物馆 2A
沧州市泊头清真寺 2A
沧州市马本斋纪念馆 2A
沧州市盐山千童祠景区 2A
沧州市神然生态农业园 2A
沧州市青县司马庄蔬菜观光园 2A
沧州市献县小屯竹柳生态观光园 2A
沧州市王希鲁景区 2A
沧州市南大港湿地景区 2A
衡水市宝云寺 2A
冀州市灵秀山庄 2A
衡水市中国内画艺术之乡展览馆 2A
衡水老白干集团工业旅游区 2A
衡水市全国第一个农村党支部纪念馆 2A
衡水市深州蜜桃观光园 2A
衡水市田园棉文化园 2A
邢台市张果老山景区 2A
邢台市威县义和团纪念馆 2A
邢台市华夏张氏祖庭 2A
邯郸市峰峰磁州窑富田遗址 2A
邯郸市大名石刻博物馆 2A
邯郸市漳河旅游度假区 2A
邯郸市圣井岗景区 2A
定州市伊利工业园区 2A
定州市德胜农林科技园 2A
秦皇岛市总兵府景区 非A
秦皇岛市首山景区 非A
张家口市康保康巴诺尔庄园 非A
张家口市怀来县鸡鸣驿古城景区 非A
张家口市阳原县泥河湾博物馆 非A
张家口市宣化假日绿岛度假村 非A
张家口市宣化桑干河大峡谷 非A
沧州市青县广旺农庄 非A
邢台百泉湾温泉旅游度假区 非A
邢台市英谈村乡村旅游区 非A
邢台市白云山景区 非A
邯郸市十六沟景区 非A
山西省
太原蒙山大佛 4A
定襄河边民俗馆 4A
凤凰山植物园 4A
平遥古城 4A
平遥双林寺 4A
平遥镇国寺 4A
左权麻田八路军总部纪念馆 4A
昔阳县大寨景区 4A
八路军太行纪念馆 4A
运城关帝庙景区 4A
万荣李家大院景区 4A
垣曲历山 4A
舜帝陵景区 4A
永济普救寺 4A
永济鹳雀楼 4A
永济五老峰景区 4A
芮城永乐宫 4A
运城盐湖(中国死海)景区 4A
原平市天牙山风景区 3A
静乐天柱山景区 3A
晋冀鲁豫边区临时参议会旧址 3A
太行龙口景区 3A
原平大营温泉 A
太谷三多堂博物馆 非A
太谷美宝农业观光园 非A
山西太谷孔祥熙宅园 非A
沁源县菩提寺风景区 非A
辽宁省
大连金石滩国家旅游度假区 5A
大连老虎滩海洋公园 5A
沈阳故宫(微博)博物院 4A
沈阳森林动物园 4A
沈阳北陵公园 4A
沈阳九一八历史博物馆 4A
沈阳航空博览园 4A
沈阳五爱市场购物旅游区 4A
大连安波旅游度假区 4A
大连圣亚海洋世界 4A
大连紫云花汐旅游景区 4A
大连森林动物园 4A
大连铭湖国际温泉滑雪度假区 4A
鞍山玉佛苑景区 4A
抚顺雷锋纪念馆 4A
本溪水洞风景名胜区 4A
桓仁五女山景区 4A
凤城市大梨树生态农业观光旅游区 4A
参仙源参业股份有限公司天桥沟森林公园 4A
义县奉国寺景区 4A
营口白沙湾黄金海岸 4A
望儿山风景区 4A
辽阳市广佑寺景区 4A
朝阳凤凰山旅游景区 4A
盘锦鼎祥生态旅游区 4A
辽河口红海滩景区 4A
葫芦岛葫芦山庄 4A
葫芦岛灵山寺 4A
兴城市古城景区 4A
觉华岛旅游度假区 4A
沈阳朝阳山 3A
沈阳工业博物馆 3A
沈阳爱新觉罗祖家坊酒业 3A
沈阳财湖旅游度假区 3A
沈阳市城市规划展示馆 3A
大连观光塔 3A
长海县小水口森林公园 3A
东港市北井子镇獐岛风景区 3A
和睦国家森林公园 非A
沈阳卧龙谷 非A
三块石国家森林公园 非A
大石湖风景区 非A
桓仁枫林谷旅游景区 非A
凌海市萧军纪念馆 非A
义县宣州化石馆 非A
义县万佛堂景区 非A
建平天秀山旅游风景区 非A
盘锦江南风情园 非A
盘锦鸳鸯沟 非A
吉林省
伪满皇宫博物院 5A
长影世纪城 4A
长春市文庙博物馆 4A
吉林省酒文化博物馆 4A
长春关东文化园 4A
长春市动植物公园 4A
九台市碧水庄园度假村 4A
吉林省御龙温泉度假村 4A
东北师范大学东北民族民俗博物馆 4A
松花湖风景名胜区 4A
吉林市朱雀山国家森林公园 4A
吉林市圣鑫葡萄酒庄园 4A
伊通满族博物馆 4A
吉林省鴜鹭湖生态辽源度假区 4A
辽源市青少年平安教育馆 4A
辽源市道路交通体验公园 4A
通化白鸡峰森林公园 4A
集安市五女峰国家森林公园 4A
通化县振国壹号庄园景区 4A
白山市松江河国家森林公园 4A
松原市规划展览馆 4A
大安市嫩江湾国家湿地公园 4A
敦化市六鼎山文化旅游区 4A
黑龙江省
伊春汤旺河石林风景区 5A
黑龙江省凤凰山国家森林公园 4A
大海林林业局雪乡国家森林公园 4A
黑龙江省森工平山旅游区 4A
牡丹江柴河北国小九寨景区 4A
黑龙江凉水国家级自然保护区 4A
黑龙江省森工苇河林业局红豆杉景区 4A
双鸭山林业局青山国家森林公园 4A
齐齐哈尔扎龙自然保护区 4A
北大荒闫家岗温泉度假区 4A
齐齐哈尔泰来江桥抗战纪念地 4A
鸡西市密山北大荒书法长廊景区 4A
当壁镇兴凯湖旅游度假区 4A
鸡西市密山铁西森林公园景区 4A
虎头珍宝岛旅游风景区 4A
伊春嘉荫茅兰沟森林旅游区 4A
大庆连环湖景区 4A
大庆市林甸温泉欢乐谷旅游景区 4A
大庆北国温泉养生休闲旅游区 4A
黑河五大连池市山口湖旅游景区 4A
黑河市爱辉历史陈列馆 4A
方正林业局小龙山风景区 3A
方正林业局龙山公园风景区 3A
绥棱林业局生态文化旅游景区 3A
清河林区旅游风景区 3A
黑龙江省大沾河国家森林公园 3A
黑龙江桦南林业局七星峰国家森林公园景区 3A
黑龙江省红旗农场都市农业园 3A
齐齐哈尔泰湖国家湿地公园 3A
齐齐哈尔塔子城辽金文化旅游名镇 3A
齐齐哈尔中国(大兴)九八抗洪纪念馆 3A
鸡西鸡东县凤凰山风景区 3A
伊春市太平森林公园 3A
伊春兴安森林公园 3A
黑河北安市博物馆 3A
黑河市北安庆华军工遗址博物馆景区 3A
大庆色氏湿地人家景区 3A
双鸭山东湖旅游度假区 3A
双鸭山宝清县七星河湿地生态旅游区 3A
大兴安岭呼中白山旅游景区 3A
大兴安岭塔河栖霞山植物园景区 3A
大兴安岭万亩种子园景区 3A
伊春市朗乡玉兔仙潭风景区 2A
齐齐哈尔瑞盛食品制造有限公司 2A
大兴安岭呼玛县界江旅游度假区 1A
大兴安岭古里生态旅游区 1A
上海市
上海科技馆 5A
上海博物馆 4A
上海佘山国家森林公园 4A
上海城市规划展示馆 4A
东平国家森林公园 4A
上海大观园 4A
上海古猗园 4A
上海方塔园 4A
上海市青少年校外活动营地-东方绿舟 4A
枫泾古镇 4A
金山城市沙滩景区 4A
碧海金沙景区 4A
上海鲜花港 4A
上海月湖雕塑公园 4A
上海都市菜园景区 4A
前卫生态村 4A
上海海湾国家森林公园 4A
上海南翔景区 4A
上海明珠湖·西沙湿地景区 4A
上海宋庆龄故居纪念馆 4A
上海东林寺景区 4A
上海顾村公园景区 4A
上海辰山植物园 4A
上海江南三民文化村景区 4A
上海召稼楼景区 4A
中国农民画村 3A
黄兴公园 3A
上海玉穗绿苑 3A
瀛东生态村 3A
高家庄园乡村俱乐部 3A
上海联谊枇杷乐园 3A
上海M50创意园 3A
上海犹太难民纪念馆 3A
花米庄行景区 3A
上海南社纪念馆 3A
上海韩湘水博园 3A
上海老码头景区 3A
上海瑞华果园景区 3A
上海影视乐园 3A
上海醉白池公园 3A
上海音乐谷景区 3A
上海大宁灵石公园 3A
江苏省
南京夫子庙秦淮风光带 5A
苏州园林(拙政园) 5A
苏州园林(虎丘山风景区)
苏州市园林(留园)
苏州同里古镇游览区 5A
苏州市金鸡湖景区 5A
苏州太湖旅游区(旺山景区) 5A
苏州太湖旅游区(陆巷古村) 5A
苏州太湖旅游区(紫金庵)
苏州太湖旅游区(启园)
苏州太湖旅游区(东山雕花楼)
苏州太湖旅游区(穹窿山)
苏州市沙家浜·虞山尚湖旅游区(沙家浜景区) 5A
南通市濠河景区 5A
泰州姜堰溱湖旅游景区 5A
南京总统府景区 4A
南京高淳国际慢城 4A
无锡宜兴善卷风景区 4A
无锡市薛福成故居 4A
宜兴市竹海景区 4A
无锡市崇安寺景区 4A
无锡市东林书院 4A
宜兴市陶祖圣境景区 4A
中国吴文化博物馆·无锡市鸿山遗址博物馆 4A
无锡市南禅寺景区 4A
无锡市宜兴张公洞旅游景区 4A
无锡市清名桥古运河景区 4A
徐州淮海战役纪念塔 4A
徐州市云龙湖风景区 4A
徐州汉画像石艺术馆 4A
徐州市邳州艾山九龙景区 4A
徐州市博物馆 4A
徐州市潘安湖湿地公园 4A
沛县微山湖千岛湿地景区 4A
贾汪督公湖旅游区 4A
睢宁水月禅寺景区 4A
常州市红梅公园 4A
环球动漫嬉戏谷 4A
苏州甪直古镇游览区 4A
苏州盘门景区 4A
苏州西山景区 4A
苏州木渎古镇 4A
常熟方塔古迹名胜区 4A
常熟服装城购物旅游区 4A
苏州市重元寺 4A
苏州市七里山塘景区 4A
苏州市平江历史街区 4A
苏州市太湖国家湿地公园 4A
苏州市常熟蒋巷乡村旅游景区 4A
苏州中国刺绣艺术馆 4A
苏州市吴江震泽古镇景区 4A
苏州市吴中光福景区 4A
张家港永联旅游景区 4A
天池山景区 4A
昆山市周庄古镇景区 4A
昆山市锦溪古镇 4A
昆山市千灯古镇游览区 4A
南通博物 4A
中国南通珠算博物馆 4A
南通市如皋水绘园景区 4A
中国工农红军第十四军纪念馆 4A
海安江淮文化园景区 4A
连云港海上云台山景区 4A
连云港二郎神文化遗迹公园 4A
淮安市周恩来纪念馆 4A
淮安市周恩来故居 4A
淮安市博物馆 4A
淮安市清河新区古淮河文化生态景区 4A
淮安府署景区 4A
淮安市吴承恩故居景区 4A
盐城海盐历史文化风景区 4A
盐城市新四军纪念馆 4A
阜宁金沙湖旅游区 4A
盐城射阳息心寺景区 4A
大丰市上海知青纪念馆 4A
东台西溪旅游文化景区 4A
大丰港海洋世界景区 4A
扬州瘦西湖风景区 4A
扬州中国雕版印刷博物馆/扬州博物馆 4A
扬州京华城休闲旅游区 4A
扬州市东关历史文化旅游区 4A
中国镇江醋文化博物馆 4A
泰州市凤城河风景区 4A
泰州姜堰市溱潼古镇旅游区 4A
泰州天德湖景区 4A
宿迁市雪枫公园 4A
泗阳县中国杨树博物馆 4A
宿迁市湖滨公园景区 4A
宿迁市项王故里景区 4A
龙王庙行宫 4A
浙江省
淳安县千岛湖风景区 5A
千岛湖石林景区
西溪湿地·洪园 5A
溪口雪窦山风景名胜区 5A
滕头生态旅游区
温州市雁荡山风景名胜区 5A
嘉兴市南湖景区 5A
根宫佛国文化旅游景区 5A
杭州市超山风景名胜区 4A
杭州市运河.塘栖古镇 4A
杭州市良渚博物院 4A
杭州市东方文化园 4A
杭州市浙旅院国际教育旅游体验区 4A
杭州市京杭大运河·杭州 4A
杭州市天目山景区 4A
杭州市大明山景区 4A
杭州市浙西大峡谷 4A
杭州市河桥古镇 4A
杭州市柳溪江 4A
杭州市东天目山 4A
杭州市太湖源 4A
宁波市达蓬山旅游度假区 4A
宁波市前童古镇旅游区 4A
宁波市宁海森林温泉景区 4A
宁波市伍山石窟旅游区 4A
宁波松兰山旅游度假区 4A
宁波市象山石浦渔港古城 4A
宁波市石浦中国渔村有限公司 4A
宁波市慈城古县城 4A
宁波市天一阁博物馆 4A
宁波市天宫庄园 4A
宁波博物馆 4A
宁波市镇海区招宝山旅游风景区 4A
宁波帮博物馆 4A
宁波市凤凰山海港乐园 4A
宁波市九峰山网岙景区 4A
温州市铜铃山国家森林公园 4A
温州市文成龙麒源旅游景区 4A
瑞安市寨寮溪风景区 4A
南塘文化旅游区(印象南塘) 4A
温州市永嘉楠溪江风景旅游区 4A
温州市泰顺廊桥文化园景区 4A
金华市兰溪市诸葛八卦村 4A
金华市武义清水湾景区 4A
金华市浦江仙华山风景区 4A
金华市江南第一家景区 4A
金华市方岩风景区 4A
中国义乌国际商贸城购物旅游区 4A
嘉兴市梅花洲景区 4A
嘉兴市西塘古镇景区 4A
嘉兴市碧云花园-十里水乡景区 4A
嘉兴市海宁中国皮革城景区 4A
绍兴市大香林乡村休闲旅游区 4A
绍兴市西施故里旅游区 4A
绍兴市五泄旅游区 4A
绍兴市华东国际珠宝城 4A
绍兴市大佛寺景区 4A
湖州市莫干山景区 4A
湖州市长兴金钉子景区 4A
湖州市江南红村 4A
湖州市仙山湖景区 4A
湖州市中国扬子鳄村 4A
湖州市安吉竹博园 4A
湖州市中南百草原 4A
湖州市江南天池 4A
湖州市浙北大峡谷 4A
湖州市浪漫山川 4A
湖州市南浔古镇景区 4A
湖州菰城景区 4A
湖州市太湖旅游度假区 4A
衢州市桃源七里景区 4A
衢州市三衢石林景区 4A
衢州市江郎山风景区 4A
衢州市浮盖山景区 4A
衢州市廿八都景区 4A
衢州市江山清漾景区 4A
丽水市中国青田石雕文化旅游区 4A
丽水市龙泉山旅游区 4A
丽水市遂昌南尖岩景区 4A
丽水市遂昌神龙飞瀑景区 4A
丽水市遂昌千佛山景区 4A
丽水景宁云中大漈景区 4A
丽水市中国景宁畲乡之窗景区 4A
台州海洋世界景区 4A
临海江南长城景区 4A
温岭市长屿硐天旅游区 4A
温岭方山景区 4A
玉环县大鹿岛旅游景区 4A
玉环县漩门湾观光农业园 4A
台州市天台山旅游风景区 4A
台州市神仙居景区 4A
千岛湖森林氧吧景区 3A
杭州市九咆界景区 3A
杭州市江南水乡博物馆 3A
杭州市浙西大龙湾 3A
宁波市四明山国家森林公园 3A
宁波市四明山地质公园 3A
宁波市四明山抗日根据地旧址 3A
宁波市浙东小九寨沟景区 3A
五磊山风景区 3A
宁波市虞氏旧宅 3A
宁波市岩头古村景区 3A
宁波市许家山历史文化名村 3A
宁波市梁皇山旅游区 3A
宁波市白玉湾生态农业观光园 3A
宁波市安庆会馆 3A
宁波市小普陀景区 3A
温州动物园 3A
嘉善国际木雕文化园景区 3A
嘉兴市福严寺景区 3A
绍兴市十九峰景区 3A
绍兴市百丈飞瀑景区 3A
湖州首创奥特莱斯 3A
临海江南大峡谷景区 3A
台州市后岸村景区 3A
台州市南黄古道景区 3A
绍兴市王羲之故居 2A
杭州市龙川湾景区 非A
东钱湖南宋石刻公园 非A
嘉兴市东湖景区 非A
湖州市陈武帝故宫 非A
湖州市大唐贡茶 非A
丽水市大木山骑行茶园景区 非A
台州市花漾星球太空农场 非A
安徽省
六安天堂寨景区 5A
安庆天柱山景区 5A
池州九华山风景区 5A
宿州市皇藏峪景区 4A
宿州市奇石文化园 4A
宿州市现代农业博览园 4A
蚌埠禾泉农庄 4A
蚌埠龙子湖景区 4A
滁州狼巷迷谷风景区 4A
六安万佛湖景区 4A
六安(霍山)大别山主峰景区 4A
六安临淮岗景区 4A
马鞍山采石风景区 4A
芜湖丫山花海石林景区 4A
宣城查济景区 4A
宣城宣酒文化园 4A
宣城江村景区 4A
宣城桃花潭景区 4A
宣城太极洞景区 4A
池州九子岩景区 4A
安庆五千年文博园景区 4A
安庆浮山风景区 4A
安庆孔雀东南飞景区 4A
安庆赵朴初故居 4A
安庆妙道山景区 4A
安庆明堂山景区 4A
安庆石莲洞景区 4A
黄山新安江滨水旅游区 4A
黄山芙蓉谷景区 4A
黄山翡翠谷景区 4A
黄山徽州古城景区 4A
黄山新安江山水画廊景区 4A
黄山雄村景区 4A
黄山醉温泉景区 4A
黄山牌坊群鲍家花园 4A
蚌埠四方湖景区 3A
滁州令狐山风景区 3A
芜湖泊山洞景区 3A
宣城黄田景区 3A
宣城赤滩景区 3A
宣城江南第一漂景区 3A
池州佛缘谷漂流景区 3A
池州龙泉圣境景区 3A
池州齐春生态庄园 3A
池州神仙洞景区 3A
安庆小孤山风景区 3A
黄山凤凰源景区 非A
福建省
三明泰宁旅游区 5A
屏南白水洋·鸳鸯溪旅游区 5A
太姥山风景名胜区 5A
福建土楼(永定)景区 5A
福建土楼(南靖)旅游景区
厦门园林植物园 4A
厦门青礁慈济祖宫(免费) 4A
厦门天竺山景区 4A
厦门海沧大桥旅游区 4A
厦门翠丰温泉度假区 4A
三明建 宁闽江源旅游区 4A
三明将乐玉华洞景区 4A
三明梅列瑞云山景区 4A
三明清流天芳悦潭旅游区 4A
三明三元区格氏栲景区 4A
三明沙县小吃文化城 4A
三明泰宁明清园景区 4A
泉州市博物馆 4A
莆田九鲤湖旅游区 4A
莆田中国古典工艺博览城 4A
莆田工艺美术城 4A
莆田九龙谷景区 4A
南平顺昌华阳森林公园 4A
武夷山茶博园 4A
周宁鲤鱼溪·九龙漈旅游区 4A
福安白云山风景名胜区 4A
福建古田旅游区(免费) 4A
福建龙岩梅花山虎园景区 4A
漳平水上茶乡九鹏溪旅游区 4A
福建长汀红色旧址群(免费) 4A
三坊七巷历史文化街区 4A
福州国家森林公园(免费 ) 4A
于山风景区(免费) 4A
旗山森林温泉度假村 4A
贵安新天地休闲旅游度假区 4A
漳州花博园(免费) 4A
漳浦天福茶博园 4A
漳州滨海火山地质公园 4A
漳州市诏安九侯山景区 4A
东山马銮湾景区(免费) 4A
东山风动石景区(免费) 4A
福建土楼(华安景区) 4A
厦门南顺鳄鱼园 3A
泉州森林公园 3A
宁德市蕉城区金涵畲族乡上金贝畲族寨景区 3A
三都澳斗姆风景区 3A
宁德霍童古镇 3A
古田县翠屏湖景区 3A
柘荣县东狮山景区 3A
九龙井风景区 3A
牛郞岗海滨景区 3A
周宁陈峭景区 3A
龙岩东肖红色旧址群(免费) 3A
闽西革命历史博物馆(免费) 3A
龙岩永定金砂红色旧址群(免费) 3A
龙岩永定中川古村落 3A
龙岩才溪乡调查纪念馆(免费) 3A
龙岩武平文博园(免费) 3A
龙岩武平定光佛景区(免费) 3A
福安市溪塔葡萄沟景区 2A
霞浦县赤岸风景区 2A
江西省
三清山景区 5A
婺源江湾景区 5A
景德镇古窑民俗博览区 5A
井冈山景区 5A
鹰潭龙虎山景区 5A
庐山景区 5A
滕王阁景区 4A
南昌市梅岭竹海明珠景区 4A
三清山田园牧歌景区 4A
上饶德兴大茅山景区 4A
上饶集中营名胜区 4A
婺源李坑景区 4A
上饶市婺源汪口景区 4A
婺源思溪延村景区 4A
上饶市婺源严田景区 4A
婺源灵岩景区 4A
婺源大鄣山卧龙谷 4A
婺源文公山景区 4A
景德镇得雨生态园景区 4A
景德镇浮梁古县衙景区 4A
景德镇乐平怪石林景区 4A
景德镇洪岩仙境景区 4A
靖安三爪仑观音岩景区 4A
靖安三爪仑白水洞景区 4A
靖安中部梦幻城 4A
宜春明月山景区 4A
抚州名人雕塑园景区 4A
抚州梦湖景区 4A
赣州大余县丫山景区 4A
赣州上犹县陡水湖景区 4A
赣州宁都县翠微峰景区 4A
赣州安远县三百山景区 4A
赣州石城县通天寨景区 4A
赣州瑞金市共和国摇篮景区 4A
赣州兴国三僚景区 4A
吉安市钓源景区 4A
吉安市陂下古村景区 4A
安福武功山景区 4A
萍乡武功山景区 4A
萍乡市安源锦绣城 4A
新余仙女湖景区 4A
庐山西海景区 4A
庐山区南山景区 4A
九江武宁县西海湾景区 4A
九江县中华贤母园 4A
山东省
枣庄台儿庄古城景区 5A
烟台南山景区 5A
曲阜明故城(三孔)景区 5A
沂蒙山旅游区沂山景区 5A
沂蒙山旅游区龟蒙景区
沂蒙山旅游区云蒙景区
济南章丘百脉泉景区 4A
济南市朱家峪景区 4A
青岛天幕城 4A
青岛葡萄酒博物馆 4A
青岛极地海洋世界 4A
青岛石老人观光园 4A
青岛金沙滩景区 4A
青岛大珠山景区 4A
青岛琅琊台景区 4A
青岛珠山国家森林公园 4A
青岛野生动物世界 4A
青岛宝龙乐园 4A
青岛平度茶山风景区 4A
淄博原山国家森林公园 4A
淄博潭溪山旅游区 4A
淄博福王红木博物馆 4A
淄博周村古商城景区 4A
淄博临淄中国古车博物馆 4A
淄博国井酒文化生态博览园 4A
淄博沂源牛郎织女景区 4A
枣庄滕州微山湖湿地红荷风景区 4A
枣庄滕州盈泰生态温泉度假村 4A
枣庄抱犊崮国家森林公园景区 4A
枣庄熊耳山景区 4A
枣庄山亭汉诺庄园景区 4A
枣庄仙坛山旅游区 4A
枣庄冠世榴园景区 4A
东营广饶孙子文化旅游区 4A
烟台长岛旅游景区 4A
烟台招虎山国家森林公园 4A
烟台海阳旅游度假区 4A
烟台塔山旅游风景区 4A
烟台栖霞牟氏庄园 4A
烟台蓬莱中粮君顶酒庄 4A
烟台莱州大基山森林公园 4A
潍坊杨家埠民间艺术大观园 4A
潍坊青州泰和山风景区 4A
潍坊青州云驼风景区 4A
潍坊青州仰天山国家森林公园 4A
潍坊寿光林海生态博览园 4A
潍坊安丘青云山民俗游乐园 4A
曲阜孔子六艺城 4A
济宁曲阜尼山孔庙及书院景区 4A
济宁微山湖湿地公园 4A
济宁太白湖景区 4A
泰安市太阳部落 4A
泰安市泰山花样年华景区 4A
泰安新泰莲花山风景区 4A
威海大乳山滨海旅游度假区 4A
威海石岛赤山风景区 4A
日照市万平口海滨风景区 4A
莱芜市房干生态旅游区 4A
莱芜战役纪念馆 4A
山东雪野现代农业科技示范园(雪野农博园) 4A
临沂沂水县东方瑞海温泉旅游区度假村 4A
临沂莒南县八路军115师司令部旧址暨山东省政府成立纪念地旅游区 4A
德州夏津黄河故道森林公园 4A
聊城市东阿阿胶城 4A
聊城天沐江北水城温泉度假村 4A
滨州杜受田故居 4A
滨州鹤伴山旅游区 4A
滨州黄河三角洲生态文化旅游岛 4A
滨州沾化冬枣生态旅游区 4A
滨州秦皇河公园 4A
菏泽曹州牡丹园 4A
菏泽郓城水浒好汉城 4A
菏泽孙膑旅游城·亿城寺 4A
济南市平阴县圣母山景区 3A
济南百里黄河风景区 3A
青岛骆驼祥子博物馆 3A
青岛邮电博物馆 3A
青岛创意100文化产业园 3A
青岛市北区民俗馆 3A
青岛党史纪念馆 3A
青岛市万佳广场休闲旅游区 3A
青岛市北区城市记忆·老街巷 3A
青岛北涧天一顺生态园 3A
青岛万里江茶博园 3A
青岛二龙山生态旅游区 3A
青岛城市阳台景区 3A
青岛唐岛湾景区 3A
青岛四季春生态旅游景区 3A
青岛民超生态游乐园 3A
青岛即墨鹤山风景区 3A
青岛平度高氏庄园 3A
青岛莱西月湖公园 3A
青岛平度葡萄大观园 3A
青岛枯桃花艺生态园 3A
淄博临淄齐国故城遗址博物馆 3A
淄博高青温泉花乡景区 3A
淄博高青千乘湖生态文化园 3A
淄博博山樵岭前风景区 3A
淄博博山陶瓷琉璃艺术中心 3A
淄博博山陈仕红木休闲品鉴馆 3A
淄博姚家峪生态旅游度假区 3A
枣庄龟山风景区 3A
东营揽翠湖温泉旅游度假区 3A
东营万象游乐园 3A
东营华林庄园 3A
东营龙居黄河森林旅游区 3A
东营胜利油田科技展览中心 3A
东营利津县凤凰城滨河休闲旅游区 3A
东营黄河入海口生态农业观光园 3A
东营黄河华滩生态文化公园 3A
东营民丰湖休闲娱乐区 3A
东营园博园 3A
烟台海阳地雷战旅游区 3A
烟台莱州云峰山景区 3A
烟台蓬莱烽台胜境景区 3A
潍坊青州弥河文化旅游区 3A
潍坊高密文体公园 3A
潍坊昌邑博陆山生态旅游区 3A
潍坊峡山潍河水上乐园 3A
济宁曲阜颜庙景区 3A
济宁曲阜周公庙 3A
济宁曲阜寿丘少昊陵景区 3A
济宁九仙山风景区 3A
济宁梁山县水浒酒文化体验馆 3A
济宁兖州市博物馆 3A
泰安新泰市朝阳洞景区 3A
泰安新泰市新汶森林公园 3A
泰安新泰和圣园景区 3A
威海乳山福如东海文化园 3A
威海多福山景区 3A
威海毛泽东像章博物馆 3A
威海市青龙生态旅游度假区 3A
威海乳山金牛谷生态农业观光园 3A
日照龙门崮景区 3A
日照市东港区阳光海岸梦幻海滩公园 3A
日照五莲县大青山风景区 3A
日照凤凰山百果谷生态旅游区 3A
日照莒县浮来青旅游度假区 3A
临沂市银雀山汉墓竹简博物馆 3A
临沂市滨河景区 3A
临沂沂水县蒙山龙雾茶博园 3A
临沂沂水县东皋公园 3A
临沂莒南县天佛旅游区 3A
临沂莒南县天马岛旅游区 3A
临沂临沭县苍马山旅游区 3A
临沂临沭县冠山风景旅游区 3A
聊城东阿鱼山曹植墓景区 3A
滨州三河湖风景区 3A
菏泽冀鲁豫边区革命纪念馆 3A
菏泽定陶仿山旅游区 3A
菏泽单县牌坊古城景区 3A
济南星期8小镇 2A
济南黄金谷山水画廊景区 2A
济南(平阴)伊利乳业有限责任公司 2A
青岛古月山庄景区 2A
青岛铁橛山风景区 2A
青岛九九山观光园 2A
青岛绿泽画院 2A
青岛官庄生态乐园 2A
青岛莱西崔子范美术馆 2A
青岛莱西承兴寺 2A
东营东营区丽日锄禾景区 2A
东营黄河口古玩城 2A
东营胜利油田森林木屋 2A
东营郝家绿色生态观光园 2A
烟台蓬莱海源渔家民俗文化馆 2A
潍坊临朐黑松林景区 2A
泰安新泰市九顶皇山景区 2A
临沂莒南县白马河湿地公园旅游区 2A
临沂莒南县鸡龙河城市湿地公园旅游区 2A
聊城东昌府区堂邑民俗旅游区 2A
烟台蓬莱戚继光故里景区
河南省
焦作市云台山风景名胜区 5A
平顶山市尧山•中原大佛景区 5A
殷墟 5A
洛阳市龙潭大峡谷景区 5A
焦作市影视城景区 4A
驻马店市南海禅寺景区 4A
驻马店市老乐山景区 4A
濮阳市戚城文物景区 4A
巩义市康百万庄园景区 4A
济源市王屋山风景区 4A
济源市五龙口风景区 4A
漯河市南街村景区 4A
漯河市许慎文化园景区 4A
漯河市小商桥景区 4A
平顶山市二郎山景区 4A
平顶山市灯台架景区 4A
平顶山市画眉谷景区 4A
平顶山市三苏园景区 4A
洛阳市关林景区 4A
洛阳市栾川重渡沟风景名胜区 4A
洛阳伏牛山滑雪度假乐园 4A
许昌市鄢陵国家花木博览园 4A
驻马店市金顶山景区 3A
驻马店市铜山(湖)风景区 3A
濮阳市世锦园 3A
濮阳市清丰县冀鲁豫边区革命根据地旧址纪念馆 3A
濮阳市毛楼生态旅游区 3A
巩义市青龙山慈云寺景区 3A
巩义市石窟寺景区 3A
巩义市竹林景区 3A
平顶山市郏县知青园景区 3A
平顶山市舞钢祥龙谷景区 3A
平顶山市叶县县衙景区 3A
平顶山市鲁山秘洞景区 3A
平顶山市鲁山尧山大峡谷漂流 3A
平顶山市鲁山尧山滑雪乐园 3A
洛阳市汉光武帝原陵 3A
洛阳市龙马负图寺 3A
洛阳市王铎故居 3A
洛阳市周王城天子驾六博物馆 3A
洛阳市孟津中国牡丹画第一村 3A
洛阳市龙隐景区 3A
济源市济渎庙景区 2A
濮阳市科技馆 2A
濮阳市清丰县顿丘农庄 2A
濮阳市南乐县仓颉陵博物馆 2A
巩义市中华藏獒博览园 非A
巩义市张祜庄园 非A
巩义市五指山景区 非A
巩义市汇馨芳香世界 非A
洛阳市汝阳恐龙谷漂流 非A
湖北省
武汉市黄陂木兰生态文化旅游区 5A
宜昌市三峡人家风景区 5A
宜昌市高岚朝天吼漂流景区 4A
宜昌市鸣凤山景区 4A
宜昌市三峡竹海风景区 4A
宜昌市西陵峡风景区 4A
荆门市钟祥明显陵景区 4A
荆门市钟祥黄仙洞旅游区 4A
荆门市京山大洪山旅游区 4A
荆门市钟祥彭墩乡村世界旅游区 4A
黄石市阳新仙岛湖生态旅游区 4A
黄石市东方山风景区 4A
黄石市国家矿山公园 4A
黄石市大冶雷山风景区 4A
荆州市博物馆 4A
荆州市洪湖蓝田生态旅游区 4A
宜昌市长阳丹水漂流风景区 3A
宜昌市当阳关陵景区 3A
宜昌市潘家湾民俗文化博物馆 3A
宜昌市昭君村古汉文化旅游区 3A
宜昌市中华鲟园旅游区 3A
宜昌市宜都奥陶纪石林 3A
荆门市龙泉公园旅游区 3A
荆门市漳河旅游区 3A
荆门市仙居风景区 3A
荆门市太子山旅游区 3A
荆门市博物馆 3A
荆门市京山天河度假区 3A
荆门市纪山寺旅游区 3A
荆门市沙阳油菜博物馆 3A
黄石市西塞山风景区 3A
黄石市大冶龙凤山旅游区 3A
黄石市青龙山风景区 3A
荆州市湘鄂西苏区革命烈士陵园 3A
荆州市万寿宝塔景区 3A
荆州市监利县周老嘴红色旅游区 3A
荆州市石首市南岳山森林公园 3A
襄阳市宜城博物馆 3A
湖南省
岳麓山·橘子洲旅游区 5A
长沙市花明楼景区 5A
南岳衡山旅游区 5A
岳阳楼-君山岛旅游区 5A
张家界武陵源旅游区 5A
张家界天门山旅游区
韶山旅游区 5A
长沙天心阁 4A
长沙雷锋纪念馆 4A
长沙大围山国家森林公园 4A
长沙市杨开慧纪念馆 4A
长沙市靖港古镇景区 4A
长沙沩山密印景区 4A
长沙黑麋峰森林公园 4A
长沙市浏阳胡耀邦故里旅游区 4A
湘潭水府旅游区 4A
湘潭昭山景区 4A
湘潭市湘乡东山书院旅游区 4A
湘潭市茅浒水乡景区 4A
衡阳市罗荣桓故居-纪念馆 4A
岳阳市任弼时纪念馆 4A
岳阳市君山野生荷花世界旅游区 4A
邵阳新宁崀山旅游区 4A
资兴东江湖旅游区 4A
郴州市龙女景区 4A
郴州市九龙江国家森林公园 4A
郴州市宝山工矿旅游景区 4A
郴州汝城福泉山庄 4A
郴州王仙岭旅游区 4A
郴州安仁稻田公园 4A
娄底市湄江旅游区 4A
娄底梅山龙宫景区 4A
娄底市紫鹊界梯田景区 4A
娄底双峰曾国藩故里旅游区 4A
益阳市山乡巨变第一村旅游区 4A
永州九嶷山舜帝陵景区 4A
怀化市芷江抗战受降纪念旧址 4A
怀化市通道万佛山景区 4A
怀化市黔阳古城旅游区 4A
怀化洪江古商城 4A
张家界市张家界大峡谷景区 4A
张家界江垭温泉度假村 4A
张家界万福温泉旅游度假区 4A
凤凰古城旅游区 4A
湘西州吉首市乾州古城景区 4A
湘西州凤凰南华山神凤文化景区 4A
湘西州矮寨奇观旅游区 4A
湘西州红石林景区 4A
常德花岩溪森林公园 4A
常德市石门夹山旅游区 4A
常德柳叶湖旅游度假区 4A
常德市清水湖旅游区 4A
常德桃花源旅游区 4A
长沙市浏阳河婚庆文化园 3A
长沙千龙湖山庄 3A
长沙沙坪小镇 3A
望城新康戏乡景区 3A
株洲白龙洞景区 3A
湘潭曾国藩生平研究馆 3A
衡阳耒阳蔡伦纪念园 3A
衡阳回雁峰旅游区 3A
衡阳江口鸟洲景区 3A
衡南县岐山旅游区 3A
衡阳奇石文化博物馆 3A
岳阳五尖山森林公园 3A
岳阳华容县博物馆景区 3A
岳阳6501风景区 3A
湖南十三村三国“食”文化产业园 3A
邵阳新宁玉女岩景区 3A
邵阳城步南山牧场景区 3A
邵阳湘窖生态文化酿酒城 3A
郴州桂东县植物园 3A
郴州汝城濂溪书院 3A
郴州桂东三台山景区 3A
娄底蔡和森纪念馆 3A
娄底冷水江波月洞景区 3A
娄底中阳白鹭山庄景区 3A
娄底龙山飞水涯景区 3A
益阳厂窖惨案纪念馆 3A
益阳皇家湖生态旅游区 3A
永州新田县龙家大院旅游区 3A
永州宁远县文庙旅游区 3A
永州新田谈文溪古村 3A
永州舜帝庙考古遗址公园 3A
张家界绿色大地生态园 3A
麻阳滕代远纪念馆 3A
溆浦向警予纪念馆 3A
沅陵凤滩水力发电厂 3A
沅陵五强溪水力发电厂 3A
怀化通道皇都侗文化村 3A
怀化中方荆坪古村 3A
怀化通道龙底生态漂流景区 3A
怀化沅陵二酉山景区 3A
怀化靖州文峰塔景区 3A
怀化芷江三道坑原始生态旅游区 3A
靖州县地笋苗寨 3A
怀化南方葡萄沟旅游区 3A
怀化排牙山景区 3A
衡山农民运动红色旅游景区 2A
衡阳水口山工人运动陈列馆 2A
耒阳农耕文化博物馆 2A
耒阳市汤泉旅游度假村景区 2A
耒阳市党史陈列馆 2A
邵阳市新宁县夷江水上乐园 2A
娄底新化狮子山公园 2A
怀化沅陵龙兴讲寺 2A
通道独岩公园 2A
广东省
清远市连州地下河 5A
广州市中山市纪念堂 4A
广州市黄花岗烈士陵园 4A
广州市起义烈士陵园 4A
广州市十九路军淞沪抗日将士陵园 4A
广州市气象卫星地面站 4A
珠海市圆明新园 4A
珠海市外伶仃岛风景区 4A
珠海市罗西尼工业旅游区 4A
韶关市南岭国家森林公园 4A
韶关市珠玑古巷梅关古道景区 4A
韶关市新丰云天海温泉原始森林度假村景区 4A
韶关市银山户外运动养生景区 4A
河源市新丰江国家森林公园(万绿湖景区) 4A
惠州市西湖风景名胜区 4A
惠州市金海湾国际滨海旅游区(巽寮湾) 4A
惠州市叶挺将军纪念园景区 4A
汕尾市凤山祖庙旅游区 4A
东莞市科学技术博物馆 4A
东莞市展览馆 4A
江门市开平立园(开平碉楼景区) 4A
江门市锦江温泉 4A
江门市川岛旅游度假区 4A
江门市山泉湾旅游景区 4A
茂名市森林公园 4A
肇庆市德庆学宫景区 4A
清远市玄真古洞生态旅游区 4A
清远市广东第一峰旅游风景区 4A
清远市湟川三峡-龙潭文化生态旅游区 4A
清远市广东瑶族博物馆 4A
揭阳市阳美玉都旅游景区 4A
云浮市六祖故里旅游度假区 4A
韶关市乐昌三龙谷(龙王潭)生态旅游区 3A
韶关市新丰江源温泉度假山庄景区 3A
韶关市铜钟寨景区 3A
河源市霍山风景区 3A
东莞市中和堂博物馆 3A
江门市新会古典家具城 3A
茂名市天马山生态旅游区 3A
茂名市水东湾第一滩旅游度假区(滨海公园) 3A
清远市九州驿站英德天门沟景区 3A
清远市英德茶叶世界 3A
清远市金子山旅游景区 3A
清远市连州福山景区 3A
揭阳市普宁德安里旅游景区 3A
汕头市大自然休闲农庄 非A
汕头市塔山风景区 非A
河源市龙川县佗城景区 非A
江门市温泉乐园 非A
江门市恩平泉林度假区 非A
茂名市玉湖国家级水利风景区 非A
肇庆市怀集燕岩景区 非A
肇庆市怀集世外桃源 非A
肇庆市将军山景区 非A
肇庆市金钟山森林公园 非A
肇庆市大旺海鹰博览中心 非A
清远市古龙峡生态旅游度假区 非A
清远市万里山影度假村 非A
清远市英德洞天仙境汤泉旅游度假区 非A
清远市连州大东山温泉度假区 非A
清远市阳山水口鱼水旅游风景区 非A
揭阳市望天湖乡村休闲旅游区 非A
揭阳市普宁盘龙湾温泉度假村 非A
广西自治区
桂林独秀峰·王城景区 5A
桂林乐满地主题乐园 5A
南宁市动物园 4A
南宁大明山风景旅游区 4A
南宁九曲湾温泉度假村景区 4A
南宁嘉和城景区 4A
南宁乡村大世界 4A
南宁民歌湖景区 4A
柳州柳城知青城景区 4A
柳州市融水县贝江景区 4A
柳州市融水·元宝山龙女沟景区 4A
柳州市融安石门仙湖旅游景区 4A
桂林市芦笛景区 4A
桂林市象山景区 4A
桂林七星景区 4A
梧州骑楼城-龙母庙景 4A
藤县石表山休闲旅游景区 4A
北海涠洲岛鳄鱼山景区 4A
北海银滩景区 4A
北海老城历史文化旅游区 4A
防城港东兴市京岛风景名胜区 4A
东兴市屏峰雨林景区 4A
防城港市江山半岛白浪滩旅游景区 4A
上思十万大山国家森林公园景区 4A
防城港西湾旅游景区 4A
钦州三娘湾景区 4A
百色乐业大石围天坑景区 4A
百色市平果黎明通天河景区 4A
百色市德保县吉星岩景区 4A
百色市德保县红叶森林旅游景区 4A
贺州姑婆山国家森林公园 4A
贺州昭平黄姚古镇景区 4A
贺州市十八水原生态景区 4A
巴马水晶宫景区 4A
巴马百鸟岩景区 4A
东兰红色旅游景区 4A
凤山国家地质公园景区 4A
天峨龙滩大峡谷景区 4A
宜州刘三姐故里旅游区 4A
大新德天跨国瀑布景区 4A
凭祥红木文博城景区 4A
柳州市君武森林公园景区 3A
北海金海湾红树林生态旅游区 3A
北海涠洲岛圣堂景区 3A
东兴陈公馆景区 3A
东兴市意景园旅游景区 3A
东兴市百业东兴.红木社区旅游购物景区 3A
防城港市北仑河源头景区 3A
钦州坭兴陶艺术馆 3A
钦州灵山六峰山景区 3A
巴马仁寿源景区 3A
忻城莫土司衙署景区 3A
龙州起义纪念馆 3A
合山市奇石馆景区 2A
都安石头开花景区 2A
海南省
三亚大小洞天游览区 5A
海南分界洲岛旅游区 5A
海南呀诺达雨林文化旅游区 5A
海南文笔峰盘古文化旅游区 4A
三亚西岛海洋文化旅游区 4A
三亚天涯海角旅游区 4A
海南槟榔谷黎苗文化旅游区 4A
三亚亚龙湾热带天堂森林公园 4A
兴隆南国热带雨林游览区 4A
海口假日海滩旅游区 4A
定安黄竹万嘉热带植物园 3A
琼海春晖椰子加工观光基地 3A
三亚鹿回头旅游区 3A
海口白沙门公园 3A
海南塔岭热带飞行世界 2A
琼海多河文化古景区 2A
重庆市
重庆巫山小三峡——小小三峡 5A
重庆酉阳桃花源景区 5A
重庆奉节白帝城—瞿塘峡景区 4A
重庆江津聂荣臻元帅陈列馆 4A
重庆歌乐山国家森林公园 4A
重庆人民大礼堂及人民广场 4A
重庆红岩革命纪念馆 4A
重庆丰都雪玉洞 4A
重庆江津四面山景区 4A
重庆中国三峡博物馆 4A
重庆动物园 4A
重庆贝迪颐园温泉 4A
重庆潼南杨闇公故里景区 4A
重庆开县刘伯承同志纪念馆 4A
重庆綦江古剑山风景区 4A
重庆白鹤梁水下博物馆 4A
重庆彭水阿依河景区 4A
重庆合川钓鱼城古战场 4A
重庆奉节天坑地缝景区 4A
重庆铜梁安居古城景区 4A
重庆天赐温泉 3A
重庆市沙坪坝海石公园 3A
重庆涪陵武陵山国家森林公园 3A
重庆华生园金色蛋糕梦幻王国 3A
重庆大渡口区南海风情温泉娱乐园 3A
重庆融汇温泉 3A
重庆渝北区宝林博物馆 3A
重庆荣昌安陶博物馆 3A
重庆江津陈独秀旧居陈列馆 3A
重庆铜梁黄桷门奇彩梦园 3A
重庆铜梁博物馆 3A
重庆大渡口区九宫庙都市旅游区 3A
重庆铜梁桂花博览园 3A
重庆万州区万县“九五”惨案纪念馆 2A
重庆涪陵区大木花谷景区 2A
重庆铜梁邱少云烈士纪念馆 2A
重庆铜梁金梅印象景区 2A
四川省
青城山—都江堰旅游景区 5A
邓小平故里旅游区 5A
绵阳市北川羌城旅游区 5A
阿坝州汶川特别旅游区 5A
成都杜甫草堂博物馆 4A
武侯祠博物馆 4A
宝光桂湖文化旅游区 4A
崇州街子古镇 4A
宝山旅游景区 4A
成都金沙遗址博物馆 4A
彭州丹景山旅游景区 4A
彭州白鹿中法风情小镇旅游景区 4A
石象湖旅游区 4A
梓潼县七曲山风景区 4A
平武报恩寺 4A
江油李白纪念馆景区 4A
青川清溪古城旅游景区 4A
天曌山景区 4A
苍溪红军渡·西武当山 4A
剑门关景区 4A
千佛崖石刻艺术博物馆 4A
青川东河口地震遗址公园 4A
曾家山景区 4A
平乐旅游区 4A
鼓城山—七里峡景区 4A
龙门阁景区 4A
明月峡景区 4A
广汉三星堆博物馆 4A
乌木文化博览苑 4A
凌云山景区 4A
南部县升钟湖风景区 4A
蜀南竹海风景名胜区 4A
兴文石海洞乡景区 4A
武胜县白坪-飞龙旅游景区 4A
华蓥山旅游区 4A
神龙山巴人石头城景区 4A
黑龙滩旅游景区 4A
安岳石刻·圆觉洞景区 4A
理县桃坪羌寨-甘堡藏寨旅游景区 4A
卓克基官寨景区 4A
达古冰川景区 4A
金川县观音桥风景区 4A
康定情歌(木格措)风景区 4A
稻城亚丁景区 4A
崇州罨画池文化旅游区 3A
彭州市中华蝴蝶生态城旅游景区 3A
金鹰山庄景区 3A
华蓥山天意谷 4A
紫颐香薰山谷景区 非A
贵州省
安顺市黄果树风景名胜区 5A
安顺市龙宫风景名胜区 5A
贵阳市南江大峡谷景区 4A
贵阳市天河潭风景区 4A
贵阳市白马峪旅游景区 4A
贵阳市蓬莱仙界•白云休闲农业旅游景区 4A
贵阳市黔灵山公园景区 4A
贵阳市息烽集中营革命历史纪念馆景区 4A
贵阳市红枫湖旅游风景区 4A
贵阳市贵御温泉旅游景区 4A
遵义会议会址旅游景区 4A
遵义市赤水大瀑布景区 4A
遵义市赤水燕子岩国家森林公园 4A
遵义市赤水竹海旅游景区 4A
遵义市赤水佛光岩景区 4A
遵义市四渡赤水纪念馆 4A
遵义市中国丹霞谷旅游景区 4A
遵义市湄潭天下第一壶茶文化旅游景区 4A
遵义市汇川区娄山关景区 4A
遵义市余庆飞龙寨景区 4A
遵义市凤冈茶海之心景区 4A
遵义市务川仡佬文化旅游景区 4A
遵义市湄潭茶海生态园景区 4A
安顺市夜郎洞景区 4A
安顺市云峰八寨文化旅游区 4A
安顺市兴伟石博园 4A
六盘水市玉舍森林旅游景区 4A
铜仁市大明边城景区 4A
铜仁市梵净山旅游景区 4A
铜仁市江口县亚木沟生态旅游区 4A
铜仁市九龙洞旅游景区 4A
铜仁市石阡夜郎古泉旅游景区 4A
铜仁市思南石林旅游景区 4A
铜仁市松桃苗王城旅游景区 4A
铜仁市万山矿山公园旅游景区 4A
黔南州平塘掌布“藏字石”景区 4A
黔南州瓮安草塘千年古邑旅游区 4A
黔东南州雷山县西江千户苗寨景区 4A
黔东南州黎平肇兴侗文化旅游景区 4A
黔西南州万峰林景区 4A
黔西南州兴义市马岭河峡谷旅游景区 4A
贵阳市河滨公园 3A
遵义市汇川国际温泉旅游城 3A
遵义市枫香旅游景区 3A
遵义市遵义县乡韵庄园 3A
遵义市遵义县中华仡佬风情园 3A
遵义市乌江渡旅游景区 3A
遵义市绥阳县红果树生态旅游景区 3A
遵义市绥阳县水晶温泉 3A
遵义市桐梓县九坝镇上天池旅游景区 3A
遵义市汇川区光勋生态农业观光园 3A
毕节市泰丰农业生态植物观光园 3A
毕节市大方慕俄格古城 3A
铜仁市玉屏茶花泉旅游景区 3A
铜仁市江口寨沙侗寨旅游景区 3A
铜仁市印江县团龙旅游景区 3A
铜仁市沿河县南庄旅游景区 3A
铜仁市石阡县尧上旅游景区 3A
铜仁市石阡县楼上旅游景区 3A
铜仁市思南县郝家湾旅游景区 3A
黔东南州凯里苗侗风情园景区 3A
黔南州都匀西山公园 3A
黔南州都匀文峰园 3A
威宁草海生态旅游度假区 3A
遵义市绥阳博雅陈列馆 2A
遵义市凤冈县山宝景区 2A
遵义市绥阳县鸣泉谷生态旅游区 2A
遵义市遵义县板水沟 非A
遵义市遵义县苟坝红色旅游产业创新区 非A
遵义市遵义县龙坑八里 非A
遵义市遵义县黔北记忆文化产业园 非A
遵义市遵义县台湾邨 非A
遵义市赤水四洞沟 非A
安顺市紫云格凸河户外休闲旅游景区 非A
安顺市关岭化石群国家地质公园 非A
安顺市花江大峡谷景区 非A
安顺市贵州多彩万象旅游城 非A
六盘水市哒啦仙谷景区 非A
六盘水市妥乐古银杏 非A
六盘水市乌蒙大草原景区 非A
毕节市织金瀑布 非A
铜仁市江口佛教文化苑 非A
铜仁市江口云舍景区 非A
黔东南州镇远铁溪景区 非A
云南省
中国科学院西双版纳热带植物园 5A
大理崇圣寺三塔文化旅游区 5A
丽江玉龙雪山景区 5A
迪庆香格里拉普达措景区 5A
昭通水富西部大峡谷景区 4A
曲靖罗平九龙瀑布景区 4A
曲靖师宗凤凰谷生命文化主题公园 4A
玉溪汇龙生态园 4A
玉溪映月潭修闲文化中心 4A
玉溪通海秀山公园 4A
楚雄元谋土林景区 4A
楚雄武定狮子山景区 4A
红河建水文庙景区 4A
红河建水团山古村景区 4A
西双版纳热带花卉园 4A
西双版纳望天树景区 4A
西双版纳勐泐大佛寺景区 4A
大理南诏风情岛景区 4A
大理祥云水目山文化旅游区 4A
大理巍山古城—巍宝山旅游区 4A
丽江玉水寨景区 4A
丽江东巴谷景区 4A
迪庆香格里拉松赞林景区 4A
迪庆香格里拉蓝月山谷景区 4A
迪庆香格里拉大峡谷·巴拉格宗景区 4A
曲靖罗平多依河景区 3A
曲靖罗平鲁布革三峡风景区 3A
玉溪江川古滇国文化园 3A
楚雄紫溪山景区 3A
红河开远南洞—凤凰谷旅游区 3A
红河弥勒可邑旅游小镇景区 3A
丽江东巴万神园景区 3A
丽江金塔景区 3A
玉溪江川碧云寺公园 2A
玉溪峨山高香万亩生态茶文化旅游区 2A
保山北庙湖景区 2A
红河州红河县马帮古城景区 2A
红河州红河县撒玛坝梯田景区 2A
丽江玉柱擎天景区 2A
西双版纳雨林谷景区 1A
临沧凤庆凤山公园 1A
保山腾冲北海湿地景区 非A
保山腾冲樱花谷景区 非A
西双版纳勐远仙境景区 非A
丽江老君山景区 非A
西藏自治区
雅鲁藏布大峡谷旅游景区 4A
巴松措旅游景区 4A
南伊沟旅游景区 4A
鲁朗风景区 4A
尼洋阁藏东南文化博览园 3A
勒布沟景区 3A
神山圣湖景区 3A
科迦寺 3A
古如江寺景区 3A
加木红柳湿地公园 3A
扎西岗寺景区 3A
芝达布日寺景区 3A
班公湖 3A
皮央东嘎 3A
托林寺 3A
古格遗址景区 3A
扎日纳木措 3A
乃宁寺 2A
色吾寺 2A
热拉雍仲林寺 2A
甘旦曲果林寺 A
森都寺 A
孜东曲德松寺 A
艾玛景区 A
陕西省
宝鸡市法门寺佛文化景区 5A
渭南市华山景区 5A
西安市曲江楼观道文化景区 4A
西安市半坡博物馆 4A
西安市大明宫 4A
西安市汉城湖 4A
西安市世博园景区 4A
西安市太平森林公园 4A
宝鸡市太白山森林公园 4A
宝鸡市红河谷森林公园 4A
宝鸡市太白青峰峡森林公园 4A
咸阳市乾陵景区 4A
咸阳市昭陵博物馆 4A
铜川市照金香山景区 4A
铜川市照金景区 4A
铜川市玉华宫景区 4A
铜川市药王山景区 4A
渭南市少华山景区 4A
渭南市洽川景区 4A
渭南市陶艺村景区 4A
榆林市佳县白云山风景名胜区 4A
汉中市留坝县张良庙-紫柏山景区 4A
汉中市宁强县青木川古镇景区 4A
汉中市勉县武侯墓博物馆景区 4A
汉中市勉县武侯祠博物馆景区 4A
安康市汉江燕翔洞生态旅游景区 4A
安康市香溪洞风景名胜区 4A
安康市南宫山国家森林公园 4A
商洛市天竺山国家森林公园 4A
商洛市牛背梁国家森林公园 4A
杨凌农林博览园 4A
商洛市柞水溶洞景区 4A
宝鸡市秦皇生态园 3A
咸阳市崇文塔景区 3A
咸阳市泾阳县博物馆 3A
咸阳市昭陵景区 3A
铜川市福地湖景区 3A
铜川市陈炉古镇景区 3A
铜川市耀州区博物馆 3A
汉中市西乡县午子山景区 3A
安康市镇坪飞渡峡·黄安坝生态旅游度假区 3A
商洛市柞水县凤凰古镇 3A
商洛市塔云山景区 3A
商洛市丹凤丹江漂流景区 3A
铜川市宜君县南山(龙山)公园 2A
铜川市云梦山景区 2A
铜川市周陵现代农业观光园 2A
铜川市姜女祠景区 2A
安康双龙生态旅游景区 2A
安康擂鼓台景区 2A
安康市千层河风景区 非A
安康市天书峡景区 非A
西安市化女泉景区 非A
西安市延生观景区 非A
西安市终南山古楼观景区 非A
西安市财神文化区 非A
西安市玉山蓝河风景区 非A
西安市广仁寺 非A
宝鸡市西部兰花园 非A
甘肃省
崆峒山风景名胜区 5A
漳县贵清山/遮阳山 4A
大云寺—王母宫景区 4A
崇信县龙泉寺景区 4A
云崖寺景区 4A
武威沙漠公园 4A
雷台汉文化博物馆 4A
肃州区酒泉梦天堂景区 4A
肃州区西汉酒泉胜迹景区 4A
玉门市铁人王进喜纪念馆 4A
张掖大佛寺景区 4A
张掖国家湿地公园 4A
山丹大佛寺 4A
大湖湾景区 4A
高台红西路军纪念馆 4A
扁都口生态休闲旅游区 4A
成县西狭颂景区 4A
徽县金徽酒文化生态旅游景区 4A
西和县晚霞湖景区 4A
渭源县首阳山 3A
天祝三峡国家森林公园 3A
凉州白塔寺 3A
阿克塞县金山湖风景区 3A
阿克塞县名族风情园 3A
金塔县鸳鸯池水利旅游风景区 3A
瓜州县桥湾城旅游景区 3A
玉门市赤金峡景区 3A
海藏公园 2A
阿克塞县苏干湖旅游风景区 2A
成县杜公祠景区 2A
武都区朝阳洞景区 2A
阿克塞县赛马场 非A
肃北县透明梦柯冰川 非A
肃北县五个庙休闲独家园 非A
两当云屏景区 非A
青海省
塔尔寺景区 5A
海北州金银滩-原子城景区 4A
青海省藏文化馆 4A
大通老爷山风景名胜区 4A
西宁市青藏高原野生动物园 4A
湟源丹噶尔古城 4A
西宁乡趣农耕文化生态园 4A
神湖之源旅游风景区 3A
浦宁之珠(高原明珠)景区 3A
西宁市人民公园 3A
可鲁克湖-托素湖高原生态旅游景区 3A
宁夏自治区
港中旅(宁夏)沙坡头旅游景区 5A
西夏陵风景名胜区 4A
苏峪口国家森林公园 4A
水洞沟旅游区 4A
鸣翠湖国家湿地公园 4A
青铜峡黄河大峡谷▪中华黄河坛旅游区 4A
腾格里沙漠湿地▪金沙岛旅游区 4A
须弥山旅游区 4A
固原博物馆 4A
宁夏科学技术馆 4A
新疆自治区
新疆天山天池景区 5A
新疆喀纳斯景区 5A
吐鲁番葡萄沟景区 5A
新源县那拉提景区 5A
新疆可可托海风景区 5A
乌鲁木齐天山大峡谷景区 5A
巴楚县红海湾景区 4A
喀什噶尔老城景区 4A
乌鲁木齐市红光山旅游景区 4A
新疆天山野生动物园 4A
乌鲁木齐市红山公园 4A
乌鲁木齐市水磨沟公园 4A
乌鲁木齐县苜蓿台旅游景区 4A
新疆国际大巴扎景区 4A
库车县天山神秘大峡谷景区 4A
库车县王府景区 4A
阿瓦提县刀郎部落景区 4A
阿克陶县奥依塔克冰川公园 4A
哈密回王府景区 4A
巴里坤古城景区 4A
赛里木湖风景名胜区 4A
和田县乌鲁瓦提风景区 4A
哈巴河县白桦林景区 4A
布尔津县草原石人哈萨克民族文化园 4A
福海县乌伦古湖风景区 4A
和静县巴音布鲁克景区 4A
和静县巩乃斯景区 4A
和硕县金沙滩景区 4A
轮台县塔里木胡杨林公园 4A
伊宁市喀赞其民俗旅游区 4A
伊宁县托乎拉苏景区 4A
特克斯县喀拉峻国际生态旅游区 4A
尼勒克县湿地古杨景区 4A
昭苏县夏塔景区 4A
巩留县库尔德宁景区 4A
察布查尔县锡伯民俗风情园 4A
霍城县惠远古城景区 4A
霍尔果斯市国门景区 4A
克拉玛依河景区 4A
呼图壁县世纪园 4A
昌吉市杜氏旅游度假村 4A
奇台江布拉克景区 4A
喀什香妃墓景区 3A
麦盖提县刀郎乡里景区 3A
麦盖提县刀郎画乡景区 3A
叶城县核桃七仙园景区 3A
叶城县锡提亚迷城景区 3A
叶城县坡陇森林公园 3A
乌鲁木齐市儿童公园 3A
乌鲁木齐市人民公园 3A
新疆亚洲大陆地理中心 3A
新和县天籁 加依景区 3A
乌什县燕泉山景区 3A
乌什县沙棘林湿地公园景区 3A
阿图什市天门景区 3A
阿图什市怪柳林景区 3A
阿图什市阳光绿洲生态园 3A
哈密瓜园景区 3A
伊吾县伊水园景区 3A
伊吾县太阳历广场 3A
墨玉县其娜民俗风情园 3A
沙湾县温泉景区 3A
额敏县滨河公园 3A
焉耆县乡都酒堡 3A
新源县肖尔布拉克西域酒文化博物馆 3A
特克斯县科桑溶洞国家森林公园 3A
特克斯县八卦公园 3A
昭苏县圣佑庙景区 3A
霍尔果斯市可克达拉风情园 3A
克拉玛依黑油山景区 3A
克拉玛依乌尔禾区恐龙文化苑 3A
玛纳斯县黑梁湾山庄 3A
玛纳斯县火烧洼山庄 3A
昌吉华兴生态旅游景区 3A
昌吉市人民公园 3A
昌吉市滨湖河景区 3A
吉木萨尔县古海温泉 3A
吉木萨尔县北庭园景区 3A
吉木萨尔县天地园 3A
新疆第一窖古城酒业酒文化博物馆 3A
木垒鸣沙山—胡杨林景区 3A
新疆农业博览园景区 3A
伽师县天门神秘大峡谷 2A
伽师县森林旅游生态园 2A
泽普县梧桐天堂景区 2A
泽普县古勒巴格景区 2A
乌鲁木齐西尔丹辣椒文化观光园 2A
新疆诚和和田玉文化传播中心 2A
库车县龟兹水韵绿洲生态园 2A
喀拉库勒湖景区 2A
哈密西路军进疆纪念园 2A
哈密木卡姆传承中心 2A
巴里坤县怪石山景区 2A
玛纳斯凤鸣湖公园 2A
玛纳斯国家湿地公园 2A
乐土驿站历史文化陈列馆 2A
呼图壁县公园 2A
呼图壁县民俗食帛园 2A
昌吉市晋昌公园 2A
阜康市黄竹山庄 2A
阜康市梧桐沟沙漠景区 2A
吉木萨尔县车师古道旅游区 2A
奇台县博物馆 2A
奇台硅化木·恐龙国家地质公园 2A
新疆都市胡杨林景区 2A
玛纳斯县北公园 1A
木垒文博中心 1A
木垒县大南沟景区 1A
发表在 article | 首批“全国旅游价格信得过景区”名单已关闭评论

web.config machineKey

using System.Web.Configuration;
//打开web.config文件,写入新生成的machineKey
Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
MachineKeySection configSection = (MachineKeySection)config.GetSection("system.web/machineKey");
configSection.ValidationKey = CreateKey(64);
configSection.DecryptionKey = CreateKey(24);
configSection.Validation = MachineKeyValidation.SHA1;
if (!configSection.SectionInformation.IsLocked)
{
config.Save();
Response.Write("写入成功!");
}
else
{
Response.Write("写入失败!段被锁定!");
}

 

--

 

using System.Security.Cryptography;
//生成随机Key 
public static string CreateKey(int numBytes)
{
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buff = new byte[numBytes];
rng.GetBytes(buff);
System.Text.StringBuilder hexString = new System.Text.StringBuilder(64);
for (int i = 0; i < buff.Length; i++)
{
hexString.Append(String.Format("{0:X2}", buff[i]));
}
return hexString.ToString();
}     

--

发表在 .net | 标签为 | web.config machineKey已关闭评论

AES CFB/OFB/ECB/CBC/CTR

AES常见加密模式有CFB/OFB/ECB/CBC/CTR,本文概述这些算法特点,让大家更快的了解AES,当然天缘也不是专业做算法的,工作中也只是使用到才会学习一点,如有错误,欢迎指出。

一、Cipher feedback(CFB)

CFB算法优点:

同明文不同密文,分组密钥转换为流密码。

CFB算法缺点:

串行运算不利并行,传输错误可能导致后续传输块错误。

二、Output feedback(OFB)

OFB算法优点:

同明文不同密文,分组密钥转换为流密码。

OFB算法缺点:

串行运算不利并行,传输错误可能导致后续传输块错误。

三、Electronic codebook(ECB)

ECB算法优点:

简单、孤立,每个块单独运算。适合并行运算。传输错误一般只影响当前块。

ECB算法缺点:

同明文输出同密文,可能导致明文攻击。

四、Cipher-block chaining(CBC)

CBC算法优点:

串行化运算,相同明文不同密文

CBC算法缺点:

需要初始向量,不过这其实不算缺点,下文的CTR也是需要随机数的。如果出现传输错误,那么后续结果解密后可能全部错误。

此外,还有Propagating cipher-block chaining(PCBC)加密模式,

五、Counter mode(CTR)

CTR算法优点:

无填充,同明文不同密文,每个块单独运算,适合并行运算。

CTR算法缺点:

可能导致明文攻击。

补充:

关于Padding补位问题,上文加密模式中,比如CBC等对输入块是有要求的,必须是块的整数倍,对不是整块的数据,要求进行填充,填充的方法有很多种,常见的有PKCS5和PKCS7、ISO10126等。

例如按照16字节分组的话:

  • 对不足16字节部分(假设差n个满16字节),填充n个字节(n范围(1,15]),且每字节值均为n。
  • 对正好16字节部分,则填充一个block,也就是补16个字节,每字节值为16

参考1:PKCS #7: Cryptographic Message Syntax

参考2:PKCS #5: Password-Based Cryptography Specification

所以上述算法中,默认:

需要Padding的有:CBC(,PCBC也需要,本文未涉及该加密模式)、ECB。

不需要Padding的有:CFB、OFB、CTR。

参考资料:

http://zh.wikipedia.org/wiki/块密码的工作模式

发表在 technologys | 标签为 , , , , , | AES CFB/OFB/ECB/CBC/CTR已关闭评论

strace ltrace 调试php

以分析 in_array 为例

shell$ time /usr/local/php/bin/php test.php

real 0m1.132s
user 0m1.118s
sys 0m0.015s

 

shell$ strace -ttt -o xxx /usr/local/php/bin/php test.php

shell$ less xxx

点击查看原图

看到这两次系统调用之间的延时非常大,却并不知道干了什么?一筹莫展了,幸好,Linux下的调试利器除了strace还有ltrace(当然还有dtrace,ptrace,不在本文讨论范围了,略去)。

引用:strace用来 跟踪一个进程的系统调用或信号产生的情况,而 ltrace用来 跟踪进程调用库函数的情况(via IBM developerworks)。

为了排除干扰因素,将$x直接赋值为array(“0″,”1″,”2″,……)的形式,避免过多的malloc调用影响结果。执行

shell$ ltrace -c /usr/local/php/bin/php test.php

点击查看原图

看到库函数__strtol_internal的调用非常之频繁,达到了94%,太夸张了,然后我又查了一下这个库函数__strtol_internal是干嘛的,原来是strtol的别名,简单的说就是把字符串转换成长整形,可以猜测PHP引擎已经检测到这是一个字符串型的数字,所以期望将他们转换成长整型来比较,这个转换过程中消耗了太多时间,我们再次执行:


shell$ ltrace -e "__strtol_internal" /usr/local/php/bin/php test.php


可以轻松抓到大量下图这样的调用,到此,问题找到了,in_array这种松比较,会将两个字符型数字串先转换为长整型再进行比较,却不知性能就耗在这上面了。

点击查看原图

知道了症结所在,我们解决的办法就很多了,最简单的就是为in_array加第三个参数为true,即变为严格比较,同时还要比较类型,这样避免了PHP自作聪明的转换类型,跑起来果然快多了,代码如下:

<?php
$y="1800";
$x = array();
for($j=0;$j<2000;$j++){
        $x[]= "{$j}";
}
 
for($i=0;$i<3000;$i++){
        if(in_array($y,$x,true)){
                continue;
        }
}
?>

 

shell$ time /usr/local/php/bin/php test.php

real 0m0.267s
user 0m0.247s
sys 0m0.020s

快了好多倍啊!!!可以看到sys耗时几乎没有太大变化。我们再次ltrace一把,还是要把$x直接赋值,排除malloc调用的干扰,因为我们实际应用中是从缓存里一次拉出来的,所以也不存在示例代码中这样的循环来申请内存的情况。
再次执行

shell$ ltrace -c /usr/local/php/bin/php test.php

如下图:

 点击查看原图

 

发表在 php | strace ltrace 调试php已关闭评论

分布式文件系统FastDFS设计原理

FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

点击查看原图

Storage server

Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。

以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很长。

group内每个storage的存储依赖于本地文件系统,storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。

storage接受到写文件请求时,会根据配置好的规则(后面会介绍),选择其中一个存储目录来存储文件。为了避免单个目录下的文件数太多,在storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

Tracker server

Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。

Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

Upload file

FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

点击查看原图

选择tracker server

当集群中不止一个tracker server时,由于tracker之间是完全对等的关系,客户端在upload文件时可以任意选择一个trakcer

选择存储的group

tracker接收到upload file的请求时,会为该文件分配一个可以存储该文件的group,支持如下选择group的规则: 1. Round robin,所有的group间轮询 2. Specified group,指定某一个确定的group 3. Load balance,剩余存储空间多多group优先

选择storage server

当选定group后,tracker会在group内选择一个storage server给客户端,支持如下选择storage的规则: 1. Round robin,在group内的所有storage间轮询 2. First server ordered by ip,按ip排序 3. First server ordered by priority,按优先级排序(优先级在storage上配置)

选择storage path

当分配好storage server后,客户端将向storage发送写文件请求,storage将会为文件分配一个数据存储目录,支持如下规则: 1. Round robin,多个存储目录间轮询 2. 剩余存储空间最多的优先

生成Fileid

选定存储目录之后,storage会为文件生一个Fileid,由storage server ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成,然后将这个二进制串进行base64编码,转换为可打印的字符串。

选择两级目录

当选定存储目录之后,storage会为文件分配一个fileid,每个存储目录下有两级256*256的子目录,storage会按文件fileid进行两次hash(猜测),路由到其中一个子目录,然后将文件以fileid为文件名存储到该子目录下。

生成文件名

当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

点击查看原图

文件同步

写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。

每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上,tracke在选择读storage的时候会以同步进度作为参考。

比如一个group内有A、B、C三个storage server,A向C同步到进度为T1 (T1以前写的文件都已经同步到B上了),B向C同步到时间戳为T2(T2 > T1),tracker接收到这些同步进度信息时,就会进行整理,将最小的那个做为C的同步时间戳,本例中T1即为C的同步时间戳为T1(即所有T1以前写的数据都已经同步到C上了);同理,根据上述规则,tracker会为A、B生成一个同步时间戳。

Download file

客户端upload file成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。

点击查看原图

跟upload file一样,在download file时客户端可以选择任意tracker server。

tracker发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。由于group内的文件同步时在后台异步进行的,所以有可能出现在读到时候,文件还没有同步到某些storage server上,为了尽量避免访问到这样的storage,tracker按照如下规则选择group内可读的storage。

1. 该文件上传到的源头storage - 源头storage只要存活着,肯定包含这个文件,源头的地址被编码在文件名中。 2. 文件创建时间戳==storage被同步到的时间戳 且(当前时间-文件创建时间戳) > 文件同步最大时间(如5分钟) - 文件创建后,认为经过最大同步时间后,肯定已经同步到其他storage了。 3. 文件创建时间戳 < storage被同步到的时间戳。 - 同步时间戳之前的文件确定已经同步了 4. (当前时间-文件创建时间戳) > 同步延迟阀值(如一天)。 - 经过同步延迟阈值时间,认为文件肯定已经同步了。

小文件合并存储

小文件合并存储主要解决如下几个问题:

1. 本地文件系统inode数量有限,从而存储的小文件数量也就受到限制。 2. 多级目录+目录里很多文件,导致访问文件的开销很大(可能导致很多次IO 3. 按小文件存储,备份与恢复的效率低

FastDFS在V3.0版本里引入小文件合并存储的机制,可将多个小文件存储到一个大的文件(trunk file),为了支持这个机制,FastDFS生成的文件fileid需要额外增加16个字节

1. trunk file id 2. 文件在trunk file内部的offset 3. 文件占用的存储空间大小 (字节对齐及删除空间复用,文件占用存储空间>=文件大小)

每个trunk file由一个id唯一标识,trunk file由group内的trunk server负责创建(trunk server是tracker选出来的),并同步到group内其他的storage,文件存储合并存储到trunk file后,根据其offset就能从trunk file读取到文件。

文件在trunk file内的offset编码到文件名,决定了其在trunk file内的位置是不能更改的,也就不能通过compact的方式回收trunk file内删除文件的空间。但当trunk file内有文件删除时,其删除的空间是可以被复用的,比如一个100KB的文件被删除,接下来存储一个99KB的文件就可以直接复用这片删除的存储空间。

HTTP访问支持

FastDFS的tracker和storage都内置了http协议的支持,客户端可以通过http协议来下载文件,tracker在接收到请求时,通过http的redirect机制将请求重定向至文件所在的storage上;除了内置的http协议外,FastDFS还提供了通过apache或nginx扩展模块下载文件的支持。

点击查看原图

其他特性

FastDFS提供了设置/获取文件扩展属性的接口(setmeta/getmeta),扩展属性以key-value对的方式存储在storage上的同名文件(拥有特殊的前缀或后缀),比如/group/M00/00/01/some_file为原始文件,则该文件的扩展属性存储在/group/M00/00/01/.some_file.meta文件(真实情况不一定是这样,但机制类似),这样根据文件名就能定位到存储扩展属性的文件。

以上两个接口作者不建议使用,额外的meta文件会进一步“放大”海量小文件存储问题,同时由于meta非常小,其存储空间利用率也不高,比如100bytes的meta文件也需要占用4K(block_size)的存储空间。

FastDFS还提供appender file的支持,通过upload_appender_file接口存储,appender file允许在创建后,对该文件进行append操作。实际上,appender file与普通文件的存储方式是相同的,不同的是,appender file不能被合并存储到trunk file。

问题讨论

从FastDFS的整个设计看,基本上都已简单为原则。比如以机器为单位备份数据,简化了tracker的管理工作;storage直接借助本地文件系统原样存储文件,简化了storage的管理工作;文件写单份到storage即为成功、然后后台同步,简化了写文件流程。但简单的方案能解决的问题通常也有限,FastDFS目前尚存在如下问题(欢迎探讨)。

数据安全性

  • 写一份即成功:从源storage写完文件至同步到组内其他storage的时间窗口内,一旦源storage出现故障,就可能导致用户数据丢失,而数据的丢失对存储系统来说通常是不可接受的。
  • 缺乏自动化恢复机制:当storage的某块磁盘故障时,只能换存磁盘,然后手动恢复数据;由于按机器备份,似乎也不可能有自动化恢复机制,除非有预先准备好的热备磁盘,缺乏自动化恢复机制会增加系统运维工作。
  • 数据恢复效率低:恢复数据时,只能从group内其他的storage读取,同时由于小文件的访问效率本身较低,按文件恢复的效率也会很低,低的恢复效率也就意味着数据处于不安全状态的时间更长。
  • 缺乏多机房容灾支持:目前要做多机房容灾,只能额外做工具来将数据同步到备份的集群,无自动化机制。

存储空间利用率

  • 单机存储的文件数受限于inode数量
  • 每个文件对应一个storage本地文件系统的文件,平均每个文件会存在block_size/2的存储空间浪费。
  • 文件合并存储能有效解决上述两个问题,但由于合并存储没有空间回收机制,删除文件的空间不保证一定能复用,也存在空间浪费的问题

负载均衡

  • group机制本身可用来做负载均衡,但这只是一种静态的负载均衡机制,需要预先知道应用的访问特性;同时group机制也导致不可能在group之间迁移数据来做动态负载均衡。

备注

  • 本文的配图均来自互联网,如涉及版权问题,请联系我删除。
发表在 storage | 标签为 | 分布式文件系统FastDFS设计原理已关闭评论

CentOS 6.3 KVM

参考文章:

RedHat/CentOS6.2 x86系统KVM虚拟机网络配置 http://www.linuxidc.com/Linux/2012-05/61445.htm 

作业环境

服务器端

操作系统:CentOS 6.3 final x86_64

IP: 133.133.10.50

Hostname:myKVM

KVM:qemu-kvm-0.12.1.2-2.295.el6_3.2.x86_64

客户端:Ubuntu和Win7,先在服务器端装好VNC,通过VNC连接服务器CentOS

一、安装KVM及相关软件

1、KVM 需要有 CPU 的支持(Intel vmx 或 AMD svm),在安装 KVM 之前检查一下 CPU 是否提供了虚拟技术的支持:

[root@myKVM ~]# egrep '^flags.*(vmx|svm)' /proc/cpuinfo

有显示, 有显示则说明处理器具有VT功能

2、在主板BIOS中开启CPU的Virtual Technolege(VT,虚化技术)

3、安装kvm及其需要的软件包

[root@myKVM ~]# yum install kvm kmod-kvm qemu kvm-qemu-img virt-viewer virt-manager libvirt libvirt-python python-virtinst

[root@myKVM ~]# yum groupinstall KVM

4、检查kvm模块是否安装,使用以下命令显示两个模块则表示安装完成

[root@myKVM ~]# lsmod | grep kvm

kvm_intel              52570  0 

kvm                   314739  1 kvm_intel

二、启动virt-manager管理界面

1、客户端

VNC到服务器端,因为需要用服务器的图形界面

2、服务器端



启动libvirtd服务,并保证下次自动启动

[root@myKVM ~]# service libvirtd start

Starting libvirtd daemon:                                  [ 确定 ]

[root@myKVM ~]# chkconfig libvirtd on

三、远程创建和管理KVM虚拟机

1. 打开Application=> System Tools => Virtual Machine Manager就可以装虚拟机了,功能跟VMware类似


点击查看原图

2. “Details”中可查看或修改Guest OS的配置信息

点击查看原图

点击查看原图

3、安装完成后需要将默认的IDE硬盘和网卡换成virtio,并打上驱动程序,这样性能就可以得到提升。(默认好像就是这样的)

点击查看原图

 

点击查看原图

4、在远程管理KVM虚拟化物理主机的过程中,可以动态调节VM的内存,实现clone,开机,关机,暂停主机等操作。

5、服务器端使用virsh list命令可查看主机虚拟化情况

[root@myKVM ~]# virsh list

 Id    Name                           State

----------------------------------------------------

 1     CentOSKVM                      running

我在myKVM上由装了centOS的虚拟机,命名为centOSKVM

 

8、KVM虚拟机的信息保存在 /var/lib/libvirt目录下

点击查看原图

三、KVM默认网络配置

1、kvm上网有两种配置,一种是default,它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。另外一种方式是bridge方式,可以使用虚拟机成为网络中具有独立IP的主机。

四、配置bridge上网方式

1、创建桥接器

在/etc/sysconfig/network-scripts目录下,创建一个ifcfg-br0 文件,其类型设为Bridge:

[root@myKVM libvirt]# cat /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE="br0"

TYPE="Bridge"

BOOTPROTO="static"

#HWADDR="00:23:AE:72:50:90"

NM_CONTROLLED="yes"

ONBOOT="yes"

#TYPE="Ethernet"

IPADDR=133.133.10.50

NETMASK=255.255.0.0

2、将物理接口桥接到桥接器

修改eth0的内容(本服务器是用eth0上网的),去掉其IP相关信息,加上“BRIDGE=br0”,将其桥接到br0上;如果是双网卡或是多网卡,照此过程修改:

[root@myKVM libvirt]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

BOOTPROTO="static"

HWADDR="00:23:AE:72:50:90"

NM_CONTROLLED="yes"

ONBOOT="yes"

TYPE="Ethernet"

#UUID="18ffa985-2081-4be5-951b-fb0d136741bf"

#IPADDR=133.133.10.50

#NETMASK=255.255.0.0

BRIDGE=br0

3、重启物理机网络服务

[root@etone ~]# service network restart

4、查看当前桥接情况(有一个虚拟机正在运行)

[root@myKVM libvirt]# brctl show

bridge name     bridge id               STP enabled     interfaces

br0             8000.0023ae725090       no              eth0

virbr0          8000.525400efd043       yes             virbr0-nic

                                                        vnet0

5、将虚拟机接口桥接到桥接器

[root@myKVM ~]# brctl delif virbr0 vnet0

[root@myKVM ~]# brctl addif br0 vnet0

[root@myKVM ~]# brctl show

[root@myKVM libvirt]# brctl show

bridge name     bridge id               STP enabled     interfaces

br0             8000.0023ae725090       no              eth0

                                                   vnet0

virbr0          8000.525400efd043       yes             virbr0-nic

这一步也可以在Virtual Machine Manager中进行。

点击查看原图

6、将虚拟机centOSKVM IP设置为同一网段地址:133.133.10.51

此时,该虚机可以访问外部网络,并可被外部网络访问。

服务器可以连虚拟机

[root@myKVM libvirt]# ping 133.133.10.51

PING 133.133.10.51 (133.133.10.51) 56(84) bytes of data.

64 bytes from 133.133.10.51: icmp_seq=1 ttl=64 time=0.700 ms

64 bytes from 133.133.10.51: icmp_seq=2 ttl=64 time=0.093 ms

64 bytes from 133.133.10.51: icmp_seq=3 ttl=64 time=0.072 ms

^C

--- 133.133.10.51 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2137ms

rtt min/avg/max/mdev = 0.072/0.288/0.700/0.291 ms

虚拟机可以连外网
[root@centOSKVM ~]# ping 133.133.10.50
PING 133.133.10.50 (133.133.10.50) 56(84) bytes of data.
64 bytes from 133.133.10.50: icmp_seq=1 ttl=64 time=0.090 ms
64 bytes from 133.133.10.50: icmp_seq=2 ttl=64 time=0.075 ms
^C
--- 133.133.10.50 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1492ms
rtt min/avg/max/mdev = 0.075/0.082/0.090/0.011 ms
[root@centOSKVM ~]# ping 133.133.133.53
PING 133.133.133.53 (133.133.133.53) 56(84) bytes of data.
64 bytes from 133.133.133.53: icmp_seq=1 ttl=64 time=2.14 ms
64 bytes from 133.133.133.53: icmp_seq=2 ttl=64 time=0.323 ms
^C
--- 133.133.133.53 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1836ms
rtt min/avg/max/mdev = 0.323/1.235/2.147/0.912 ms
发表在 linux | 标签为 | CentOS 6.3 KVM已关闭评论

ASA5505 failover

热备必需为SEC版本

ASA 5505是 security plus 的licence,支持Stateless A/S的failover,不支持状态化的failover,

当一台设备挂了,另一台会开始工作,但是所有session会断掉,也就是用户会明显感觉断网过网,如果做stateful的AA就不会出现这种问题

5505是没有context的,也就是虚拟防火墙,所以不支持AA failover

AA的failover 需要 5510以上的ASA,5510需security plus的,若为5520以上的就不用购买security plus 的,因为5510普通版是不支持AA的

另外,ASA5505 failover和VPN 不能同时做,当ASA作为Ezvpn 的client端以后,就不能做failover,当做了failover就不能支持EZVPN

发表在 network | 标签为 , | ASA5505 failover已关闭评论

LogParser

Logparser是一款非常强大的日志分析软件,可以帮助你详细的分析网站日志。是所有数据分析和网站优化人员都应该会的一个软件。Logparser是微软的一款软件完全免费的,大家可以在微软的官网上去下载,下载地址:

http://www.microsoft.com/en-us/download/details.aspx?id=24659

   下载后安装也非常简单,只要按照步骤去安装就可以了,虽然软件语言是英语但是都是比较容易的。

使用方法:

打开logparser

点击查看原图

    出现的是这个类似命令行的窗口,我们就是在这个窗口输入各种命令对日志进行分析。那我们怎么去运行呢?

最基本的格式:LogParser –i:输入文件的格式 –o:输出格式 “SQL语句”

    我们输入一个最简单的例子,把一个IIS日志转化成一个csv格式的表格,那么我们应该怎么做呢?

C:\Program Files\Log Parser 2.2> logparser -i:iisw3c -o:csv “SELECT *FROM C:rizhi.log” >D:rizhi.scv

   这就是完成了最简单的转换,把C盘中rizhi.log这个日志转换成csv格式并保存到D盘。我们要注意的是-i:iisw3c,-i代表的是输入,iisw3c代表的是日志格式,例子中分析的是iis日志,因此标准格式的iisw3c。-o:scv,-o 代表的是输出,csv是输出文件的格式。”SELECT*FROM”这个是分析日志的SQL命令语句,我们可以用不同的SQL语句来分析日志。

注意:logparser是区分大小写的,因此SQL语句一定要用大写,不然会出错的。

明白了logparser怎么去用,那么接下来给大家介绍一些我们经常用到的操作命令。

--对日志中的url进行归并统计 

LogParser -o:csv "SELECT cs-uri-stem, COUNT(*) into a.csv FROM iis.log GROUP BY cs-uri-stem" 

--取出所有的asp页面
SELECT COUNT(*) FROM ex040528.log WHERE EXTRACT_EXTENSION(cs-uri-stem) LIKE 'asp'

--求出各个路径的访问次数
SELECT cs-uri-stem, COUNT(*) FROM ex040528.log GROUP BY cs-uri-stem

--求出各个资源类型的访问次数
SELECT EXTRACT_EXTENSION(cs-uri-stem) AS PageType, COUNT(*)
FROM ex040528.log
GROUP BY PageType

--group by两个东东
SELECT EXTRACT_EXTENSION(cs-uri-stem) AS PageType, sc-status, COUNT(*)
FROM ex040528.log
GROUP BY PageType, sc-status

--求出各个资源类型的访问次数,并按访问次数降序排列
SELECT EXTRACT_EXTENSION(cs-uri-stem) AS PageType, COUNT(*) AS PageTypeHits
FROM ex040528.log
GROUP BY PageType
ORDER BY PageTypeHits DESC

--求出各个页面类型,各种返回结果占总点击数的比重
SELECT EXTRACT_EXTENSION(cs-uri-stem) AS PageType, sc-status, MUL(PROPCOUNT(*), 100.0) AS Hits
FROM ex040528.log
GROUP BY PageType, sc-status
ORDER BY PageType, sc-status

--求出各个页面类型、各种返回结果的点击数占各种页面类型点击数的百分比
SELECT EXTRACT_EXTENSION(cs-uri-stem) AS PageType, sc-status, MUL(PROPCOUNT(*) ON (PageType), 100.0) AS Hits
FROM ex040528.log
GROUP BY PageType, sc-status
ORDER BY PageType, sc-status
--求解各种类型的客户端环境占总环境数的百分比
SELECT DISTINCT cs(User-Agent) as IEType,count(*) as total,mul(propcount(*),100) as [percent(%)]
FROM F:/挑战赛资料/ex081213.log
group by IEType

转义字符:
/
注意:
order by后只能有一个desc或者asc
order by的项必须要在select子句中
having子句必须紧跟group子句

发表在 technologys | 标签为 | LogParser已关闭评论

LogParser Developer

微软有个工具Log Parser可以帮助你分析日志。它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。

Log Parser可以到微软的网站下载,安装完后,就会有命令行的执行程序LogParser.exe,供API使用的LogParser.dll及说明文件LogParser.chm,里面还会有一些Sample Code可以供参考.

Log Parser支持的格式很多,输入格式如下:

点击查看原图

输出格式如下:

点击查看原图

通过 .NET Framework 的 COM interop (COM 交互操作)特性,可以很方便地在 .NET 应用程序中使用 Log Parser,.NET Framework 的 COM interop 是通过 Runtime Callable Wrappers (RCW) 来实现对 COM 的操作的,RCW 是 .NET 中的一个类。

现在要玩的是,怎么用LogParser.dll来开发更适合的API,其实命令行的做法就可以满足大部份的需求,但有时有时特殊的判断,在命令行模式下就有难度了,比如说,我们需要用程序自动去处理大批量的日志文件分析等,所以这时用API就方便很多.

下面我们用.NET封装下LogParser的Com接口,从LogParser的操作流程来看,无非就是不同格式文件的日志文件的输入,通过类SQL的分析输出我们需要的结果,核心算法就是类似于

          // 初始化LogQuery 对象 
            var logQuery = new LogQueryClass();

            // 缓存输入上下文 
            if (myInputContext == null) 
                myInputContext = GetInputContext(); 
            // 执行查询   
            var oRecordSet = logQuery.Execute(query, myInputContext); 
           
             // 浏览记录 
            for (; !oRecordSet.atEnd(); oRecordSet.moveNext()) 
            { 
                // 获取当前的记录 
                ILogRecord logRecord = oRecordSet.getRecord();              
            } 
            oRecordSet.close();

使用OOP方式封装接口,大家很容易的就会得出类似下面的设计,类图如下:

点击查看原图

每一种类型的日志的分析主要是格式的不同,通过一个配置类去记录每种类型的不同配置,根据配置去生成相应的输入、输出格式类。下面我们就来做个简单的Demo来演示下IIS日志分析。

      private void QryData()
      {

          //构造查询语句           StringBuilder query = new StringBuilder("SELECT ");
          if (txtRecord.Text.Trim().Length > 0)
          {
              int rec = 0;
              if (int.TryParse(txtRecord.Text.Trim(), out rec))
              {
                  if (rec > 0)
                  {//如果有值,而且数字大于0,则取数字取得Top n                       query.Append(" TOP ");
                      query.Append(rec);
                  }
              }
          }
          if (btnLocalTime.Checked)
          {
              query.Append("UserIP,Username,TO_LOCALTIME(TO_TIMESTAMP(date,time)) as LocalTime");
          }
          else           {
              query.Append("UserIP,Username,TO_TIMESTAMP(date,time) as LocalTime");
          }

          query.Append(",ServiceInstance,HostName,ServerIP,TimeTaken,BytesSent,bytesReceived,StatusCode" +
                       ",Win32StatusCode,RequestType,Target,Parameters " +
                       "FROM ");
          query.Append(openFileDialog1.FileName);
          if (txtWhere.Text.Trim().Length > 0)
          {
              query.Append(" Where ");
              query.Append(txtWhere.Text.Trim());
          }

          IISLogParserConfig config = new IISLogParserConfig()
          {
               Codepage =936,
              
          };
          IISLogParser logParser = new IISLogParser(config);
          DataTable dt = logParser.RunQuery(query.ToString());
          dataGridView1.DataSource = dt;
      }

这段Code就是把Log读进来,并用DataGrid去显示,如果IIS Log里的时间不是当地时间,还可用TO_LOCALTIME做时间转换,看这Script,还可以用 Select Top n from 文件路径,这里有一点要注意,路径不能有中文名称,Query有那些可以用,可以参考说明文件的Query Syntax章节.

点击查看原图

注意:LogParser.dll是需要注册的,如果没有注册,是会抛出错误信息,注册的方式很简单,也就是注册Com组件,在命令行模式下 : C:\LogParser>regsvr32 LogParser.dll

发表在 technologys | 标签为 | LogParser Developer已关闭评论

ibdata1 & mysql-bin

ibdata1和mysql-bin
问题:磁盘空间报警,经查发现ibdata1和mysql-bin日志占用空间太多(其中ibdata1超过120G,mysql-bin超过80G)
原因:ibdata1是存储格式,在INNODB类型数据状态下,ibdata1用来存储文件的数据和索引,而库名的文件夹里的那些表文件只是结构而已。
innodb存储引擎有两种表空间的管理方式,分别是:
1)共享表空间(可拆分为多个小的表空间文件),这个是我们目前多数数据库使用的方法;
2)独立表空间,每一个表有一个独立的表空间(磁盘文件)
对于两种管理方式,各有优劣,具体如下:
①共享表空间:
优点:可以将表空间分成多个文件存放到不同的磁盘上(表空间文件大小不受表大小的限制,一个表可以分布在不同步的文件上)。
缺点:所有数据和索引存放在一个文件中,则随着数据的增加,将会有一个很大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样如果对于一个表做了大量删除操作后表空间中将有大量空隙。对于共享表空间管理的方式下,一旦表空间被分配,就不能再回缩了。当出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了。
②独立表空间:在配置文件(my.cnf)中设置: innodb_file_per_table
特点:每个表都有自已独立的表空间;每个表的数据和索引都会存在自已的表空间中。
优点:表空间对应的磁盘空间可以被收回(Drop table操作自动回收表空间,如果对于删除大量数据后的表可以通过:alter table tbl_name engine=innodb;回缩不用的空间。
缺点:如果单表增加过大,如超过100G,性能也会受到影响。在这种情况下,如果使用共享表空间可以把文件分开,但有同样有一个问题,如果访问的范围过大同样会访问多个文件,一样会比较慢。如果使用独立表空间,可以考虑使用分区表的方法,在一定程度上缓解问题。此外,当启用独立表空间模式时,需要合理调整innodb_open_files参数的设置。
解决:
1)ibdata1数据太大:只能通过dump,导出建库的sql语句,再重建的方法。
2)mysql-bin Log太大:
①手动删除:
删除某个日志:mysql>PURGE MASTER LOGS TO ‘mysql-bin.010′;
删除某天前的日志:mysql>PURGE MASTER LOGS BEFORE ’2010-12-22 13:00:00′;
②在/etc/my.cnf里设置只保存N天的bin-log日志
expire_logs_days = 30 //Binary Log自动删除的天数

发表在 db | 标签为 , | ibdata1 & mysql-bin已关闭评论

MySql ibdata1文件

MySql innodb如果是共享表空间,ibdata1文件越来越大,达到了30多个G,对一些没用的表进行清空:

truncate table xxx;

然后optimize table xxx; 没有效果

因为对共享表空间不起作用。

mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。

如果不把数据分开存放的话,这个文件的大小很容易就上了G,甚至几十G。对于某些应用来说,并不是太合适。因此要把此文件缩小。

无法自动收缩,必须数据导出,删除ibdata1,然后数据导入,比较麻烦,因此需要改为每个表单独的文件。

解决方法:数据文件单独存放(共享表空间如何改为每个表独立的表空间文件)。

步骤如下:

 

1)备份数据库

备份全部数据库,执行命令

#mysqldump -q -uroot -ppassword --add-drop-table --all-databases >/home/backup/all.sql

做完此步后,停止数据库服务。

#service mysqld stop

 

2)找到my.ini或my.cnf文件

linux下执行 

# /usr/libexec/mysqld --verbose --help | grep -A 1 'Default options'

Default options are read from the following files in the given order:

/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 

windows环境下可以:

mysqld --verbose --help > mysqlhelp.txt

notepad mysqlhelp.txt

在里面查找Default options,可以看到查找my.ini的顺序,以找到真实目录

 

3)修改mysql配置文件

打开my.ini或my.cnf文件

[mysqld]下增加下面配置

innodb_file_per_table=1

验证配置是否生效,可以重启mysql后,执行

#service mysqld restart

#mysql -uroot -ppassword

mysql> show variables like '%per_table%';

+-----------------------+-------+

| Variable_name         | Value |

+-----------------------+-------+

| innodb_file_per_table | ON    |

+-----------------------+-------+

1 row in set (0.00 sec)





mysql> 



看看innodb_file_per_table变量是否为ON

 

4)删除原数据文件

删除原来的ibdata1文件及日志文件ib_logfile*,删除/var/lib/mysql目录下的应用数据库文件夹(mysql文件夹不要删)

 

5)还原数据库

启动数据库服务

从命令行进入MySQL Server

还原全部数据库,执行命令

#service mysqld start

#mysql -uroot -pocs < /home/backup/all.sql 





经过以上几步后,可以看到新的ibdata1文件就只有几十M了,数据及索引都变成了针对单个表的小ibd文件了,它们在相应数据库的文件夹下面。





# ll

total 295028

drwx------  2 mysql mysql     36864 Apr 22 14:16 glpi

drwx------  2 mysql mysql     36864 Feb 15 13:45 glpi-1

-rw-rw----  1 mysql mysql  10485760 Apr 22 14:27 ibdata1

-rw-rw----. 1 mysql mysql 270532608 Apr 22 14:14 ibdata1-1

-rw-rw----  1 mysql mysql   5242880 Apr 22 14:27 ib_logfile0

-rw-rw----. 1 mysql mysql   5242880 Apr 22 14:14 ib_logfile0_bak

-rw-rw----  1 mysql mysql   5242880 Apr 22 14:28 ib_logfile1

-rw-rw----. 1 mysql mysql   5242880 Apr 21 22:50 ib_logfile1_bak

drwx------  2 mysql mysql      4096 Apr 22 14:16 mrbs

drwx------  2 mysql mysql      4096 Apr 14 12:05 mrbs-1

drwx------. 2 mysql mysql      4096 Apr 22 14:16 mysql

srwxrwxrwx  1 mysql mysql         0 Apr 22 14:16 mysql.sock

drwx------  2 mysql mysql     12288 Apr 22 14:16 ocsweb

drwx------  2 mysql mysql     12288 Nov 16  2011 ocsweb-1





# ll mrbs

total 808

-rw-rw---- 1 mysql mysql     61 Apr 22 14:16 db.opt

-rw-rw---- 1 mysql mysql  10492 Apr 22 14:16 mrbs_area.frm

-rw-rw---- 1 mysql mysql  98304 Apr 22 14:16 mrbs_area.ibd

-rw-rw---- 1 mysql mysql   9264 Apr 22 14:16 mrbs_entry.frm

-rw-rw---- 1 mysql mysql 131072 Apr 22 14:16 mrbs_entry.ibd

-rw-rw---- 1 mysql mysql   9442 Apr 22 14:16 mrbs_repeat.frm

-rw-rw---- 1 mysql mysql  98304 Apr 22 14:16 mrbs_repeat.ibd

-rw-rw---- 1 mysql mysql   8888 Apr 22 14:16 mrbs_room.frm

-rw-rw---- 1 mysql mysql 114688 Apr 22 14:16 mrbs_room.ibd

-rw-rw---- 1 mysql mysql   8688 Apr 22 14:16 mrbs_users.frm

-rw-rw---- 1 mysql mysql  98304 Apr 22 14:16 mrbs_users.ibd

-rw-rw---- 1 mysql mysql   8658 Apr 22 14:16 mrbs_variables.frm

-rw-rw---- 1 mysql mysql  98304 Apr 22 14:16 mrbs_variables.ibd

-rw-rw---- 1 mysql mysql   8738 Apr 22 14:16 mrbs_zoneinfo.frm

-rw-rw---- 1 mysql mysql  98304 Apr 22 14:16 mrbs_zoneinfo.ibd





# ll mrbs-1

total 88

-rw-rw---- 1 mysql mysql    61 Apr 14 12:05 db.opt

-rw-rw---- 1 mysql mysql 10492 Apr 14 12:05 mrbs_area.frm

-rw-rw---- 1 mysql mysql  9264 Apr 14 12:05 mrbs_entry.frm

-rw-rw---- 1 mysql mysql  9442 Apr 14 12:05 mrbs_repeat.frm

-rw-rw---- 1 mysql mysql  8888 Apr 14 12:05 mrbs_room.frm

-rw-rw---- 1 mysql mysql  8688 Apr 14 12:05 mrbs_users.frm

-rw-rw---- 1 mysql mysql  8658 Apr 14 12:05 mrbs_variables.frm

-rw-rw---- 1 mysql mysql  8738 Apr 14 12:05 mrbs_zoneinfo.frm

发表在 db | 标签为 | MySql ibdata1文件已关闭评论

网上找到的一个 dot net X509 证书生成类

网上找到的一个 dot net X509 证书生成类

 

using System;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
using SecureString = System.Security.SecureString;
using RuntimeHelpers = System.Runtime.CompilerServices.RuntimeHelpers;

internal class Certificate
{
    public static byte[] CreateSelfSignCertificatePfx(
        string x500,
        DateTime startTime,
        DateTime endTime)
    {
        byte[] pfxData = CreateSelfSignCertificatePfx(
            x500,
            startTime,
            endTime,
            (SecureString)null);
        return pfxData;
    }

    public static byte[] CreateSelfSignCertificatePfx(
        string x500,
        DateTime startTime,
        DateTime endTime,
        string insecurePassword)
    {
        byte[] pfxData;
        SecureString password = null;

        try
        {
            if (!string.IsNullOrEmpty(insecurePassword))
            {
                password = new SecureString();
                foreach (char ch in insecurePassword)
                {
                    password.AppendChar(ch);
                }

                password.MakeReadOnly();
            }

            pfxData = CreateSelfSignCertificatePfx(
                x500,
                startTime,
                endTime,
                password);
        }
        finally
        {
            if (password != null)
            {
                password.Dispose();
            }
        }

        return pfxData;
    }

    public static byte[] CreateSelfSignCertificatePfx(
        string x500,
        DateTime startTime,
        DateTime endTime,
        SecureString password)
    {
        byte[] pfxData;

        if (x500 == null)
        {
            x500 = "";
        }

        SystemTime startSystemTime = ToSystemTime(startTime);
        SystemTime endSystemTime = ToSystemTime(endTime);
        string containerName = Guid.NewGuid().ToString();

        GCHandle dataHandle = new GCHandle();
        IntPtr providerContext = IntPtr.Zero;
        IntPtr cryptKey = IntPtr.Zero;
        IntPtr certContext = IntPtr.Zero;
        IntPtr certStore = IntPtr.Zero;
        IntPtr storeCertContext = IntPtr.Zero;
        IntPtr passwordPtr = IntPtr.Zero;
        RuntimeHelpers.PrepareConstrainedRegions();
        try
        {
            Check(NativeMethods.CryptAcquireContextW(
                out providerContext,
                containerName,
                null,
                1, // PROV_RSA_FULL
                8)); // CRYPT_NEWKEYSET

            Check(NativeMethods.CryptGenKey(
                providerContext,
                1, // AT_KEYEXCHANGE
                1, // CRYPT_EXPORTABLE
                out cryptKey));

            IntPtr errorStringPtr;
            int nameDataLength = 0;
            byte[] nameData;

            // errorStringPtr gets a pointer into the middle of the x500 string,
            // so x500 needs to be pinned until after we've copied the value
            // of errorStringPtr.
            dataHandle = GCHandle.Alloc(x500, GCHandleType.Pinned);

            if (!NativeMethods.CertStrToNameW(
                0x00010001, // X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
                dataHandle.AddrOfPinnedObject(),
                3, // CERT_X500_NAME_STR = 3
                IntPtr.Zero,
                null,
                ref nameDataLength,
                out errorStringPtr))
            {
                string error = Marshal.PtrToStringUni(errorStringPtr);
                throw new ArgumentException(error);
            }

            nameData = new byte[nameDataLength];

            if (!NativeMethods.CertStrToNameW(
                0x00010001, // X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
                dataHandle.AddrOfPinnedObject(),
                3, // CERT_X500_NAME_STR = 3
                IntPtr.Zero,
                nameData,
                ref nameDataLength,
                out errorStringPtr))
            {
                string error = Marshal.PtrToStringUni(errorStringPtr);
                throw new ArgumentException(error);
            }

            dataHandle.Free();
            
            dataHandle = GCHandle.Alloc(nameData, GCHandleType.Pinned);
            CryptoApiBlob nameBlob = new CryptoApiBlob(
                nameData.Length,
                dataHandle.AddrOfPinnedObject());

            CryptKeyProviderInformation kpi = new CryptKeyProviderInformation();
            kpi.ContainerName = containerName;
            kpi.ProviderType = 1; // PROV_RSA_FULL
            kpi.KeySpec = 1; // AT_KEYEXCHANGE

            certContext = NativeMethods.CertCreateSelfSignCertificate(
                providerContext,
                ref nameBlob,
                0,
                ref kpi,
                IntPtr.Zero, // default = SHA1RSA
                ref startSystemTime,
                ref endSystemTime,
                IntPtr.Zero);
            Check(certContext != IntPtr.Zero);
            dataHandle.Free();

            certStore = NativeMethods.CertOpenStore(
                "Memory", // sz_CERT_STORE_PROV_MEMORY
                0,
                IntPtr.Zero,
                0x2000, // CERT_STORE_CREATE_NEW_FLAG
                IntPtr.Zero);
            Check(certStore != IntPtr.Zero);

            Check(NativeMethods.CertAddCertificateContextToStore(
                certStore,
                certContext,
                1, // CERT_STORE_ADD_NEW
                out storeCertContext));

            NativeMethods.CertSetCertificateContextProperty(
                storeCertContext,
                2, // CERT_KEY_PROV_INFO_PROP_ID
                0,
                ref kpi);

            if (password != null)
            {
                passwordPtr = Marshal.SecureStringToCoTaskMemUnicode(password);
            }

            CryptoApiBlob pfxBlob = new CryptoApiBlob();
            Check(NativeMethods.PFXExportCertStoreEx(
                certStore,
                ref pfxBlob,
                passwordPtr,
                IntPtr.Zero,
                7)); // EXPORT_PRIVATE_KEYS | REPORT_NO_PRIVATE_KEY | REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY

            pfxData = new byte[pfxBlob.DataLength];
            dataHandle = GCHandle.Alloc(pfxData, GCHandleType.Pinned);
            pfxBlob.Data = dataHandle.AddrOfPinnedObject();
            Check(NativeMethods.PFXExportCertStoreEx(
                certStore,
                ref pfxBlob,
                passwordPtr,
                IntPtr.Zero,
                7)); // EXPORT_PRIVATE_KEYS | REPORT_NO_PRIVATE_KEY | REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY
            dataHandle.Free();
        }
        finally
        {
            if (passwordPtr != IntPtr.Zero)
            {
                Marshal.ZeroFreeCoTaskMemUnicode(passwordPtr);
            }

            if (dataHandle.IsAllocated)
            {
                dataHandle.Free();
            }

            if (certContext != IntPtr.Zero)
            {
                NativeMethods.CertFreeCertificateContext(certContext);
            }

            if (storeCertContext != IntPtr.Zero)
            {
                NativeMethods.CertFreeCertificateContext(storeCertContext);
            }

            if (certStore != IntPtr.Zero)
            {
                NativeMethods.CertCloseStore(certStore, 0);
            }

            if (cryptKey != IntPtr.Zero)
            {
                NativeMethods.CryptDestroyKey(cryptKey);
            }

            if (providerContext != IntPtr.Zero)
            {
                NativeMethods.CryptReleaseContext(providerContext, 0);
                NativeMethods.CryptAcquireContextW(
                    out providerContext,
                    containerName,
                    null,
                    1, // PROV_RSA_FULL
                    0x10); // CRYPT_DELETEKEYSET
            }
        }

        return pfxData;
    }

    private static SystemTime ToSystemTime(DateTime dateTime)
    {
        long fileTime = dateTime.ToFileTime();
        SystemTime systemTime;
        Check(NativeMethods.FileTimeToSystemTime(ref fileTime, out systemTime));
        return systemTime;
    }

    private static void Check(bool nativeCallSucceeded)
    {
        if (!nativeCallSucceeded)
        {
            int error = Marshal.GetHRForLastWin32Error();
            Marshal.ThrowExceptionForHR(error);
        }
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct SystemTime
    {
        public short Year;
        public short Month;
        public short DayOfWeek;
        public short Day;
        public short Hour;
        public short Minute;
        public short Second;
        public short Milliseconds;
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct CryptoApiBlob
    {
        public int DataLength;
        public IntPtr Data;

        public CryptoApiBlob(int dataLength, IntPtr data)
        {
            this.DataLength = dataLength;
            this.Data = data;
        }
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct CryptKeyProviderInformation
    {
        [MarshalAs(UnmanagedType.LPWStr)] public string ContainerName;
        [MarshalAs(UnmanagedType.LPWStr)] public string ProviderName;
        public int ProviderType;
        public int Flags;
        public int ProviderParameterCount;
        public IntPtr ProviderParameters; // PCRYPT_KEY_PROV_PARAM
        public int KeySpec;
    }

    private static class NativeMethods
    {
        [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool FileTimeToSystemTime(
            [In] ref long fileTime,
            out SystemTime systemTime);

        [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CryptAcquireContextW(
            out IntPtr providerContext,
            [MarshalAs(UnmanagedType.LPWStr)] string container,
            [MarshalAs(UnmanagedType.LPWStr)] string provider,
            int providerType,
            int flags);

        [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CryptReleaseContext(
            IntPtr providerContext,
            int flags);

        [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CryptGenKey(
            IntPtr providerContext,
            int algorithmId,
            int flags,
            out IntPtr cryptKeyHandle);

        [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CryptDestroyKey(
            IntPtr cryptKeyHandle);

        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CertStrToNameW(
            int certificateEncodingType,
            IntPtr x500,
            int strType,
            IntPtr reserved,
            [MarshalAs(UnmanagedType.LPArray)] [Out] byte[] encoded,
            ref int encodedLength,
            out IntPtr errorString);

        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]
        public static extern IntPtr CertCreateSelfSignCertificate(
            IntPtr providerHandle,
            [In] ref CryptoApiBlob subjectIssuerBlob,
            int flags,
            [In] ref CryptKeyProviderInformation keyProviderInformation,
            IntPtr signatureAlgorithm,
            [In] ref SystemTime startTime,
            [In] ref SystemTime endTime,
            IntPtr extensions);

        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CertFreeCertificateContext(
            IntPtr certificateContext);

        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]
        public static extern IntPtr CertOpenStore(
            [MarshalAs(UnmanagedType.LPStr)] string storeProvider,
            int messageAndCertificateEncodingType,
            IntPtr cryptProvHandle,
            int flags,
            IntPtr parameters);

        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CertCloseStore(
            IntPtr certificateStoreHandle,
            int flags);

        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CertAddCertificateContextToStore(
            IntPtr certificateStoreHandle,
            IntPtr certificateContext,
            int addDisposition,
            out IntPtr storeContextPtr);

        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CertSetCertificateContextProperty(
            IntPtr certificateContext,
            int propertyId,
            int flags,
            [In] ref CryptKeyProviderInformation data);

        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool PFXExportCertStoreEx(
            IntPtr certificateStoreHandle,
            ref CryptoApiBlob pfxBlob,
            IntPtr password,
            IntPtr reserved,
            int flags);
    }
}

 

发表在 .net | 标签为 | 网上找到的一个 dot net X509 证书生成类已关闭评论

Adf 开发项目结构建议

共享程序集位置

所有开发人员必需具有,c:\develop\bin 目录,此目录用于存放共享程序集、第三方插件集等程序集,此目录由应该使用 https://svn.aooshi.org:8080/svn/adf/bin  导出/检出。若有共享库,第三方库均应签入此版本管理库中

若遇个别项目无法生成,缺少程序集,可SVN Update 此目录
 

WEB项目标准结构

所有项目标准结构如下(Example 为项目名举例)

建立 Web Application 项目, 项目名为  Example

Example

n  Logic                    逻辑层目录

n  PageBase.cs             通用网页基类

n  Helper.cs                    通用工具库

n  Entity                            实体目录

n  SqlServer                     SqlServer 数据库访问代码目录(项目SqlServer时存在)

n  Factory.cs                  数据库连接器

n  Mysql                           MySql 数据库访问代码目录(项目MySql 时存在)

n  Api                                          接口所在目录,统一使用 ashx 一般应用程序,ajax接口

n  Config                                    配置文件目录(非必需)

n  Static                                               项目用静态文件地址

n  styles                          样式、字体文件目录(注意:小写严格遵守)

n  images                        项目用图片目录(注意:小写严格遵守)

n  scripts                         脚本目录(注意:小写严格遵守)

n  Upfiles                                   文件上传目录(若需要)

n  Alipay                                     支付宝所有接口目录(仅一级)(项目需要时存在)

n  Users                                              项目用户目录(大量操作时使用)

n  Index.aspx                                     索引首页(所有项目均以Index.aspx为首页)

 

根据以上规则,所有对外接口项目均建立一个目录,除特殊性况外,均使用一级目录。

遵循以上目录结构,每一个大模块均建立一级目录用于存储。

常规项目所有网页文件均存放至根目录,不建立块项目录,当某个模块网页量大于100或特殊安全要求,商议建立目录

数据库目录下(如: SqlServer/MySql)基本保证每表一类,Logic目录为逻辑类,以模块划分,比如: 用户,日志,支付等

项目参考: https://svn.aooshi.org:8080/svn/adf/tags/examples/

 

数据访问与ADF框架

除数据库目录文件外(如:SqlServer目录),不允许在其它位置出现Sql语句,如: 网页中。

 

所有进行直接拼接的语句,只要参数为字符串必需进行 安全转换(db. InjectReplace

 

统一使用ADF 数据操作基类进行数据访问,代码地址: http://www.aooshi.org/adf

 

在线帮助: http://www.aooshi.org/adf/help

离线帮助: http://www.aooshi.org/adf/help/Adf.Documentation.chm

实体生成器: http://www.aooshi.org/adf/db/download/

 

使用方式参考 Example 项目

实体生成方式:

实体生成器下载后解压, 配置Adf.Db.Desktop.exe.config 文件

connectionStrings 节点添加一个数据库连接,名字为库名,此处以Example为例

DbMap 节点添加一项:

1、  名字为项目名字(Example)

2、  target为刚添加的数据库名

3、  namespace 为你的项目+Entity (如:Example.Entity)

4、  factory 为你的数据库操作类(如:Example.DbFactory

<add name="Example" target="Example"

namespace=" Example.Entity " factory=" Example.DbFactory "/>

 

注意:BaseClass 配置项,若需要进行实体类更新需则需要填写 DbEntity, 否则该项中不应出现此值

 

假定一个数据库连接:  192.168.1.200,  ID=sa,  pwd=sa 示例:

<connectionStrings>

<add name="Example"

connectionString="Data Source=192.168.1.200;User Id=sa;Password=sa;Initial Catalog=Example;"

providerName="SQLServer"/>

  </connectionStrings>

  <DbMap>

<add name="Example" target="Example" namespace="Example.Entity"

logicnamespace="Example.Logic" factory="Example.DbFactory"/>

  </DbMap>

 

配置后保存,双击 Adf.Db.Desktop.exe 运行

 

点击查看原图

点击查看原图

点击查看原图

复制代码至你的项目或  Save As 存储文件

 

基本表方法生成:

点击查看原图

点击查看原图

复制代码至你的项目相应DB文件或  Save As 存储文件

 

 

 

 

发表在 adf | 标签为 | Adf 开发项目结构建议已关闭评论