Hi Davies,有一个关于beansdb实现的问题,请教您一下:beansdb中对存储文件大小上线是硬编码的,50M,bitcask接收buffer是根据接收文件大小来扩充的,扩充后还没有办法回收,而内存中的数据只有在buffer将满 及 定期刷新任务中才会刷新到磁盘上。如果将文件大小上线扩大,如200M甚至更多,buffer就会增加,如果系统崩溃或者掉电 将会增加文件丢失的风险。如果有很多大文件,那么可能分布在不同的bitcask上,也会增加beansdb占用的整体内存?如有理解不到之处,请指正~~~2012-04-23
Best Regards,Cheney Zhang(张帅)
发件人: Davies Liu发送时间: 2012-04-23 16:59:01收件人: 张帅抄送:主题: Re: Re: Re: BeansDB 客户端通信 求帮助是读配置的 Bug,已经更新到 github。
2012/4/23 张帅 <zhang...@hisense.com>
1. Beanseye配置文件内容[default]server_port=7900 # default portservers=172.16.132.191:7900,172.16.132.191:7901,172.16.132.191:7902,172.16.132.191:7903 # beansdb nodes, used by proxy and monitor[proxy]port=7915 # proxy port for accessingN=1 #nodes selected to writeW=1 # min successfully writes when return successR=1 # min successfully reads when return success (not used)accesslog=/var/log/beanseye/access.log # access log[monitor]port=7908 # monitor port for webproxy=172.16.132.191:7915 # proxy list to monitor2. 运行的beansdb进程root 12074 1 0 14:17 ? 00:00:00 /usr/local/bin/beansdb -u root -p 7900 -H /usr/local/fountain/data/beansdb_data/7900 -P /usr/local/fountain/data/beansdb_data/7900/7900.pid -v -v -d -L /var/log/hitv/beansdb_7900.logroot 12110 1 0 14:17 ? 00:00:00 /usr/local/bin/beansdb -u root -p 7901 -H /usr/local/fountain/data/beansdb_data/7901 -P /usr/local/fountain/data/beansdb_data/7901/7901.pid -v -v -d -L /var/log/hitv/beansdb_7901.logroot 12146 1 0 14:17 ? 00:00:00 /usr/local/bin/beansdb -u root -p 7902 -H /usr/local/fountain/data/beansdb_data/7902 -P /usr/local/fountain/data/beansdb_data/7902/7902.pid -v -v -d -L /var/log/hitv/beansdb_7902.logroot 12182 1 0 14:17 ? 00:00:00 /usr/local/bin/beansdb3. 存储数据到beanseye后,监视模块显示的内容为:开始beansdb节点信息
Active servers (stats) # host version uptime mem thd conn mpr records space get set delete slow get/set hit read write 0 172.16.132.191:7900 0.5.6 10 sec 10M 16 2 10K 0 / 0 0 / 263G 1 / 0 0 / 0 0 / 0 0% / 0% 0 / 0 50% / 0% 134 / 0 14 / 0 1 172.16.132.191:7901 0.5.6 12 sec 9.9M 16 2 10K 0 / 0 0 / 263G 1 / 0 0 / 0 0 / 0 0% / 0% 0 / 0 50% / 0% 134 / 0 14 / 0 2 172.16.132.191:7902 0.5.6 12 sec 9.9M 16 2 10K 0 / 0 0 / 263G 3 / 0.2 0 / 0 0 / 0 0% / 0% 0 / 2 75% / 66% 945 / 81 35 / 2.1 3 172.16.132.191:7903 0.5.6 13 sec 10M 16 2 10K 0 / 0 0 / 263G 3 / 0.2 0 / 0 0 / 0 0% / 0% 0 / 2 75% / 66% 945 / 81 35 / 2.1 存储了一定记录后:
All records in buckets server buckets 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 all 172.16.132.191:7900 13 5 18 172.16.132.191:7901 13 5 18 172.16.132.191:7902 13 5 18 172.16.132.191:7903 0
Active servers (stats) # host version uptime mem thd conn mpr records space get set delete slow get/set hit read write 0 172.16.132.191:7915 90 sec 3M 18 1 0 / 0 18 / 0.9 0 / 0 5% / 0% 0 / 0 0% / 0% 0 / 0 29M / 1.5M
Active servers (stats) # host version uptime mem thd conn mpr records space get set delete slow get/set hit read write 0 172.16.132.191:7900 0.5.6 60 sec 13M 16 2 13K 18 / 18 1.9M / 263G 11 / 0.2 18 / 0.9 0 / 0 0% / 0% 0.1 / 0.2 91% / 66% 4.3K / 91 29M / 1.5M 1 172.16.132.191:7901 0.5.6 62 sec 13M 16 2 13K 18 / 18 1.9M / 263G 11 / 0.2 18 / 0.9 0 / 0 0% / 0% 0.1 / 0.2 91% / 66% 4.3K / 91 29M / 1.5M 2 172.16.132.191:7902 0.5.6 62 sec 13M 16 2 13K 18 / 18 1.9M / 263G 13 / 0.2 18 / 0.9 0 / 0 0% / 0% 0.1 / 0.2 92% / 66% 5.1K / 91 29M / 1.5M 3 172.16.132.191:7903 0.5.6 63 sec 10M 16 2 10K 0 / 0 0 / 263G 13 / 0.2 0 / 0 0 / 0 0% / 0% 0.1 / 2 92% / 66% 4.9K / 81 140 / 2.1 是不是那里配置还是有问题,导致了 每个buckets均有三个节点分别存储?第四个节点为什么没有存储任何数据?谢谢。2012-04-23
Best Regards,Cheney Zhang(张帅)
发件人: Davies Liu发送时间: 2012-04-23 14:09:17收件人: 张帅抄送:主题: Re: Re: Re: BeansDB 客户端通信 求帮助
2012/4/23 张帅 <zhang...@hisense.com>
Hi Davies,非常感谢您的beanseye,已经运行,并初步使用,感谢非常爽,谢谢。使用中遇到几个问题请教您一下:1. 关于配置文件[default]server_port=7900 # default portservers=172.16.132.191:7900,172.16.132.191:7901,172.16.132.191:7902,172.16.132.191:7903 # beansdb nodes, used by proxy and monitor[proxy]port=7915 # proxy port for accessingN=1 #nodes selected to writeW=1 # min successfully writes when return successR=1 # min successfully reads when return success (not used)accesslog=/var/log/beanseye/access.log # access log[monitor]port=7908 # monitor port for webproxy=172.16.132.191:7915 # proxy list to monitor~如果可以控制写的副本数目,是通过N吧,但是好似不起作用。怎么不起作用,能不能详细说一下?2. 关于监控进程显示内容含义
Active servers (stats) # host version uptime mem thd conn mpr records space get set delete slow get/set hit read write 0 172.16.132.191:7900 0.5.6 3 min 24M 16 2 18K 181 / 181 20M / 263G 45 / 0.2 181 / 0.9 0 / 0 0% / 0% 0.2 / 0.2 97% / 66% 20K / 98 297M / 1.5M 1 172.16.132.191:7901 0.5.6 3 min 22M 16 2 17K 181 / 181 20M / 263G 43 / 0.2 181 / 0.9 0 / 0 0% / 0% 0.2 / 0.2 97% / 66% 19K / 98 297M / 1.5M 2 172.16.132.191:7902 0.5.6 3 min 18M 16 3 14K 181 / 181 20M / 263G 43 / 0.2 181 / 0.9 0 / 0 0% / 0% 0.2 / 0.2 97% / 66% 19K / 98 297M / 1.5M 3 172.16.132.191:7903 0.5.6 3 min 10M 16 2 10K 0 / 0 0 / 263G 43 / 0.2 0 / 0 0 / 0 0% / 0% 0.4 / 2 97% / 66% 16K / 81 455 / 2.1 有无文档介绍一下字段的含义,例如 get栏中45/0.2,45应该为Get次数,后面的0.2 的含义是?如果有两个数字,后一个是每 10 秒钟更新的实时值,一般是 每秒钟的请求数。再次感谢!2012-04-23收件人: 张帅抄送:主题: Re: Re: Re: BeansDB 客户端通信 求帮助2012/4/16 张帅 <zhang...@hisense.com>
Hi Davies,
在使用beansDB过程中发现一些问题,请您确认。
proxy.py 中
elif cmd == 'set':
key, flag, rev, bytes = args[1:5]
flag, rev, bytes = int(flag), int(rev), int(bytes)
buf = reader.read(bytes)
while len(buf) < bytes:
buf += reader.read(bytes - len(buf)) 如果对方关闭套接字,程序会在这里挂KEEP-ALIVE时长,大批量客户如此,造成CLOSE_WAIT状态FD过多最终导致拒绝服务型攻击。有可能,这个python 版的 proxy 也是用来验证原型的,可以使用这个 go 版本的 github.com/douban/beanseye/feature 更完整,性能也更好。至于防攻击方面,目前没有考虑在内,一般不会直接保留在公网,外面会有其它的保护层。reader.read(2)
if store.set(key, buf, flag, rev):
writeline('STORED')
else:
writeline('NOT_STORED')
del buf
因为对python语言不熟,如理解不当之处,请指正,谢谢。
2012-04-16 13:55:48
※※※※※※※※※※※※※※※※※※※※※※※※
青岛海信传媒网络技术有限公司
张 帅
手 机:15192070551
QQ :94643108
MSN :zhangsh...@hotmail.com
办公地址:青岛市江西路11号海信研发中心7号楼2楼
※※※※※※※※※※※※※※※※※※※※※※※※
-------------------------------------------------------------
发件人:Davies Liu
发送日期:2012-02-23 16:39:09
收件人:张帅
抄送:
主题:Re: Re: Re: BeansDB 客户端通信 求帮助
你好,我已经把 beansdb 和 proxy 的代码发布到 github, 是我们内部使用的最新版,请使用。
https://github.com/douban/beansdb
https://github.com/douban/beanseye
2012/2/20 张帅 <zhang...@hisense.com>:
> Thanks,Davies。github去啦
> 我这边会用近一个月的时间彻底熟悉掌握beansDB并初步部署应用,如有疑问再跟您请教。
>
>
> ※※※※※※※※※※※※※※※※※※※※※※※※
>
> 青岛海信传媒网络技术有限公司
> 张 帅
> 手 机:15192070551
> QQ :94643108
> MSN :zhangsh...@hotmail.com
> 办公地址:青岛市江西路11号海信研发中心7号楼2楼
> 2012-02-20 13:30:52
>
> ※※※※※※※※※※※※※※※※※※※※※※※※
>
> -------------------------------------------------------------
> 发件人:Davies Liu
> 发送日期:2012-02-20 11:57:40
> 收件人:张帅
> 抄送:
> 主题:Re: Re: BeansDB 客户端通信 求帮助
>
> 张帅,你好!
>
> 最近比较忙,今天才用wireshark 看了抓包结果,没太看明白,初步感觉是客户度给服务器端发送了大量不正确的信息,
> 比如"mem cache_client$EX EEXT)" 等,服务器端返回 ERROR,多次之后然后关闭了端口。
>
> beansdb 非常欢迎大家反馈代码,稍后会把代码发布到github 上,方便协同开发。目前可以把有用的patch发给我。
>
> 目前 beansdb 还主要用来解决豆瓣面临的问题,还不算一个成熟的产品,如果大家也有类似的问题,可以一块来改进它。
>
> Davies
>
> 2012/2/20 张帅 <zhang...@hisense.com>:
>> Hi Davies,
>> 最近在欣赏咱的BeansDB代码,请问可以告之MSN或者QQ联系方式吗?方便对其中一些问题请教,谢谢。另不知道BeansDB是否还需要社会开发人员,如果不嫌小弟才疏学浅,愿意加入,跟大侠学习,同时也为开源为广大IT人士贡献一点微薄之力,再次感谢。
>>
>>
>> ※※※※※※※※※※※※※※※※※※※※※※※※
>>
>> 青岛海信传媒网络技术有限公司
>> 张 帅
>> 手 机:15192070551
>> QQ :94643108
>> MSN :zhangsh...@hotmail.com
>> 办公地址:青岛市江西路11号海信研发中心7号楼2楼
>> 2012-02-09 16:05:30
>>
>> ※※※※※※※※※※※※※※※※※※※※※※※※
>>
>> -------------------------------------------------------------
>> 发件人:Davies Liu
>> 发送日期:2012-02-09 16:03:48
>> 收件人:张帅
>> 抄送:
>> 主题:Re: BeansDB 客户端通信 求帮助
>>
>> 张帅,你好。
>>
>> 请问附近中的文件是什么格式?怎么看?
>>
>> 2012/2/9 张帅 <zhang...@hisense.com>:
>>> Hi Davies,
>>>
>>> 首先非常感谢您的无私奉献,为广大IT爱好者提供了一个优秀的解决方案。在学习BeansDB过程中,有些疑问,请教一下.
>>> BeansDB是兼容memcahced协议的,可memcached服务器的客户端与beansDB通信怎么会失败,打印信息也够奇怪的:Failed to write, and not due to blocking: Broken pipe,抓包发现是客户端主动关闭套接字并发送RST包。可唯一解释不通的是,这个客户端与memcached服务通信都是正常的,客户端使用了libmemcached库(c++客户端)。
>>> 附件为网络通讯抓包数据。
>>> 求帮助,Thanks!
>>>
>>>
>>> Best Regards,
>>>
>>> Cheny Zhang(张帅)
>>>
>>>
>>>
>>>
>>
>>
>>
>> --
>> - Davies
>
>
>
> --
> - Davies
--
- Davies
--
- Davies
--
- Davies
--
- Davies
Best Regards,Cheney Zhang(张帅)
发件人: Davies Liu