Re: BeansDb 最大文件大小限制

148 views
Skip to first unread message

Davies Liu

unread,
Feb 17, 2013, 10:30:28 PM2/17/13
to 张帅, beandb
大体上是这样,但细节上有出入。
如果临时写入一个较大的文件,buffer 增大后会马上检查到需要flush,
数据写入磁盘后,buffer如果大于最大的两倍,则会缩小到最大尺寸,释放内存。
因此偶尔有大文件时,并不会占用过多内存,或者增加数据丢失的风险。

beansdb 是为小文件设计的,包括采用的 memcached 的协议,
只提供了对整个文件的原子操作而没有流式接口。
如果文件比较大,比如200M,使用这样的协议容易出问题,比如读写超时。

件事使用其它方案来处理这种超过10M的文件,
豆瓣也是使用了MooseFS来存储电影的预告片。


2013/2/18 张帅 <zhang...@hisense.com>
 
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 port
servers=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 accessing
N=1  #nodes selected to write
W=1   # min successfully writes when return success
R=1   # min successfully reads when return success (not used)
accesslog=/var/log/beanseye/access.log  # access log
[monitor]
port=7908   # monitor port for web
proxy=172.16.132.191:7915   # proxy list to monitor
 
2. 运行的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.log
root     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.log
root     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.log
root     12182     1  0 14:17 ?        00:00:00 /usr/local/bin/beansdb 
 
3. 存储数据到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 port
servers=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 accessing
N=1  #nodes selected to write
W=1   # min successfully writes when return success
R=1   # min successfully reads when return success (not used)
accesslog=/var/log/beanseye/access.log  # access log
[monitor]
port=7908   # monitor port for web
proxy=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

 
 
Best Regards,
 
Cheney Zhang(张帅)

发件人: Davies Liu
发送时间: 2012-04-16  14:05:28
收件人: 张帅
抄送:
主题: 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语言不熟,如理解不当之处,请指正,谢谢。



※※※※※※※※※※※※※※※※※※※※※※※※

青岛海信传媒网络技术有限公司
张  帅
手    机:15192070551
QQ      :94643108
MSN     :zhangsh...@hotmail.com
办公地址:青岛市江西路11号海信研发中心7号楼2楼
2012-04-16 13:55:48

※※※※※※※※※※※※※※※※※※※※※※※※

-------------------------------------------------------------
发件人: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



--
 - Davies

Davies Liu

unread,
Feb 18, 2013, 8:26:57 PM2/18/13
to 张帅, beandb
新版本有不少新特性,建议升级,完全兼容。


2013/2/19 张帅 <zhang...@hisense.com>
呵呵,看到了,最新的版本 内存这块是有处理的,我们用的还是去年的老版本0.5.3
 
 
2013-02-19

 
 
Best Regards,
 
Cheney Zhang(张帅)

发件人: Davies Liu
发送时间: 2013-02-18  11:31:35
收件人: 张帅; beandb
抄送:
主题: Re: BeansDb 最大文件大小限制



--
 - Davies
6.gif
Reply all
Reply to author
Forward
0 new messages