用CI做网站架构的一点心得

项目简述

日PV数万,针对海外,跨五个大洲,南美,北美,欧洲,非洲,东南亚。

服务器环境

windows服务器数个分属不同大洲

数据库:mysql

开发框架:CodeIgnite 即CI框架

开发语言:PHP

架构前的几点思考

1.扩展性

做架构一定要考虑扩展性。在项目开发中,项目需求变动是时有发生的事情,世界上没有完美的框架,修修补补是很正常的事情,而且日后随着业务的发展需求有所增加也是很正常的事情,所以一个好的架构一定要在最开始就考虑可扩展性。

2.安全性

扫描二维码关注公众号,回复: 382132 查看本文章

做架构的时候一定要考虑安全性,因为别有用心的人总是大有人在,如果我们不考虑安全性,日后我们就有得忙了。

3.运行效率

程序运行效率也是十分重要的问题,试想我们平时浏览网页的习惯,如果一个页面要加载好几秒甚至十秒以上,我们的心情如何?相反,如果浏览的每个页面都几乎是秒开,我们的心情也会变得舒畅很多。所以,运行效率是我们做架构时必须考虑的一个重要问题。

4.开发效率

做项目当然是在保证质量的前提下,越快越好,那么我们如何提高团队的开发效率呢?团队使用一直的开发环境,有效的代码管理工具如GIT等等基础问题一定要事先确定好。除了这些基础任务外,我想一个清晰的目录结构也十分重要,好的目录结构不仅查找资源迅速而且方便定位错误位置等等很多好处。

5.程序可靠性

以上是我在做架构过程中想到的几点,当然还有很多不足,在日后的工作学习中,还会不断补充。

下面看看我的目录结构

总目录
common--------------CI公共扩展
public------------------外部访问目录
site---------------------应用程序目录
system----------------CI核心类目录

common目录结构
core-------------------CI自定义公共核心类扩展目录
helpers---------------CI自定义公共帮助类扩展目录
libraries--------------CI自定义公共扩展类目录

试想一下我们一个域名下面挂在了好几个差距较大的功能模块,为了方便扩展,我们需要解耦,提高代码复用性。
熟悉CI的朋友应该知道CI可以在application中的core、helpers、libraries目录里面自定义扩展,CI的这个功能在一定程度上满足了我们的需求。
但是我们每一个功能模块就是一个application,现在有一个common_helper.php 里面定义了一些公共函数,
如果我们只沿用CI框架的自定义扩展,那么我需要在每一个模块的application中添加一个
common_helper.php,这显然大大增加了代码的维护成本。
这时如果我们将一些每个模块都能用的扩展提取出来放到一个公共目录,是不是大大提高代码的复用性呢?!

public目录结构
asset------------------公共资源目录
admin-----------------后台入口文件目录
index.php------------前台入口文件

将入口文件从应用中提取出来可以有效限制用户对服务器文件的访问,使之仅能访问资源文件,
这样可以在一定程度上降低服务器文件被修改的风险。

site目录结构
admin-----------------后台应用目录
front-------------------前台应用目录

将应用文件按模块分开,这样可以有效解耦,不同模块之间代码互不影响。
比如后台代码出错,前台访问不受影响。

system系统结构目录与CI系统一致

说完目录,简单谈谈,我对前面提到的几点思考所提出的解决方案。

对于安全性,除了控制访问目录之外,还要对用户输入数据做XSS过滤,对于API接口类要做秘钥认证

对于运行效率,首先要考虑静态资源加速,可用第三方工具。

其次,要考虑页面及查询接口缓存,我们选用redis并且数据库进行读写分离

还有对于耗时操作比如发邮件,最好使用api调用脚本异步发送。

对于可靠性,比如发邮件丢失,我们可以使用消息队列机制,监控发送状态,多次发送等等。 session共享采用存储数据库方式。

猜你喜欢

转载自my.oschina.net/u/1036767/blog/895938