架构设计
![](/icons/50322de.gif)
几个心得体会:
![](/icons/50322yi.gif)
![](/icons/50322dou.gif)
不要过设计:never over design
这是
![](/icons/50322yi.gif)
个常常被提及
![](/icons/50322de.gif)
话题
![](/icons/50322dou.gif)
但是只要想想你
![](/icons/50322de.gif)
架构里有多少功能是根本没有用到
![](/icons/50322dou.gif)
或者最后废弃
![](/icons/50322de.gif)
![](/icons/50322dou.gif)
就能明白其重要性了
![](/icons/50322dou.gif)
初涉架构设计
![](/icons/50322dou.gif)
往往倾向于设计大而化
![](/icons/50322yi.gif)
![](/icons/50322de.gif)
架构
![](/icons/50322dou.gif)
希望设计出具有无比扩展性
![](/icons/50322dou.gif)
能适应
![](/icons/50322yi.gif)
切需求
![](/icons/50322de.gif)
增加架构
![](/icons/50322dou.gif)
web开发领域是个非常动态
![](/icons/50322de.gif)
过程
![](/icons/50322dou.gif)
我们很难预测下个星期
![](/icons/50322de.gif)
变化
![](/icons/50322dou.gif)
而又需要对变化做出最快最有效
![](/icons/50322de.gif)
响应
![](/icons/50322dou2.gif)
ebay
![](/icons/50322de.gif)
工程师说过
![](/icons/50322dou.gif)
他们
![](/icons/50322de.gif)
架构设计从来都不能满足系统
![](/icons/50322de.gif)
增长
![](/icons/50322dou.gif)
所以他们
![](/icons/50322de.gif)
系统永远都在推翻重做
![](/icons/50322dou2.gif)
请注意
![](/icons/50322dou.gif)
不是ebay架构师
![](/icons/50322de.gif)
能力有问题
![](/icons/50322dou.gif)
他们设计
![](/icons/50322de.gif)
架构总是建立旧版本
![](/icons/50322de.gif)
瓶颈上
![](/icons/50322dou.gif)
希望通过新
![](/icons/50322de.gif)
架构带来突破
![](/icons/50322dou.gif)
然而新架构带来
![](/icons/50322de.gif)
突破总是在很短
![](/icons/50322de.gif)
时间内就被新增需求淹没
![](/icons/50322dou.gif)
于是他们不得不又使用新
![](/icons/50322de.gif)
架构
web开发
![](/icons/50322dou.gif)
是个非常敏捷
![](/icons/50322de.gif)
过程
![](/icons/50322dou.gif)
变化随时都在产生
![](/icons/50322dou.gif)
用户需求千变万化
![](/icons/50322dou.gif)
许多方面偶然性非常高
![](/icons/50322dou.gif)
较的软件Software开发
![](/icons/50322dou.gif)
希望用
![](/icons/50322yi.gif)
个架构规划以后
![](/icons/50322de.gif)
所有设计
![](/icons/50322dou.gif)
是不现实
2
![](/icons/50322dou.gif)
web架构生命周期:web architecture‘s l
![](/icons/50322if.gif)
e cycle
既然要杜绝过设计
![](/icons/50322dou.gif)
又要保证
![](/icons/50322yi.gif)
定
![](/icons/50322de.gif)
前瞻性
![](/icons/50322dou.gif)
那么如何才能找到其中
![](/icons/50322de.gif)
平衡呢?希望下面
![](/icons/50322de.gif)
web架构生命周期能够帮到你
![WEB架构设计经验分享](http://www.crazycoder.cn/WebFiles/20092/e36892f1-7989-4b3f-b64f-0cb1149adddb.g<img src='/icons/50322if.gif' />)
设计
![](/icons/50322de.gif)
架构需要在1-10倍
![](/icons/50322de.gif)
增长下
![](/icons/50322dou.gif)
通过简单
![](/icons/50322de.gif)
增加硬件容量就能够胜任
![](/icons/50322dou.gif)
而在5-10倍
![](/icons/50322de.gif)
增长期间
![](/icons/50322dou.gif)
请着手下
![](/icons/50322yi.gif)
个版本
![](/icons/50322de.gif)
架构设计
![](/icons/50322dou.gif)
使的能承受下
![](/icons/50322yi.gif)
个10倍间
![](/icons/50322de.gif)
增长
google的所以能够称霸
![](/icons/50322dou.gif)
不完全是
![](/icons/50322yinwei.gif)
搜索技术和排序技术有多先进
![](/icons/50322dou.gif)
其实包括baidu和yahoo
![](/icons/50322dou.gif)
所使用
![](/icons/50322de.gif)
技术现在也已经大同小异
![](/icons/50322dou.gif)
然而
![](/icons/50322dou.gif)
google能在
![](/icons/50322yi.gif)
个月内通过增加上万台服务器来达到足够系统容量
![](/icons/50322de.gif)
能力确是很难被复制
3
![](/icons/50322dou.gif)
缓存Cache:Cache
空间换取时间
![](/icons/50322dou.gif)
缓存Cache永远计算机设计
![](/icons/50322de.gif)
重中的重
![](/icons/50322dou.gif)
从cpu到io
![](/icons/50322dou.gif)
到处都可以看到缓存Cache
![](/icons/50322de.gif)
身影
![](/icons/50322dou.gif)
web架构设计重
![](/icons/50322dou.gif)
缓存Cache设计必不可少
![](/icons/50322dou.gif)
有关怎样设计合理
![](/icons/50322de.gif)
缓存Cache
![](/icons/50322dou.gif)
jbosscache
![](/icons/50322de.gif)
创始人
![](/icons/50322dou.gif)
淘宝
![](/icons/50322de.gif)
创始人是这样说
![](/icons/50322de.gif)
:其实设计web缓存Cache和企业级缓存Cache是非常区别
![](/icons/50322de.gif)
![](/icons/50322dou.gif)
企业级缓存Cache偏重于逻辑
![](/icons/50322dou.gif)
而web缓存Cache
![](/icons/50322dou.gif)
简单快速为好
![](/icons/50322dou2.gif)
缓存Cache带来
![](/icons/50322de.gif)
问题是什么?是
![](/icons/50322chengxu.gif)
![](/icons/50322de.gif)
复杂度上升
![](/icons/50322dou.gif)
![](/icons/50322yinwei.gif)
数据散布在多个进程
![](/icons/50322dou.gif)
所以同步就是
![](/icons/50322yi.gif)
个麻烦
![](/icons/50322de.gif)
问题
![](/icons/50322dou.gif)
加上集群
![](/icons/50322dou.gif)
复杂度会进
![](/icons/50322yi.gif)
步提高
![](/icons/50322dou.gif)
在实际运用中
![](/icons/50322dou.gif)
采用怎样
![](/icons/50322de.gif)
同步策略常常需要和业务绑定
老钱为搜狐设计
![](/icons/50322de.gif)
帖子设计了链表缓存Cache
![](/icons/50322dou.gif)
这样既可以满足灵活插入
![](/icons/50322de.gif)
需要
![](/icons/50322dou.gif)
又能够快速阅读
![](/icons/50322dou.gif)
而其他
![](/icons/50322yi.gif)
些大型社区也经常采用类此
![](/icons/50322de.gif)
结构来优化帖子列表
![](/icons/50322dou.gif)
memcache也是
![](/icons/50322yi.gif)
个常常用到
![](/icons/50322de.gif)
工具
钱宏武谈架构设计视频 http://211.100.26.82/CSDN_Live/140/qhw.flv
Cache
![](/icons/50322de.gif)
常用
![](/icons/50322de.gif)
策略是:让数据在内存中
![](/icons/50322dou.gif)
而不是在比较耗时
![](/icons/50322de.gif)
磁盘上
![](/icons/50322dou2.gif)
从这个角度讲
![](/icons/50322dou.gif)
mysql提供
![](/icons/50322de.gif)
heap引擎(存储方式)也是
![](/icons/50322yi.gif)
个值得研究
![](/icons/50322de.gif)
思路方法,这种存储思路方法可以把数据存储在内存中,并且保留sql强大
![](/icons/50322de.gif)
查询能力,是不是
![](/icons/50322yi.gif)
举两得呢?
我们这里只说到了读缓存Cache
![](/icons/50322dou.gif)
其实还有
![](/icons/50322yi.gif)
种写缓存Cache
![](/icons/50322dou.gif)
在以内容为主
![](/icons/50322de.gif)
社区里比较少用到
![](/icons/50322dou.gif)
![](/icons/50322yinwei.gif)
这样
![](/icons/50322de.gif)
社区最主要需要解决
![](/icons/50322de.gif)
问题是读问题
![](/icons/50322dou.gif)
但是在处理能力低于请求能力时
![](/icons/50322dou.gif)
或者单个希望请求先被缓存Cache形成块
![](/icons/50322dou.gif)
然后批量处理时
![](/icons/50322dou.gif)
写缓存Cache就出现了
![](/icons/50322dou.gif)
在交互性很强
![](/icons/50322de.gif)
社区设计里我们很容易找到这样
![](/icons/50322de.gif)
缓存Cache
4
![](/icons/50322dou.gif)
核心模块
![](/icons/50322yi.gif)
定要自己开发:DIY your core module
这点我们是深有体会
![](/icons/50322dou.gif)
钱宏武和云风也都有谈到
![](/icons/50322dou.gif)
我们经常倾向于使用
![](/icons/50322yi.gif)
些开源模块
![](/icons/50322dou.gif)
如果不涉及核心模块
![](/icons/50322dou.gif)
确实是可以
![](/icons/50322de.gif)
![](/icons/50322dou.gif)
如果涉及
![](/icons/50322dou.gif)
那么就要小心了
![](/icons/50322dou.gif)
![](/icons/50322yinwei.gif)
当访问量达到
![](/icons/50322yi.gif)
定
![](/icons/50322de.gif)
程度
![](/icons/50322dou.gif)
这些模块往往都有这样那样
![](/icons/50322de.gif)
问题
![](/icons/50322dou.gif)
当然我们可以把问题归结为对开源
![](/icons/50322de.gif)
模块不熟悉
![](/icons/50322dou.gif)
但是不管怎样
![](/icons/50322dou.gif)
核心出现问题
![](/icons/50322de.gif)
时候
![](/icons/50322dou.gif)
不能完全掌握其代码是非常可怕
5
![](/icons/50322dou.gif)
合理选择数据存储方式:reasonable data storage
我们
![](/icons/50322yi.gif)
定要使用数据库吗
![](/icons/50322dou.gif)
不
![](/icons/50322yi.gif)
定
![](/icons/50322dou.gif)
雷鸣告诉我们搜索不
![](/icons/50322yi.gif)
定需要数据库
![](/icons/50322dou.gif)
云风告诉我们
![](/icons/50322dou.gif)
游戏不
![](/icons/50322yi.gif)
定需要数据库
![](/icons/50322dou.gif)
那么什么时候我们才需要数据库呢
![](/icons/50322dou.gif)
为什么不干脆用文件来代替他呢?
首先我们需要先承认
![](/icons/50322dou.gif)
数据库也是对文件进行操作
![](/icons/50322dou2.gif)
我们需要数据库
![](/icons/50322dou.gif)
主要是使用下面这几个功能
![](/icons/50322dou.gif)
![](/icons/50322yi.gif)
个是数据存储
![](/icons/50322dou.gif)
![](/icons/50322yi.gif)
个是数据检索
![](/icons/50322dou.gif)
在关系数据库中
![](/icons/50322dou.gif)
我们其实非常在乎数据库
![](/icons/50322de.gif)
复杂搜索
![](/icons/50322de.gif)
能力
![](/icons/50322dou.gif)
看看
![](/icons/50322yi.gif)
个统计用
![](/icons/50322de.gif)
tsql就知道了(不用仔细读,扫
![](/icons/50322yi.gif)
眼就可以了)
select c.Class_name,d.Class_name_2,a.Creativity_Title,b.User_name,(select count(Id) from review where Reviewid=a.Id) as countNum from Creativity as a,User_info as b,
![](/icons/50322class.gif)
as c,
![](/icons/50322class.gif)
2 as d where a.user_id=b.id and a.Creativity_Class=c.Id and a.Creativity_Class_2=d.Id
select a.Id,max(c.Class_name),(max(d.Class_name_2),max(a.Creativity_Title),max(b.User_name),count(e.Id) as countNum from Creativity as a,User_info as b,
![](/icons/50322class.gif)
as c,
![](/icons/50322class.gif)
2 as d,review as e where a.user_id=b.id and a.Creativity_Class=c.Id and a.Creativity_Class_2=d.Id and a.Id=e.Reviewid group by a.Id ..............................................
我们可以看出需要数据库关联
![](/icons/50322dou.gif)
排序
![](/icons/50322de.gif)
能力
![](/icons/50322dou.gif)
这个能力在某些情况下非常重要
![](/icons/50322dou.gif)
但是如果你
![](/icons/50322de.gif)
网站WebSite
![](/icons/50322de.gif)
常规操作
![](/icons/50322dou.gif)
全是这样复杂
![](/icons/50322de.gif)
逻辑
![](/icons/50322dou.gif)
那效率
![](/icons/50322yi.gif)
定是非常低
![](/icons/50322de.gif)
![](/icons/50322dou.gif)
所以我们常常在数据库里加入许多冗余字段
![](/icons/50322dou.gif)
来减小简单查询时关联等操作带来
![](/icons/50322de.gif)
压力
![](/icons/50322dou.gif)
我们看看下面这张图
![](/icons/50322dou.gif)
可以看到数据库
![](/icons/50322de.gif)
设计重心
![](/icons/50322dou.gif)
和网站WebSite(指内容型社区)需要面对
![](/icons/50322de.gif)
问题实际是有
![](/icons/50322yi.gif)
些偏差
![WEB架构设计经验分享](http://www.crazycoder.cn/WebFiles/20092/dfb8fe59-79e1-4a37-a436-e011b566b692.g<img src='/icons/50322if.gif' />)
同样其他
![](/icons/50322yi.gif)
些软件Software产品也遇到同样
![](/icons/50322de.gif)
问题所以具我了解
![](/icons/50322dou.gif)
有许多特殊
![](/icons/50322de.gif)
运用都有自己设计
![](/icons/50322de.gif)
特殊数据存储结构和思路方法
![](/icons/50322dou.gif)
比如有
![](/icons/50322de.gif)
大型服务
![](/icons/50322chengxu.gif)
采取树形数据存储结构
![](/icons/50322dou.gif)
lucene使用文件来存储索引和文件
从另外
![](/icons/50322yi.gif)
个角度上看
![](/icons/50322dou.gif)
使用数据库
![](/icons/50322dou.gif)
意味着数据和表现是完全分离
![](/icons/50322de.gif)
(这当然是经典
![](/icons/50322de.gif)
设计思路)
![](/icons/50322dou.gif)
也就是说当需要展示数据时
![](/icons/50322dou.gif)
不得不需要
![](/icons/50322yi.gif)
个转换
![](/icons/50322de.gif)
过程
![](/icons/50322dou.gif)
也可以说是绑定
![](/icons/50322de.gif)
过程
![](/icons/50322dou.gif)
当网站WebSite具备
![](/icons/50322yi.gif)
定规模
![](/icons/50322de.gif)
时候
![](/icons/50322dou.gif)
数据库往往成为效率
![](/icons/50322de.gif)
瓶颈
![](/icons/50322dou.gif)
所以许多网站WebSite也采用直接书写静态文件
![](/icons/50322de.gif)
思路方法来避免读取操作时
![](/icons/50322de.gif)
绑定
这并不是说我们从今天起就可以把我们亲爱
![](/icons/50322de.gif)
数据库打入冷宫
![](/icons/50322dou.gif)
而是我们在设计数据
![](/icons/50322de.gif)
持久化时
![](/icons/50322dou.gif)
需要根据实际情况来选择存储方式
![](/icons/50322dou.gif)
而数据库不过是其中
![](/icons/50322yi.gif)
个选项
6
![](/icons/50322dou.gif)
搞清楚谁是最重要
![](/icons/50322de.gif)
人:who's the most important guy
在用例需求分析
![](/icons/50322de.gif)
时候常常讲到涉众
![](/icons/50322dou.gif)
就是和你
![](/icons/50322de.gif)
设计息息相关
![](/icons/50322de.gif)
人
![](/icons/50322dou.gif)
在web中我们
![](/icons/50322yi.gif)
定以为最重要
![](/icons/50322de.gif)
涉众莫过于用户了
![](/icons/50322dou2.gif)
![](/icons/50322dou.gif)
在
![](/icons/50322yi.gif)
个传统
![](/icons/50322de.gif)
互动社区开发中
![](/icons/50322dou.gif)
最重要
![](/icons/50322de.gif)
东西是内容
![](/icons/50322dou.gif)
用户产生内容
![](/icons/50322dou.gif)
所以用户就是上帝
![](/icons/50322dou.gif)
至于内容挑选工具
![](/icons/50322dou.gif)
不就是给坐我后面 3排
![](/icons/50322de.gif)
妹妹们用
![](/icons/50322de.gif)
吗?凑或行了
![](/icons/50322dou.gif)
实在有问题我就在数据里手动帮你加得了
![](/icons/50322dou2.gif)
![](/icons/50322dou2.gif)
这大概是眼下许多小型甚至中型网站WebSite技术人员
![](/icons/50322de.gif)
普遍想法
![](/icons/50322dou2.gif)
钱宏武在他
![](/icons/50322de.gif)
讲座里谈到了这个问题:实际上网站WebSite每天产生
![](/icons/50322de.gif)
内容非常
![](/icons/50322de.gif)
多
![](/icons/50322dou.gif)
普通人是不可能看完
![](/icons/50322de.gif)
![](/icons/50322dou.gif)
而编辑负责把精华
![](/icons/50322de.gif)
内容推荐到首页上
![](/icons/50322dou.gif)
所以很多用户读到
![](/icons/50322de.gif)
内容其实都依赖于编辑
![](/icons/50322de.gif)
推荐
![](/icons/50322dou.gif)
所以设计让编辑工作方便
![](/icons/50322de.gif)
工具也是非常重要
![](/icons/50322dou.gif)
有时甚至是最重要
![](/icons/50322de.gif)
7
![](/icons/50322dou.gif)
不要执着于文档:don't be crazy about document
web开发
![](/icons/50322de.gif)
文档重要吗?什么文档最重要?我
![](/icons/50322de.gif)
看法是web开发中交流>文档
现在大
![](/icons/50322de.gif)
软件Software公司比较流行
![](/icons/50322de.gif)
做法是:
注重产品设计文档
![](/icons/50322dou.gif)
在这种思路方法里
![](/icons/50322dou.gif)
产品文档非常详尽
![](/icons/50322dou.gif)
并且没有歧义
![](/icons/50322dou.gif)
开发人员基于设计文档开发
![](/icons/50322dou.gif)
测试人员基于设计文档制定测试方案
![](/icons/50322dou.gif)
任何新人都可以通过阅读产品设计文档来了解项目
![](/icons/50322de.gif)
概况
而web项目从概念到实现
![](/icons/50322de.gif)
时间是非常短
![](/icons/50322de.gif)
![](/icons/50322dou.gif)
而且越短越好
![](/icons/50322dou.gif)
并且由于变化迅速
![](/icons/50322dou.gif)
要想写出完整
![](/icons/50322de.gif)
产品和需求文档是几乎不可能
![](/icons/50322de.gif)
![](/icons/50322dou.gif)
大多数情况是等你写出完备
![](/icons/50322de.gif)
文档
![](/icons/50322dou.gif)
项目早就是另外
![](/icons/50322yi.gif)
个样子
![](/icons/50322dou.gif)
但是没有文档
![](/icons/50322de.gif)
问题是
![](/icons/50322dou.gif)
如果团队(Team)发生变化
![](/icons/50322dou.gif)
添加新成员怎样才能了解软件Software
![](/icons/50322de.gif)
结构和概念呢
![](/icons/50322dou.gif)
![](/icons/50322yi.gif)
种是每个人都了解软件Software
![](/icons/50322de.gif)
整个结构
![](/icons/50322dou.gif)
除非你
![](/icons/50322de.gif)
团队(Team)整体消失
![](/icons/50322dou.gif)
否则任何
![](/icons/50322yi.gif)
个人都能够担当培养新人
![](/icons/50322de.gif)
责任
![](/icons/50322dou.gif)
这种face2face交流比文档有效率很多
于是就有了前office开发者
![](/icons/50322dou.gif)
现任yahoo中国某产品开发负责人
![](/icons/50322de.gif)
刘振飞所感觉到
![](/icons/50322de.gif)
落差
![](/icons/50322dou.gif)
他说
![](/icons/50322dou.gif)
我们
![](/icons/50322de.gif)
项目是吵出来
![](/icons/50322de.gif)
![](/icons/50322dou.gif)
我听完会心
![](/icons/50322yi.gif)
笑
8
![](/icons/50322dou.gif)
团队(Team):team
不要专家团队(Team)
![](/icons/50322dou.gif)
而要外科手术式
![](/icons/50322de.gif)
团队(Team),你
![](/icons/50322de.gif)
团队(Team)里
![](/icons/50322yi.gif)
定要有清道夫
![](/icons/50322dou.gif)
需要有弓箭手
![](/icons/50322dou.gif)
让他们和项目
![](/icons/50322yi.gif)
起成长
![](/icons/50322dou.gif)
才是项目负责人
![](/icons/50322de.gif)
最大成就
整理总结:
0)架构是
![](/icons/50322yi.gif)
种权衡
![WEB架构设计经验分享](http://www.crazycoder.cn/WebFiles/20092/649cb015-8065-4341-9fe5-83dc22c77b87.g<img src='/icons/50322if.gif' />)
1)web开发
![](/icons/50322de.gif)
特点是是:没有太复杂
![](/icons/50322de.gif)
技术难点
![](/icons/50322dou.gif)
![](/icons/50322yi.gif)
切在于迅速
![](/icons/50322de.gif)
把握需求
![](/icons/50322dou.gif)
其实这正式敏捷开发
![](/icons/50322de.gif)
要旨所在
![](/icons/50322dou.gif)
![](/icons/50322yi.gif)
切都可以非常快速
![](/icons/50322de.gif)
建立
![](/icons/50322dou.gif)
非常快速
![](/icons/50322de.gif)
重构
![](/icons/50322dou.gif)
我们
![](/icons/50322de.gif)
开发工具
![](/icons/50322dou.gif)
底层库和框架
![](/icons/50322dou.gif)
包括搜索引擎和web文档提供
![](/icons/50322de.gif)
帮助
![](/icons/50322dou.gif)
都提我们供给了敏捷
![](/icons/50322de.gif)
能力
2)此外
![](/icons/50322dou.gif)
相应
![](/icons/50322de.gif)
![](/icons/50322dou.gif)
最有效率
![](/icons/50322de.gif)
交流方式必须留给web开发
![](/icons/50322dou.gif)
那就是face2face(面对面)
![](/icons/50322dou.gif)
不要太担心你
![](/icons/50322de.gif)
设计不能被完备
![](/icons/50322de.gif)
文档所保留下来
![](/icons/50322dou.gif)
他们会以交流
![](/icons/50322dou.gif)
代码和小卡片
![](/icons/50322de.gif)
方式保存下来
3)人
![](/icons/50322de.gif)
原因会更加重要
![](/icons/50322dou.gif)
无论是对用户
![](/icons/50322de.gif)
需求
![](/icons/50322dou.gif)
还是开发人员
![](/icons/50322de.gif)
素质
另:有关web效率
![](/icons/50322dou.gif)
有著名
![](/icons/50322de.gif)
14条规则
![](/icons/50322dou.gif)
由yahoo性能效率小组所整理总结
![](/icons/50322dou.gif)
并广为流传
![](/icons/50322dou2.gif)
业已出现相关插件(YSlow)
![](/icons/50322dou.gif)
针对具体网页按彼规则评分
![](/icons/50322dou.gif)
这次该小组负责人Tenni Theurer也受邀来到此次大会
![](/icons/50322dou.gif)
我把Tenni小姐(的前真
![](/icons/50322de.gif)
没有想到她是个女孩
![](/icons/50322dou.gif)
并且如此年轻)和她
![](/icons/50322de.gif)
团队(Team)
![](/icons/50322de.gif)
14 rules列在下面
Make Fewer HTTP Requests
Use a Content Delivery Network
Add an Expires Header
Gzip Components
Put CSS at the Top
Move Scripts to the Bottom
Avoid CSS Expressions
Make JavaScript and CSS External
Reduce DNS Lookups
Min
![](/icons/50322if.gif)
y JavaScript
Avoid Redirects
Remove Duplicate Scripts
Configure ETags
Make Ajax Cacheable
通过安装firebug和YSlow这两个firefox插件(请注意要先安装firebug再安装yslow,下载后拖动到firefox里即可)我们可以看到你
![](/icons/50322de.gif)
网页根据下面
![](/icons/50322de.gif)
规则
![](/icons/50322de.gif)
评分,这是我在博客园博客首页
![](/icons/50322de.gif)
评分截图,上面D表示总分,下面是单项评分,A最好F最差,不知道还有没有G :)
延伸阅读
最新评论