IT技术架构改造计划
公司使用的项目管理系统2009年立项,经过2010年开发2011年上线,时至今日已是2年有余。随着公司规模扩大、组织调整,还有日新月异的技术,要求我们要重新审视此系统的架构。公司IT环境共拥有近20套应用系统,已从原来大部分采购的局面,到了现在超过半数都是自己开发的情况。随着系统各方面需求不断提高,系统与系统之间的交互愈发复杂,我们也在寻找更好的IT架构方式,打算以项目信息管理系统为出发点,进行新一轮IT技术架构的研发工作。
公司为外包服务供应商,刚进公司多以外包项目为主参加过2个大型系统的开发维护工作,因为对其系统基础结构比较好奇,通过自己的学习开始了这方面的工作。也是在此基础上开发了至今应用在公司项目信息管理系统、培训管理系统、客户关系管理系统、数字园区管理系统和人事管理系统当中的系统基础结构。
现在的系统基础结构是典型的Web系统N层架构:
1. 自行开发的UI,前端使用jQuery
2. 后台是ASP.NET WebForm页面,其中使用AJAX方式请求后台画面的WebMethod做无刷新数据呈现
3. 异构系统采用Web服务交互,同构系统采用WCF服务交互,在企业IT环境内部有ESB做服务交换
4. 后台分为表示层、服务层、业务逻辑层、数据访问层,各层之间通过数据传输对象(DTO)模式进行数据传递,并在前端绑定与展示数据
5. 数据库为SQL Server,利用反射技术实现对象实例化和属性赋值,采用iBatis和自编程SQL的方式进行数据访问
6. 事务、日志记录、异常处理通过AOP完成,在服务层方法开始时开启逻辑事务(TransactionScope),内部迭代中发生异常自动回滚
问题:
1. 现在系统瓶颈在数据库,在每月月末大家登陆系统大量填写数据造成系统峰值,应用服务器负载没有问题,数据库CPU和内存基本消耗殆尽经常造成系统无响应;
2. 随使用AJAX技术进行请求,但因后期追加的各种动态计算等在后台增加了大量请求,导致页面响应并不理想;
3. 权限系统过于复杂,可以控制得很好,但首先需要深入理解而且配置大量权限数据;
4. 使用DTO导致在DTO上为画面展示或中间传递增加了很多属性,而且反射的性能也很差;
5. 元数据在启动的时候加载,但为了减少数据库压力的人员信息加载数据量过大经常导致调用时系统瘫痪;
6. 各层次方法访问日志,导致日志过于臃肿并使性能低下
7. 使用SQL Server数据库代价很高,希望通过更好的选择增强数据库集群的可伸缩性
8. 系统监视、特性开关等功能的缺少也是在很多时候让我们头疼的地方
想法:
1. 数据库想迁移到MySQL,为了支持开源、云环境和考虑以后在中间弄一层集群中间件
2. 增加缓存层,数据从数据库读到缓存,二次访问直接使用避免数据库负载,但要考虑失效和关联失效的问题;
3. 在分布式缓存中增加状态管理
4. 数据访问使用Code First的EF或者NHibernate
5. 数据对象打算分开,底层使用跟表有直接映射关系的POCO,上层使用Domain Model
6. 服务方面打算异构系统保留Web服务和WCF,但自系统和公共API都是用REST API
7. HTTP静态文件缓存和动态请求的缓存是终点,真正能减少网络负载
8. UI方面考虑使用AngularJS这种先进的MVVM模型框架,考虑加入YUI做模块加载
9. UI样式方面要做到国际范,这个就是设计师的事情了,不多说
10. 在系统架构中增加消息中间件或消息中转,所有后继任务全部发送到消息堆栈,由后台线程或其它服务器处理减少Web应用的系统负担提高请求的响应速度
11. 业务逻辑和服务实现组件化,这方面想参考OSGI但不知道.NET方面是否有最佳实践
暂时就先想到这么多,写着写着写到11号了,希望大家有什么意见或建议就回复,有推荐的学习资料和框架、类库也欢迎,争取开源,谢谢大家。