当前分类: 系统架构设计

redis中要注意到的Keys模糊搜索导致的性能下降问题03/20/2011

这件事发生在前面我说过的用redis来做一个实时性很强的小功能的时候,准确的说是去年的事情了,之所以没说,是我觉得这个确实是一个很小的问题,现在貌似网上还真没有遇到同类问题的同仁,那我就大胆说说了哈——我们把功能开放给测试用户,只要开放1分钟不到,马上cpu占用100%,其他网络流量、磁盘IO都非常小,因为就开放给几百用户撒,最先怀疑是redis的配置有问题,比如太频繁的写硬盘之类,一项一项的排查,均未发现问题,只能从程序方面着手查了,后来发现我的一处执行了KEYS “MT|*”,是用来获取一个用户动态所有类型key的,实际上当时也就8种类型,也没怎么怀疑到这个上面来,后来查了一圈,实在没有找到地方,因为php跟redis通信就那么几个地方,就怀疑这里了,改成MT|1,MT|2,……一直遍历获取这些key-value,因为有的类型可能该用户没有,所以我开始使用了key的模糊搜索,没想到问题就出在这里了!经此一改,立马见神效,cpu一直维持在4%以下,io和网络流量也都很小,一秒钟大约读写几千条吧,因为我们做了一些限制,不然磁盘文件增长的有些快!这和redis理论值差的远,所以那太高性能、高可用的redis服务器一直运行到现在(3个多月了),从未出现过服务中断的情况。

给力啊,redis!现在还有一个难以解决的问题是,不好清理redis里面的无用内容,只是写了个简单的脚本每天跑一下。缺少一个强有力的工具来管理redis,另外,貌似有人实现了一个用sql语句来查询redis。不知道对管理有效否?最后,推荐下timyang的博客(https://timyang.net/)吧,这位高人经常写很牛逼的文章,也包括redis的.

| 10条评论分类: 系统架构设计 标签:  

一个单引号引发的MYSQL性能损失12/22/2010

生活中难免遇到一些不如意,有些来自我们自身,而有些不是。今天冬至,说这一天是北半球白天最短、黑夜最长的。今天我们来分享下我的一个同事提到加没加单引号的巨大区别,对于MYSQL性能优化很有意义。

刚刚我们说过了,生活中难免会有一些不如意,比如,我们用一个字符串类型的字段来作为主键,表面上,这太不如意了,然而,事实也证明这是有用的。问题也就出来了,当在查询语句中对该字段值加上单引号和不加查询耗时相差百倍!

我建立的测试表是这样子的:

CREATE TABLE `foo` (
  `key` VARCHAR(10) NOT NULL,
  `time` INT(11) NOT NULL,
  PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

此文妙哉,快快看全文 »

| 34条评论分类: 我爱PHP,系统架构设计 标签:  

通过异步队列获取facebook用户资料12/14/2010

做不同地区的市场可能结构上会很大的不同,比如DNS轮询方式的负载均衡解决方案,在国外境外复杂的网络环境下显得不怎么奏效。今天我想说一个通过异步队列的方式来获取facebook用户资料的方案,一样是针对国外境外复杂的网络环境造成了一个难以解决的问题,而采取的应对措施。问题是这样子的:我们位于香港机房的服务器,会时常由于网络原因无法访问位于美国的facebook服务器,无法获取到用户在facebook上的资料,这造成的致命问题就是,用户根本进入不了我们的应用!因为第一步的会话验证无法通过。那么如何有效的解决这种郁闷的问题呢? 太给力了,让我看完 »

| 4条评论分类: 系统架构设计 标签:  

redis可是个高性能高可用的玩意儿12/05/2010

上个月redis升级到了2.0.4的稳定版本,redis号称超高性能的的key-value数据库,能持久存储,读写却又超快(比memcache还要快),高可用——《MemcacheDB,Tokey Tyrant,Redis performance》,支持key-value,key-list,key-set等复杂的数据特性,2.0更是自己实现了一个Virtual Memory,让Redis突破了物理内存容量限制。

说了这么多,之所以考虑用Redis,是我们最近想上一个小功能,需要很高的实时性,而目前的情况是我们的项目日活跃80w左右,平均在线约为3w人,我们使用nginx和C Socket server分别处理不同业务,在flash客户端呈现给用户,可以说现在的服务器负荷是有些重的了,而我们想再加一个实时性强的小功能来提高用户之间的互动。经过调查,我们注意到了Redis中的key-list数据格式,其自带的一个demo,完整实现了一个微博功能,而数据库仅仅使用Redis。经过讨论,出来两种方案:直接通过C Socket和通过php来读写Redis,后来我们还是选用了php,并计划逐步开放给用户使用,以便监测在用户增多的情况下的系统性能。也许你看出来了,主要的性能瓶颈大概会在web server这块。

我们对redis的研究还不太多,但redis真的好强大。好了,就写这么多了,网上写redis的文章也非常多,怎么安装,怎么配置我就不班门弄斧了,朋友你有什么使用心得,或者想讨论点什么,快快来发表评论吧!~

| 9条评论分类: 系统架构设计 标签:  

基于php托管的视频点播业务分级系统07/20/2010

这实在不是一篇很新的技术文章,只是想起几年前参与的一个项目,当时通过php托管这项技术解决了购买昂贵的视频(VOD)点播系统的资金不足,并且还算自主研发,跟外界如此的吹牛说!这个。。。:-(,其实,写这篇文章我还是很有压力的,从谈到的技术来看,一定有人认为我是江郎才尽吃老本了,翻些陈辞滥调出来充数,可见我是顶着很大的舆论压力来写这篇文字的。不过,我还真的觉得这个php托管技术应用场景应该还是可以拓展的,姑且分享下这个“烂”技术吧。

当时的需求是这样的,只有我们的收费会员才可以看到我们精心制作的外语教程,这个教程是花费了很大成本的原创教程,因此很珍贵。我们打算按照观看时长来消费,而视频的格式居然是flv,当时我们找寻了很多的视频点播解决方案,要么就是昂贵的服务器、播放器+独有加密格式的全套解决方案,要么就是不靠谱的VIP在线电影播放系统。 太给力了,让我看完 »

| 9条评论分类: 咸吃萝卜,我爱PHP,系统架构设计 标签:  

高并发、大流量网站架构时你考虑网卡流量了吗?02/07/2010

在我们的一个php服务器+db服务器的传统架构中,随着在线人数的不断增加,我们发现db服务器显得越来越不稳定,本来这完全是预料之中的一件事情,因为平时我们可能认为非常平常的一个数据库I/O操作,在高并发时都有可能导致db server宕机,在我们确认程序流程都合理的情况下,升级了CPU、内存和硬盘速率,但情况依旧,一到一定程度(这个程度显然比我们的预警值低很多,我们认为我们的硬件支撑这么多的在线是完全OK的),马上有丢包现象,而监测也表明DB服务器剩余资源很充裕!!!这是太奇怪的问题了,再次把所有的可能的瓶颈都检查了一遍以后,得出结论,这种现象是不可能的!天,难道有外星人在控制么?

竟有如此美文,尽阅之 »

| 10条评论分类: 系统架构设计 标签:  

php广告系统应该具备哪些功能才是一个好用的广告系统04/09/2009

现代人的需求日益增长的速度是惊人的,在我们要求吃饱之后的吃好,而现在大家时髦的话题已经是减肥了。我们的系统中嵌入的模块也越来越多,机制越来越灵活,然而还是一直都不够用。我们来看看在各个成熟系统中早已司空见惯了的广告系统,也可以称呼为广告模块。
对于一个广告系统,我们的需求大概是这样的:
1、可以插入任何页面的任何位置。
2、可以插入图片、文字、代码、flash,并可以设定一些参数
3、一个广告位可以随机播放不同的广告
4、可以统计点击,甚至跟踪访客浏览路径
5、操作不要太繁琐

以上这些功能,几乎所有成熟的CMS、BBS系统都做到了,之所以还画蛇添足的把它写出来,实在是窃以为很多东西需要沉淀,总结才有进步的。找一个例子还看看上面的这些需求它是怎么做到的,比如ECSHOP,有一天我打开它的代码一看,在头部注释赫然写着“这不是一个自由软件”,让颇为认真仔细的读完了整句话,发现没事,因为起先我以为看它的代码是非法的。。。分析了一下它的广告模块,是非常符合上面提出的几点要求的,就操作上可能还是很显繁琐,首先要知道你想插入的位置位于哪个块(这个是“设置模板”功能),宽高多少,然后新建广告位,指定宽高,……它的广告还可以站外投放的,并且能够统计点击,这点做的非常好,其实在其模板中也是预留了位置(通过特定的标签)来添加广告的,这当然无可厚非,比很多系统的后台直接编辑模板源代码的操作要来的方便的多。广告也有自己的模板,这增加了灵活度,把系统模板拆成很多的小模块是非常值得学习借鉴的方法。呜呼!好像能总结的也就这么多呀,好了,文字不一定要多,能有点滴有用就行。如果是写作文,我估计我的老师会让我重写,但今天不一样,这是在写一些自由的东西,不做限制,长短两相宜。

| 4条评论分类: 我爱PHP,系统架构设计 标签:  

也谈apache本地虚拟主机测试环境的搭建03/28/2009

最近的一个系统要求必须在网站根目录下运行,因为生成静态页啥的,URL处理非常繁琐,真正的上线运行就不用担心那么多的问题,那肯定是根目录cool,而我本地的开发环境AMP的根目录下已经遍地狼藉,实在不能再往里头填东西,不然,找文件又得找半天,甚至最大的问题是到时候怎么完整的导出整个网站,不多目录也不少一个文件。唉!~有些愁眉不展。。。咦!强大的apache不是告诉我们可以虚拟主机的吗?我本地搞个不就成了。于是想起小猪写的一篇文章,挖他博客,不难就找到了,照做之,我将本地的域名指定为mydown,我apache的端口是8080,重启apache后,遗憾的事情还是发生了,我输入https://mydown:8080/和https://localhost:8080/指向的同一个站点,这就意味着我原来的资源全部不能访问,哦~千万不能!继续找资料,查apache手册,总算弄明白怎么整了。 此文妙哉,快快看全文 »

| 7条评论分类: 系统架构设计,网管日志 标签:  

使用PHP开发深度多语种网站的解决方案小谈03/26/2009

中国加入WTO已有相当长的一段时间,全球经济贸易一体化的进程也一直没有停止她的脚步。将自己的产品销往全世界,和各种肤色的人们谈生意,这些我们现在都已是司空见惯、习以为常的了。这样的趋势下,越来越多的企业要求他们的网站是多语种的,让他们产品所覆盖地区的人群都能看懂他们的网站信息,和他们交流,获得线上订单等等。php只是众多web开发语言中的一种,要实现深度多语种,所谓深度多语种就是“完全”的多语种,从页面内容、数据库甚至页面布局和CSS样式(例如给欧美人群和亚洲人群呈现不同的页面风格),而不只是仅仅用一个语言包来动态改变页面文字(不包括从数据库读取的数据)的语种了事。目前实现多语种的方案大概有以下2种。
1、为每个语种建立不同的目录(或者绑定不同的二级域名)来实现深度多语种
例如,https://website/chs,https://website/cht,https://website/eng,分别对应简体中文,繁体中文和英文,这种做法就相当于做了3个网站。这里有个现成的例子就是中华网,当我们输入www.china.com的时候,他的首页JS会判断当前浏览器语种,自动跳转到相应目录,当然其繁体版和英文版都使用了二级域名,这丝毫不会影响我们这种方案的实施,微软的网站也是这种方案。要实现这种方案,我们可以将共享部分的代码通通放在web根目录下,当然我的意思不是说不在web根目录下建立二级目录来为库文件归类,然后在chs,cht,eng等等语种目录下分别初始化不同的数据。这样做的好处是每个语种网站的独立性出奇的好,要增加一个语种甚至不用动原来的任何代码,直接建个目录得了。在维护上,甚至可以独立,每个语种由不同地区的管理员来更新内容.
2、在同个URL上实现深度多语种
显然,这种方案不太适合一个超过10个语种的网站。实现的思路是根据不同的语种传入值,比如$_GET['lang'],来调用不同的语言包,风格包,数据库。他的好处也显而易见,每个访客的网址几乎都有是一模一样的,页面名称也都是相同的,整齐划一。各语种网站的独立性也还不错,只是相对于方案一,当我们想在繁体版上多显示一个页面出来,或者换个页面名称,将显得比较困难,也就是对单语种网站结构不大容易变动。管理上倒也不会存在大的困难,这种方案比较适合语种不多的情况,后台大多只需要一个简体中文版即可。

至于数据库的方面,就要看需求了,可以将不同的语种数据库部署在不同的服务器上、也可以在相同的服务器上的不同数据库中、还可以是同一数据库的不同表中、当然也可以是相同的表中的不同字段,考虑的只是网站的负载、并发以及成本的问题了。

本文只是粗略的讲了一下多语种的解决方案,不当之处,欢迎大伙斧正啊。

| 2条评论分类: 我爱PHP,系统架构设计 标签:  

小议MD5加密字符串的防破解技术11/08/2007

     md5无疑是这个时代人们所最为津津乐道,最为常用的一项加密算法,其以加密强度颇大而著称,理论上通过穷举碰撞来猜解密文,得出原文,需要很强悍的计算机昼夜不停的工作N久才能完成,所以MD5算法的使用范围极为广泛~
     然而,似乎自然界都遵循“枪打出头鸟”的原则,所以,在MD5流行的同时,人们也想出各种猜解手段来攻击MD5算法,例如:字典穷举、MD5crack,但其效率不高,成功率也很低,目前最有效的破解MD5算法的方法是查询,猜解的对象是针对会员密码!其原理就是将大量的口令收集起来,然后让他们与自己的MD5密文一一对应,需要的时候对其查询,得出原文,随着其收集数据量的增加,破解成功率是相当高!目前国内最大的专营此业务的网站是CMD5.COM
https://www.cmd5.com/),其数据库号称已达4T,也就是 4*1024G,4000G的数据,换成电影的话(按800M一部)至少可以放5000部电影,按一天看10部的话,这些电影要超过一年半的时间才能从头到尾看一遍,还周末、国家法定节假日不休息!!!
      哈哈,扯远了。本文要讨论的中心就是如何让这种破解方式也失效~好的,开工,在这之前我们必须明白,为什么MD5被破解,很大的原因是因为原文太短了,或者太“简单了”,诸如“123”,“abc”……,先来个实验:
      动网默认的管理员密码是admin888,其MD5值是7fef6171469e80d32c0559f88b377245,放到cmd5.com上,不到1秒钟即出来原文! 太给力了,让我看完 »

| 7条评论分类: 我爱PHP,系统架构设计 标签:  

PHP界大牛们
反人类不分昼夜
牛掰级朋友圈子