分页: 5/31 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]
  [文章作者:张宴 本文版本:v1.0 最后修改:2010.02.05 转载请注明原文链接:http://blog.zyan.cc/sphinx_search/]

  前言:

  2008年7月,我写过一篇文章《基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计》。有不少网友希望阅读全文,我将该文档整理了一下,分享出来。文档解压后大小为7.33M,共19页。

  本站下载地址: http://blog.zyan.cc/book/sphinx/sphinx_mysql.zip

  新浪下载分流: http://ishare.iask.sina.com.cn/f/6728201.html

  上述文档架构存在的局限,我在2008年12月的文章《亿级数据的高并发通用搜索引擎架构设计》中已经指出:一是MySQL本身的并发能力有限,在200~300个并发连接下,查询和更新就比较慢了;二是由于MySQL表的主键与Sphinx索引的ID一一对应,从而无法跨多表建立整站查询,而且新增加类别还得修改配置文件,比较麻烦;三是因为和MySQL集成,无法发挥出Sphinx的优势。虽然如此,但对于一些写入量不大的搜索应用,已经足够了,或许对很多人会有帮助。



  正文:

  在这之后,本人基于《亿级数据的高并发通用搜索引擎架构设计》开发的Sphinx分布式通用站内搜索引擎平台,已经在生产环境运行9个月以上,经过运营中的不断完善与改进,目前已形成了一套可扩展的分布式通用站内搜索引擎框架。CMS、视频、论坛等产品发生的增、删、改操作,文本内容实时写入自行开发的 HTTPSQS 高性能简单消息队列服务,通过队列控制器更新索引和存储。提供支持XML、JSON的API查询接口,支持亿级数据的索引、分布式、中文分词、高亮显示、自动摘要、准实时(1分钟内)增量索引更新。

  点击在新窗口中浏览此图片

  下面是Sphinx新的搜索架构中技术关键点实现方式的一些介绍,与大家分享、交流一下:

  1、一元分词和中文分词的结合:

  ①、一元分词位于索引更新模块。Sphinx索引引擎对于CJK(中日韩)语言(必须是UTF-8编码)支持一元切分,假设【反恐行动是国产主视角射击网络游戏】这段文字,Sphinx会将其切成【反 恐 行 动 是 国 产 主 视 角 射 击 网 络 游 戏】,然后对每个字建立反向索引。如果用这句话中包含的字组成一个不存在的词语,例如【恐动】,也会被搜索到,所以搜索时,需要加引号,例如搜索【"反恐行动"】,就能完全匹配连在一起的四个字,不连续的【"恐动"】就不会被搜索到。但是,这样还有一个问题,搜索【"反恐行动游戏"】或【"国产网络游戏"】就会搜索不到。对于这个问题,采用位于搜索查询模块的中文分词来处理。

  sphinx.conf配置文件中关于UTF-8中文一元分词的配置如下:
...省略...
index t_source_main
{
        source                  = t_source_main
        path                    = /data0/search/sphinx/data/t_source_main
        docinfo                 = extern
        mlock                   = 0
        morphology              = none
        min_word_len            = 1
        charset_type            = utf-8
        min_prefix_len          = 0
        html_strip              = 1
        charset_table           = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
        ngram_len               = 1
        ngram_chars             = U+3000..U+2FA1F
}
...省略...


  ②、中文分词位于搜索查询模块。搜索“反恐行动游戏”、“国产网络游戏”,先调用独立的中文分词系统,分别切分为“反恐行动 游戏”、“国产 网络游戏”,这时候,再给以空格分隔的词语加上引号,去Sphinx搜索【"反恐行动" "游戏"】或【"国产" "网络游戏"】,就能搜索到这条记录了。中文分词词库发生增、删、改,无需重建整个Sphinx搜索索引。



  2、使用自行开发的HTTPSQS(http://code.google.com/p/httpsqs)开源简单队列服务程序,来缓冲高并发数据写入

  新闻、论坛帖子、客服公告、SNS社区等发生的增、删、改操作,文本内容通过更新接口实时写入HTTPSQS队列,再通过队列控制器更新到Sphinx搜索引擎索引中。



  3、Sphinx不能严格按照字段排序的小问题

  如果不想使用权重,只希望严格按照时间、主键等排序,而匹配模式(Matching modes)又为非SPH_MATCH_BOOLEAN时(比较常用的是SPH_MATCH_ALL、SPH_MATCH_EXTENDED),Sphinx搜索结果在某一页中的排序会不太准确。例如:按照UNIX时间戳倒序排序,0,20为第一页,20,40为第二页,第一页的最小时间戳一定会大于第二页的最大时间戳,但是,第一页中的0,20条记录却不会严格按照时间戳排序,第二页亦是如此。因此,如果需要精确排序,用户翻到搜索结果的某一页,就需要对Sphinx在某一搜索结果页中的记录另行再排序,在我的这套搜索架构中,这一再排序操作由search.php查询接口使用array_multisort()函数处理。一般情况下,一页只会显示5~30条记录,因此,只对几十条记录采用PHP再排序,速度也是非常快的。



  4、队列控制器中“时间控制”与“数量控制”相结合,实现搜索索引的1分钟内准实时更新:

  ①、Sphinx 0.9.9生产环境的建索引速度大约在5.5 Mbytes/秒、6400文档/秒。队列控制器可以设置10秒钟更新一次增量索引,只要Sphinx增量索引数据源的文档数在38万以内,就能保证增量索引在1~60秒内得到更新,这是从“时间”上进行控制。

  ②、为了避免增量索引数据源的文档数增长到38万,队列控制器在增量索引数据源的文档数超过1万时,还将激活增量索引合并入主索引的操作,合并完成的文档将从增量索引数据源中删除,这是从“数量”上进行控制。
Tags: , ,
  从2010年1月16日向新网代理商索要域名转移密码,到2010年1月27日13:55分Whois信息中的域名注册商变更为Godaddy,历时11天,我的域名 zyan.cc 成功转移到国外。

  一、为什么要把域名注册商从国内转移到国外:

  1、域名完全控制权:国内大多数的顶级域名注册商拿着本该属于域名所有者的“域名转移密码”,设置各种条件(例如:收费、续费一年才给密码、邮寄证明材料等)提高域名所有者取得“域名转移密码”的难度,甚至以种种借口阻止您获知转移密码。国内的域名注册商只能设置两个DNS服务器地址,而国外域名注册商可以设置多个DNS地址。在国外域名注册商,你拥有域名的完全控制权与转移权,域名转移、域名过户完全可以由你在线操作,免费进行。

  2、价格与安全性:国内的域名注册商域名注册、续费价格昂贵(.com域名100元以上),在代理商处虽然便宜一些(大约60元/年),但域名控制权更少,遇到黑心代理,说不定你辛苦经营的域名,某一天就成别人的了。在国外注册、续费域名(例如在Godaddy用优惠码只需7美元/年,不到50元人民币/年)。

  3、最主要的原因:向“clientHold”说“No”。最近,有关部门发现了比去机房拔网线更便捷的方法,那就是通知国内的域名注册商对域名进行“clientHold(域名暂停解析)”,clientHold是注册商用来禁用一个域名最简单的手段。今年以来,发生了多起国内知名网站被域名注册商“clientHold”的事件:

  [2010-01-05] 新网暂停解析51.com及IT168.com等网站域名:http://tech.163.com/10/0105/17/5S9GP09A000915BF.html
  [2010-01-05] 网站域名被屏蔽 百万用户上不了"博客大巴":http://it.people.com.cn/GB/42891/42894/10729530.html
  [2010-01-21] TechWeb.com.cn域名停止解析:http://it.sohu.com/20100121/n269753011.shtml
  [2010-01-25] 篱笆网遭新网停止域名解析服务:http://tech.163.com/10/0126/10/5TUR6JP8000915BF.html
  [2010-01-27] 济南日报报业集团主办的“舜网”被万网暂停域名解析:http://china.huanqiu.com/roll/2010-01/704184.html

  由公司、专业团队运营的网站尚且难逃域名被暂停解析的命运,那么微弱的个人网站域名有如“兵在其颈”,一旦被“clientHold”,也许就是永久。防止域名被Hold的方法是将域名转移到国外的域名注册商,域名解析采用国外域名注册商的DNS服务器、自建DNS服务器或者第三方DNS服务器(例如:dnspod.com)均可。

  4、.com、.net、.org等国际域名或其他国家域名,才能转移到国外域名注册商,拥有“.cn”域名的朋友,听天由命吧。



  二、转移到国外哪家域名注册商呢?

  1、企业的选择: NETWORK SOLUTIONS, LLC (http://www.networksolutions.com

  通过“http://who.is/”查询一下,可以发现,新浪sina.com、网易163.com、网易邮箱126.com、搜狐sohu.com、搜狗sogou.com、腾讯搜搜soso.com、金山kingsoft.com、金山逍遥xoyo.com、中华网china.com,就连国字号的中央电视台cctv.com、新华网xinhuanet.com,域名都是在国外域名注册商处注册的,而且注册商都是同一家:“NETWORK SOLUTIONS, LLC”。

  Network Solutions 成立于1979年,有着30年的历史,是全世界最早提供域名注册的公司。1993年与美国国家科学基金会签定协议,承担InterNIC的域名注册服务和信息服务工作并且开展网络技术服务、咨询等其它业务,现有超过700万域名是在其注册的。

  因此,域名转移到Network Solutions,相对来说是最安全的。但是,它的价格较贵,例如.com域名差不多要30美元/年,因此适合企业。当然,如果你有钱,也不妨选择Network Solutions。

  2、个人的选择: Godaddy.comName.comEnom.com

  Godaddy 是全球最大的 ICANN 域名注册机构,占据了18%的市场份额。Godaddy 注册、转入、续费域名可以搜寻各种优惠码,.com域名使用优惠码只需7美元/年。最重要的是,它支持使用“支付宝”以人民币购汇方式付款。

  eNom 于1997年在美国华盛顿成立,是全球第二大 ICANN 域名注册机构,全球最大的域名抢注机构之一。

  Name.com 也是一家价格较低的不错域名注册商。



  三、转移前工作:索取域名转移密码
  [文章作者:张宴 本文版本:v1.2 最后修改:2009.01.12 转载请注明原文链接:http://blog.zyan.cc/nginx_cache/]

  Nginx从0.7.48版本开始,支持了类似Squid的缓存功能。这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302这样的非200状态码。虽然目前官方的Nginx Web缓存服务只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令,手动清除指定缓存页面,但是,通过一个第三方的Nginx模块,可以清除指定URL的缓存。

  Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。两者的功能基本上一样。

  最新的Nginx 0.8.32版本,proxy_cache和fastcgi_cache已经比较完善,加上第三方的ngx_cache_purge模块(用于清除指定URL的缓存),已经可以完全取代Squid。我们已经在生产环境使用了 Nginx 的 proxy_cache 缓存功能超过两个月,十分稳定,速度不逊于 Squid。

  在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。这使得一台Nginx可以同时作为“负载均衡服务器”与“Web缓存服务器”来使用。
  


  1、Nginx 负载均衡与缓存服务器在 Linux 下的编译安装:
ulimit -SHn 65535
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gz
tar zxvf pcre-8.00.tar.gz
cd pcre-8.00/
./configure
make && make install
cd ../

wget http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz
tar zxvf ngx_cache_purge-1.0.tar.gz

wget http://nginx.org/download/nginx-0.8.32.tar.gz
tar zxvf nginx-0.8.32.tar.gz
cd nginx-0.8.32/
./configure --user=www --group=www --add-module=../ngx_cache_purge-1.0 --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
cd ../



  2、/usr/local/webserver/nginx/conf/nginx.conf 配置文件内容如下:
user  www www;

worker_processes 8;

error_log  /usr/local/webserver/nginx/logs/nginx_error.log  crit;

pid        /usr/local/webserver/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;

events
{
  use epoll;
  worker_connections 65535;
}

http
{
  include       mime.types;
  default_type  application/octet-stream;

  charset  utf-8;
      
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 300m;
      
  sendfile on;
  tcp_nopush     on;

  keepalive_timeout 60;

  tcp_nodelay on;

  client_body_buffer_size  512k;
  proxy_connect_timeout    5;
  proxy_read_timeout       60;
  proxy_send_timeout       5;
  proxy_buffer_size        16k;
  proxy_buffers            4 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;

  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.1;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml;
  gzip_vary on;

  #注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
  proxy_temp_path   /data0/proxy_temp_dir;
  #设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
  proxy_cache_path  /data0/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=30g;
  
  upstream backend_server {
    server   192.168.8.43:80 weight=1 max_fails=2 fail_timeout=30s;
    server   192.168.8.44:80 weight=1 max_fails=2 fail_timeout=30s;
    server   192.168.8.45:80 weight=1 max_fails=2 fail_timeout=30s;
  }

  server
  {
    listen       80;
    server_name  www.yourdomain.com 192.168.8.42;
    index index.html index.htm;
    root  /data0/htdocs/www;  

    location /
    {
         #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
         proxy_next_upstream http_502 http_504 error timeout invalid_header;
         proxy_cache cache_one;
         #对不同的HTTP状态码设置不同的缓存时间
         proxy_cache_valid  200 304 12h;
         #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
         proxy_cache_key $host$uri$is_args$args;
         proxy_set_header Host  $host;
         proxy_set_header X-Forwarded-For  $remote_addr;
         proxy_pass http://backend_server;
         expires      1d;
    }
    
    #用于清除缓存,假设一个URL为http://192.168.8.42/test.txt,通过访问http://192.168.8.42/purge/test.txt就可以清除该URL的缓存。
    location ~ /purge(/.*)
    {
     #设置只允许指定的IP或IP段才可以清除URL缓存。
     allow            127.0.0.1;
     allow            192.168.0.0/16;
     deny            all;
     proxy_cache_purge    cache_one   $host$1$is_args$args;
    }    

    #扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
    location ~ .*\.(php|jsp|cgi)?$
    {
         proxy_set_header Host  $host;
         proxy_set_header X-Forwarded-For  $remote_addr;
         proxy_pass http://backend_server;
    }

    access_log  off;
  }
}



  3、启动 Nginx:
/usr/local/webserver/nginx/sbin/nginx




  4、清除指定的URL缓存示例:

  点击在新窗口中浏览此图片
  [文章作者:张宴 本文版本:v1.7.1 最后修改:2011.11.04 转载请注明原文链接:http://blog.zyan.cc/httpsqs/]

  HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。

  项目网址http://code.google.com/p/httpsqs/
  使用文档http://blog.zyan.cc/httpsqs/
  使用环境:Linux(同时支持32位、64位操作系统,推荐使用64位操作系统)
  软件作者:张宴

  队列(Queue)又称先进先出表(First In First Out),即先进入队列的元素,先从队列中取出。加入元素的一头叫“队头”,取出元素的一头叫“队尾”。利用消息队列可以很好地异步处理数据传送和存储,当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取消息队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等。

  HTTPSQS 具有以下特征:

  ● 非常简单,基于 HTTP GET/POST 协议。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP协议的编程语言均可调用。
  ● 非常快速,入队列、出队列速度超过10000次/秒。
  ● 高并发,支持上万的并发连接,C10K不成问题。
  ● 支持多队列。
  ● 单个队列支持的最大队列数量高达10亿条。
  ● 低内存消耗,海量数据存储,存储几十GB的数据只需不到100MB的物理内存缓冲区。
  ● 可以在不停止服务的情况下便捷地修改单个队列的最大队列数量。
  ● 可以实时查看队列状态(入队列位置、出队列位置、未读队列数量、最大队列数量)。
  ● 可以查看指定队列ID(队列点)的内容,包括未出、已出的队列内容。
  ● 查看队列内容时,支持多字符集编码。
  ● 源代码不超过800行,适合二次开发。

  点击在新窗口中浏览此图片



  1、HTTPSQS 1.7 压力测试:

  采用Apache ab命令进行压力测试,开启10个线程,放入10万条文本数据(每条512字节)到队列中:
  使用HTTP Keep-Alive时:23018 requests/sec
  关闭HTTP Keep-Alive时:11840 requests/sec

  采用Apache ab命令进行压力测试,开启10个线程,从队列中取出10万条文本数据(每条512字节):
  使用HTTP Keep-Alive时:25982 requests/sec
  关闭HTTP Keep-Alive时:13294 requests/sec

  详细测试内容:http://code.google.com/p/httpsqs/wiki/BenchmarkTest

  生产环境应用:在金山游戏官网中,新闻、论坛帖子、客服公告、SNS社区等发生的增、删、改操作,文本内容实时写入HTTPSQS队列,全站搜索引擎增量索引准实时(1分钟内)更新的数据源取自HTTPSQS。HTTPSQS 2009年12月18日上线至今,运行稳定,既有来自Web服务器的入队列操作,也有来自命令行脚本的批量入、出队列操作。



  2、HTTPSQS 的生产环境应用:

  ●金山通行证(https://my.xoyo.com
  队列应用类型:手机短信上行、手机短信下发、邮件下发
  队列应用要求:稳定性高,存储数据量大
  队列部署结构:一主、一备两台 HTTPSQS 热备模式

  ●金山用户行为分析系统(http://kbi.xoyo.com
  队列应用类型:用户鼠标点击、访问URL原始数据采集
  队列应用要求:并发性能高,存储数据量大
  队列部署结构:多台 HTTPSQS 应用层哈希分布式模式

  ●金山网络游戏运营平台 KingEyes
  队列应用类型:用户操作日志记录

  ●金山逍遥网站内搜索
  队列应用类型:索引准实时更新。在金山游戏官网中,新闻、论坛帖子、客服公告、SNS社区等发生的增、删、改操作,文本内容实时写入HTTPSQS队列,全站搜索引擎增量索引准实时(1分钟内)更新的数据源取自HTTPSQS。

  ●金山逍遥网全站通用评论系统
  队列应用类型:评论发表

  ●金山《剑侠情缘》电视连续剧四大角色人物选秀活动(http://zt.xoyo.com/haixuan/
  队列应用类型:用户上传的照片异步裁剪、缩放处理

  ●新浪邮箱(http://mail.sina.com.cn
  队列应用类型:用户登陆日志记录



  3、HTTPSQS 编译安装:

Google 公共 DNS 解析服务器

[不指定 2009-12-7 07:09 | by 张宴 ]
  Google 推出了公共的 DNS 解析服务器(Google Public DNS),可以用来代替 OpenDNS。Google承诺将严格遵循DNS协议,即不阻挡、不劫持和不过滤用户查询。Google Public DNS服务器IP非常好记,过目难忘:

引用
8.8.8.8        google-public-dns-a.google.com
8.8.4.4        google-public-dns-b.google.com


  点击在新窗口中浏览此图片

  点击在新窗口中浏览此图片

  当然,短IP的DNS服务器还有以下这些:
引用
4.3.2.1
4.2.2.1
4.2.2.2
4.2.2.3
4.2.2.4
4.2.2.5
4.2.2.6

Tags: , ,
  [文章作者:张宴 本文版本:v1.1 最后修改:2009.12.01 转载请注明原文链接:http://blog.zyan.cc/bo-blog_nginx_rewrite/]

  Bo-Blog是一款采用PHP开发的单用户博客程序,本人的博客也采用的是Bo-Blog,个人觉得bo-blog的排版、易用性要比WordPress好得多,但扩展性不如WordPress。

  很多朋友向我询问过,Bo-Blog的Nginx Rewrite规则如何写。由于Bo-Blog官网只提供了Apache的Rewrite规则,这里,我将自己从 Bo-Blog 的 Apache Rewrite 规则转换而来的 Bo-Blog 2.1.1 的 Nginx Rewrite 重写规则贴在此处,供需要的朋友使用:
引用
   if (!-e $request_filename)
   {
      rewrite ^/post/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /read.php?entryid=$1&page=$2&part=$3 last;
      rewrite ^/page/([0-9]+)/([0-9]+)/?$ /index.php?mode=$1&page=$2 last;
      rewrite ^/starred/([0-9]+)/?([0-9]+)?/?$ /star.php?mode=$1&page=$2 last;
      rewrite ^/category/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=category_$1&mode=$2&page=$3 last;
      rewrite ^/archiver/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=archive&cm=$1&cy=$2&mode=$3&page=$4 last;
      rewrite ^/date/([0-9]+)/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=showday_$1-$2-$3&mode=$4&page=$5 last;
      rewrite ^/user/([0-9]+)/?$ /view.php?go=user_$1 last;
      rewrite ^/tags/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ /tag.php?tag=$1&mode=$2&page=$3 last;
      rewrite ^/component/id/([0-9]+)/?$ /page.php?pageid=$1 last;
      rewrite ^/component/([^/]+)/?$ /page.php?pagealias=$1 last;

      #Force redirection for old rules
      rewrite ^/read\.php/([0-9]+)\.htm$ http://$host/post/$1/ permanent;
      rewrite ^/post/([0-9]+)\.htm$ http://$host/post/$1/ permanent;
      rewrite ^/post/([0-9]+)\_([0-9]+)\.htm$ http://$host/post/$1/$2/ permanent;
      rewrite ^/post/([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/post/$1/$2/$3/ permanent;
      rewrite ^/index\_([0-9]+)\_([0-9]+)\.htm$ http://$host/page/$1/$2/ permanent;
      rewrite ^/star\_([0-9]+)\_([0-9]+)\.htm$ http://$host/starred/$1/$2/ permanent;
      rewrite ^/category\_([0-9]+)\.htm$ http://$host/category/$1/ permanent;
      rewrite ^/category\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/category/$1/$2/$3/ permanent;
      rewrite ^/archive\_([0-9]+)\_([0-9]+)\.htm$ http://$host/archiver/$1/$2/ permanent;
      rewrite ^/archive\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/archiver/$1/$2/$3/$4/ permanent;
      rewrite ^/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/date/$1/$2/$3/ permanent;
      rewrite ^/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/date/$1/$2/$3/$4/$5/ permanent;

      #Filename alias
      rewrite ^/([a-zA-Z0-9_-]+)/?([0-9]+)?/?([0-9]+)?/?$ /read.php?blogalias=$1&page=$2&part=$3 last;
   }


  PS:2009-12-01修正一处错误,之前文章中的if (!-x更换为if (!-e
  [文章作者:张宴 本文版本:v1.0 最后修改:2009.11.14 转载请注明原文链接:http://blog.zyan.cc/startssl/]

  HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容请看SSL。

  它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。



  1、自行颁发不受浏览器信任的SSL证书:
  HTTPS的SSL证书可以自行颁发,Linux下的颁发步骤如下:
openssl genrsa -des3 -out api.bz.key 1024
openssl req -new -key api.bz.key -out api.bz.csr
openssl rsa -in api.bz.key -out api.bz_nopass.key

  点击在新窗口中浏览此图片

  Nginx.conf的SSL证书配置,使用api.bz_nopass.key,在启动Nginx是无需输入SSL证书密码,而使用api.bz.key则需要输入密码:
引用
server
{
   server_name sms.api.bz;
   listen  443;
   index index.html index.htm index.php;

   root  /data0/htdocs/api.bz;

   ssl on;
   ssl_certificate api.bz.crt;
   ssl_certificate_key api.bz_nopass.key;
   ......
}


  自行颁发的SSL证书虽然能够实现加密传输功能,但得不到浏览器的信任,会出现以下提示:
  点击在新窗口中浏览此图片



  2、受浏览器信任的StartSSL免费SSL证书:
  点击在新窗口中浏览此图片

  http://campus.kingsoft.com/

  2009年11月8日14:10,将和其他同事一道,乘坐东方航空MU2120航班飞往西安,参加金山软件2010校园招聘西安站的大招会。

  点击在新窗口中浏览此图片

  金山逍遥网校园招聘的研发类岗位如下,我们张开双臂欢迎各位青年才俊的加盟:

  北京金山网络游戏KSG

  北京逍遥网研发

  逍遥网系统工程师
  工作职责:
  1、服务器安装、配置、调优;
  2、常用环境搭建,如:apache、php、mysql、nginx、memcache等;
  3、系统脚本编写,数据统计。
  任职资格:
  1、熟悉网络理论(如OSI七层模型,TCP状态机),网络协议(TCP/IP)等;
  2、了解各种网络设备的配置调试及故障分析;
  3、熟练linux上c++/c网络编程,了解cgi,berkly bd编程、熟练多线程开发;
  3、熟悉UNIX系统,具备一定的脚本开发能力(Perl,PHP,C,shell script等);
  4、愿意积极主动的思考如何把工作做好;
  5、有团队合作精神,能够承受较大的工作压力。
  注:请附以往能证明个人专业能力的资料如代码。

  逍遥网FLEX工程师
  工作职责:
  1、配合业务需要开发前端应用;
  2、根据社区业务开发前端应用。
  任职资格:
  1、熟练使用Action Script 3.0在FlexBuilder环境下开发;
  2、熟练使用Flex与AIR的标准组件;
  3、熟悉Flash小游戏开发;
  4、品行良好,性格开朗,具备良好的沟通能力;
  5、熟悉社区应用。
  注:请附以往能证明个人专业能力的资料如代码。

  逍遥网PHP工程师
  工作职责:
  1、熟悉apache+php5 + mysql 开发;
  2、了解PHP主流框架,且有一定的使用经验;
  3、了解各种设计模式,并能应用在开发当中;
  4、了解json、AJAX技术和模板技术,了解css+div和JavaScript;
  5、具有文档编写能力,面向对象的编程思想,优良的编程风格和习惯;
  6、了解LAMP构架,有一定的环境配置及维护经验;
  7、较强的团队协作能力、沟通能力和学习能力。
  任职资格:
  1、熟练PHP开发;
  2、熟练使用CSS,HTML,javascript;
  3、扎实的SQL知识,熟练使用MySQL;
  4、良好的SQL,PL/SQL编程技巧,有在Mysql下的编程经验;
  5、具有独立解决问题的能力及团队合作精神。
  注:请附以往能证明个人专业能力的资料如代码。

  逍遥网JAVA工程师
  工作职责:
  1、根据业务需要进行底层应用开发;
  2、根据社区业务需要进行OPENAPI相关开发。
  任职资格:
  1、对Java面向对象软件结构有深入理解以及很强的应用能力;
  2、能够熟练应用JSP/Servlet/JavaScript等WEB开发技术,熟悉Spring,Struts和Hibernate等主流的开发框架;
  3、了解数据库的基本理论和内部实现机制,有大数据量的数据库设计能力;
  4、了解TCP/IP、HTTP等协议,有网络编程及多线程开发经验;
  5、熟悉社区应用、了解OPENAPI相关技术;
  6、较强的自学能力,思维清晰;
  7、有较好的沟通交流能力。
  注:请附以往能证明个人专业能力的资料如代码。

  此外,还有逍遥网测试、编辑、运营等其他岗位,以及金山软件其他部门的招聘岗位,详见:

  金山软件2010全国校园招聘会--招聘职位



  [文章作者:张宴 本文版本:v1.0 最后修改:2009.11.01 转载请注明原文链接:http://blog.zyan.cc/dips/]

  2009年10月28日,在金山逍遥技术支持部内部分享会上,介绍了Gearman分布式计算框架与金山逍遥DIPS分布式图片处理平台,以下是PPT图片:

  点击在新窗口中浏览此图片
  点击在新窗口中浏览此图片
  点击在新窗口中浏览此图片

  CSDN SD2.0大会官网:http://sd2china.csdn.net/

  新浪科技SD2.0大会专题:http://tech.sina.com.cn/focus/CSDN_2009/

  24日Web分场:http://sd2china.csdn.net/schedule#schedule3

  《高性能Web服务器Nginx及相关新技术的应用实践》PPT下载:


  FLash版本在线浏览:


Tags: , , ,
  VPN的英文全称是“Virtual Private Network”,翻译过来就是“虚拟专用网络”。顾名思义,虚拟专用网络我们可以把它理解成是虚拟出来的企业内部专线。它可以通过特殊的加密的通讯协议在连接在Internet上的位于不同地方的两个或多个企业内部网之间建立一条专有的通讯线路,就好比是架设了一条专线一样,但是它并不需要真正的去铺设光缆之类的物理线路。这就好比去电信局申请专线,但是不用给铺设线路的费用,也不用购买路由器等硬件设备。VPN技术原是路由器具有的重要技术之一,目前在交换机,防火墙设备或Windows等软件里也都支持VPN功能,一句话,VPN的核心就是在利用公共网络建立虚拟私有网。

  虚拟专用网(VPN)被定义为通过一个公用网络(通常是因特网)建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定的隧道。虚拟专用网是对企业内部网的扩展。虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,并保证数据的安全传输。虚拟专用网可用于不断增长的移动用户的全球因特网接入,以实现安全连接;可用于实现企业网站之间安全通信的虚拟专用线路,用于经济有效地连接到商业伙伴和用户的安全外联网虚拟专用网。

  PPTP 全称为 Point to Point Tunneling Protocol -- 点到点隧道协议,是VPN协议中的一种。

  一、CentOS 5.3 下 PPTP VPN 服务器安装

  1、安装相关软件
  32位版:
yum install -y ppp iptables
wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.i386.rpm

  64位版:
yum install -y ppp iptables
wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.x86_64.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.x86_64.rpm


  2、配置文件编写
  ①、配置文件/etc/ppp/options.pptpd
mv /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
vi /etc/ppp/options.pptpd

  输入以下内容:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
idle 2592000
ms-dns 8.8.8.8
ms-dns 8.8.4.4



  ②、配置文件/etc/ppp/chap-secrets
mv /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak
vi /etc/ppp/chap-secrets

  输入以下内容
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
myusername pptpd mypassword *

  注:这里的myusername和mypassword即为PPTP VPN的登录用户名和密码



  ③、配置文件/etc/pptpd.conf
mv /etc/pptpd.conf /etc/pptpd.conf.bak
vi /etc/pptpd.conf

  输入以下内容:
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.9.1
remoteip 192.168.9.11-30

  注:为拨入VPN的用户动态分配192.168.9.11~192.168.9.30之间的IP
Tags: , , ,
  今天上午,参观了1938年黄河花园口决堤处。

  花园口位于郑州市区北郊17公里处的黄河南岸。抗日战争开始后,侵华日军沿平汉、津浦两路南下。1938年5月19日,徐州失守,日军沿陇海路西犯,于6月初攻陷开封,接着跟踪西进,抵达距离郑州不足百里的地方。郑州是陇海、平汉铁路的交汇处,北扼黄河天险,郑州一失,不但阻断各个战区间的铁路交通,而且将会导致西安、武汉无险可守的严重局面。而此时在河南境内的国民党主力部队多为徐州战场撤下的疲兵,尚未得到休整,已无力再战。为了阻止日军侵犯中原,1938年6月9日,蒋介石采取“以水代兵”的办法,下令扒开花园口黄河大堤,黄河水汹涌而出,一泻千里。它在一定程度上实现了阻截日军西进南下的目的,日军第14、第16师团陷入困境,但同时也给豫、皖、苏的中国百姓带来了深重的灾难,淹没耕地1200余万亩,造成黄泛区,共计有1200万人受灾,390万人流离失所,89万人死亡,震惊全世界。

  花园口的决堤主要责任是由于国民政府国民革命军中的中央军的主要将领桂永清和黄杰不听调遣,贪生怕死,擅自逃跑,导致原来制定的兰封作战计划全盘崩溃。最后才出此下策。

  花园口决堤给日军造成重大伤亡,据日本防卫厅防卫研究所战史室编写的《中国事变陆军作战史》记载,洪水之后日军于6月17日以航空兵团全力援助困于河水的第十六师团方面的补给。用运输机、轻重轰炸机,在6月16至24日之间给两个师团投下补给粮秣、卫生材料不计其数。6月29日,日军在徐州举行联合追悼大会。仅第二军死于洪水人数便达到7452名之多。

  决堤后,由于形成黄泛区这一巨大地障,迫使敌人于平汉路以东停止前进,从而消除了唐、白河流域及汉水中游面临的威胁。并守住了军事重地郑州。

  战后蒋中正(字介石)调拨了大量资金修复黄河大堤,史称“黄河归故”,即恢复故道。

  点击在新窗口中浏览此图片
  [文章作者:张宴 本文版本:v1.1 最后修改:2010.09.03 转载请注明原文链接:http://blog.zyan.cc/tcsql/]

  曾经有人提出,一般数据库缓存分为四种。第一种:单个对象的缓存(一个对象就是数据库一条记录),对于单个对象的临时缓存或永久缓存,用HashMap就可以了,Key-Value方式的Memcached、Memcachedb、Tokyo Tyrant都可以,或者直接对查询数据库的网页采用Squid做缓存,没什么太难的;第二种:列表缓存,就像论坛里帖子的列表;第三种:记录条数的缓存,比如一个论坛板块里有多少个帖子,这样才方便实现分页。第四种:复杂一点的group,sum,count查询,比如一个论坛里按点击数排名的最HOT的帖子列表。第一种比较好实现,后面三种比较困难,虽然可以通过各种方法来解决,但截至目前,似乎还没有使用即简单、并发处理能力又强、实时性又高的解决办法。



  TCSQL为列表页的实时缓存而生,是金山逍遥网技术支持部平台组以Tokyo Cabinet DBM为底层存储与索引,结合类似Memcached的Key-Value内存对象缓存,借鉴SQL语句的SELECT、INSERT、UPDATE、DELETE思想与功能开发的实时列表缓存数据库,能够较好地解决上述前三种类别,特别是第二种、第三种类别的高并发读写问题。

  TCSQL采用HTTP GET/POST协议+JSON数据交换格式在客户端、服务器端之间进行数据交互,支持HTTP协议的任何客户端或语言(例如JavaScript、PHP、JSP、Perl、Python等),都能够连接TCSQL服务器进行操作。这就意味着,一些查询量非常大的应用,甚至可以直接使用运行在用户浏览器端的JavaScript代码访问TCSQL数据库,当然,为了安全起见,你可以在中间用Nginx配以rewrite规则,对TCSQL做个反向代理,限制一下查询权限。

  利用开源的MySQL UDF自定义函数扩展lib_mysqludf_urlencode、lib_mysqludf_urlencode,以及我们平台组周洋同学编写的lib_mysqludf_http_post扩展,配以MySQL触发器,我们可以在MySQL的某张表发生插入、更新、删除操作时,自动将数据同步到TCSQL数据库,使得TCSQL可以当MySQL从库一样使用。

  TCSQL实时列表缓存数据库单机能够支撑1万以上的并发连接,QPS(每秒查询率)能够达到5000~15000次。

点击在新窗口中浏览此图片

  以下是TCSQL在10000并发连接情况下的查询速度(服务器为浪潮NF190服务器,两颗双核Xeon(TM) CPU 2.80GHz、4GB内存、1万转SCSI硬盘。):

  1、第一种类型A:主键查询并取出倒序第1条记录(“=”运算):12155次请求/秒

  查询内容:http://192.168.8.34:3888/?command=select&type=*&where=pkey:NUMEQ:随机数值&order_by=pkey&order_sort=NUMDESC&limit_skip=0&limit_max=1

  测试结果:
引用
Benchmarking: 10000 clients, running 60 sec.

Speed=729324 pages/min, 8031913 bytes/sec.
Requests: 60777 susceed, 0 failed.


  2、第一种类型B:其他索引键查询并取出倒序第1条记录(“=”运算):11897次请求/秒

  查询内容:http://192.168.8.34:3888/?command=select&type=*&where=uid:NUMEQ:随机数值&order_by=pkey&order_sort=NUMDESC&limit_skip=0&limit_max=1

  测试结果:
引用
Benchmarking: 10000 clients, running 60 sec.

Speed=713856 pages/min, 7865884 bytes/sec.
Requests: 59488 susceed, 0 failed.


  3、第二种类型:根据复合条件查询并取出倒序前10条记录:8778次请求/秒(相当于SELECT * FROM table WHERE dateline >= 随机时间戳 AND idtype = '变换的文本' ORDER BY pkey DESC LIMIT 0,10)

  查询内容:http://192.168.8.34:3888/?command=select&type=*&where=dateline:NUMGE:随机时间戳|idtype:STREQ:变换的文本&order_by=pkey&order_sort=NUMDESC&limit_skip=0&limit_max=10

  测试结果:
引用
Benchmarking: 10000 clients, running 60 sec.

Speed=526680 pages/min, 8971878 bytes/sec.
Requests: 43890 susceed, 0 failed.


  4、第三种类型:统计符合查询条件的记录数量:9160次请求/秒(相当于SELECT count(*) FROM table WHERE dateline >= 随机时间戳 AND idtype = '变换的文本')

  查询内容:http://192.168.8.34:3888/?command=select&type=count&where=dateline:NUMGE:随机时间戳|idtype:STREQ:变换的文本

  测试结果:
引用
Benchmarking: 10000 clients, running 5 sec.

Speed=549648 pages/min, 714542 bytes/sec.
Requests: 45804 susceed, 0 failed.


  六载霜华,砺成一剑!

点击在新窗口中浏览此图片  今日,超期待国产武侠网游巨作《剑侠情缘网络版叁》(以下简称《剑网3》)正式开放公测客户端下载,这预示着公测的脚步越来越近了!而就在此时,央视品牌节目《新闻联播》在重要位置对《剑网3》做出报道,充分肯定这款国产大作在传承中华优秀文化方面的巨大贡献,也从侧面反映出《剑网3》的影响力之光、玩家期待之高!

  《剑网3》是经典武侠品牌“剑侠情缘”系列首款3D作品,由国内老牌游戏工作室──金山软件公司西山居历时六年、投入过亿巨资研发而成。作为国产武侠网游的领袖之作,《剑网3》一经面市就引起业界轰动,其精美的游戏画面和纯正的武侠风韵更是让人叹为观止,一举夺得各大游戏期待榜榜首位置。时至今日,《剑网3》已经过三轮测试,各方面品质臻于完善,有望于8月末进入公测。

  8月15日,央视《新闻联播》在大约第4分钟报道了国产网络游戏近几年来取得的巨大进步,其中《剑网3》作为代表产品备受推崇。央视报道,《剑网3》荟萃了中华传统文化中琴棋书画等各种艺术,给玩家带来耳目一新的感觉。此外,金山网游良好的客服和出口海外的优异战绩也受到央视称赞。

  据悉,近段时间,网络游戏成为央视等主流媒体关注的焦点,但大多是网瘾、侵权等负面话题,此次《剑网3》受到央视推崇,有助于树立网络游戏的正面形象。



  CCTV 8月15日新闻联播关于金山游戏《剑网3》的报道视频:


  《剑网3》公测客户端下载地址:http://jx3.xoyo.com/download

  《剑网3》官网:http://jx3.xoyo.com/

  点击在新窗口中浏览此图片

  发布版本:
  httpcws 1.0.0 (最新版本:2009-08-10发布)

  程序网址:http://code.google.com/p/httpcws

  安装使用手册:http://blog.zyan.cc/httpcws_v100/

  下载地址(32位版):http://httpcws.googlecode.com/files/httpcws-1.0.0-i386-bin.tar.gz

  下载地址(64位版):http://httpcws.googlecode.com/files/httpcws-1.0.0-x86_64-bin.tar.gz

  中文分词在线演示:http://blog.zyan.cc/demo/httpcws/

  PHP演示程序下载:http://blog.zyan.cc/demo/httpcws/httpcws-php-demo.zip



  httpcws 中文简介
  1、什么是 httpcws ?
  HTTPCWS 是一款基于HTTP协议的开源中文分词系统,目前仅支持Linux系统。HTTPCWS 使用“ICTCLAS 3.0 2009共享版中文分词算法”的API进行分词处理,得出分词结果。HTTPCWS 将取代本人之前开发的 PHPCWS 中文分词扩展

  ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)是中国科学院计算技术研究所在多年研究工作积累的基础上,基于多层隐马模型研制出的汉语词法分析系统,主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典。ICTCLAS经过五年精心打造,内核升级6次,目前已经升级到了ICTCLAS3.0,分词精度98.45%,各种词典数据压缩后不到3M。ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名,是当前世界上最好的汉语词法分析器。

  ICTCLAS 3.0 商业版是收费的,而免费提供的 ICTCLAS 3.0 共享版不开源,词库是根据人民日报一个月的语料得出的,很多词语不存在。所以本人补充的一个19万条词语的自定义词库,对ICTCLAS分词结果进行合并处理,输出最终分词结果。

  由于 ICTCLAS 3.0 2009 共享版只支持GBK编码,因此,如果是UTF-8编码的字符串,可以先用iconv函数转换成GBK编码,再用httpcws进行分词处理,最后转换回UTF-8编码。

  HTTPCWS 软件自身(包括httpcws.cpp源文件、dict/httpcws_dict.txt自定义词库)采用NewBSD开源协议,可以自由修改。HTTPCWS 使用的 ICTCLAS 共享版 API 及 dict/Data/ 目录内的语料库,版权及著作权归中国科学院计算技术研究所、ictclas.org所有,使用需遵循其相关协议。



  2、httpcws 中文分词在线演示
  演示网址:http://blog.zyan.cc/demo/httpcws/



  3、httpcws 中文分词下载安装
  32位版:
cd /usr/local/
wget http://httpcws.googlecode.com/files/httpcws-1.0.0-i386-bin.tar.gz
tar zxvf httpcws-1.0.0-i386-bin.tar.gz
rm -f httpcws-1.0.0-i386-bin.tar.gz
cd httpcws-1.0.0-i386-bin/
ulimit -SHn 65535
/usr/local/httpcws-1.0.0-i386-bin/httpcws -d -x /usr/local/httpcws-1.0.0-i386-bin/dict/


  64位版:
cd /usr/local/
wget http://httpcws.googlecode.com/files/httpcws-1.0.0-x86_64-bin.tar.gz
tar zxvf httpcws-1.0.0-x86_64-bin.tar.gz
rm -f httpcws-1.0.0-x86_64-bin.tar.gz
cd httpcws-1.0.0-x86_64-bin/
ulimit -SHn 65535
/usr/local/httpcws-1.0.0-x86_64-bin/httpcws -d -x /usr/local/httpcws-1.0.0-x86_64-bin/dict/


  命令行启动参数:

  点击在新窗口中浏览此图片



  4、httpcws 使用方法
  GET方法(文本长度受URL的长度限制,需要分词的文本为GBK编码,最好采用urlencode对文本进行编码):


  POST方法(文本长度无限制,适用于大文本分词,需要分词的文本为GBK编码,最好采用urlencode对文本进行编码):
curl -d "有人的地方就有江湖" http://192.168.8.42:1985
curl -d "%D3%D0%C8%CB%B5%C4%B5%D8%B7%BD%BE%CD%D3%D0%BD%AD%BA%FE" http://192.168.8.42:1985


  PHP 调用 HTTPCWS 示例:

  ①、对GBK编码的字符串进行中文分词处理(HTTP POST方式):
<?php
@header('Content-Type: text/html; charset=gb2312');
$text = "有人的地方就有江湖";
$text = urlencode($text);
$opts = array(
  'http'=>array(
    'method'=>"POST",
    'header'=>"Content-type: application/x-www-form-urlencoded\r\n".
              "Content-length:".strlen($data)."\r\n" .
              "Cookie: foo=bar\r\n" .
              "\r\n",
    'content' => $text,
  )
);
$context = stream_context_create($opts);
$result = file_get_contents("http://127.0.0.1:1985", false, $context);
echo $result;
?>

分页: 5/31 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]