专业摄影师的100条感悟

05月 10, 2012

转载自:http://academy.fengniao.com/291/2912098.html

想拍摄出好的作品吗?可以参考街头摄影师Eric Kim的清单,你或许未必会同意每一条,但肯定可以引发我们的思考.
轻松玩转摄影 来自专业摄影师的100条感悟

1.拥有昂贵相机,不代表他就是好摄影师。
2.永远以RAW格式拍摄。
3.定焦镜头可以助你学习做个更好的摄影师。
4.后期本身是一门艺术。
5.三分构图法99%情况下都适用。
6.微距摄影并不适合所有人。
7.UV滤镜的功能与镜头盖差不多。
8.外出拍照,好过花大量时间在摄影论坛。
9.捕捉平凡中的美丽,你会得到可获奖的作品。
10.胶片并不优于数码。
11.数码并不优于胶片。
12.拥有魔法的相机或镜头并不存在。
13.更好的镜头不会给你更好的照片。
14.花少一点时间去看别人的作品,花多一点时间去自己拍摄。
15.不要带你的单反相机去派对。
16.女孩子喜欢摄影师。
17.将照片变成黑白,并不会让它自动变得有艺术气息。
18.如果你告诉别人,你的作品是PS过的,他们会不屑;所以告诉他们,你在数码暗房制作照片。
19.你不需要拍摄所有东西。
20.替你的作品存两个备份,如同战争的教训:两个等于一个,一个等于没有。
21.丢掉颈带,使用手带。
22.拍摄时接近多一点,作品通常会好一点。
23.拍照时成为场景的一部分,不要偷窥。
24.蹲下来拍摄的照片,通常更有趣。
25.少担心技术问题,多关注构图方面。
26.用黑色胶纸封住相机上的标志,令你更低调。
27.在大白天下拍照,习惯调低2/3挡曝光。
28.拍得越多,拍得越好。
29.在同一个地点,不妨以不同的曝光、角度或光圈值拍摄。
30.只展示你最好的作品。
31.傻瓜机也是相机。
32.加入一个网上摄影讨论区。
33.赏析别人的作品。
34.拍摄前请思考。
35.好照片不需附以解释。(虽然会补充背景资料)
36.酒精与摄影并非好拍档。
37.可以受其他摄影师启发,但不要崇拜他们。
38.颗粒是美丽的。
39.放弃双肩包,使用侧袋,让你更容易拿到镜头和相机。
40.简洁是关键。
41.摄影的定义:用光绘画。所以请惯于运用光线。
42.找出你的摄影风格,并贯彻之。
43.拥有双屏幕对后期工作是最好的。
44.Silver EFEX Pro是最好的黑白转换软件。
45.随时随地带着你的相机。
46.别让摄影防碍你享受生活。
47.毋须宠护你的相机,使用它,用坏它。
48.拍摄内容直接且清晰的照片。
49.充满自信地拍摄。
50.摄影与陈列是好朋友。
51.把照片大大地冲印出来,你会喜欢的。
52.把照片送给朋友。
53.把照片送给陌生人。
54.别忘记裱起照片。
55.Costco(一家冲印公司)又便宜又好。
56.与朋友出外拍照。
57.参加摄影组织或自己发起一个。
58.照片是好的礼物。
59.拍摄陌生人是刺激的。
60.自然直率比搔首弄姿好。
61.自然光是最好的光线。
62.全画幅上的35mm是最好的街拍焦距。
63.需要时别害怕推高ISO。
64.无需随身携带三脚架。
65.过度曝光永远比曝光不足好。
66.拍摄流落街头者以获得具有艺术气息的作品,其实是在剥削他们。
67.在最不可能的情况下,你会找到最好的拍摄时机。
68.照片里有人物元素会更有趣。
69.差的照片不会被PS成好的照片。
70.如今人人是摄影师。
71.不用非去巴黎才拍到好照片;最好的照片可能就在你身边。
72.拿着数码单反自拍的人看起来像白痴(对不起)。
73.相机是工具,不是玩具。
74.从构图来说,摄影与绘画分别不大。
75.摄影不是爱好,而是生活风格。
76.去拍照,而不是找借口。
77.忠于自己的摄影风格,不要复制。
78.最好的照片在会说故事之余,还引出观众更多故事。
79.除了黑色的相机,其他都太引人注目。
80.携带器材越多,享受摄影越少。
81.好的自拍照比看起来困难多了。
82.笑声能在照片中带出人们的真性情。
83.拍照时与环境融合,别行动得鬼鬼崇崇。
84.等得久了风光摄影可能变得沉闷。
85.摄影就是要快乐。
86.不要删除你的照片。
87.不论拍摄人或景都要保持尊重。
88.想拍摄神态自然的路人,广角镜比远摄镜好用。
89.旅游与摄影是完美组合。
90.学习如何阅读直方图。
91.有噪点的照片比模糊的照片好。
92.不要害怕下雨时拍摄。
93.学习如何享受当下时刻,而非麻木地不断捕捉完美画面。
94.肚饿时不要拍摄。
95.透过你自己的照片,你会更认识你自己。
96.不要藏起你的摄影眼光,与世界分享。
97.不要停止摄影。
98.摄影不只是拍照,它是关乎生命的哲学。
99.捕捉决定性瞬间。
100.写下你自己的清单。

相信有些清单你会持不同的意见,不要紧啊,正如第100点所讲,试试写下你自己的清单,相信也会很有益的。

又进医院了

05月 9, 2012

又进医院了,我的2012来的早点吧,今年进医院看病的次数比前23年的都多。上次扁桃体发炎,休了近半个月,这回头疼了近一个月,昨天疼的一宿没睡好。NND
又进医院了

全面解析CSS3新特性

05月 5, 2012

转载自:CSS3新特性一览 | 帕兰映像

尽管CSS3的诸多新特性还不被很多浏览器支持,或者说支持的不好。但作为一个前端开发人员,你总不能等到所有浏览器都完美支持它的时候再去学习。

CSS3到底给我们带来了哪些新特性呢?简单的说,CSS3把很多以前需要使用图片和脚本来实现的效果,只需要短短几行代码就能搞定。比如圆角,图片边框,文字阴影和盒阴影等。CSS3不仅能简化前端开发工作人员的设计过程,还能加快页面载入速度。

本文里面,就让我们来全面的看一下CSS3的各种新特性。也别忘了检阅我们之前发布的一些CSS教程和技巧文章:

使用浏览器专有属性

为了使用大部分CSS3特性,我们不得不与原来的属性一起使用生产商专有扩展。原因是直到现在,大部分浏览器只支持部分CSS3属性。而且不幸的是,一些属性甚至到最后都可能不被W3C推荐,所以通过指定浏览器专有属性,将他们与标准属性区分开来是很重要的(然后在他们是多余的的时候使用符合标准的样式将之覆盖)。

当然,这种方法的劣势是,将导致一个杂乱的样式表和网站在浏览器之间的表现不一致。毕竟,我们不想在我们的样式表中重拾私有浏览器hack的需求。 Internet Explorer的臭名昭著的marquee、blink以及其它标签在大量样式表中被应用,并在20世纪九十年代成为一个传奇;它们依然让现存的很多网 站(在其他浏览器中)表现不一致甚至难以阅读。而我们现在也不想将我们自己置于同样的境地,对吧?

然而,网站不需要在所有的浏览器中看起来必须严格的一致。有的时候在某个浏览器中使用私有属性来实现特定的效果是可行的。

最常见的私有属性是用于Webkit核心浏览器的(比如, Safari), 它们以-webkit-开始,以及Gecko核心的浏览器(比如, firefox),以-moz-开始,还有Konqueror (-khtml-)、Opera (-o-) 以及Internet Explorer (-ms-)都有它们自己的属性扩展(目前只有IE8支持-ms-前缀)

作为专业的设计师,我们不得不注意:使用这些私有属性将让我们的样式表不能通过验证。所以目前将他们放到最终版的样式中是少见的。但是在某种情况下,比如试验或学习,我们至少可以考虑将他们和标准的CSS属性一起写到一个样式表中。

扩展阅读

1. 选择器

CSS选择器是个难以置信地强大的工具:它们允许我们在标签中指定特定的HTML元素而不必使用多余的 class、 ID 或javascripts。而且它们中的大部分并不是CSS3中新添加的,而是没有被得到应有的广泛应用。如果你在尝试实现一个干净的、轻量级的标签以及 结构与表现更好的分离,高级选择器是非常有用的。它们可以减少在标签中的class和ID的数量并让设计师更方便的维护样式表。

属性选择器

三个新的属性选择器被添加到CSS3:

  • [att^="value"]
    匹配包含以特定的值开头的属性的元素
  • [att$="value"]
    匹配包含以特定的值结尾的属性的元素
  • [att*="value"]
    匹配包含含有特定的值的属性的元素

值的属性的元素

全面解析CSS3新特性

a[title$="tweetCC"] { position: absolute; top: 0; right: 0; display: block; width: 140px; height: 140px; text-indent: -9999px; }

浏览器支持:只有IE6不支持CSS的属性选择器。IE7和IE8、Opera、Webkit核心和Gecko核心的浏览器都支持。所以在你的样式中使用属性选择器是比较安全的。

连字符

CSS3中唯一新引入的连字符是通用的兄弟选择器(同级)。它针对一个元素的有同一个父级节点的所有兄弟级别元素。

比如,给某个特定的div的同级的图片添加一个灰色的边框(div和图片应该有同一个父级节点),在样式表中定义下面的样式就足够了:

div~img { border: 1px solid #ccc; }

浏览器支持:所有的主要浏览器都支持这个通用的兄弟选择器除了我们最爱的IE6

伪类

或许在CSS3中增加最多的就是新的伪类了,这里是一些最有趣和最有用的:

  • :nth-child(n)
    让你基于元素在父节点的子元素的列表位置来指定元素。你可以是用数字、数字表达式或odd 和even 关键词(对斑马样式的列表很完美)。所以如果你想匹配在第四个元素之后的一个3个元素的分组,你可以简单的这样使用:

    :nth-child(3n+4) { background-color: #ccc; }/*匹配第4,7,10,13,16,19...个元素*/
  • :nth-last-child(n)
    与上个选择器的思想同样,但是从后面匹配元素(倒序),比如,为了指定一个div里面的最后两个段落,我们可以使用下面的选择器:

    div p:nth-last-child(-n+2)
  • :last-child
    匹配一个父节点下的最后一个子元素,等同于:nth-last-child(1)
  • :checked
    匹配选择的元素,比如复选框
  • :empty
    匹配空元素(没有子元素)。
  • :not(s)
    匹配所有不符合指定声明(s)的元素。比如,如果你想让所有的没有使用”lead”类的段落的显示为黑色,可以这样写:

    p:not([class*="lead"]) { color: black; }

    .

Andrea Gandino 在他的网站上使用:last-child 为选择器指定每篇日志的最后一个段落,并将其的外间距(margin)设置为0:

全面解析CSS3新特性

#primary .text p:last-child { margin: 0; }

浏览器支持: Webkit核心和Opera 浏览器支持所有新的CSS3 伪类,Firefox 2 和3 (Gecko核心) 只支持:not(s), :last-child, :only-child, :root, :empty, :target, :checked, :enabled 和:disabled,但是Firefox 3.5 将更加广泛的支持CSS3 选择器。Trident核心浏览器(Internet Explorer)事实上不支持这些伪选择器。

伪元素

在CSS3中唯一引入的伪元素是::selection.它可以让你指定被用户高亮(选中)的元素。

浏览器支持: 目前没有任何一款Internet Explorer 或Firefox 浏览器支持::selection 伪元素。Safari, Opera 和Chrome 均支持。

扩展阅读

2. RGBA和透明度

RGBA 让你可以不仅仅设定色彩,还能设定元素的透明度。一些浏览器尚不支持它,所以最好在RGBa前面设定其它浏览器支持的没有透明的颜色属性。

全面解析CSS3新特性
Tim Van Damme在链接的hover效果上使用了RGBA

在这个网站上,Tim Van Damme在鼠标悬停效果上使用了RGBa;例如,在他的首页的network链接上:

#networks li a:hover, #networks li a:focus { background: rgba(164, 173, 183, .15); }

当设定一个RGBA 色彩的时候,我们必须依次设定红、蓝、和绿色的值,可以是0-255或百分数。透明值应该在0.0到1.0之间,例如0.5 代表50% 的透明度。

RGBA 和opacity 之间的不同是前者只会应用到指定的元素上,而后者会影响我们指定的元素及其子元素。

这里有个例子展示我们如何给一个div添加80% 透明:

div { opacity: 0.8; }

浏览器支持: RGBA 被Webkit内核浏览器支持。IE所有版本都不支持。Firefox 2也不支持,但是Firefox 3 和Opera 9.5均支持。Opacity 被Opera、Webkit核心 和Gecko核心的浏览器支持。IE所有版本同样不支持。IE只支持自家的该死的滤镜(filter)

扩展阅读:

3. 多栏布局

这是新的CSS3 选择器可以让你不用使用多个div标签就能实现多栏布局。浏览器解释这个属性并生成多栏,让文本实现一个仿报纸的多栏结构。

全面解析CSS3新特性
tweetCC 在其首页使用了CSS3 多栏选择器

tweetCC 在其首页上将介绍文字显示为四栏。这四栏并非浮动的div;相反,设计师使用下面的CSS3 多栏布局:

.index #content div { -webkit-column-count : 4; -webkit-column-gap : 20px; -moz-column-count : 4; -moz-column-gap : 20px; }

我们可以通过这个选择器定义三件事情:栏数(column-coun)、栏宽(column-width、例子中没有用到)和各栏之间的空白/间距(column-gap)。 如果column-count未设定,浏览器会在允许的宽度内容纳尽可能多的栏目。

为了在各栏时间添加一个数值的分隔,我们可以使用column-rule 属性,其功能和border 属性类似:

div { column-rule: 1px solid #00000; }

上面的这条属性,浏览器中不会看到任何效果,因为它没有分栏,如果配合上面的例子就可以了。

相关属性: column-break-after, column-break-before, column-span, column-fill.

浏览器支持: 多栏布局目前被Safari 3+,chrome,和Firefox 1.5+所支持。

扩展阅读:

4. 多背景图

CSS3 允许你使用多个属性比如background-image、background-repeat, background-size, background-position, background-originand background-clip等在一个元素上添加多层背景图片.

在一个元素上添加多背景的最简单的方法是使用简写代码,你可以指定上面的所有属性到一条声明中,只是最常用的还是image, position 和repeat:

div { background: url(example.jpg) top left no-repeat, url(example2.jpg) bottom left no-repeat, url(example3.jpg) center center repeat-y; }

第一个图片将是离用户“最近”的那个。

该属性的一个更复杂的版本可以是这样的:

div { background: url(example.jpg) top left (100% 2em) no-repeat, url(example2.jpg) bottom left (100% 2em) no-repeat, url(example3.jpg) center center (10em 10em) repeat-y; }

在这里,(100% 2em) 是background-size 的值;第一个背景图片将会出现在左上角并会被拉伸至该div的100%宽度和2em的高度。

因为只有少数的浏览器支持它,又因为在网站上不显示背景有损网站的视觉效果,所以,这并不是一个被广泛应用了的属性。尽管如此,它显然能够大大地提高设计师的工作流并显著减少标签数量——相对于用其它方式实现同样的效果。

浏览器支持: 目前,多背景图片只在Safari/chrome 和Konqueror中有效

扩展阅读:

5. Word Wrap

word-wrap 属性用来防止太长的字符串溢出的。可以用两个属性值normal 和break-word。normal 值(默认的) 只在允许的断点截断文字,如连字符。如果使用了break-word ,文字可以在任何需要的地方截断以匹配分配的空间并防止溢出。

全面解析CSS3新特性
wordpress 后台在数据表中使用了word-wrap.

WordPress 的控制面板中,word-wrap 属性被用于表格中的元素;比如在日志和页面的列表中:

.widefat * { word-wrap: break-word; }

浏览器支持: word-wrap 被Internet Explorer 和Safari/chrome支持。Firefox 将在3.5版本中支持它。

扩展阅读:

6. 文字阴影

尽管在CSS2中就已经存在,text-shadow是一个未被广泛应用的CSS属性。但是它将在CSS3中被广泛采用。这个属性给设计师一个新的跨浏览器的工具来为设计添加一个维度以使文字醒目。

尽管这样,你需要确认,你的设计中的文字是可读的,以防用户的浏览器不支持CSS3高级属性。给文字和背景色彩足够的对比度以防text-shadow 属性不能被浏览器正确渲染或理解。

全面解析CSS3新特性
Beakapp 在它的网站中使用了text-shadow 属性:内容区域.

BeakApp.com 为内容区域使用了text-shadow 属性,为文字添加深度和维度 并让它变得醒目——而不是使用某种图片替换技术。该属性目前只在Safari和Chrome中可用。

该网站的主菜单使用的CSS如下:

.signup_area p { text-shadow: rgba(0,0,0,.8) 0 1px 0; }

这里我们使用阴影颜色(使用了RGBA,前面有描述), 然后是右(x 坐标) 和底部(y 坐标) 偏移,最后是模糊半径

如果要在一个文字上使用多阴影,可以使用逗号分开。比如:

p { text-shadow: red 4px 4px 2px, yellow -4px -4px 2px, green -4px 4px 2px; }

浏览器支持: Webkit核心浏览器和Opera 9.5 支持text-shadow。Internet Explorer 不支持它,Firefox 将在即将发行的3.5版本中支持。

扩展阅读:

7. @font-face属性

尽管是最被期待的CSS3 特性 (甚至它在CSS2中就已经被引入了), @font-face在网站上仍然没有像其它CSS3属性那样被广泛采用.这主要因为字体授权和版权问题:嵌入的字体很容易从网站上下载到,这是字体厂商的主要顾虑。

尽管如此,授权我呢提貌似已经开始解决了。TypeKit 承诺将制定一个方案,以使设计师和字体厂商更容易的统一授权问题,这将显著的充实网站设计中的排版并使@font-face 属性在实际工作中可用。

全面解析CSS3新特性
Mozilla实验室JetPack 网站采用font-face规则来使用DroidSans 字体。

少数使用该属性的网站之一是新上线的JetPack MozillaLabs.

@font-face{ font-family: 'DroidSans'; src: url('../fonts/DroidSans.ttf') format('truetype'); }

要想在你的网站中使用嵌入字体,你必须独立的生命每个样式(比如, normal, bold 和italic)。请确保只使用被授权为使用到网站的字体并在需要的时候给字体的设计师一些表扬。

在定义了@font-face 规则之后,你就可以用普通的font-family 属性来引用该字体了:

p { font-family: "DroidSans"; }

如果一个浏览器不支持@font-face,它将使用font-family(CSS 字体库)属性中指定的下一个字体。对支持的浏览器来说,如果@font-face 字体是一个奢侈品(只有少数元素用到),这对一些网站是可行的;但是如果该字体在设计中占有一个主要的角色或者是公司的视觉特征的一部分,你就可能想使用 其它的解决方案,比如sIFR 或Cufón。尽管如此,请记住,这些工具对标题或较短的文字更适合,复制和粘贴此类内容比较困难而且对用户并不友好。

全面解析CSS3新特性
在网站中使用此类字体不是很好吗?Dave Shea 使用Cufón 和Museo Sans来做的实验。很漂亮!

浏览器支持: @font-face 被Safari 3.1+和chrome支持。Internet Explorer 支持EOT 字体。 Opera 10 和Firefox 3.5 将会支持它。

扩展阅读:

8. 圆角(边框半径)

Border-radius 无需背景图片就能给HTML元素添加圆角。现在,它可能是使用最多的CSS3属性了,很简单的原因是使用圆角比较好而且不会对设计和可用性有冲突。

不同于添加Javascript或多于的HTML标签,仅仅需要添加一些CSS属性并从好的方面考虑。这个方案是清晰的和比较有效的,而且可以让你免于花费几个小时来寻找精巧的浏览器方案和基于Javascript圆角。

全面解析CSS3新特性
Sam Brown的博客在标题、分类和链接处使用了border-radius.

Sam Brown在他的博客的标题、分类、链接和div中大量的使用了border-radius属性。使用图片来实现该效果将会比较费时的,这是在项目中使用CSS3属性是提高开发效率的重要步骤的原因之一

为了给类别链接添加圆角,Sam 使用了下面的CSS片段:

h2 span { color: #1a1a1a; padding: .5em; -webkit-border-radius: 6px; -moz-border-radius: 6px; }

我们可以做的更进一步,添加原始的CSS3 属性和Konqueror 属性扩展,如下:

h2 span { color: #1a1a1a; padding: .5em; -webkit-border-radius: 6px; -moz-border-radius: 6px; -khtml-border-radius: 6px; border-radius: 6px; }

如果我们想在我们的元素中的某个特定的角上应用此属性,我们可以单独的指定每个角:

div { -moz-border-radius-topright: 6px; -moz-border-radius-topleft: 6px; -moz-border-radius-bottomright: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-top-right-radius: 6px; -webkit-border-top-left-radius: 6px; -webkit-border-bottom-right-radius: 6px; -webkit-border-bottom-left-radius: 6px; border-top-right-radius: 6px; border-top-left-radius: 6px; border-bottom-right-radius: 6px; border-bottom-left-radius: 6px; }

浏览器支持: border-radius只有所有版本的IE浏览器和Opera不支持,Webkit和Gecko核心的浏览器都支持。

扩展阅读:

9. 边框图片

border-image 属性允许你在元素的边框上设定图片, 让你从通常的solid, dotted 和其它边框样式中解放出来。该属性给设计师一个更好的工具,用它可以方便的定义设计元素的边框样式,比background-image 属性(对高级设计来说) 或枯燥的默认边框样式更好用。我们也可以明确的定义一个边框可以被如何缩放或平铺。

全面解析CSS3新特性
SpoonGraphics 博客为它的图片边框使用了border-image 属性。

SpoonGraphis blog中,border-image被用于图片边框,如下所示:

#content .post img { border: 6px solid #f2e6d1; -webkit-border-image: url(main-border.png) 6 repeat; -moz-border-image: url(main-border.png) 6 repeat; border-image: url(main-border.png) 6 repeat; }

要想定义border-image,我们必须指定图片地址,图片的那部分将被剪切并用于元素的每一个边上,以及图片是否被缩放或平铺。

为了制作一个使用下面的图片作为边框的div ,我们应该使用下面的代码(我们将为这个例子添加Opera 和Konqueror 支持):

全面解析CSS3新特性

div { border-width: 18px 25px 25px 18px; -webkit-border-image: url(example.png) 18 25 25 18 stretch stretch; -moz-border-image: url(example.png) 18 25 25 18 stretch stretch; -o-border-image: url(example.png) 18 25 25 18 stretch stretch; -khtml-border-image: url(example.png) 18 25 25 18 stretch stretch; border-image: url(example.png) 18 25 25 18 stretch stretch; }

该属性的最后一个值可以是stretch (默认), round (只有一个平铺了整数倍的图片被填充在允许的地方) 或repeat。在我们的例子中,上下左右边框图片被拉伸。如果我们只想顶部和底部边框被拉伸,我们可以使用下面的CSS:

div { (...) border-image: url(example.png) 18 25 25 18 stretch repeat; }

我们可以可以单独的指定每一个角,如果我们想为每一个角使用不同的图片:

div { border-top-image: url(example.png) 5 5 stretch; border-right-image: url(example.png) 5 5 stretch; border-bottom-image: url(example.png) 5 5 stretch; border-left-image: url(example.png) 5 5 stretch; border-top-left-image: url(example.png) 5 5 stretch; border-top-right-image: url(example.png) 5 5 stretch; border-bottom-left-image: url(example.png) 5 5 stretch; border-bottom-right-image: url(example.png) 5 5 stretch; }

如果浏览器不支持border-image 属性,它将无视这些属性,并只应用定义的其它边框属性,比如border-width 和border-color.

浏览器支持: border-image 目前只有Webkit核心浏览器支持。不太确定Firefox的下一个版本是否支持。

扩展阅读:

10. 盒阴影

box-shadow 属性可以对HTML元素添加阴影 而不用额外的标签或背景图片。类似text-shadow 属性,它增强设计的细节;而且因为它不影响内容的可读性,随意他可以是增加那种额外感觉/效果的一种很好的方法。

全面解析CSS3新特性
10to1 为它的导航北京和hover状态使用了box-shadow 属性.

10to1 为其导航区域增加的一个简单的阴影并将该属性应用于导航链接的hover效果:

#navigation { -webkit-box-shadow: 0 0 10px #000; -moz-box-shadow: 0 0 10px #000; } #navigation li a:hover, #navigation li a:focus { -webkit-box-shadow: 0 0 5px #111; -moz-box-shadow: 0 0 5px #111; }

box-shadow属性可以用多个值:水平偏移、垂直偏移、模糊半径、伸展半径和阴影颜色。水平和垂直偏移和阴影色使用的最多。

在一个div上应用红色阴影,右边和下边偏移4px,无模糊,我们可以使用下面的代码:

div { -moz-box-shadow: 4px 4px 0 #f00; -webkit-box-shadow: 4px 4px 0 #f00; box-shadow: 4px 4px 0 #f00; }

浏览器支持: box-shadow目前只有Webkit核心浏览器支持,但是即将发布的Firefox 3.5 也将提供很好的支持。

扩展阅读:

11. 盒子大小

根据CSS 2.1 规范,在计算盒子的总大小的时候,元素的边框和padding应该被加入到宽度和高度之中的。但是众所周知,旧的浏览器却以它们自己的非常有“创意”的方式来解释这个规范。box-sizing属性允许你指定浏览器如何计算一个元素的宽度和高度。

全面解析CSS3新特性
WordPress 在控制面板的所有的输入框元素中使用border-box 属性。

WordPress 后台区域在它的所有text类型的input标签和textarea标签上使用了该属性:

input[type="text"], textarea { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }

第三个属性(-ms-box-sizing) 只有在Internet Explorer 8下有效。通过其他选择器,WordPress 的样式表同样添加了Konqueror 属性: -khtml-box-sizing。

box-sizing 属性可以两个值中的一个:border-box 和content-box。 Content-box如CSS2.1中的定义的那样渲染宽度。Border-box 从设定的宽度和高度中扣除padding和边框(如老式浏览器那样。)。

浏览器支持:box-sizing 被IE8、Opera、Gecko核心和Webkit核心浏览器支持。

扩展阅读:

12. 媒体查询

媒体查询(media queries)可以让你为不同的设备基于它们的能力定义不同的样式。比如,在可视区域小于480像素的时候,你可能想让网站的侧栏显示在主内容的下边,这样它就不应该浮动并显示在右侧了:

#sidebar { float: right; display: inline; /* IE Double-Margin Bugfix */ } @media all and (max-width:480px) { #sidebar { float: none; clear: both; } }

你也可以指定使用虑色屏的设备:

a { color: grey; } @media screen and (color) { a { color: red; } }

潜力是无限的。这个属性是很有用的因为你你不在需要必须为不同的设备写独立的样式表了,而且你也无需使用JS来确定每个用户的浏览器的属性和功能。一个实现一个灵活的布局的更加流行的基于Javascript的方案是使用智能的流体布局,让布局对于用户的浏览器分辨率更加灵活。

浏览器支持: 媒体查询被基于webkit核心的浏览器和Opera支持。Firefox将在3.5版本中支持它。IE目前不支持这些属性而且在将来的版本中,也没有支持的计划。

扩展阅读:

13. 语音

CSS3的语音模块CSS3可以让你为屏幕阅读者指定语音样式。你可以控制语音的不同设置,比如:

  • voice-volume
    使用从0到100的数字(0 即静音)、百分数或关键词(silent,x-soft,soft,medium,loud 和x-loud等)来设置音量。
  • voice-balance
    控制来自哪个声道(如果用户的音箱系统支持立体声)。
  • Speak
    指示屏幕阅读器阅读相关的文字、数字或标点符号。可用的关键词为none, normal, spell-out, digits, literal-punctuation, no-punctuation 和inherit.
  • Pauses and rests
    在一个元素的被读完之前或之后设定暂停或停止。你可以使用时间单位(比如, “2s” 表示2 秒钟) 或关键词(none,x-weak, weak, medium, strong 和x-strong)。
  • Cues
    使用声音限制特定元素并控制器音量。
  • voice-family
    设定特定的声音类型和声音合成(就像font-family)。
  • voice-rate
    控制阅读的速度。可以设置为百分数或关键词: x-slow, slow,medium, fast 和x-fast.
  • voice-stress
    指示应该使用的任何重音(强语气),使用不同的关键词: none, moderate,strong 和 reduced.

比如,告诉屏幕阅读器使用男声读取所有的h2 标签,用左边的喇叭,用软调按照指定的声音,可以像下面这样指定样式:

h2 { voice-family: female; voice-balance: left; voice-volume: soft; cue-after: url(sound.au); }

不幸的是,这个属性现在只有非常少的支持,但是显然值得关注因为我们可以在将来提高我们网站的易用性。

浏览器支持: 现在,只有Opera 浏览器(Windows XP and 2000)支持语音模块的部分属性。为了使用它们,需要使用-xv- 前缀,比如-xv-voice-balance: right。

扩展阅读:

结尾

CSS3 属性可以极大的提高你的工作流,让一些最耗时的CSS任务不费吹灰之力就能搞定,并且可以使用更好、更简洁和更轻的代码标签。一些属性尚未被广泛的支持,甚至是最新的浏览器,但这并不意味着我们不能用它们进行试验或者为使用先进浏览器的用户更高级的功能和CSS样式。

在这点儿上,请记住,培养我们的用户 也同样是有用和必须的:网站无需看起来在每个浏览器里都要保持一致,而且如果一个差异不(负面)影响美学和网站的可用性,它就应该是被考虑的。如果我们继续浪费大量的时间和金钱以使每个细节绝对一致(而不是采用更灵活的和未来导向的方案), 用户将没有升级他们的浏览器的任何需要/动机,这样我们就不得不在旧的浏览器变为古董级浏览器以及强大的现代浏览器变为标准之前等待很长的时间

我们试验和使用新的CSS3属性越早,它们就被流行的浏览器支持的更早,我们也就能够更早的广泛使用它们。

推荐阅读及资源:

关于原作者

Inayaili de León是一个葡萄牙的网页设计师。她对网页设计和前端编码真的非常感兴趣,而且喜欢漂亮和简洁的网站。她居住在伦敦。你可以在Web Designer Notebook上看到她的更多文章,并follow her on Twitter.

英文原文:Take Your Design To The Next Level With CSS3
翻译原文:用CSS3将你的设计带入下个高度

Moosefs分布式存储框架详细介绍

05月 4, 2012

转载自:http://www.cnblogs.com/oubo/archive/2012/05/04/2482893.html

  • MFS概述、特性和新版改进
  • MFS 工作原理和设计架构
  • MFS的安装、部署、配置
  • MFS的高级特性
  • MFS的性能测试
  • MFS集群的维护
  • MFS的常见问题和建议对策

一、MFS概述、特性和新版改进

MooseFS是一个分布式存储的框架,其具有如下特性:

  1. Free(GPL)
  2. 通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!)。
  3. 可以在线扩容,体系架构可伸缩性极强。(官方的case可以扩到70台了!)
  4. 部署简单。(sa们特别高兴,领导们特别happy!)
  5. 高可用,可设置任意的文件冗余程度(提供比raid1+0更高的冗余级别,而绝对不会影响读或者写的性能,只会加速!)
  6. 可回收在指定时间内删除的文件(“回收站”提供的是系统级别的服务,不怕误操作了,提供类似oralce 的闪回等高级dbms的即时回滚特性!)
  7. 提供netapp,emc,ibm等商业存储的snapshot特性。(可以对整个文件甚至在正在写入的文件创建文件的快照)
  8. google filesystem的一个c实现。
  9. 提供web gui监控接口。
  10. 提高随机读或写的效率(有待进一步证明)。
  11. 提高海量小文件的读写效率(有待进一步证明)。

MooseFS 1.6版本改进:

  • 修复1.5.x中在大批量操作时打开文件过多的bug。报的错误说是打开的文件过多,造成chunker server的链接错误。在1.6.x中解决此问题,就解决了很大的问题。
  • 新增加了masterlogger服务器。这是在1.5.x中所没有的,就是做了master服务器的冗余,进一步的加强的master服务器的稳定性。在mfs体系中master是要求最稳定以及性能要求最高的,因此务必保证master的稳定。
  • 修改1.5.x中存在的对于坏块的修复功能。在mfs1.5.x中遇到chunker坏块校验,错误比较多的时候导致master将出现坏块的chunker自动的剔除出去的情况,此次增加了对坏块的修复功能,很方便的进行修复,简化对坏块的处理功能。
  • 对metadata和changelog的新认识。之前认为changelog记录的是文件的操作,定期的像数据库的日志一样归档到metadata中。发现上面的理解存在误区,真正的是changelog中记录了对文件的操作,metadata记录文件的大小和位置。因此metadata是比较重要的,在进行修复的过程中是采用metadata和最后一次的changelog进行修复的。
  • MFS文档中明确指出对于内存和磁盘大小的要求。
  • 指出了在测试的过程中多个chunker并不影响写的速度,但是能加快读的速度。在原来的基础上增加一个chunker时,数据会自动同步到新增的chunker上以达到数据的平衡和均衡。

二、MFS 工作原理和设计架构

角色 角色作用
管理服务器
managing server (master)
负责各个数据存储服务器的管理,文件读写调
度,文件空间回收以及恢复.多节点拷贝
元数据日志服务器
Metalogger server(Metalogger)
负责备份master 服务器的变化日志文件,文
件类型为changelog_ml.*.mfs ,以便于在
master server 出问题的时候接替其进行工作
数据存储服务器
data servers (chunkservers)
负责连接管理服务器,听从管理服务器调度,
提供存储空间,并为客户提供数据传输.
客户机挂载使用
client computers
通过fuse 内核接口挂接远程管理服务器上所
管理的数据存储服务器,.看起来共享的文件
系统和本地unix 文件系统使用一样的效果.

官方的网络示意图是这样的:

MFS网络示意图

读写原理:

MFS读写原理MFS读写原理

三、MFS的安装、部署、配置

测试环境:

IP 作用
192.168.0.1 master server
192.168.0.2 metalogger server
192.168.0.3 chunk server
192.168.0.4 chunk server
192.168.0.5 chunk server
192.168.0.6 mfs client

3.1  Master Server

在192.168.0.1进行如下操作:

3.1.1 安装:

$useradd mfs -s /sbin/nologin
$wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz$tar zxvf mfs-1.6.20-2.tar.gz
$cd mfs-1.6.20-2/
$./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
$make
$make install
$cd /usr/local/mfs/etc
$cp mfsmaster.cfg.dist mfsmaster.cfg  #主配置文件
$cp mfsexports.cfg.dist mfsexports.cfg #被挂接目录及权限配置

3.1.2 配置:

$vi /usr/local/mfs/etc/mfsmaster.cfg
# WORKING_ USER = mfs      #运行master server 的用户
# WORKING_ GROUP = mfs     #运行master server 的组
# SYSLOG_IDENT = mfsmaster #master server 在syslog 中的标识,说明是由master serve 产生的
# LOCK_MEMORY = 0          #是否执行mlockall()以避免mfsmaster 进程溢出(默认为0)
# NICE_LEVEL = -19         #运行的优先级(如果可以默认是-19; 注意: 进程必须是用root 启动)
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg #被挂接目录及其权限控制文件的存放位置
# DATA_PATH = /usr/local/mfs/var/mfs    #数据存放路径,此目录下大致有三类文件,changelog,sessions 和stats;
# BACK_LOGS = 50                        #metadata 的改变log 文件数目(默认是50);
# REPLICATIONS_ DELAY_INIT = 300        #延迟复制的时间(默认是300s);
# REPLICATIONS_ DELAY_DISCONNECT = 3600 #chunkserver 断开的复制延迟(默认是3600);
# MATOML_LISTEN_HOST = *     #metalogger 监听的IP 地址(默认是*,代表任何IP);
# MATOML_LISTEN_PORT = 9419 #metalogger 监听的端口地址(默认是9419);
# MATOCS_LISTEN_ HOST = *   #用于chunkserver 连接的IP 地址(默认是*,代表任何IP);
# MATOCS_LISTEN_PORT = 9420 #用于chunkserver 连接的端口地址(默认是9420);
# MATOCU_LISTEN_HOST = *    #用于客户端挂接连接的IP 地址(默认是*,代表任何IP);
# MATOCU_LISTEN_PORT = 9421 #用于客户端挂接连接的端口地址(默认是9421);
# CHUNKS_LOOP_TIME = 300    #chunks 的回环频率(默认是:300 秒);# CHUNKS_DEL_LIMIT = 100
# CHUNKS_WRITE_REP_LIMIT = 1 #在一个循环里复制到一个chunkserver 的最大chunk 数目(默认是1)
# CHUNKS_READ_REP_LIMIT = 5  #在一个循环里从一个chunkserver 复制的最大chunk 数目(默认是5)
# REJECT_OLD_ CLIENTS = 0    #弹出低于1.6.0 的客户端挂接(0 或1,默认是0)

注意:

  • 凡是用#注释掉的变量均使用其默认值
  • 修改DATA_PATH指定的目录要权限为mfs,chown -R mfs:mfs /usr/local/mfs/var/mfs
  • mfsexports 访问控制对于那些老客户是没用的
  • 注意开通监听的端口
$vi /usr/local/mfs/etc/mfsexports.cfg
客户端IP 允许挂载的目录 客户端拥有的权限 说明
192.168.0.0/24 / rw,alldirs,maproot=0 /标识MFS的根
192.168.0.0/24 . rw .标识MFSMETA 文件系统

地址可以指定的格式

IP格式 说明
* 所有的ip 地址
n.n.n.n 单个ip 地址
n.n.n.n/b IP 网络地址/位数掩码
n.n.n.n/m.m.m.m IP 网络地址/子网掩码
f.f.f.f-t.t.t.t IP 段

权限说明:

权限 说明
ro 只读模式
rw 读写模式
alldirs 许挂载任何指定的子目录
maproot 映射为root,还是指定的用户
password 指定客户端密码

3.1.3  操作:

$/usr/local/mfs/sbin/mfsmaster [-vdu] [-t locktimeout] [-c cfgfile] [start|stop|restart|reload] #master服务操作
$/usr/local/mfs/sbin/mfscgiserv  #启动WEBUI 监控服务,访问http://192.168.0.1:9425/

注意:

最好不要kill master,安全停止执行mfsmaster stop,否则下次启动因metadata.mfs.back而出现问题,还需要使用备份来恢复。

文件说明:

$ls -l /usr/local/mfs/var/mfs  #此目录见mfsmaster.cfg中DATA_PATH配置
      metadata.mfs.back  #MFS元数据信息,延迟将内存数据写入文件,默认频率1h,默认1d同步一次此文件到metalogger server
      changelog.*.mfs      #文件操作日志记录,实时记录、同步到metalogger server
      sessions.mfs  #客户操作状态记录
      stats.mfs        #?

3.1.4 备注:

  • 用户操作日志见:changelog.*.mfs
  • 进程产生的日志放到系统日志中:/var/log/messages
  • Master可以单独启动,注意开通监听的端口

3.2  Chunk Server

在192.168.0.3-在192.168.0.5 进行如下操作

3.2.1 安装:

$useradd mfs -s /sbin/nologin
$wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz
$tar zxvf mfs-1.6.20-2.tar.gz
$cd mfs-1.6.20-2/
$./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
$make
$make install
$cd /usr/local/mfs/etc
$cp mfschunkserver.cfg.dist mfschunkserver.cfg #chunk配置文件
$cp mfshdd.cfg.dist mfshdd.cfg  #MFS使用空间配置

3.2.2 配置:

$vi /usr/local/mfs/etc/mfschunkserver.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# DATA_PATH = /usr/local/mfs/var/mfs
# LOCK_FILE = /var/run/mfs/mfschunkserver.pid
# SYSLOG_IDENT = mfschunkserver
# BACK_LOGS = 50
# MASTER_RECONNECTION_DELAY = 30
MASTER_HOST = 192.168.0.1 #元数据服务器的名称或地址,可以是主机名,也可以是ip 地址
# MASTER_PORT = 9420 #为Matser中 MATOCS_LISTEN_PORT指定的端口
# MASTER_TIMEOUT = 60
# CSSERV_LISTEN_HOST = *
# CSSERV_LISTEN_PORT = 9422 这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制
# CSSERV_TIMEOUT = 60
# CSTOCS_TIMEOUT = 60
# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配给MFS 使用的磁盘空间配置文件的位置

注意:

  • MASTER_HOST 不能为localhost或127.0.0.1,做单机测试的童鞋们注意了,要使用对外IP。
  • MASTER_PORT必须为元数据服务器配置中MATOCS_LISTEN_PORT指定的端口,且IP必须被master允许。
  • 注意开通监控的端口(这里是9422)
$chown -R mfs:mfs /data      #没有这一操作,会出现写权限问题,因进程是用mfs运行的。
$vi /usr/local/mfs/etc/mfshdd.cfg
    /data

注意:

  • 在这里/data 是一个给mfs 的分区,但在本机上是一个独立的目录,最好是一个单独的硬盘或者一个raid 卷,最低要求是一个分区。
  • 不要忘了更改目录的权限,因为mfschunkserver进程是用mfs运行的。

3.2.3 操作

/usr/local/mfs/sbin/mfschunkserver [-vdu] [-t locktimeout] [-c cfgfile] [start|stop|restart|reload]  #chunkserver操作命令

3.3 MetaLogger Server

在192.168.0.2上执行如下操作:

3.3.1 安装:

同Master的安装步骤。

3.3.2 配置:

$vi /usr/local/mfs/etc/mfsmetalogger.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfsmetalogger
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH = /usr/local/mfs/var/mfs
# BACK_LOGS = 50
# META_DOWNLOAD_FREQ = 24 元数据备份文件下载请求频率。默认为24小时,即每隔一天从元数据服务器(MASTER)下载一个metadata.mfs.back 文件。当元数据服务器关闭或者出故障时,matedata.mfs.back 文件将消失,那么要恢复整个mfs,则需从metalogger 服务器取得该文件。请特别注意这个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。
# MASTER_RECONNECTION_DELAY = 5
MASTER_HOST = 192.168.0.1
# MASTER_PORT = 9419
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock

注意:

  • MASTER_HOST 不能为localhost或127.0.0.1,做单机测试的童鞋们注意了,要使用对外IP。
  • MASTER_PORT必须为元数据服务器配置中MATOCS_LISTEN_PORT指定的端口,且IP必须被master允许。

3.3.3 操作

/usr/local/mfs/sbin/mfsmetalogger [-vdu] [-t locktimeout] [-c cfgfile] [start|stop|restart|reload]  #chunkserver操作命令

3.4 MFS Client

在192.168.0.6上执行如下操作:

3.4.1 FUSE安装:

$wget http://nchc.dl.sourceforge.net/project/buluoos/0.2/src/fuse-2.8.5.tar.gz
$tar zxf fuse-2.8.5.tar.gz
$cd fuse-2.8.5
$./configure
$make && make install
$echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >>/etc/profile
$source /etc/profile
$lsmod |grep fuse #检查fuse是否加载到内核,若没有,执行下面命令
$modprobe fuse&&lsmod |grep fuse  #若将下列mfsmount挂载操作加入开机自启动,一定将modprobe fuse也加入开机自启

注意:

  • 一定要将fuse环境变量配置ok,否则安装mfsmount会装不上
  • 若将下列mfsmount挂载操作加入开机自启动,一定将modprobe fuse也加入开机自启,且在其执行之前执行。

3.4.2 MFSMount安装:

$useradd mfs -s /sbin/nologin
$wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz
$tar zxvf mfs-1.6.20-2.tar.gz
$cd mfs-1.6.20-2/
$./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver
$make;make install

3.4.3 挂载MFS

$mkdir /mnt/mfs /mnt/mfsmeta  #创建挂载点
$/usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.0.1
$/usr/local/mfs/bin/mfsmount -m /mnt/mfsmeta -H 192.168.0.1
$df -h #检查是否挂载成功
$umount /mnt/mfs #操作如下出错,说明客户端本机有正在使用此文件系统,可以查明是什么命令正在使用,然后推出就可以了,最好不要强制退出。

到此为止,我们的MFS集群已经搭建完成。

四、MFS的高级特性

4.1 冗余goal设置

目标(goal),是指文件被拷贝的份数,设定了拷贝的份数后是可以通过mfsgetgoal 命令来证实的,也可以通过mfsrsetgoal 来改变设定。

$/usr/local/mfs/bin/mfssetgoal 3 /mnt/mfs/test1
$/usr/local/mfs/bin/mfsgetgoal /mnt/mfs/test1
  /mnt/mfs/test1: 3

mfsgetgoal –r 和mfssetgoal –r 同样的操作可以对整个树形目录递归操作,其等效于mfsrsetgoal命令。实际的拷贝份数可以通过mfscheckfile 和mfsfile info 命令来证实。

注意以下几种特殊情况:

  • 一个不包含数据的零长度的文件,尽管没有设置为非零的目标(the non-zero “goal”),但用mfscheckfile 命令查询将返回一个空的结果;将文件填充内容后,其会根据设置的goal创建副本;这时再将文件清空,其副本依然作为空文件存在。
  • 假如改变一个已经存在的文件的拷贝个数,那么文件的拷贝份数将会被扩大或者被删除,这个过程会有延时。可以通过mfscheckfile 命令来证实。
  • 对一个目录设定“目标”,此目录下的新创建文件和子目录均会继承此目录的设定,但不会改变已经存在的文件及目录的拷贝份数。

可以通过mfsdirinfo来查看整个目录树的信息摘要。

4.2 垃圾回收站

一个删除文件能够存放在一个“ 垃圾箱”的时间就是一个隔离时间, 这个时间可以用mfsgettrashtime 命令来验证,也可以用mfssettrashtime 命令来设置。如:

$/usr/local/mfs/bin/mfssettrashtime 64800 /mnt/mfs/test1
$/usr/local/mfs/bin/mfsgettrashtime /mnt/mfs/test1
  /mnt/mfs/test1: 64800

时间的单位是秒(有用的值有:1 小时是3600 秒,24 – 86400 秒,1天 – 604800 秒)。就像文件被存储的份数一样, 为一个目录设定存放时间是要被新创建的文件和目录所继承的。数字0 意味着一个文件被删除后, 将立即被彻底删除,在想回收是不可能的。

删除文件可以通过一个单独安装MFSMETA 文件系统。特别是它包含目录/ trash (包含任然可以被还原的被删除文件的信息)和/ trash/undel (用于获取文件)。只有管理员有权限访问MFSMETA(用户的uid 0,通常是root)。

$/usr/local/mfs/bin/mfsmount -m /mnt/mfsmeta -H 192.168.0.1

被删文件的文件名在“垃圾箱”目录里还可见,文件名由一个八位十六进制的数i-node 和被删文件的文件名组成,在文件名和i-node 之间不是用“/”,而是用了“|”替代。如果一个文件名的长度超过操作系统的限制(通常是255 个字符),那么部分将被删除。通过从挂载点起全路径的文件名被删除的文件任然可以被读写。

移动这个文件到trash/undel 子目录下,将会使原始的文件恢复到正确的MooseFS 文件系统上路径下(如果路径没有改变)。如果在同一路径下有个新的同名文件,那么恢复不会成功。

从“垃圾箱”中删除文件结果是释放之前被它站用的空间(删除有延迟,数据被异步删除)。

在MFSMETA中还有另一个目录reserved,该目录内的是被删除但依然打开的文件。在用户关闭了这些被打开的文件后,reserved 目录中的文件将被删除,文件的数据也将被立即删除。在reserved 目录中文件的命名方法同trash 目录中的一样,但是不能有其他功能的操作。

4.3 快照snapshot

MooseFS 系统的另一个特征是利用mfsmakesnapshot 工具给文件或者是目录树做快照。

$/usr/local/mfs/bin/mfsmakesnapshot source ... destination

Mfsmakesnapshot 是在一次执行中整合了一个或是一组文件的拷贝,而且任何修改这些文件的源文件都不会影响到源文件的快照, 就是说任何对源文件的操作,例如写入源文件,将不会修改副本(或反之亦然)。

也可以使用mfsappendchunks

$/usr/local/mfs/bin/mfsappendchunks destination-file source-file ...

当有多个源文件时,它们的快照被加入到同一个目标文件中(每个chunk 的最大量是chunk)。

五、MFS的性能测试

下面是网上得到的一童鞋的简单测试数据,直接拿过来了。

写:time dd if=/dev/zero of=/mnt/mfs/test2/test500M bs=1024k count=500
读:time dd if=/mnt/mfs/test2/test500M of=/dev/null
1copy写 2copy写 1copy读 2copy读
1M 0m0.042s 0m0.042s 0m0.017s 0m0.017s
5M 0m0.073s 0m0.079s 0m0.070s 0m0.071s
20M 0m0.250s 0m0.288s 0m0.291s 0m0.376s
50M 0m0.514s 0m0.589s 0m0.896s 0m0.886s
100M 0m0.977s 0m7.497s 0m1.677s 0m1.787s
200M 0m7.910s 0m22.270s 0m2.683s 0m3.129s
500M 0m22.465s 0m51.735s 0m6.559s 0m6.990s
1G 0m52.346s 1m48.056s 0m17.319s 0m17.154s
2G 1m46.224s 3m46.283s 0m41.608s 0m34.435s
10G 9m29.037s 19m26.237s 3m55.222s 3m24.914s
  • 读速度:ca 71M/s 写速度:ca 22M/s 9M/s (以500M计算)
  • goal的设置和读写速度的关系?貌似没有太大关系。

另一份比较详细的测试数据,就不粘出来了,直接把结果拿过来:

  • 单盘多进程性能没有提升,因为都在io wait,甚至增加进程会消耗大量调度时间
  • MFS多进程时性能会提升,主要性能消耗集中在CPU系统时间。因此实际海量小文件性能要大大强于本地文件系统

六、MFS集群的维护

6.1 启动MFS集群

最安全的启动MooseFS 集群(避免任何读或写的错误数据或类似的问题)的方式是按照以下命令步骤:

  1. 启动mfsmaster 进程
  2. 启动所有的mfschunkserver 进程
  3. 启动mfsmetalogger 进程(如果配置了mfsmetalogger)
  4. 当所有的chunkservers 连接到MooseFS master 后,任何数目的客户端可以利用mfsmount 去挂接被export 的文件系统。(可以通过检查master 的日志或是CGI 监视器来查看是否所有的chunkserver被连接)。

6.2 停止MFS集群

安全的停止MooseFS 集群:

  1. 在所有的客户端卸载MooseFS 文件系统(用umount 命令或者是其它等效的命令)
  2. 用mfschunkserver stop 命令停止chunkserver 进程
  3. 用mfsmetalogger stop 命令停止metalogger 进程
  4. 用mfsmaster stop 命令停止master 进程

6.3 MFS chunkservers 的维护

若每个文件的goal(目标)都不小于2,并且没有under-goal 文件(这些可以用mfsgetgoal –r和mfsdirinfo 命令来检查),那么一个单一的chunkserver 在任何时刻都可能做停止或者是重新启动。以后每当需要做停止或者是重新启动另一个chunkserver 的时候,要确定之前的chunkserver 被连接,而且要没有under-goal chunks。

6.4 MFS元数据备份

通常元数据有两部分的数据:

  • 主要元数据文件metadata.mfs,当mfsmaster 运行的时候会被命名为metadata.mfs.back
  • 元数据改变日志changelog.*.mfs,存储了过去的N 小时的文件改变(N 的数值是由BACK_LOGS参数设置的,参数的设置在mfschunkserver.cfg 配置文件中)。

主要的元数据文件需要定期备份,备份的频率取决于取决于多少小时changelogs 储存。元数据changelogs 实时的自动复制。1.6版本中这个工作都由metalogger完成。

6.5 MFS Master的恢复

一旦mfsmaster 崩溃(例如因为主机或电源失败),需要最后一个元数据日志changelog 并入主要的metadata 中。这个操作时通过mfsmetarestore 工具做的,最简单的方法是:

$/usr/local/mfs/bin/mfsmetarestore -a

如果master 数据被存储在MooseFS 编译指定地点外的路径,则要利用-d 参数指定使用,如:

$/usr/local/mfs/bin/mfsmetarestore -a -d /opt/mfsmaster

6.6 从MetaLogger中恢复Master

有些童鞋提到:如果mfsmetarestore -a无法修复,则使用metalogger也可能无法修复,暂时没遇到过这种情况,这里不暂不考虑。

  1. 找回metadata.mfs.back 文件,可以从备份中找,也可以中metalogger 主机中找(如果启动了metalogger 服务),然后把metadata.mfs.back 放入data 目录,一般为{prefix}/var/mfs
  2. 从在master 宕掉之前的任何运行metalogger 服务的服务器上拷贝最后metadata 文件,然后放入mfsmaster 的数据目录。
  3. 利用mfsmetarestore 命令合并元数据changelogs,可以用自动恢复模式mfsmetarestore –a,也可以利用非自动化恢复模式
$mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs

或:

强制使用metadata.mfs.back创建metadata.mfs,可以启动master,但丢失的数据暂无法确定。

七、MFS的常见问题和建议对策

7.1 Master性能瓶颈

master本身的性能瓶颈。
短期对策:按业务切分

7.2 体系架构存储文件总数的瓶颈

mfs把文件系统的结构缓存到master的内存中,个人认为文件越多,master的内存消耗越大,8g对应2500kw的文件数,2亿文件就得64GB内存。
短期对策:按业务切分

7.3 单点故障解决方案的健壮性

7.4 垃圾回收

默认的垃圾回收时间是86400,存在一种可能性是垃圾还没回收完,你的存储容量就暴掉了。
方案一:设置垃圾回收时间,积极监控存储容量。
经过测试,把垃圾回收时间设置300秒,完全可以正确回收容量。
方案二:手动周期性去删除metamfs里的trash目录下的文件(健壮性还有待测试,反正删除后容量是回收了,不晓得有没有什么后遗症。)

7.5 理想的平均写和读的速度是多少?

原始的读/写速度很明显是主要取决于所使用的硬盘的性能、网络的容量和拓扑结构的,使用的硬盘和网络的吞吐量越好,整个系统的性能也就会越好。官方的测试环境中,将MFS安装在linux(Debian)上设置存储的份数为2,一般的测试服务器(还做了其他较大量的计算),G太网络,使用Pbyte级别的数据,测试的结果为写的速度大约在20-30MB/s,读的速度为30-50MB/s。对于小文件写的速度有些下降,但是对于读的速度是没有影响的。

7.6 设置文件存储的份数是否影响写/读的速度?

一般来说,它是有影响的。在一定条件下,存储份数的设置会影响的读取的速度。例如,当文件设置存储两份而不是一份时能加快对同一文件有多个客户端读取的速度。但是在真实的环境中,多个机器同时读取同一个文件的机率是比较小的,因此,存储份数的设置对读取的速度影响是比较小的。

同样,设置存储份数对写的速度影响也是不太大的。(只有文件超过64M的时候)

本次总结主要来自一些网络上的资料和当前生产环境使用MFS的一些经验。

参考资料:《MFS知识大汇总》、《MFS权威指南》、《MFS文件系统使用手册》

工作中常用的Javascript

05月 3, 2012

常用验证表单的Javascript

//验证Email
function checkEmail(mail) {
    if (mail.length > 0 && mail.length < 101) {
        var regex = /^[_\.0-9a-zA-Z+-]+@([0-9a-zA-Z]+[0-9a-zA-Z-]*\.)+[a-zA-Z]{2,4}$/;
        if (regex.exec(mail)) {
            return true;
        }
    }
    return false;
}
//验证邮政编码
function checkZip(zip) {
    var regex = /^[0-9]{6}$/;
    if (regex.exec(zip)) {
        return true;
    }
    return false;
}
//验证身份证
function checkIdCard(idcard) {
    var regex = /^[0-9xX]{15,18}$/;
    if (regex.exec(idcard)) {
        return true;
    }
    return false;
}
//验证固话
function checkTel(tel) {
    var regex = /^[0-9]{3,4}-[0-9]{7,8}$/;
    if (regex.exec(tel)) {
        return true;
    }
    return false;
}
//验证手机
function checkMobile(mobile) {
    var regex = /^[0-9]{11}$/;
    if (regex.exec(mobile)) {
        return true;
    }
    return false;
}
//验证QQ
function checkQQ(qq) {
    qq = $.trim(qq);
    if (qq.length > 0 && qq.length < 101) {
        var regex = /^[0-9]{1,12}$/;
        if (regex.exec(qq)) {
            return true;
        } else {
            return checkEmail(qq);
        }
    }
    return false;
}
//验证名称中文,英文或数字
function checkUname(name) {
    var regex = /^[a-zA-Z0-9\u4e00-\u9fa5]{2,10}$/;
    if (regex.exec(name)) {
        return true;
    }
    return false;
}
function checkUname(name,start,end) {
    var regex = new RegExp("^[a-zA-Z0-9\\u4e00-\\u9fa5]{"+start+","+end+"}$");
    if (regex.exec(name)) {
        return true;
    }
    return false;
}
//验证网址
function checkSiteUrl(url) {
    var regex = /^http:\/\/([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}(:[0-9]{1,5})?$/;
    if (regex.exec(url)) {
        if (url.length < 201) {
            var istrue = false;
            $.ajax({
                type: "post",
                url: "register.aspx",
                dataType: "html",
                async: false,
                data: "url=" + escape(url) + "&t=checkUrl",
                cache: false,
                success: function(data) {
                    if (data == "can") {
                        istrue = true;
                    }
                }
            });
            if (istrue) {
                return true;
            }
        }
    }
    return false;
}

Google Drive for Windows 完整安装包下载地址

05月 2, 2012

Google Drive for Mac 的安装很顺利,但是Google Drive for Windows的安装不成功,总提示“应用程序未知错误”,Windows7 32bit、64bit,Windows8 32bit,都安装不成功,今天在Google上搜了一下,找到了下载完整安装包的方法,转载过来。

原文地址:http://blog.kakarot.net/post/21971668460/google-drive

首选需要配置host,Windows中host地址:C:\Windows\System32\drivers\etc

用记事本打开hosts文件,然后在最后加入:

203.208.46.88 o-o.preferred.sea09s07.v3.lscache2.c.pack.google.com

Google Drive for Windows 完整安装包下载地址:

http://o-o.preferred.sea09s07.v3.lscache2.c.pack.google.com/edgedl/drive/1.0.2891.6813/gsync.msi

安装后效果:
Google Drive for Windows

2012年04月30日记:五月天鸟巢演唱会

05月 1, 2012

4月29日和4月30日,五月天又用实际行动续写了神话——目前为止他们是唯一在鸟巢连开两场演唱会的演出者,24小时之内有205000观众和他们一起K歌。

幸运的是,我也是其中一员,哈哈,这是我第一次去现场听演唱会,不虚此行,这550元太值了。

5点出门,6点左右才到,鸟巢周边的几条路和4环路都很堵车。我的票是:4月30日,136通道,H区10排2座。看图就知道,这个位置还是不错的,挺近。

五月天鸟巢演唱会

6点30分,演唱会一开始,出现在大屏幕上的蔡康永以新闻播报的形式渲染出彗星撞击地球的末日气氛,呼吁人们赶快登上逃生的方舟。在五月天音乐世界里,“末日”带来的绝不是恐慌和绝望,他们用《叫我第一名》、《笑忘歌》等励志歌曲鼓励人们拿出面对挫折和未知的勇气。

五月天鸟巢演唱会

“当永远变成一种遥远,当句点变成一种观点,让人类终于变成同类,勇敢地向过去和未来告别……”听到这样的歌声,现场歌迷已经hold不住了,站起身挥舞着荧光棒随音乐一起摇摆。
五月天鸟巢演唱会

终于在现场听到了,我最喜欢的“温柔”,太激动了。
五月天鸟巢演唱会

夜幕降临,还是这样的效果好。
五月天鸟巢演唱会
五月天鸟巢演唱会
五月天鸟巢演唱会
五月天鸟巢演唱会

下面是个人秀时间,怪兽离我们很近,这吉他弹的,相当给力。
五月天鸟巢演唱会
五月天鸟巢演唱会

阿信过来了,离我最近的距离,也就100米左右。
五月天鸟巢演唱会

小齐也来现场助兴,唱了一首“对面的女孩看过来”。
五月天鸟巢演唱会

高潮部分,10万人用手机照亮了星空。
五月天鸟巢演唱会
五月天鸟巢演唱会

现在录制了几个视频,这场演唱会给我留下了深刻印象,下次,哪怕是周边城市,也准备再去听一场,期待。






最后,附上现场歌单:

《2012》
《爱情万岁》
《叫我第一名》
《DNA》
TALKING 1
阿信:晚安,你们来鸟巢,花了多长时间呢?我知道,有人比较近,花了20分钟,有人比较远一点,花了两个小时,还有人坐火车来,花了三天。而五月天,来到鸟巢,花了十三年,所以,十三年来,没有说过的话,没有唱过的歌,要在今天,2012年4月30号,一次爆发~
《星空》
《温柔》
VCR1
《时光机》
《你不是真正的快乐》
《盛夏光年》
《我心中尚未崩坏的地方》
《诺亚方舟》
《一千个世纪》
VCR2
《笑忘歌》
《终结孤单》
Talking2
成员介绍
阿信:今天登上鸟巢的诺亚方舟,不管你是今天喜欢上五月天、还是昨天喜欢上五月天、还是你根本不喜欢五月天,但是,加入五月天永远不晚。是这个意思 或者会说 五月花都.. 但是 ..于是..滚石唱片…五月天第一次演出的地方在无名高地..后来 开始消失了..我不知道..那个..我们的回忆.还有每一个脚步 还有你们 我们永远不会孤单 这里1.6公里 我们从2004年到2012年 走了8年..这是你们给五月天的最大的… 20万人,谢谢你们..接下来的歌声献给..T121 3121
《T121 3121》
《干杯》
《疯狂世界》
《三个傻瓜》
《春天的呐喊》
《OK啦》
《轧车》
SOLO
《人生海海》
《如烟》+《如果还有明天》 阿信+家家
《知足》家家
《OAOA》
《第一天》
《让我照顾你》
《最重要的小事》
《倔强》
《离开地球表面》
《诺亚方舟》
Encore 1
《突然好想你》
《孙悟空》
《恋爱ING》
全场L O V E
小齐哥《对面的女孩看过来》
《知足》
Encore 2
《我不愿让你一个人》
《仓颉》
Talking3
阿信:我们听过各种各样的故事,有人在演唱会上求婚、有人说我们的演唱会拯救了一个失落的灵魂、有人误打误撞跟上了我们的脚步、有人一直跟我们走了很久很久。从小跟爷爷奶奶住,都说闽南语,所以我写了闽南语歌,可是我怕你们听不懂,所以我把它写成了普通话,后来我发现我们好像已经超越了语言的隔阂,但是我相信,在这歌里面,我们的天真永远存在。
全场:啦啦啦啦啦~
《憨人》

Google Drive for Mac 使用方法

04月 28, 2012

自从26号知道Google Drive已经发布,我就迫不及待的下载了Google Drive for Mac,但是当时帐号还未被激活不能使用。(访问官网方法及下载地址请查看另一篇文章:Google Drive 官网访问方法及下载地址

27号晚下班回家,打开邮箱一看,帐号可以使用了,哈哈。

Google Drive 激活帐号

去MyDrive看了一下,大体界面和Google文档很相似,而且Google文档中的内容,会自动添加到Google Drive中,很棒。
Google Drive 界面

我的Air上昨天出点问题,一直没能用客户端登录,今天回家再研究研究。

最近网络连接不好,不过终于可以登录了。
Google Drive 界面

登陆后,出现配置界面,Google Drive会在电脑的资料库中生成Google Drive同步文件夹。
Google Drive 界面

Google Drive文件都是存储在云服务器上,要保证能访问http://drive.google.com/,免费的5G存储空间,一般来说够用了,也可以选择购买更大的空间。
Google Drive 界面

高级设置里面,可以选择文件存储在电脑上的目录,我就用默认的,毕竟苹果的文件系统和Windows不一样,默认就很好。
Google Drive 界面

再之后,就可以看到Google Drive的同步文件夹,Google Docs 上的文件也被自动同步下来了,真是太方便了,就像操作电脑中的文件一样操作Google 云端数据。
Google Drive 界面

p.s.Google的产品就是好用,我的最爱,Google Drive 已经是我首选的云端数据存储服务。

Google Drive 官网访问方法及下载地址

04月 26, 2012

Google Drive

好消息:Google Drive 发布了;坏消息:刚发布就被墙了,谷歌今天正式推出在线云存储服务Google Drive,中文名为“Google 云端硬盘”。将向用户提供5GB的免费存储空间。不过最大的障碍仍然是墙内无法访问。

Google Drive将支持直接从网页浏览器打开多达30多种文件格式,包括高清视频和Photoshop文件,即使在没有安装相关软件的情况下也可以直接打开。Google Drive将与Google Docs深度整合,可以让你和同事实时处理文档、电子表格以及演示。可以通过关键字或者通过对文件类型、文件所有人以及文件的动态情况进行过滤来搜索。

Google Drive用户可选择升级至25GB空间,费用为每月2.49美元;还可升级至100GB空间,每月4.99美元;或升级至1TB,月费49.99美元。当Gmail用户成为Google Drive付费用户后,其存储空间将扩容至25GB。每个用户花费4美元购买20GB的容量,最多可以扩展到16TB。

目前使用Google Drive还有限制,先访问官网,得到确认邮件后才可以使用。

先修改google drive hosts,再访问:http://drive.google.com

hosts地址:

203.208.46.146 drive.google.com

74.125.71.94 drive.google.com

下载地址:
Google Drive for Mac OS X 1.0.2891.6813
Google Drive for Windows 1.3.21.111

2012年04月22日记:颐和园

04月 24, 2012

哥出差来北京,周末我俩一起去逛颐和园,本打算逛完颐和园再去圆明园,没想到,一个颐和园就够逛一天了。皇家园林,真不错,比故宫好多了。

首先在昆明湖畔拍个照。

颐和园
颐和园

然后顺着十七孔桥到了南湖岛,小岛也很好。

之后,去了光绪帝及其皇后呆的地方。

笼中龙

颐和园

笼中凤

颐和园

慈禧的房子真是气派,前后的装饰又多又漂亮。

颐和园

慈禧“豪宅”的前面,还有个电话亭,可以说是中国的第一部电话。

颐和园

颐和园内的佛香阁,里面的大佛真够个,就跟游戏中的“终极BOSS”似的,重达万斤,整体浇筑的,怎么弄的呢?

颐和园
颐和园

沿途还看到写水笔字的大爷,字写的真漂亮,图中老外用iPad拍照呢,哈哈,要是New iPad还可以。

颐和园

再看下,苏州街附近的美树。
颐和园

最后,在颐和园老照片馆看了会,乾隆挺帅的,光绪应该挺郁闷的,看图就明白了。哈哈。

乾隆

颐和园

慈禧和光绪的“老婆”们

颐和园

次日晚,在眉州东坡酒楼吃了一顿,离酒店近,香椿豆腐、金牌土豆丝、东坡扣肉,相当美味。

颐和园

充实的周末,over。

无觅相关文章插件,快速提升流量

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org