作者归档:℃冻番茄

图片服务器开发

网站按功能进行分割,采用API方式对应用服务器提供服务

图片服务器,主要的作用是图片的保存、切图、缩放等操作。

后期网站访问量比较大的情况下,采用rsync,使多台图片服务器图片数据同步做集群。前台通过crc32计算调用不同的图片服务器,分摊图片服务器的压力。当数据量比较大的情况下也可以做分布式处理!

流程:

1 应用服务器接收到用户上传的图片

2 使用php的curl函数通过http把图片原封不动的传输到图片服务器。

3 通过参数,告诉图片服务器是否保留源图、切割缩放多大的尺寸等。

4 图片服务器接收到图片后,按参数进行图像操作,同时,把生成的图像放入年月日目录

5 file_md5得到图像文件的md5值,去数据库中搜索,看是否存在已有图片

6 如果存在的话,删除刚刚保存的文件,从数据库中直接返回真实的图片url地址(例:http://img.sm.com/2011/08/2/dfadfa.jpg)。

7 如果是新图片的话,把图片信息写入数据库 ,图像的md5做为ID号,通过hash id号分表保存。

8 图片服务器返回一个数组,数组中保存了处理了的图片的全部图片ID 及 url信息,借应用服务器使用及保存

Sphinx构建电商网站高性能搜索服务

公司新项目进入开发阶段,已把整个网站进行拆分,方便开发人员进行分配开发任务。因为搜索服务比较重要,所以先行开发,目前已完成搜索服务的构建。以后主站开发时,直接对接口进行开发就能实现商品的搜索功能了。

需求

通过关键词、分类、价格范围、商品sku等参数进行组合搜索

通过上架时间、价格等参数进行排序显示

方案

sphinx+libmmseg 做搜索引擎 mysql做数据源

php+SphinxClient做REST风格搜索接口

应用服务器通过搜索接口搜索数据时,接口只返回商品的ID号,然后由应用服务器根据ID号从cache中读取商品的完整信息。如果搜索出的商品被删除时,每页显示的商品数会减少一定的个数。

搜索更新策略

因为开始阶段商品等数量较少,每天重新做一次主索引,这样可以把删除的商品从索引中清除掉。

采用主索引+增量索引的方式,实现准实时搜索功能

每分钟新建一次增量索引,每天重新生成一次主索引,无需重启服务完成索引的更新!

后期词库整理

固定时间周期进行中文分词词库的新加分词工作,对商品所需的关键词进行分析整理添加,保证用户搜索时,提供的搜索结果更加精确!

coreseek索引更新机制

coreseek索引更新机制
原文地址:
http://fatal.blogbus.com/logs/45153968.html

今天的时间都花在coreseek的索引更新机制上了,原来是每隔一分钟更新增量索引,每天再重建一次索引。sph_counter 中存放区分主索引和增量索引的maxid。现在的方法,依旧是每分钟更新增量索引,但是重建索引改成合并,将增量索引合并到主索引中,并更改 sph_counter中的maxid值,清空增量索引。搜索则都是同时从两个索引中搜索。

这个可是折腾了大半天才得出来的结果,合并索引不难。

其他两个都有问题,先说下今天碰到的情况。

先是更新sph_counter的maxid值,这个时候还没有考虑到清空增量索引,所以合并索引这步暂时是没有问题的,而合并索引后,再更新增量 索引,还会得到第一次建立索引后的所有增量,因为没有改变maxid,后来在coreseek.cn上看到有人提到 sql_query_post_index,可以更新增量索引后改变maxid值,于是在增量index中加入了这个选项,= =开始是手工更新增量索引,合并到主索引,这两步一起做,没有问题,后来用crontab才发现,增量索引每更新一次,前面的记录都会丢失,因为这些记录 还没有合并到主索引就被更新的增量索引覆盖了。这个方法行不通,后来问了神仙,= =,原来脚本也可以更改数据表中的值,请教了一下,此问题解决。说完另一个问题,一起贴最终的脚本内容。

继续阅读

安装配置Varnish3.0手记

在内网的vps上安装Varnish的最新版3.0来用做测试

Varnish有centos下的rpm和ubuntu下的deb二进制包下载,但我选择的是源码编译安装

先下载 wget http://repo.varnish-cache.org/source/varnish-3.0.0.tar.gz

分分享一个Varnish老版本的中文手册,比起看英文原版的省事的多。

tar -xzvf varnish-3.0.0.tar.gz

解压varnish进行编译安装

cd varnish-3.0.3

./autogen.sh

./configure

make

make install

安装成功后

varnish -V 查看版本,看是否安装成功

测试varnish

先编辑配置文件

vim /user/local/varnish/etc/varnish/default.vcl

backend default {
.host = “192.168.1.154”;
.port = “80”;
}

表示,通过varnish访问192.168.1.154的80端口

varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,50m -T 127.0.0.1:200 -a 0.0.0.0:80

启动varnishd服务,端口号绑定80   设最大内存50m  (VPS内存小,没办法,将就着做试验)

现在可以打开varnish了

http://192.168.1.153    (开启varnish的端口号)

戴图显示,nginx 为154上运行的web服务器,出现了varnish字样,表示缓存架设成功,已正常工作了。

LNMP下为Nginx目录设置访问验证的用户名密码[转vpser.net]

有时候需要象Apache那样为指定的目录添加访问验证,一般在Apache下使用htpasswd来添加,而htpasswd是包含在apache2-utils里,一般LNMP一键安装包或自己编译安装LNMP都不会安装apache2-utils。

1、创建类htpasswd文件

执行:wget -c soft.vpser.net/lnmp/ext/htpasswd.sh;bash htpasswd.sh

按提示输入用户名、密码、及认证文件名。脚本会自动生成认证文件。记录下脚本返回的文件路径。如:/usr/local/nginx/conf/vpser.net.auth。

2、为Nginx添加auth认证配置

下面是以某域名下面的soft目录为例,在域名的server段里加上如下代码:
location ^~ /soft/
{
auth_basic “Authorized users only”;
auth_basic_user_file 这里写前面脚本返回的文件路径;
}

Authorized users only为提示信息,可以修改成自己想让他提示的信息;auth_basic_user_file 后面需要填htpasswd.sh脚本返回的人家文件的路径。按上面的提示修改好配置后,重启nginx,访问 http://yourdomainname/soft/ 就会提示输入用户名和密码。

注意,加上认证之后该目录下的PHP将不会被解析,会出现下载提示,如果想可以解析PHP可以将上面的配置改为:

location ^~ /soft/ {
location ~ .*\.(php|php5)?$ {
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
}
auth_basic “Authorized users only”;
auth_basic_user_file 这里写前面脚本返回的文件路径;
}

改进了公司的php开发流程

目前公司的开发流程是开发人员工作机win7 ,一台开发服务器,安装xen虚拟化,虚拟出n台vps,所有的vps安装centos + nginx + mysql + php-fpm 。每人一台vps或每个项目一台vps,通过samba做共享,开发机磁盘映射的方式进行远程开发。但这样做硬件资源上太过浪费,还一个问题是对网络硬盘提交svn时经常出现冲突及需要清理的问题,还经常在win下无法清理,需要进行ssh进行操作,比较麻烦。所以对公司的开发流程做出了一些改动!

开发环境 192.168.1.152这台vps运行php-fpm 开发人员win7运行nginx for win,并把每个win7的程序根目录共享出去,152 vps 按ip不同挂载所有开发人员的共享目录。 使nginx for win 远程调用152上的fast-cgi解析php.

这样,采用一台vps就可以为公司所有的开发人员提供php解析服务。win7电脑上无需安装php、php拓展或是php方面的设置,非常方便进行开发调试
当win7 svn ci操作时,svn服务器通过钩子脚本,自动对152(整合开发环境)及146(测试环境)二台vps进行svn up操作,这样多人同时开发时,直接localhost就可以看到自己开发时的效果,提交svn就可以在152上看到完整的效果了。

新开发的FlashPaper转换服务器

工作方式:

网站接收用户上传的doc exl pdf txt 等源文档,存放在一个需要http auth认证的目录下,防止网站用户web方式读取

然后把要转换的文档存mysql中,供fpserver转换

fpserver采用线下转换方式,比如当一台fpserver转换速度较慢时,可以在另一台pc或是服务器上再运行一套程序,只需要设定不同的标识号即可!

不知道这算不算是分布式计算,嘿嘿,每台计算机上运行一套服务器程序,从web服务器获取要转换的文档并下载下来,转换,转换成功后上传。完善的机制保证下载失败或是转换失败再者上传失败等异常问题出现后的问题解决!

fpserver无需放置机房,通过http上传,只需网速ok就行!

利用svn的钩子脚本实现测试服务器代码的即时更新

在使用svn钩子脚本之前,各个开发人员的开发环境中的代码采用svn进行管理,在测试环境中,每天由程序员手动svn up来更新测试环境中的代码,比较繁琐。

今天在svn服务器中使用了钩子脚本,开发人员每次ci操作都会自动调用该脚本实现测试环境中的svn up,因为公司的svn服务器与测试环境为同一台服务器,所以比较好操作

svn项目下面有hooks目录,里面存放的是全部的钩子脚本的模板

post-commit.tmpl 为客户端commit提交后触发

vi post-commit

[codesyntax lang=”bash”]

#!/bin/sh
WEB=/home/www/yefmanage
export LANG=en_US.UTF-8
svn update $WEB --username test --password test

[/codesyntax]

chmod 777 post-commit

测试一下,看脚本是否有权限问题

./post-commit

正常的话,就ok了!以后每次客户端操作,自动运行该脚本