Linux
开源数据库 Sharding 技术 (Share Nothing)
从 Shard 到 Sharding
“Shard” 这个词英文的意思是”碎片”,而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏(MMORPG)中。”Sharding” 姑且称之为”分片”。
Sharding 不是一门新技术,而是一个相对简朴的软件理念。如您所知,MySQL 5 之后才有了数据表分区功能,那么在此之前,很多 MySQL 的潜在用户都对 MySQL 的扩展性有所顾虑,而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。数据库扩展性是一个永恒的话题,MySQL 的推广者经常会被问到:如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理,是如何办到的呢? 答案是:Sharding。
Sharding 不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。
事关数据库扩展性
说起数据库扩展性,这是个非常大的话题。目前的商业数据都有自己的扩展性解决方案,在过去相对来说比较成熟,但是随着互联网的高速发展,不可避免的会带来一些计算模式上的演变,这样很多主流商业系统也难免暴露出一些不足之处。比如 Oracle 的 RAC 是采用共享存储机制,对于 I/O 密集型的应用,瓶颈很容易落在存储上,这样的机制决定后续扩容只能是 Scale Up(向上扩展) 类型,对于硬件成本、开发人员的要求、维护成本都相对比较高。
Sharding 基本上是针对开源数据库的扩展性解决方案,很少有听说商业数据库进行 Sharding 的。目前业界的趋势基本上是拥抱 Scale Out,逐渐从 Scale Up 中解放出来。
Sharding 的应用场景
任何技术都是在合适的场合下能发挥应有的作用。 Sharding 也一样。联机游戏、IM、BSP 都是比较适合 Sharding 的应用场景。其共性是抽象出来的数据对象之间的关联数据很小。比如IM ,每个用户如果抽象成一个数据对象,完全可以独立存储在任何一个地方,数据对象是 Share Nothing 的;再比如 Blog 服务提供商的站点内容,基本为用户生成内容(UGC),完全可以把不同的用户隔离到不同的存储集合,而对用户来说是透明的。
这个 “Share Nothing” 是从数据库集群中借用的概念,举例来说,有些类型的数据粒度之间就不是 “Share Nothing” 的,比如类似交易记录的历史表信息,如果一条记录中既包含卖家信息与买家信息,如果随着时间推移,买、卖家会分别与其它用户继续进行交易,这样不可避免的 两个买卖家的信息会分布到不同的 [...]
请不要忽视这些基础知识
第一,谈谈final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其他类或完成其他接口,在swing编程中常用此方式。
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
第四,&和&&的区别。
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).
第五,HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable.
第六,Collection 和 Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
第七,什么时候用assert。
1.4新增关键字(语法),用于测试boolean表达式状态,可用于调试程序。使用方法 assert ,表示如果表达式为真(true),则下面的语句执行,否则抛出AssertionError。另外的使用方式assert < boolean表达式>:,表示如果表达式为真,后面的表达式忽略,否则后面表达式的值用于AssertionError的构建参数。注意编译时要增加-source 1.4 参数,否则报错。]运行时要增加 –ea参数,否则assert行被忽略
第八,GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
第九,String s = new String(“xyz”);创建了几个String Object?
两个
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12Math.round(-11.5)==-11round方法返回与参数最接近的长整数,参数加1/2后求其floor.
第十一,short s1 = 1; s1 = s1 + 1;有什么错?
short s1 [...]
apache自带负载均衡的集群功能实战录(mod_proxy模块的应用)
下面以在apache mod_proxy下做的反向代理负载均衡为配置实例:在站点www.test.com,我们按提供的内容进行分类,不同的服务器 用于提供不同的内容服务,将http://www.test.com/news的访问转到IP地址为192.168.1.1的内部服务器上处理,对 http: //www.test.com/it的访问转到服务器192.168.1.2上,http://www.test.com/life的访问转 到服务器 192.168.1.3上,http://www.test.com/love的访问转到合作站http://www.love.com上,从 而减轻本apache服务器的负担,达到负载均衡的目的。
首先要确定域名www.test.com在DNS上的记录对应apache服务器接口上具有internet合法注册的IP地址,这样才能使internet上对www.test.com的所有连接请求发送给本台apache服务器。
在本台服务器的apache配置文件httpd.conf中添加如下设置:
proxypass /news http://192.168.1.1
proxypass /it http://192.168.1.2
proxypass /life http://192.168.1.3
proxypass /live http://www.live.com
注意,此项设置最好添加在httpd.conf文件“Section 2”以后的位置,服务器192.168.1.1-3也应是具有相应功能的www服务器,在重启服务时,最好用apachectl configtest命令检查一下配置是否有误。
接下来也是我真正想要介绍的2.2版本后在mod_proxy中新添加的mod_proxy_balancer模块给我们带来的新功能。
首先将在主配置文件http.conf以下Module的注释去掉
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
再并增加以下元素
ProxyRequests Off
ProxyPass [...]
Yahoo!社区架构(转载)
旧金山举行的 QCon 会议带给我们很多新鲜的信息。虽然没机会参加,但是看看各个网站”晒架构”也是个比较过瘾的事情。请参观并收藏这个页面:Architectures you’ve always wondered about。
eBay 的架构和去年相比基本是换汤不换药,倒是 Yahoo! 的 Ian Flint(这位老兄是 Bix 的运营总监. Bix 已被雅虎收购) 这个 PPT Yahoo! Communities Architecture: Unlikely Bedfellows 挺有意思,披露了一些鲜为人知的信息。
Yahoo! 社区包括我们比较熟悉的 del.icio.us、Flickr、Yahoo!群组、Yahoo! Mail、Bix等。相当于 Yahoo!把这些属性相近的应用放到一起运营。这个思路倒是和盛大对游戏的运营有些相近。
架构特点
有两点值得注意:1)层次化 2)模块化。这也是大规模作业下的比较经济的途径。
软件架构
首先是操作系统已经从 FreeBSD 逐渐迁移到 RHEL。这怕是雅虎不得已作出来的决定吧。FreeBSD 的开发力量的确不如 Linux,这也是不争的事实。数据库上 MySQL 与 Oracle 都有。Yahoo! 在 DW/BI 用的是 Oracle,构建了一个超大数据库。诸如 yapache、yts(反向代理服务器)、yfor(提供快速失败接管)、 ymon(监控),还有还有ysquid、ypan(cpan的 Yahoo! 克隆) 这些组件都是通过 yinst 来统计部署。关于 Yapache,请参考我以前写的 Yapache-Yahoo! Apache 的秘密
这是 [...]
网站压力测试工具集
工具 相关网址
LoadRunner http://www.mercuryinteractive.com/products/loadrunner/
SilkPerformer http://www.segue.com/products/load-s … nce-testing/index.asp
QALoad http://www.compuware.com/products/qacenter/qaload.htm
WebLoad
OpenSTA 开源
Jmeter 开源
自动测试工具集
工具 相关网址
WinRunner http://www.mercuryinteractive.com/products/winrunner/
SilkTest http://www.segue.com/products/functio … l-testing/silktest.asp
QARun http://www.compuware.com/products/qacenter/qarun.htm
SAFS http://safsdev.sourceforge.net/Default.htm
Bug追踪系统
工具 相关网址
JIRA http://www.atlassian.com/software/jira/
Bugzilla http://www.bugzilla.org
TestDirector http://www.mercuryinteractive.com/products/testdirector/
GNATS http://www.gnu.org/software/gnats/
TestTrackPro http://www.seapine.com/ttpro.html
软件测试网站
http://www.51cmm.com
http://www.sqe.com
http://www.qadirect.com
http://www.bonoy.com
http://www.sztest.net
http://www.testage.net
http://www.sqatester.com
http://www.testingfaqs.org
软件测试工具集锦见正文
类型 名称 公司 网址
测试设计工具
ALLPAIRS http://satisfice.com/
Caliber-RBT http://www.tbi.com
Caliber-RM http://www.tbi.com
DARTT http://home.t-online.de/home/bsse.info/
Datatect http://www.datatect.com
DGL http://www.csee.usf.edu/~maurer/
McCabe Test http://www.mccabe.com
McCabe TestCompress http://www.mccabe.com
Multi http://www.testing.com/
Panorama C/C++ http://www.softwareautomation.com
Reactis Tester http://www.reactive-systems.com
TDGEN http://www.soft.com/Products/index.html
T-VEC Test Generation System http://www.t-vec.com
GUI测试驱动器 Android http://www.smith-house.org/open.html
Atesto Functional Testing Service “http://www.atesto.com/
”
AutoTester for Windows http://www.autotester.com
AutoTester for [...]
MYSQL系统优化与系统设置参数
MYSQL系统优化与系统设置参数的一次调查
对mysql进行优化意味着适当地分配内存,并让mysqld了解将会承担何种类型的负载。减少磁盘访问的次数。
类似地,确保 MySQL 进程正确操作就意味着它花费在服务查询上的时间要多于花费在处理后台任务(如处理临时磁盘表或打开和关闭文件)上的时间。
记录慢速查询
在一个 SQL 服务器中,数据表都是保存在磁盘上的。索引为服务器提供了一种在表中查找特定数据行的方法,而不用搜索整个表。当必须要搜索整个表时,就称为表扫描。通常 来说,您可能只希望获得表中数据的一个子集,因此全表扫描会浪费大量的磁盘 I/O,因此也就会浪费大量时间。当必须对数据进行连接时,这个问题就更加复杂了,因为必须要对连接两端的多行数据进行比较。
当然,表扫描并不总是会带来问题;有时读取整个表反而会比从中挑选出一部分数据更加有效(服务器进程中查询规划器用来作出这些决定)。如果索引的使用效率 很低,或者根本就不能使用索引,则会减慢查询速度,而且随着服务器上的负载和表大小的增加,这个问题会变得更加显著。执行时间超过给定时间范围的查询就称 为慢速查询。
您可以配置 mysqld 将这些慢速查询记录到适当命名的慢速查询日志中。管理员然后会查看这个日志来帮助他们确定应用程序中有哪些部分需要进一步调查。清单 1 给出了要启用慢速查询日志需要在 my.cnf 中所做的配置。
启用 MySQL 慢速查询日志
[mysqld]
; enable the slow query log, default 10 seconds
log-slow-queries
; log queries taking longer than 5 seconds
long_query_time = 5
; log queries that don’t use indexes even if they take less than long_query_time
; MySQL 4.1 and newer only
log-queries-not-using-indexes
这三个设置一起使用,可以记录执行时间超过 5 秒和没有使用索引的查询。请注意有关 log-queries-not-using-indexes [...]
关于邮件群发的经验和技巧
一、关于邮件群发的经验和技巧
1、强力推荐使用免smtp服务器的群发软件。这种软件将您的电脑虚拟成发信服务器,邮件直接地送至对方的邮箱,可以清楚地知道发送成功的数量,还可以知道邮址不能发送成功的原因。如亿虎Email邮差和WorldCast等。
2、尽量不要使用多smtp服务器的群发软件。多smtp的服务器软件,由于先将邮件发送至smtp服务器进行中转,现在,一般的邮件服务器都做了 设置,如果smtp服务器检测到短时间内来自同一个IP地址的大量连接请求,就会中止转发邮件,从而产生大量退信现象。况且,现在免费的smtp服务器已 经很难找了。
3、建议将邮件地址打乱发送,效果最佳。您可以使用一些电子邮件地址列表筛选和管理软件,如Mail List Management和欧阳邮件列表管家可以轻松实现这一要求。
4、发送信件的时候,建议申请多个hotmail、yahoo等免费信箱作为发送信箱,轮流使用,而将自己常用的信箱作为回复信箱,这样可以避免常 用的信箱受到封锁,从而也可以避免因此产生的大量退信现象。如sohu.com的邮箱,经常使用同一个信箱发送信件的话,服务器会屏蔽您的邮址,从而不能 发送,碰到这种情况,就需要更换发送信箱了。
5、合理使用群发线程。群发线程越多,速度自然越快,但现在很多的服务器自动检测,如163.net、263.net的邮箱,如果线程数使用很多, 服务器马上显示太多的连接请求,拒绝再转发。具体多少线程数为好,用户可以根据自己的电脑进行测试,从而找到最佳的发送线程数,既要保证发送速度快,同时 也要保证最高的成功率,还要保证发送邮件的时候不死机。
6、群发软件的选择使用。由于每一款群发软件在设计时发送参数都略有不同,所以不是每一款群发软件都能发送邮件到任何一个邮箱。如:一款群发软件可 发送邮件至21cn.com、sohu.com、263.net等,但却不能够发送邮件至sina.com、etang.com。而另一款群发软件却可发 送邮件至sina.com、263.net、etang.com、sohu.com等,但它不能发送邮件至21cn.com。这种情况在免SMTP群发软 件中尤为突出。因此,要尽可能全面的群发邮件到不同的邮箱,建议用户使用不同的群发软件,一种软件不能发送成功的邮址,可以导入到另一种群发软件,试试 看。
7、由于网络速度和服务器设置等多方面的原因,发送的时候可能经常会出现服务器连接失败的提示,您可以将这些邮址重新发送一次,很多又可以成功的。
二、关于邮件地址收集的经验和技巧
1、搜集网站邮址软件。通过扫描网页及相关链接方式,不断搜索网页上公布的Email地址。重点推荐亿虎Email扫描大师、Fast Email Spider和商舟邮箱搜集大师。这些软件对收集行业邮件地址比较有用。建议您先收集一些行业网站的网址,然后利用这些软件搜索这些网站,可以得到大量活 跃程度比较高的邮址。
2、搜索服务器邮址软件。利用字典文件直接从邮件服务器收集邮址,重点推荐邮件地址探索者和伊妹捕神,本站已经整理了一份比较全面的中国邮件服务器和国际邮件服务器的清单以及字典文件,如果您觉得本站提供的邮址不够,可以利用这种搜索软件自行搜索服务器邮址。
3、搜索硬盘、光盘邮址软件。快速搜索电脑硬盘、光盘、软盘中的文本文件、网页文件及*.eml格式文件中的电子邮件地址,重点推荐:小不点 Email地址提取大师和科蓝邮件地址搜寻工具。基于这种软件的用途,您还可以利用teleport等网站下载软件将那些供求信息BBS信息,“拉回”到 自己的电脑,然后用这种软件进行搜索邮址,可以得到大量的有效Email地址。
三、关于邮件地址和管理和验证
1、邮址管理软件。电子邮件地址列表筛选和管理软件,可以帮助客户管理好自己的电子邮件列表,避免发送大量重复垃圾邮件, 重点推荐:Mail List Management(MLM)和欧阳邮件列表管家。MLM软件是我们使用过的邮址管理软件中功能最强,速度最快的软件,100万的邮址几分钟就可以完成 过滤重复邮址、重新排序等。欧阳邮件列表管家则可以快速将一个很大的邮址文件分割成较小的文件,以方便群发。
2、邮址验证软件。采用模拟向被校验邮箱发信,而实际上又并没有发出的方式来对检查邮件地址的存在与否,重点推荐: Advanced Email Verifier和Advanced Maillist Verify。我们在实际使用中发现,很多验证有效的邮址,在群发的时候就是不能发送成功,这是由于邮件服务器设置的原因,所以,如果您需要建立一个自己 的高效率的邮址列表,可以直接使用免smtp服务器的软件导入邮址群发,将那些发送成功的邮址保存下来以便今后使用。
四、关于信息发布软件
由于现在对邮件发送的越来越多的限制,群发邮件很容易产生“垃圾邮件”,很多的人采用供求信息BBS进行推广。这样的软件现在也很多,比较有名的如 商务快车、环球商务信息发布系统、营销之星和网际营销等等。这些软件可以将您的信息发布至国内外上千个BBS站点或者新闻组。但这些软件相对比较贵。
Apache2.2 configure – 编译配置帮助中文
`configure’ configures this package to adapt to many kinds of systems.
`configure’ 配置这个包来适合多数系统.
Usage: ./configure [OPTION]… [VAR=VALUE]…
语法: ./configure [选项]… [变量=值]…
To assign environment variables (e.g., CC, CFLAGS…), specify them as VAR=VALUE. See below for descriptions of some of the useful variables.
配置环境变量(例如,CC,CFLAGS),格式为VAR=VALUE. 看下面对这些可用变量的说明.
Defaults for the options are specified in brackets.
选项的默认值括在方括号之中.
Configuration:
配置:
-h, –help [...]
端口对照表
端口对照表
http ======> port 80 (Hyper Text Transfer Protocol)
ftp-data ==> port 20 (File Transfer Protocol – Default Data)
ftp =======> port 21 (File Transfer Protocol – Control)
POP3 ======> port 110 (Post Office Protocol version 3)
SMTP ======> port 25 (Simple Mail Transfer Protocol)
NNTP ======> port 119 (Network News Transfer Protocol)
telnet ====> port 23 (Telnet)
Gopher ====> port 70 (Gopher)
IRC [...]
tar打包一个目录时,去掉其中的几个子目录
tar cvfz chenxu.tar.gz dir –exclude dir/dir1 –exclude dir/dir2/dir3 可以陆续添加, 注意添加排队目录时不要加“/”根符号
