之前一直在用tomcat5,现在用tomcat7,幸好配置没有变化,把几处重要的配置写出来,备忘。
需求1)tomcat做连接优化。
2)tomcat下的默认使用ROOT,message.simonzhang.net的域名,使用tomcat,webapps下的message
修改一、
修改二、
需要注意compressableMimeTy配置,tomcat前端有nginx或者apace等服务如果已经启动了压缩的处理,这里就不用配置了。。
之前一直在用tomcat5,现在用tomcat7,幸好配置没有变化,把几处重要的配置写出来,备忘。
需求1)tomcat做连接优化。
2)tomcat下的默认使用ROOT,message.simonzhang.net的域名,使用tomcat,webapps下的message
修改一、
修改二、
需要注意compressableMimeTy配置,tomcat前端有nginx或者apace等服务如果已经启动了压缩的处理,这里就不用配置了。。
很多python开发都在用scrapy框架开发抓取,我也算学习一下。虽然笔记序号为一,但是能不能坚持下去还不知道,写着看吧。官方网址:http://scrapy.org/。官方接受scrapy是纯python做的高效的web抓取框架,网络爬虫,后提取相关页面的数据。scrapy可以用于数据挖掘、监控和自动化测试等工作。据说google的大部分爬虫也是用python写的,但是不知道是否用了这个框架。可以肯定的是,这个框架能做很多事、很大,我只会用到很简单一部分。我做笔记是为自己学习记录,既不系统也不全面,建议大家到官方下载pdf的文档,进行学习,我也是通过pdf文档学习,并使用其中的例子修改为自己的形成笔记。为了不引起争议,直接用自己的站进行抓取学习。
开始学习了,linux的环境,是CentOS5,windows的环境是win7,python都是2.6,因为scrapy支持2.6、2.7,不支持3.X。直接使用easy_install安装,但是windows上安装的是0.14.3,linux上安装的0.12,官方网站上最新的开发版本是0.15。不知道为什么差距这么大。为了方便学习直接手动下载0.15,安装到linux上。
tar zxf Scrapy-X.X.X.tar.gz
cd Scrapy-X.X.X
python setup.py install
在linux上安装有警告,关于ssl的,如下
Running pyOpenSSL-0.13/setup.py -q bdist_egg –dist-dir /tmp/easy_install-rx8P0H/pyOpenSSL-0.13/egg-dist-tmp-g7Da22
warning: no previously-included files matching ‘*.pyc’ found anywhere in distribution
OpenSSL/ssl/connection.c: In function ‘ssl_Connection_set_context’:
OpenSSL/ssl/connection.c:289: 警告:隐式声明函数 ‘SSL_set_SSL_CTX’
OpenSSL/ssl/connection.c: In function ‘ssl_Connection_get_servername’:
OpenSSL/ssl/connection.c:313: 错误:‘TLSEXT_NAMETYPE_host_name’ 未声明 (在此函数内第一次使用)
OpenSSL/ssl/connection.c:313: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
OpenSSL/ssl/connection.c:313: 错误:所在的函数内只报告一次。)
OpenSSL/ssl/connection.c:320: 警告:隐式声明函数 ‘SSL_get_servername’
OpenSSL/ssl/connection.c:320: 警告:赋值时将整数赋给指针,未作类型转换
OpenSSL/ssl/connection.c: In function ‘ssl_Connection_set_tlsext_host_name’:
OpenSSL/ssl/connection.c:346: 警告:隐式声明函数 ‘SSL_set_tlsext_host_name’
error: Setup script exited with error: command ‘gcc’ failed with exit status 1
直接下载pyopenssl后安装,
http://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.12.tar.gz
再执行 easy_install -U scrapy,安装成功。
在windows上除了安装pyopenssl还要w3lib、Twisted,但是处理比较简单,直接easy_install安装,如:C:\Python26\Scripts>easy_install.exe pyopenssl。
环境搭建完成,毕竟使用的linux服务器,所以还是在linux上学习。开始创建一个抓取项目,项目名为scrapytest.
>scrapy startproject simonzhang
创建项目完毕,目录树如下,:
simonzhang │ scrapy.cfg # 整个目录的配置 │ └─simonzhang # 项目模块,代码都放在这 │ items.py # 项目的items文件,相当于格式化抓取的内容,以字典形式返回 │ pipelines.py # 项目的pipelines,管理通道,主要是对抓取网页后的数据清洗、验证和入库 │ settings.py # 项目的设置文件, │ __init__.py │ └─spiders # 这个目录放的是蜘蛛文件, __init__.py
进入simonzhang目录,编辑simonzhang/items.py
from scrapy.item import Item, Field class ScrapytestItem(Item): # define the fields for your item here like: # name = Field() title = Field() link = Field() desc = Field() pass
编写第一个蜘蛛simonzhang/spiders/frist_simonzhang.py
from scrapy.spider import BaseSpider class DmozSpider (BaseSpider): name = "simonzhang_net" # 蜘蛛的名字,一个项目下每个蜘蛛名字必须是唯一的 allowed_domains = ["simonzhang.net"] start_urls = ["http://www.simonzhang.net/"] #下载列表,注意域名后面需要一个“/”因为稍后会用于截取文件名 def parse (self,response): # 抓取和保存的方法 filename = response.url.split("/")[2] open (filename, 'wb').write(response .body)
进入simonzhang/simonzhang/spiders目录运行下面命令:
scrapy crawl simonzhang_net
运行完毕,看到目录下已经有一个www.simonzhang.net的文件,打开文件可以看到是抓取为首页的文件。
scrapy 学习笔记 二
http://www.simonzhang.net/?p=1112
Tokyo Cabinet和Tokyo Tyrant 是日本人 平林幹雄 开发的分布式缓存工具。
Tokyo Cabinet是 DBM 数据库,读写快速,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒。数据文件只有一个,里面存放多个
Tokyo Tyrant 是Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。
Tokyo Tyrant和Tokyo Cabinet合并即成为高并发的分布式持久性存储系统。此系统支持双机热备,主辅库均可读写。用于主辅同步的数据日志也很小,大约是数据文件的1.3倍。为了保证性能建议在64位操作系统安装。
作者个人主页:http://1978th.net/
1.tokyocabinet安装
下载地址http://1978th.net/tokyocabinet/pastpkg/tokyocabinet-1.3.27.tar.gz
# tar zxvf tokyocabinet-1.3.27.tar.gz
# cd tokyocabinet-1.3.27
# ./configure && make && make install
直接编译不指定路径,如果是32为操作系统,需要添加–enable-off64参数,且数据文件不能超过2G。
2.Tokyotyrant安装
下载地址http://1978th.net/tokyotyrant/pastpkg/tokyotyrant-1.0.1.tar.gz
# tar zxvf tokyotyrant-1.0.1.tar.gz
# cd tokyotyrant-1.0.1
# ./configure && make && make install
3.优化系统,指定日志等文件存放位置
# ulimit -SHn 51200
# mkdir -p /usr/local/ttserver
4. 启动参数
ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [dbname]
-host name :要绑定的服务器域名或IP地址。默认绑定本机所有IP地址。
-port num : 要绑定的端口号。默认端口号为1978
-thnum num : 指定线程数。默认为8个线程。
-tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。
-dmn : 以守护进程方式运行。
-pid path : 输出进程ID到指定文件。
-log path : 输出日志信息到指定文件(这里指定文件名)。
-ld|-le : 日志文件中记录DEBUG调试信息|在日志文件中仅记录错误信息。此项为二选一,推荐使用-le。
-ulog path : 指定同步日志文件存放路径,此处路径为存放目录。
-ulim num : 指定每个同步日志文件的大小(例如128m)。
-uas : 使用异步IO记录更新日志(使用此项会减少磁盘IO消耗,但是数据会先放在内存中,不会立即写入磁盘,如果重启服务器或ttserver进程被kill掉,将导致部分数据丢失。一般情况下不建议使用)。
-sid num : 指定服务器ID号(当使用主辅模式时,每台ttserver需要不同的ID号)
-mhost name : 指定主辅同步模式下,对方服务器域名或IP地址。
-mport num : 指定主辅同步模式下,对方服务器的端口号。
-rts path : 指定用来存放同步时间戳的文件名。
dbname:制定数据库名,如果省略,则被视作内存hash数据库。
5.单机启动服务
服务器IP地址为192.168.1.100
# ttserver -host 192.168.1.100 -port 1111 -thnum 9 -dmn -pid /usr/local/ttserver/ttserver.pid -log /usr/local/ttserver/ttserver.log -le -ulog /usr/local/ttserver/ -ulim 64m -sid 1 –rts /usr/local/ttserver/ttserver.rts /usr/local/ttserver/database.tch
6.双机模式
主机IP地址192.168.1.100。 备机IP地址192.168.1.101
主机启动:
# ttserver -host 192.168.1.100 -port 1111 -thnum 9 -dmn -pid /usr/local/ttserver/ttserver.pid -log /usr/local/ttserver/ttserver.log -le -ulog /usr/local/ttserver/ -ulim 64m -sid 100 -mhost 192.168.101 -mport 1111 -rts /usr/local/ttserver/ttserver.rts /usr/local/ttserver/database.tch
备机启动:
# ttserver -host 192.168.1.101 -port 1111 -thnum 9 -dmn -pid /usr/local/ttserver/ttserver.pid -log /usr/local/ttserver/ttserver.log -le -ulog /usr/local/ttserver/ -ulim 64m -sid 101 -mhost 192.168.1.100 -mport 1111 -rts /ttserver/ttserver.rts /ttserver/database.tch
注:
如果使用的是哈希数据库,可以指定参数“#bnum=xxx”来提高性能。程序可以指定bucket存储桶的数量。例如指定“#bnum=10000”,就可以将最新最热的1万条记录缓存在内存中。
使用hash数据库,最大会缓存20000个记录,最大使用内存434217728bytes(414M),bucket存储桶的数量10000000
如果使用B+ tree数据库我们可以通过指定”#lcnum=xxx#bnum=yyy” 来提高性能.第一个参数指定被缓存的最大叶子节点数,受内存容量限制,第二个参数指定桶的数量,它应该大于总记录数的1/128.举例#xmsiz=434217728#rcnum=20000
数据库类型
数据库名的命名方式被Tokyo Cabinet的抽象API指定。
如果数据库名为”*”,表示内存hash数据库。
如果数据库名为”+”表示内存tree数据库。
如果数据库名为”.tch”,则数据库为hash数据库。
如果数据库名的后缀为”.tcb”,数据库将为B+ tree数据库。
如果数据库名的后缀为”.tcf”。则数据库将为fixed-length数据库。
如果数据库名的后缀为”.tct”,则数据将为一个table数据库(有表
的概念)。
数据库的调整参数通过数据库名的延伸来指定,通过”#”分开,每个参数通过一个参数名和值来指定,用”=”隔开。
内存hash数据库支持”bnum”, “capnum”, 和 “capsiz”
内存tree数据库支持”capnum” 和 “capsiz”
capnum指定记录的最大容量,capsiz指定最大的内存使用量(在内存数据库中),记录通过存储的顺序移除。
hash数据库支持”mode”, “bnum”, “apow”, “fpow”, “opts”, “rcnum”, 和 “xmsiz”.
`rcnum’指定最大的缓存记录数。如果它不大于零,那么缓存记录不可用。默认不可用。
xmsiz 指定外部内存的大小。如果不大于0,内存不可用。默认是67108864,即64M。
`bnum’ 指定bucket存储桶的数量。如果指定的数目不大于0,将会使用默认的数值131071
推荐数量应该在所有需要存储的记录总数的0.4-4倍
`apow’ 跟一个key关联的记录数,2的N次方表示. 如果不指定,默认2^4=16.
`fpow’ specifies the maximum number of elements of the free block pool by power of 2. 默认2^10=1024.
`opts’ 指定选项,位或:`HDBTLARGE’ 指定数据库的大小通过使用64位数组桶能够超过2G。
`HDBTDEFLATE’ 指定每个记录被Deflate encoding压缩。
`HDBTBZIP’ 指定每个记录被BZIP2 encoding压缩
`HDBTTCBS’指定每个记录被 TCBS encoding压缩.
B+ tree数据库支持”mode”, “lmemb”, “nmemb”, “bnum”, “apow”, “fpow”, “opts”, “lcnum”, “ncnum”, 和 “xmsiz”.
Fixed-length 数据库 支持 “mode”, “width”, and “limsiz”.
Table 数据库支持 “mode”, “bnum”, “apow”, “fpow”, “opts”, “rcnum”, “lcnum”, “ncnum”, “xmsiz”, 和 “idx”
“idx”指定表的索引。
“mode”可以包含 “w” 写, “r” 读, “c” 创建, “t” 截断,”e” 无锁,和”f” 非阻塞锁。默认的的mod为”wc”。
7.测试
ttserver对外有三种协议,可以用curl程序调用http协议访问,可用tt自带的客户端程序,使用私有二进制协议访问。
tcrtest :测试程序, tc remote test
tcrmttest :多线程测试程序 tc multi-thread test
两个测试程序写入的数据key,value均是8字节的,按照00000001,00000002格式
tcrtest write host rnum : 写入 rnum条记录(是重新写,不是追加)
tcrtest read host : 读出所有记录
tcrtest remote host : 删除所有记录
tcrmgr : 测试和调试
usage:
tcrmgr inform [-port num] [-st] host
tcrmgr put [-port num] [-sx] [-dk|-dc] host key value
tcrmgr out [-port num] [-sx] host key
tcrmgr get [-port num] [-sx] [-px] [-pz] host key
tcrmgr mget [-port num] [-sx] [-px] host [key…]
tcrmgr list [-port num] [-m num] [-pv] [-px] [-fm str] host
tcrmgr sync [-port num] host
tcrmgr vanish [-port num] host
tcrmgr copy [-port num] host dpath
tcrmgr restore [-port num] [-ts num] host upath
tcrmgr setmst [-port num] [-mport num] host [mhost]
tcrmgr repl [-port num] [-ts num] [-sid num] [-ph] host
tcrmgr http [-ah name value] [-ih] url
tcrmgr version
tcrmgr inform host: 获取服务器的信息
tcrmgr put host key value : 添加记录
tcrmgr get host key : 获取记录
tcrmgr out host key : 删除记录
tcrmgr list host : 列出数据库中所有的key(这个在memcached中是需要patch才能实现的)
tcrmgr vanish host : 删除所有数据
举例
1)查看服务器统计信息
tcrmgr inform -port 1111 -st 192.168.1.100
2)写入数据
tcrmgr put -port 1111 192.168.1.100 test value
3)读取数据
tcrmgr get -port 1111 192.168.1.100 test
4)删除数据
tcrmgr out -port 1111 192.168.1.100 test
5)查看所有的key
tcrmgr list -port 1111 192.168.1.100
6)备份数据
tcrmgr copy -port 1111 192.168.1.100 /usr/local/ttserver/backup/backup.tch
一定要写绝对路径
7) 同步内存数据到磁盘(当使用异步io时将缓存的数据写入磁盘)
tcrmgr sync -port 1111 192.168.1.100
8)数据导入
注意:tsv格式的文件以TAB分隔,如:test2tvalue2n
注意:路径是本地路径,所以不必是绝对路径
tcrmgr imp
9)通过ulog日志恢复数据
注意:路径是服务器上的绝对路径
tcrmgr restore -port 1111 192.168.1.100 /da
10)打印更新日志(挂起,一直显示日志)
可能是用于实时查看ttserver有哪些操作,相当于tail –f
tcrmgr repl -port 1111 -ph 192.168.1.100
8.ttservctl
命令ttservctl是服务器的启动脚本。Shell编写可以被操作系统的引导过程rc脚本调用,此命令用于以下格式。
ttservctl start
启动服务器。
ttservctl st
op
停止服务器。
ttservctl restart
重新启动服务器。
ttservctl hup
HUP信号发送到服务器的日志轮换。
默认情况该数据库被放置为“/var/ttserver/casket.tch”。该日志和相关的文件,也放在“/var/ ttserver”目录。该命令返回0成功,其它为失败。
9.ttulmgr
命令ttulmgr是导出和导入的更新日志的实用工具,可以用` grep ‘和’ sed ‘等过滤工具更新日志。此命令用于以下格式,`upath’指定了更新日志目录。
ttulmgr export [-ts num ] [-sid num ] upath
作为TSV格式文本数据导出更新日志到标准输出。
ttulmgr imp
从标准输入导入TSV格式文本数据到更新日志。
可选项功能如下。
-ts num :指定开始时间戳记。
-sid num :指定本机服务器ID。
该命令返回0成功,另一个失败。