考试系统架构经历了三个阶段:
一、大部分都基于Jean-Paul S. Boodhoo提供的Front Controller 实现,主要核心是基本抛弃 Web Form ,实现了一个轻量级的 MVC架构。
二、考分查询实现。Http://ES.skight.com
在上面架构的基础上,加入Repository层,实现从文本提出数据,在内存缓冲。经过几次实际流量的测试和改进,现在的性能基本达到每个查询耗时20ms 。因此,反推理论最高查询流量可达50次/秒或18万次/小时。因而在相当长的时期内,可以认为考分查询容量是可以无限添加下去的。
最新数据(2011/05/26):最近的公务员查询,后台查询耗时仅有1ms, 网页浏览量达60万一天。
三、报考系统几大功能改进。http://shen.skight.com/User/Districts.es
1、借助Fluent nHibernate很轻松地加入了数据库功能。Fluent nHibernate可明显地分为两块功能。
一是,nHibernate让我到目前为止,还没写什么SQL语句; 二是,Fluent (Interface)让我没写任何配置XML文件。这些都是非常耗时的工作,因此也就提高了工作效率。
2、加入了很好的分类日志记录, 并分为3类:Trace, Information, Error 。最后,把这三类合并为一个All ,这样便于查看各类日志的时间顺序。系统进入产品阶段后,基本上都是靠日志文章找到错误,而不是Debug 。这也非常有效。
四、下一步的重构。
目前仍存在的问题。
1、随着功能的增加,子领域(SubDomain) 已经越来越多,1、这些子领域之间的界限并不明显,2、子领域之间都是直接调用、引用内部现象。3、子领域作未提供Facade的接口层出来。
因此,改进目标也是很明显的,一划分子领域,二对外提供的所有功能,以Façade/API形式集中到根级别类。 三需要内部引用的内部类以接口对外提供。
4、多使用Extension来实现服务类(需要多子领域协同工作)
5、解耦Web与Domain:用Web Service/REST/SOAP……连接website与Application server (Domain)?为几乎每个域对象增加对应DTO会是一个重复工作,但应值得。
其他:
6、用Silvelight做管理界面
7、ASP.net MVC重做Web??
8、CI服务器改用TeamCity/Husdou?
9、使用Fluent Build?
10、用 OpenID做登录/账户管理功能?