`
#rethink#
  • 浏览: 44856 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论
文章列表
1 显示到屏幕的同时,记录到文件: help & help > ./temp.txt    事实上跑了两次help,要注意~
Gearman 和 MemcacheQ。
在我负责的某个项目(调查类型的网站),不久前进行了一次推广调查。因为推广邮件是在同一时间发出,所以在5分钟之内,访问量剧增,发生了15000次左右的并发业务操作,整个系统的反映速度降低很明显。 该项目使用3台web服务器,2台mysql数据库。3台web服务器间的session共享通过NFS实现。经过后来调查,访问速度骤降是session并发导致的。 因此,开始考虑其他的session共享方案。考虑到未来能更容易的进行横向扩展,所以计划采用memcached和Tokyo tyrant。 memcached在国内的应用已经很广泛了。Tokyo tyrant是日本人 平林幹雄 开发的一款 DBM ...
关于如何建立索引,及哪些情况适合使用索引,哪些情况不适合使用索引,各种书籍资料有很多。 但是最重要的原则是:实际测试。 实践是检验真理的唯一标准。建立索引的时候,应进行如下测试: 1 explain select语句,看看是否有使用到索引。 2 运行update和insert操作,看看建立索引的负效应是否在可接受范围。 3 务必在接近生产环境的数据规模下进行索引性能的测试。 第三点尤为重要。 因为在最近的项目优化过程中,发现: 在某个字段上建立了索引之后,如果是select返回30条记录,建立索引之后,select时间降到原来的1/6。提高很明显。 而在生产环境下,这个select需要返回的结果 ...
说明:以下是在读小骆驼书《Perl 语言入门》第十二章 目录操作 中“链接与文件”一节(P189-193)中的读书笔记。 目录是一种由系统管理的特殊文件,它基本上是一份列表。每份文件都会存储在一个编好号的inode里,我们可以把它想象成磁盘上的门牌号码。ls -l命令,硬链接的数量会显示在权限标记的右边。每个目录都会有 . 这个项目,它会指回目录本身的inode。所以任何目录的链接数都至少是2.一般来说,目录的链接数等于子目录的数量加上2.链接分硬链接和软链接(又叫符号链接)。【硬链接】硬链接的本质是:不同的文件名指向同样的inode,文件事实上只有一份。建立硬链接:shell命令:ln fil ...
检查apache的error log和mysql slow query log,可以及时的发现问题。但在开发和运营的过程中,如果没有意识到有错误发生,我们往往不会主动的查看log的习惯,而且每天查看log也不现实。   但是不明显的错误不表示没有错误,潜在的问题往往是最严重的问题。因此写个log监控程序很有必要。 #!/bin/sh ADDRESS='email1@domain.com email2@domain.com'APACHE_ERROR_LOG='/usr/local/apache/logs/error_log' if [ `/usr/bin/wc -c < ${APACHE_E ...
在目前的项目中,因为涉及到一些较复杂的统计功能,我在某个表中添加了三个字段: nums1,nums2,nums3 这三个字段分别为table1,table2,table3中相关的有效记录行数。 添加这三个字段的原因如下: 原因1: 在页面显示中,如果没有这三个字段,单纯靠sql来生成显示列表的话,需要关联三个表,这三个表都是记录较多的表,关联起来效率很低。 原因2: 在网站的前台,有了这三个字段,可以减少对table1和table2,table3的select,提高效率。 居于上面的原因,增加上面三个字段有利于提高程序运行的效率。 但在真实的开发过程中,发现这样的设计存在很大缺点。 具体的缺点如 ...
“PHP程序员,特别是从php4,甚至是PHP3中成长起来的程序员,很多都不习惯使用抛出异常这种错误处理方式。虽然php5引入了异常处理机制,但是很多php程序员还是没有真正的掌握并使用它。 网站完全开放的特性,决定了网站比任何传统软件都更希望做到“系统看起来永远都是能够正常工作的”,所以采用正确的程序错误处理方式尤为重要。理论上来说,如果设计足够完美,开发人员足够谨慎,程序出现错误的可能为0. 但事实恰恰相反,复杂的业务逻辑,不同的硬件环境,或者不可信任的用户输入,都可能导致程序出错,服务当机。所以在稍微有点复杂的系统中,有个完善的错误机制是必须的。 在php5之前,因为缺乏对异常的支持。在做 ...
由于web程序和一般的软件开发不同,自动化测试的效率和必要性一直较低,因此人工测试一直是web项目的最主要测试手段。 但这并不表示web项目就不需要进行自动化测试。对于web项目而言,自动化测试可以分为单元测试和功能测试。功能测试主要针对具体页面进行测试,个人觉得意义不大,因为既然是针对具体页面进行测试,采用人工测试的方式更为直接,高效,且灵活。当然如果针对某些页面进行的压力测试还是很有必要的。因此以下主要针对单元测试进行讨论。 首先,由于web项目的特殊性,能够进行单元测试的地方也不会很多。一般来说,单元测试会集中在业务逻辑层。 如果是很简单的功能,那做单元测试的必要性就很低。一般来说,需要做 ...
在项目初期,项目组长一般都会建立TOP RISK LIST(风险清单),随着项目的推进,有些风险已经避免,或者发生转移,也有可能遇到新的风险。 较悲观的情况是,你意识到了风险在哪儿,且传达了足够的风险警告,但由于开发人员水平的限制,或者没有考虑到所有可能的情况,最终问题还是如期而至了。 在最近的项目中,就发生了类似的情况。最后决定在问题代码块,引入“风险控制”机制。 基本的策略是: 针对问题模块,用户的所有操作,写入数据库时只允许写入“经过正确处理的数据” 。即会导致DB中的数据错误的操作,先屏蔽掉,并记录到log,发送给相关人员。   风险控制伪代码: function dataProces ...
PHP中,如果需要获取远程数据,经常使用fsockopen,或者PEAR的HTTP_REQUEST扩展。 一般情况下不会有问题,但是如果程序中含有session_start()的话,会产生微妙的影响,比如无法取得远程服务器的503错误。 对应的办法是在程序使用完$_SESSION之后,增加session_write_close()即可。 原因未深入调查。
有不少web项目经理同时兼任架构师的角色,包括我。 一般而言,我们指的架构,多指技术上的架构,硬件上的架构。 最近在豆瓣上看书评时,看到一个概念:web项目,从不同的角度,可以分为三种架构:业务架构,信息架构, ...
Global site tag (gtag.js) - Google Analytics