使用PHP开发一个门户站点,周期是三天,我差点想找个炸药包拿出来给叔闻一下。
在叔翘着二郎腿辱骂下,我终于带领一个小胖子在3天内完成了这个雏形。
由于备案还在申请中,所以只能用IP的方式看一下了。输入以下地址:http://114.80.201.40:8081/ 查看。
很多功能还没有加载上去,前台使用了wp的一些优秀思想,既使用外挂插件的方式,把功能挂载上去。当然这个插件标准是我们自己设计的,有点丑,但是自己用绝对方便。
目前网站上的数据都是从外站抓取过来的。正式上线肯定要重写,防止被百度K站。
网站最主要的其实是后台,后台采用了叔“年轻时候“写的php版本的cms进行扩展。
偷偷的说:叔”年轻时候“写的代码真心很不错。现在咱就不说啥了。
网站整体分为三个主体部分:前台展现层(与后台数据层交互)+后台CMS(包含动态数据管理)+定时统计程序(带数据挖掘).三个主体都分布在不同服务器上。
(暂时测试时只在一台服务器上测试)
什么叫三层架构:这其实才是三层架构,现实生活中,没有把三层全部放在一个项目或者部署在同一台服务器上的。在大部分互联网门户中,其实没有UI层和控制器交互这一说,除非你有很多台很多台服务器。
简要说一下设计思路(部分思路)
一、后台
1、数据表集中管理。除了一些基本的系统表,业务表都要进行集中管理。不允许手工在数据库中随意创建。包括表和表之间的关联都要在一个模块中体现出来。这是cms的一个基本模块,最好是自己实现,没难度,就是繁琐一点,不过这块是叔以前写的,在我改了若干bug后正式可以用了。
2、建立数据源。什么数据源?其实就是根据规则自动拼接sql或者手工写sql或者存储过程或者视图,没什么好神秘的,上述功能完成后,基本的数据后台管理列表都可以自动生成查询界面.
3、建立模板引擎。什么叫模板引擎?其实就是绑定数据源之后,循环的、有自己简单语法的输出静态页面。像新闻这样的数据基本发布后很少会变,所以可以直接生成静态页面。
4、建立缓存机制。像后面要开发的电商产品功能、图书连载、在线视频等。就不能使用cms生成纯静态页。机制复杂,这里不详细讲,我使用的memcached配上redis做消息推送,达到b2c的一种及时交互。当然,后面这种缓存机制和消息推送都要部署在另外一台服务器。
web服务器主要硬盘要大(读取速度要快),缓存服务器内存要大、数据挖掘程序cpu要强。三者配合,网站性能才能达到最高点。(注意:这是通用的一些网站产品不能灵活达到的,所以这是为什么不用现成cms搭建网站的原因)。3种类型服务器类型不一样,花费的钱也不一样。叔说创业节约花钱、理想消费、大把赚钱才是王道。
5、5回味了
5、建立数据传送机制。由于前台和后台往往不会部署在一台服务器上,所以静态数据生成后要传输。这里我用的是ftp,目的就是为了方便,不玩高深的,那是浪费时间。
6、建立工作流机制。这个没啥好讲的,太普遍太简单,只是为了后台用的。
7、建立用户单点登录中转中心。
其实这个没有那种passort的功能,只是实现一个山寨的。对于相同的域,直接用cookie共享就可以。不同的站点使用传输凭据的方式验证(就是字符串嘛)。不过这个网站没有做到分销、分平台等,所以暂时不涉及,如果做到后面会讲。
前台
1、基本的页面统一分块分页面,做成后台解析的了的模板。前台理论上是用一个页面来加载所有功能。譬如有个load.php .。根据不同的模板不同的数据源来加载不同的数据,当然静态区域快数据直接就是include ,不要整复杂的。
web 服务器用的是apache。所以用.htaccess 文件来做伪静态。
2、注意脚本和样式单,尽可能的少引用,能合并就合并。少量的样式直接写在页面里,apache 弄个gzip压缩,很快。不要有一个功能就加载一个样式单或者js,会慢死的大哥们。
3、jquery 我这里用的是1.3。其实后面要换掉,体积太大,而且有bug.这里建议大家使用jquery 1.9。
4、前台譬如新闻点击量 用脚本来记录,不要在读取主数据时直接update。另外一些辅助字段不能塞在主表中。
5.
5.。。。。。。 暂无。因为还没做完,后面再讲。
统计端
1、因为赶时髦,后台统计端,我用Go语言实现(注意:正规的写法应该是golang)
2\
2、统计端干嘛用?不要告诉我网站的很多数据都是靠即时取得。
譬如:
1、新闻日点击量、周点击量、月点击量都要通过定时任务来清零,重置。
2、新闻的评论数、评论回复数也需要后台统计和置入数据库
3、订单也是
4、数据关键字词标引也是
5、原文索引也是。
6、分词词汇也是
7、其他其他,凡是一切影响性能而又不需要及时展示的东东一律要通过 统计端在后台定时默默的执行。
最后,后面会怎么分布式部署。
1、静态新闻数据用nigx作为web中间件。2、现在使用的数据库mysql到时候会分开几块,变动少的数据表归一个库,变动大的归一个库,通用表归一个库。(但前提是叔的几台服务器到位了才能)
3、交互数据用apache绝对够了,加上memcached和redis 更OK了。
4、访问量大的时候把图片、css、样式单等归于一台服务器。
总之,做一个好的网站一定要循序渐进,好的架构设计固然重要。但是没必要才区区几百或几千访问量的时候就花费大时间设计无比复杂的架构,不然黄花菜都凉了,大家都饿死了没人跟咱谈架构。但是在做初步设计时一定要考虑到这些扩展,但不一定要去立马实现这些架构。(叔教的,我以前不是这么想的)