辛星浅谈大型网站构架优化思路之一简化

其实谈到大型网站,它和小型的站点几乎是两个概念,其概念的差别就像航空母舰和独木舟的区别那样,中国早在黄帝炎帝时代就可以制作独木舟了,但是生产航空母舰呢?因为航空母舰太大了,规模的提升带来了很多问题,那么如何去分析并且解决这些问题呢?

我感觉大型网站更应该去简化,不应该为了复杂而复杂,我感觉一套优秀的简化方案是优化网站的最有效的途径,没有之一,什么意思呢?如果让我们的货车跑得更快,那么少拉一些不必要的货物是最有效的方式,也应该是我们真正去优化一个网站的第一步。

那么该如何去简化呢?我们不妨从可以简化的角度去分析:

①首先是业务流程的简化,很多没必要的功能一概删掉。当我们发现一个功能使用的用户很少的时候,就可以考虑是否有必要把它精简掉。比如一个论坛为主的网站,有一个“空间”这个东西,但是我们发现该网站的用户绝大多数都不在空间里发表文章、图片什么的,那么我们就可以考虑把这个功能精简掉。比如这个论坛要进行论坛帖子的实时更新帖子数目的功能,但是我们发现这样不仅意义不大,反而会因为需要不断的从数据库检索数据而造成性能的浪费,那么我们就可以考虑去掉这个功能。

②然后就是web前端的简化,由于我本人对于前端编程并不是太熟悉,因此就不多做介绍了,不过值得肯定的是,web前端肯定有很多值得优化的地方。

③接下来就是后端代码的简化,由于我本人是做这个的,因此还算是感受颇深吧。因为我们的开发基本都是基于某个成熟的框架的,我们通常需要先估计我们的网站的功能,然后选择合适的语言、合适的框架去做这件事。如果这个网站的逻辑比较复杂,那么选择Java一般是不会错的,如果这个网站的要求比较简单,那么php和python可能是更好的选择,如果追求快速开发,那么ruby也不错。就php来说,如果是业务比较复杂,就可以考虑相对大一些的框架,比如zend
 freamwork,如果业务比较简练,可以考虑比较小的框架,比如codeigniter、thinkphp之类的。

④然后就是数据库建模的简化,不过我个人感觉想精简数据库中的表,在一定程度上还是不太好,因为这通常意味着我们的业务逻辑代码也需要做出较大的改动才行,但是有时候也可以考虑一下,比如我们出于习惯,建立了用户基本信息表和用户详细信息表,但是我们经过观测发现用户普遍对详细信息兴趣不大,因此我们就可以考虑只是提取详细信息那些较为常见的字段加到基本信息表中去,然后把这两种做一次精简。

⑤上面多是和开发相关的,可以理解为“软简化”,但是简化对于“硬简化”往往较难,为什么呢?一来更换硬件的成本是个问题,二来硬件很难去“简化”,它们执行的功能很类似,如果非要简化,也就是说把之前多个机器完成的任务换成一台功能更加复杂、性能更加强劲的机器,但是这个开销,通常还是较大的。我个人也通常很少去考虑从硬件上去考虑如何简化。

对于网站的简化,我认为是网站优化的第一步。我是辛星,这是我的意见,那么您的意见呢?

时间: 2024-11-04 10:35:59

辛星浅谈大型网站构架优化思路之一简化的相关文章

辛星浅谈大型网站架构思路之二分解

第一节中我们讨论了简化,如果简化完毕,或者无法简化,那么就要考虑分解它了,那么如何去分呢?通常来说,可以从横向和纵向去分,也可以从软件和硬件去分,这个和我们构架的设计方面有关. 横向分解之我见: ①所谓横向分解,就是分离出的各个部分不存在明显的层次关系,彼此之间独立性较强,当然完全的独立是不现实的. ②第一点思路就是根据功能去分,比如网站分为bbs来交流问题,blog来展示博文信息,news来展示新闻等等,那么可以考虑根据二级域名来做相应的部署,比如bbs放到一台服务器上,blog放到一台服务器

浅谈大型网站动态应用系统架构【转】

浅谈大型网站动态应用系统架构 动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统.缓存系统.分布式存储系统等密不可分. 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳运行. 大型动态应用系统又可分为几个子系统: l l l l l l

辛星浅谈PHP的混乱的编码风格

我们都知道,各种编程语言都有自己的风格,即使是像C和C++那样一脉相承的语言(C++本意完全兼容C的语法),编程风格上还是有些差别,比如很典型的就是C++风格的单行注释和C风格的多行注释. 而虽然Java在很大程度上借鉴了C的语法,但是不可否认,Java的经典的大括号是左大括号是在类名或者函数名等同一行的,而C++风格的则是大括号另起一行,可能有些Java程序员和C++程序员这两种风格都用,但是如果大家多看看大师的编码风格,会发现其实大括号另起一行是典型的C++的风格,大括号不另起一行是典型的J

辛星浅谈mysql中的元数据

首先解释一下什么是元数据,所谓元数据,就是表示数据的数据,这些数据五花八门,总之,只要不是我们存储到数据库里的数据,大多都可以理解为元数据.那么我们如何来获取这些元数据呢? 总的来说,有三种思路,第一种,各种show,第二种,各种select,第三种,是mysql的命令行下的命令,不是sql语句. 我们首先看第一种,这里我列举一下大家比较熟悉的show语句的用法,其实咱们经常用show来查看信息,比如: show databases; show tales; show create table

浅谈大型网站架构技术进化

短短几十年国内互联网发生了翻天覆地的变化,特别是国家支持互联网发展,提出了“互联网+”行动计划,国内各行各业的互联网更是日新月异.作为一个九零后小白没有亲身经历互联网的演变历程,如今看的像淘宝.京东.腾讯这样的大型网站充满了无数的好奇心,这些网站是怎么运作的,如何处理大量用户的请求,如何解决海量的数据库处理···于是才有对于大型网站架构核心原理以及实例分析一系列的笔记记录.所有笔记记录参考<大型网站技术架构核心原理以及案例分析>,该系列文章没有太多的代码展示,着重是对理论知识的描述. 互联网无

辛星浅谈mysql中的数据碎片以及引擎为MyISAM下的操作

对于mysql中的数据碎片,其实和我们删除数据是息息相关的,删除数据的时候必然会在数据文件中造成不连续的空白空间,对于少量的数据的删除,并不会产生多少的空白空间.如果在一段时间内的大量的删除操作,会使得这种留空的空间变得比存储列表内容所使用的空间更大.可能有人会说,我们向数据库中插入数据的时候,会不会在这些空白空间中插入数据呢?答案是会的.但是,它会造成一个后果,那就是数据的存储位置不连续,以及物理存储顺序与理论上的存储顺序不相同,这就比较麻烦了. 按照数据碎片的大小来分,可以分为单行数据碎片和

辛星浅谈Redis中的虚拟内存

和大多数NoSQL一样,Redis也是使用的KV的数据存储模型,为了提高读写效率,Redis也是将KV保存在内存中,但是这样做会带来一些问题. 如果 内存足够大,那么把所有的数据都加载到内存中固然是最好的选择,那么查询操作都直接操作内存,自然是很快.但是实际情况中却更多的是只有部分数据才能加载到内存中,那么这个时候就提出来一个虚拟内存的概念. Redis中的虚拟内存和Linux中的虚拟内存不是一回事,但是其思想是一致的,就是把暂时不常用的数据从内存交换到磁盘中,从而可以把宝贵的内存腾出来用于其他

辛星浅谈Redis中的事务

Redis也提供了对事务的支持,在Redis中,我们常用的命令就是multi.exec.discard.watch这四个命令.其中multi命令用于开始一个事务,该语句之后的所有命令都会被视为事务之内的操作,而exec是提交一个事务,discard是回滚一个事务. 下面是对一些命令的具体介绍: multi----用于标记事务的开始,其后执行的命令都被存放于命令队列,直到执行exec时,这些命令才会被原子的执行.它的返回值总是OK. exec----执行在一个事务内命令队列中的所有命令,同时将当前

浅谈影响网站seo优化四点因素是什么

http://www.mypm.net/expert/show_question_content.asp?questionId=507399 http://www.mypm.net/expert/show_question_content.asp?questionId=507405 http://www.mypm.net/expert/show_question_content.asp?questionId=507407 http://www.mypm.net/expert/show_quest