Jump to Navigation

WEB

WEB/PHP开发

使用php向flickr自动上传图片

1、选择api
phpFlickr,这个包支持php4/php5。与phlickr这个要新些全面些。
这个库想比phlickr更合适,但是也有些老,像没有像oauth这些功能。

2、创建 flickr app 的key
http://www.flickr.com/services/

3、配置与认证登陆

Category:

最近遇到的fastdfs响应超时问题

最近测试fastdfs,准备正式使用,但测试中遇到比较严重的问题:

大多数情况下运行良好,偶尔一段时间,大概超过1个小时内,使用php客户端上传文件,

一起显示110 Connection timed out错误。

在服务器端也同样报这个错误,显示与另一台storage通信有接收响应超时,错误如下,

经过分析,发现在报错比较多的情况,monitor显示sync delay 比较大,大概超过30m到1小时。

猜测可以是同步镜像有一些问题,现在同步镜像的设置为24小时实时同步,可能比较耗资源。

可以通过调整同步等待时间与同步时间段方式,测试是否确实与此有关。

总结几种方法可以试着调整测试一下,

调整同步等待时间与同步时间段。

安装libevent-2.0-stable版本,目前使用centos 6自带的1.13-stable版本。

使用connection pool,用网络连接池的方式减小连接消耗。

调整read/write的线程数,使整个过程不会阻塞在某个IO操作上。目前的服务器做了raid,适当调整可提高IO效率。

希望通过这些方式测试,确定这个问题的原因,并能解决。

Category:

实时图片处理系统架构设计与实现

1) 需求

对于当前的互联网,图片的应用非常广泛。

无论从基本的论坛到SNS,从B2B到B2C的电商网站,

或者到纯图片浏览网站,都离不开图片这种传达信息丰富的媒介。

2) 功能特征

对于这些需求作整理,一般要求对图片做水印、缩略图、裁切、滤镜等功能。

3)原理

实时处理图片,只记录原图,请求来到之后根据参数处理为所需的效果图片。

无/微配置系统,把处理参数直接放在url中,由系统解析URL,提取处理参数。

原图安全,对于原图的访问,根据图片的文件名添加签名信息和token信息。

多样化存储后端,可以使用磁盘目录hash存储,或者使用分面式文件系统存储。

不同规模配置,对于小、中、大、超大规模图片处理的支持,使用不同的后端配置,运行于不同的规模模式。

结果缓存,对于已经处理完成的效果图片,使用静态缓存提高速度,减小实时处理的CPU压力。

url唯一化,对于带无用的、多余的参数的情况,作重定向到整理过的正规的唯一地址上。

4)架构

Category:

redis中的key的两种过期机制

可以说redis是一个纯内存的缓存系统,其能存储的数据量不会超过节点的最大内存容量。
所以key的过期清理机制非常重要。

一种比较常用的机制是,在读取key的时候,检测是否过期。
这是当前所有的内存K/V都在使得的办法,这种办法的CPU代价很低,顺便就能实现。
不过这种机制有一个问题,对于那些比较少访问的数据,
很有可能一直没有机会处理失效,而长时间浪费本应该回收的内存。

redis实现了另外一种过期机制,定时分批扫描有过期设置的key。
比如每秒扫描100个这种key,如果有已经过期的,则删除。
下一秒扫描下个100个key,循环执行。
这种机制保证了过期的key一定能够从内存中删除,节省内存空间。
这机制由于需要定时扫描,有一定的CPU消耗。不过在每次扫描时,
并非扫描全部数据,所以算是对CPU消耗与内存消耗两者的比较好的折衷方案。

Category:

php 5.5正式发布

新功能,
*) 节省资源的、灵活的、剪接的iterator(迭代器), generator,yield
*) 后发的finally
*) 功能不足的常量数据/字符串下标引用
*) 迟到的empty(表达式)支持
*) 缓慢到来pcode 缓存、代码优化/Zend Optimiser+
*) gd优化

Category:

安装支持speedy(spdy)协议的nginx web 服务

安装支持speedy(spdy)协议的nginx web 服务

spdy协议是google提出的当前http协议的扩展协议,
主要目的用于多网页请求的合并发送,
提高页面响应效率,改善网页请求处理的用户体验。

这两天尝试安装了一下,对于nginx来说,安装还比较简单。
安装步骤:
*) 下载nginx-1.3.x源码包,并解压
*) 下载spdy协议补丁文件,http://nginx.org/patches/spdy/patch.spdy.txt
*) 进入源码目录,给nginx源代码打补丁
patch -p1 *) 开始编译,
对于比较新的系统,直接使用以下参数编译安装
$ ./configure --with-http_ssl_module --with-http_spdy_module

Category:

使用Tokenizer做简单PHP代码静态分析

这是PHP的核心功能。

检测扩展模块是否完整:

读取所有的代码,查找到所有的定义的类

对所有new的类到定义类中查找,

如没找到,则测试是否是扩展类,

如再没找到,则是没有任何定义的类,可能是扩展安装不全。

可以通过字符串的近似匹配算法,查看是否是手误。

检测扩展函数是否完整:

读取所有的代码,查找到所有的定义的函数

对所有函数调用到定义函数表中查找,

如没找到,则测试是否是自带函数,或者是扩展函数,

如再没找到,则是没有任何定义的函数,可能是扩展安装不全,或者有手误。

检测类方法调用:

是否定义了方法,定义的public/private是否合适。

检测没有使用的函数、类、变量。

PHP代码静态分析工具列表:

hiphop

Category:

又试用了一把google appengine

头一次试用还是两年前了吧,不过由于只提供了python的SDK,没有怎么用,并且那时提供的python SDK还只是支持python-2.5版本的。

今天偶然想起来,原来还有个google appengine的账号,登陆看了下,现在已经支持了python-2.7,java SDK,还有试验性的go 语言支持。

对于免费资源,小的试验项目,无论从磁盘的存储容量,网络带宽,使用的CPU资料都是够用的。

去年的时候,借着go语言的推广,了解了一下go语言,感觉还比较有意思。

一直想学点go语言,做些东西试试,由于项目语言的选择保守、人员学习新语言的成本、平台转换新语言框架的成本,在工作上一直没有相关的项目去实践。

准备在google appengine上使用go语言做些小项目,像书签,RSS集成订阅等工具,熟悉下go语言。

同时也熟悉下google appengine作为一个平台的运行机制,为打造自己的PHP做些基础理解。

附注:
个人感觉go语言的HTML模板功能看上去别扭极了,是刚开始接触的原因还是事实如此,等再深入学习再说。

Category:

支持自动重连接的PHP PDO类完善

PHP的PDO是取代原来的php-mysql、php-mysqli模块的统一数据库访问模块,

比直接使用各自数据库提供的原始扩展函数相比,PDO的好处是移植性更好些。

最近在使用PDO开发框架过程,对其有了更多些的认识。

*)对长连接的支持

*)异常的使用

*)连接的自动关闭控制

*)连接中断的重连接(MySQL has gone away)

*)

最近遇到特别麻烦的问题,使用长连接是,全出来 MySQL Server has gone away的问题。

这种情况下PDO没有办法检测并重连接,也没有提供重新连接的相关方法。

这样对长连接的使用有点悲催了,开始运行的很正常的系统,运行一段时间后,却因为数据库连接的问题系统瘫痪了。

经过很多的代码测试与查找资料,实现了一个能重连接的PDO封装。在此分享思路与主要代码,补充PDO在实际应用中遇到的问题。

Category:

对于couchbase执行效率的一点认识

在2012年,对于IT行业来说是NoSQL的一年,所有的NoSQL产品不断出现,刷新着IT行业的技术理念。

在实际应用中,讨论比较多的,依旧是mongodb, redis, (其他可能还有许多),couchbase算是比较新的一种。

选择couchbase的理由在于,其设计理念上比较先进,水平扩展的功能基本透明,集群内的节点上的数据自动分布,添加减少节点时的rebanlance功能,与其他几个产品相比,比较简洁,也很实用好用。

接下来讨论它的效率了,couchbase 的集群功能与进程通信使用erlang实现的,所以对于单个操作上根本不占优势。因为即使单个操作,在实现上依然需要考虑集群的数据分配,数据的备份与磁盘的定入。

但是这种实现也有好处,在并发早大的情况下,其性能下降并不明显,couchbase官方的测试结果最大能达到每个节点写入2w个k/v。我自己的测试,也不低于这个数据。
根据这种情况,它更像数据库了。

所有在追求极致的访问速度,但访问并发不大的情况下,使用couchbase也许不太合适,但大多数项目下,还是比较好的选择。

Category:

页面

订阅 RSS - WEB


Main menu 2

by Dr. Radut