月度归档:2011年07月

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 这里写前面脚本返回的文件路径;
}