最新 | 最热门 | 最高评价

+0  Nginx缓存解决方案:SRCache

Tag: Technical | Lua | Nginx
老王 发于 2014年06月20日 15:10 | 点击: 2620 | 展开摘要
前些天帮别人优化PHP程序,搞得灰头土脸,最后黔驴技穷开启了FastCGI Cache,算是勉强应付过去了吧。不过FastCGI Cache不支持分布式缓存,当服务器很多的时候,冗余的浪费将非常严重,此外还有数据一致性问题,所以它只是一个粗线条的解决方案。

对此类问题而言,SRCache是一个细粒度的解决方案。其工作原理大致如下:

SRCache工作原理

当问题比较简单的时候,通常SRCache和Memc模块一起搭配使用。网上能搜索到一些相关的例子,大家可以参考,这里就

查看全文: http://www.udpwork.com/item/12651.html

+0  Web框架与太阳系

Tag: Technical | Framework
老王 发于 2014年06月04日 11:44 | 点击: 944 | 展开摘要
古语有云:工欲善其事,必先利其器。对于Web开发亦是如此,不过现在的Web框架实在是太多了!以PHP为例,有CakePHP、CodeIgniter、Symfony,Zend,Yii等等,到底谁是最合适的?事实上过多的选择往往会让人陷入「乱花渐欲迷人眼」的窘境,这些年我一直游走在各种PHP框架之间,却始终没有觅得属于自己的屠龙刀,于是我决定自己动手,就像歌里唱的那样:不是你亲手点燃的那就不能叫做火焰。

既然要自己动手,那么就需要明确一下设计目标,我个人主要关注以下几个方面:微

查看全文: http://www.udpwork.com/item/12586.html

+0  记我配置Nginx代理的遭遇

Tag: Technical | Nginx
老王 发于 2014年05月27日 17:14 | 点击: 3922 | 展开摘要
我一直觉得自己的Nginx知识还算过得去,可是我错了,配置Nginx代理的遭遇让我苦不堪言,即便如此,我还是挣扎着记录一二,以便让后来者能够踩着我的足迹继续前进。

说起来非常简单:某项目的搜索功能升级了,需要把请求从旧的服务代理到新的服务上面去,其中有点儿不一样的地方是参数的传递形式发生的变化,例子如下:

旧:http://www.old.com/query/lamp

新:http://www.new.com/search?q=lamp

第一次尝试:

locatio

查看全文: http://www.udpwork.com/item/12552.html

+0  监控Netstat中的TCP数据

Tag: Technical | AWK
老王 发于 2014年05月11日 21:53 | 点击: 1292 | 展开摘要
通过netstat命令,我们能获取TCP数据,监控它们有助于了解系统。

如果netstat版本比较老的话,那么运行时可能会遇到下面的错误信息:

error parsing /proc/net/netstat: Success

假设操作系统是CentOS,让我们看看如何确认netstat隶属于哪个软件包:

shell> rpm -qf $(which netstat)
net-tools-<VERSION>

如上所示,得知netstat属于net-t

查看全文: http://www.udpwork.com/item/12234.html

+0  跟我学Rsyslog

Tag: Technical | Rsyslog
老王 发于 2014年05月09日 11:34 | 点击: 5377 | 展开摘要
在数据为王的时代,日志管理是一个绕不开的话题,相应的开源软件有不少,比如热门的三件套:Logstash、ElasticSearch、Kibana,可惜我对这些高大上的东西往往心存敬畏,不敢轻易触碰,相比较而言,我更喜欢能够快速上手的东西。

对于日志管理,老版本的Linux缺省使用Syslog,其配置大致如下所示:

shell> cat /etc/syslog.conf

# Log all kernel messages to the console.
# Logg

查看全文: http://www.udpwork.com/item/12231.html

+0  如何在Redis里按模式删除数据

Tag: Technical | Redis
老王 发于 2014年04月11日 16:40 | 点击: 1286 | 展开摘要
一台Redis服务器在很短的时间里消耗了几十个G的内存,最终因为SWAP而宕机。因为这台服务器的社会背景比较复杂,所以一时无法判断犯罪嫌疑人到底是谁。

最开始的直觉是认为肯定有人保存了大体积的数据,于是问题就变成了找出哪些键占用的空间比较大,DBA同事用了redis-rdb-tools等工具来分析数据文件。可惜的是虽然找到了一些大体积的键,但最终都排除了嫌疑,问题似乎陷入了僵局。

在被直觉带入死胡同之后,我们开始调整调查的角度:即便一个键本身占用的空间并不大,但是如果相同

查看全文: http://www.udpwork.com/item/12113.html

+0  一个Shell工具:jsondiff.sh

Tag: Technical | Shell
老王 发于 2014年03月19日 19:14 | 点击: 1925 | 展开摘要
我最近忙着重构一个历史项目,不过由于客观条件所限,没有测试用例可用,以至于我不得不通过人肉对比新旧服务器的结果集是否一致来判断对错。既然说懒惰是程序员的美德,所以我想还是写一个工具吧,加之结果集为JSON,于是便有了jsondiff.sh。

逻辑很简单,无非就是通过curl在不同的服务器上取得结果集,然后diff即可,不过这里有几点需要注意的地方:首先,JSON就一行,直接diff会失去意义;其次,JSON中汉字会被编码,不利于查看;另外,JSON中字段顺序是无所谓的,所以

查看全文: http://www.udpwork.com/item/11976.html

+0  一个HTTP小问题

Tag: Technical | HTTP
老王 发于 2014年02月25日 18:59 | 点击: 1189 | 展开摘要
同事叫我帮忙解释一个问题:一个PHP生成的重定向请求,在Nginx日志里产生两种截然不同的记录:一种响应体大小是零个字节;另一种响应体大小是五个字节。

现在年纪大了,面对问题时的嗅觉不再灵敏,第一感觉零是正确的,心想是不是重定向后忘记退出了,后面还有内容输出,可是查了一下代码发现没有问题:

<?php

header('Location: /path');
exit;

?>

绕了一圈后,我猛然意识到Nginx缺省开启了分块传输,没有「Content-Len

查看全文: http://www.udpwork.com/item/11768.html

+0  如何安全的Include文件

Tag: Technical | PHP
老王 发于 2014年02月25日 11:50 | 点击: 948 | 展开摘要
似乎多数人都觉得Include文件是一件非常简单的事情,可惜漏洞往往出现在我们忽视的地方。正所谓千里之堤溃于蚁穴,二战期间,法国人寄希望与马奇诺防线,却忽视了原本认为非常安全的阿登高地,让德国人有机可乘,最终的结果大家都知道了。

下面这个例子虽然是我杜撰的,但是我确信现实情况里一定存在类似的问题:

<?php

$debug = false;

// ...

$config = include 'config.php';

// ...

if ($debug)

查看全文: http://www.udpwork.com/item/11765.html

+0  通过FastCGI Cache实现服务降级

Tag: Technical | Lua | Nginx
老王 发于 2014年01月13日 11:29 | 点击: 1193 | 展开摘要
在自然界中,很多生物面临生死考验的时候,往往会做出惊人的反应,其中最为大家熟知的当属壁虎,危难关头,与其坐以待毙,不如断尾求生,通过自残来换取活下去的希望。对于互联网项目而言,同样存在着很多生死考验,比如:访问量激增;数据库宕机等等,此时如果没有合理的降级方案,那么结局必然是死路一条。

任何问题一旦脱离了实际情况,便失去了讨论的意义。在继续之前,不妨先介绍一下案例的背景情况:一个PHP网站,以读为主,原本躲在CDN后面,运行很稳定,后来新增了很多强调个性化的需求,便去掉了C

查看全文: http://www.udpwork.com/item/11523.html

+0  再叙TIME_WAIT

Tag: Technical | Linux | TCP
老王 发于 2013年12月31日 20:17 | 点击: 1197 | 展开摘要
之所以起这样一个题目是因为很久以前我曾经写过一篇介绍TIME_WAIT的文章,不过当时基本属于浅尝辄止,并没深入说明问题的来龙去脉,碰巧这段时间反复被别人问到相关的问题,让我觉得有必要全面总结一下,以备不时之需。

讨论前大家可以拿手头的服务器摸摸底,记住「ss」比「netstat」快:

shell> ss -ant | awk '
NR>1 {++s[$1]} END {for(k in s) print k,s[k]}
'

如果你只是想单独查询一下

查看全文: http://www.udpwork.com/item/11447.html

+0  浅谈TCP优化

Tag: Technical | Linux | TCP
老王 发于 2013年11月21日 11:33 | 点击: 1718 | 展开摘要
很多人常常对TCP优化有一种雾里看花的感觉,实际上只要理解了TCP的运行方式就能掀开它的神秘面纱。Ilya Grigorik 在「High Performance Browser Networking」中做了很多细致的描述,让人读起来醍醐灌顶,我大概总结了一下,以期更加通俗易懂。

流量控制

传输数据的时候,如果发送方传输的数据量超过了接收方的处理能力,那么接收方会出现丢包。为了避免出现此类问题,流量控制要求数据传输双方在每次交互时声明各自的接收窗口「rwnd」大小,用来表

查看全文: http://www.udpwork.com/item/11173.html
|<<<2345678>>>| 一共11页, 132条记录