图片存储:按时间增加新域名进行扩容的办法

基于ID的分片机制实现存储的分布化会遇到一个问题:固定存储空间随着时间增加再次达到系统的空间/负载的瓶颈。观察了一下Flickr的图片存储 地址:好像是在定期启用新的集群,各个时期的域名分布如下:

http://farm1.static.flickr.com 2006年中以前;
http://farm2.static.flickr.com 2006年底;
http://farm3.static.flickr.com 2007年底;
http://farm4.static.flickr.com 2008年底;

《构建可扩展的Web站点》上 没有提到这个策略,猜测Flickr应该是不断在启用新的服务器集群,当地一个集群用到90%的时候,开始启用下一个集群。一个用户的所有图片地址则存储 在数据库中:记录会包含当时的存储所在的集群: Continue reading

有理化表现层

简介

多年来,由于各种原因,IT界已经习惯了一些很离谱的设计模式,这恰恰成为全新时代创建优秀分布式应用的巨大障碍,我们由此有必要更新对目前表现层 实现技术的一些看法。本文中,我们想要表述的观点是由web应用表现的整个瘦客户端其实很傻,应该摒弃。我们这么认为的原因,那还得从九十年代中 期,web刚刚兴起的时候开始说起。

历史

随着Web的一夜兴起,几乎同时出现了两种背道相驰的开发: (1)作为无处不在的客户端“应用平台”成就了浏览器的绝对重要性,应用因此很容易部署;(2)各商家间的分裂剥夺了平台原本拥有的发展潜能。这第二条, 说得直接点就是Netscape 和Microsoft之间的浏览器之战。这场著名的“战役”导致的最后结果是两个产品系列在显示web页面、执行JavaScript代码的时候 所采用的方式大相径。web应用要么只能在这个产品上运行,要么只能在另一个产品上运行,这样的事情很平常,但着实让人气愤。一方面,越来越多的应用需要 采用Web方式向用户发布;另一方面,发布应用必须的平台却是如此不可靠。这时候,企业该怎么办? Continue reading

架构风格和架构模式速览

应用架构指南2.0(微软模式和实践)的第 6章讨论了诸如消息总线、分层架构、SOA之类的架构风格。除了这些风格,还有很多架构模式,比如插件、点对点、发布-订阅。有些作者对架构风 格、模式和隐喻进行了区分。

什么是架构风格呢?根据应用架构指南所说,架构风格指:

一组原则。你可以把它看成是一组为系统家族提供抽象框架的粗粒度模式。架构风格能改进分块,还能为频繁出现的问题提供解决方案,以此促进设计重用。

指南的作者列出了一系列架构风格: Continue reading

手机之家网站架构的发展和变化

这次beta沙龙请了高春辉的团队来讲他们的经验。本来我是 希望老高讲,不过他说最近的系统主要是许超前在带人开发,所以实际的演讲人是许超前。

国内最早让大家意识到网站的发展阶段的文档大概就是于敦德翻译的LiveJournal发展历程的ppt。这次许超前的演讲非常类似 LiveJournal的那篇。

手机之家用了7年时间,发展到1000万以上用户,3000万以上帖子,1.1TB附件,每天780万以上的PV这个规模。这个数字虽然比 不上大型互联网公司,但是对一个只有几个人的技术团队,已经是一个很令人骄傲的数字了。 Continue reading

Facebook 如何管理150亿张照片

Facebook 的照片分享很受欢迎,迄今,Facebook 用户已经上传了150亿张照片,加上缩略图,总容量超过1.5PB,而每周新增的照片为2亿2000万张,约25TB,高峰期,Facebook 每秒处理55万张照片,这些数字让如何管理这些数据成为一个巨大的挑战。本文由 Facebook 工程师撰写,讲述了他们是如何管理这些照片的。

旧的 NFS 照片架构

老的照片系统架构分以下几个层:

  • 上传层接收用户上传的照片并保存在 NFS 存储层。
  • 照片服务层接收 HTTP 请求并从 NFS 存储层输出照片。
  • NFS存储层建立在商业存储系统之上。

因为每张照片都以文件形式单独存储,这样庞大的照片量导致非常庞大的元数据规模,超过了 NFS 存储层的缓存上限,导致每次招聘请求会上传都包含多次I/O操作。庞大的元数据成为整个照片架构的瓶颈。这就是为什么 Facebook 主要依赖 CDN 的原因。为了解决这些问题,他们做了两项优化:

  • Cachr: 一个缓存服务器,缓存 Facebook 的小尺寸用户资料照片。
  • NFS文件句柄缓存:部署在照片输出层,以降低 NFS 存储层的元数据开销。

Continue reading

来自淘宝的架构经验

日前参加了一场淘宝网架构师黄裳带来的技术分享,在最后他总计了淘宝 这几年来的架构经验,这里和大家分享一下:

  • 1、适当放弃一致性
  • 2、备份和隔离解决稳定性问题
  • 3、分割和异步解决性能问题
  • 4、自动化降低人力成本
  • 5、产品化管理

在这里不妨对比一下 eBay 的架构经验:

  • 1、 Partition Everything
  • 2、 Asynchrony Everywhere
  • 3、 Automate Everything
  • 4、 Remember Everything Fails
  • 5、 Embrace Inconsistency
  • 6、 Expect (R)evolution
  • 7、 Dependencies Matter
  • 8、 Be Authoritative
  • 9、 Never Enough Data
  • 10、Custom Infrastructure

关于一致性,可以延伸阅读 Amazon CTO 的大作 Eventually Consistent。此外,强调了”放弃集中的紧耦合处理”的原则。”备份”这里可以理解为”提供可用的副本”。”分割”是说水平拆分。 Continue reading

技术架构两三语

作者:人人网架 构师 王志亮  人人网UGC团队博客首发

小的不才,斗胆发言

多角度定义架构

定义架构的最短形式是:“架构是一种结构”,太棒了,这是一种正确的理解,但世界还没太平。若做一个比喻,架构就像一个操作系统,不同的角度有不同 的理解,不同的关切者有各自的着重点,多视点的不同理解都是架构需要的,也只有通过多视点来考察才能演化出一个有效的架构。

从静态的角度,架构要回答一个系统在技术上如何组织;从变化的角度,架构要回答如何支持系统不断产生的新功能、新变化以及适时的重构;从服务质量的 角度,架构要平衡各种和用户体验有关的指标;从运维的角度,架构要回答如何充分利用计算机或网络资源及其扩展策略;从经济的角度,架构要回答如何在可行的 基础上降低实现成本等等。 Continue reading

软件架构师应该知道的97件事

软件架构师是个让人羡慕的职业,在市场经济成熟的国家,其薪酬已经达到医生、律师、注册会计师、建筑设计师的水平。但是薪酬高低与职业成熟度没有直 接的关系。重赏之下必有勇夫,高薪往往造成培养机制不健全的行业出现暂时的良莠不齐。目前我们还没有培养软件架构师的成熟机制,架构师大多是程序员自学成 材。程序员擅长和电脑打交道,却不善于处理工作中的人际关系。然而经验表明,除了技术特长,沟通协作的技巧、领导协调的能力、统筹取舍的经验在指挥开发项 目的过程中起着更重要的作用,而这些内容在计算机学院的课本里压根找不到。刚刚升任软件架构师的人,都有一段时间觉得茫然失措,因为有太多非技术问题困扰 着他们。

软件架构师是IT 行业里独一无二的职业,既要精通软件开发技术,又要掌握业务知识,还要周旋于公司不同部门之间,协调各种予盾。做到这些绝非易事, 博文视点 即将翻译出版的新书《软件 架构师应该知道的97 件事》(97 Things Every Software Architect Should Know )探讨的就是这个主题。 Continue reading

csdn.net的系统架构研究

csdn作为国内最大的程序开发社区,影响了足足一代人。它是国内优秀杂志《程序员》的网站,我从前非常喜欢《程序员》这本杂志,里面的文章都非常优秀, 那时只有5元钱的我每个月花10块钱买本这样的杂志,看个三五年,都舍不得丢下。

但是今天观察了下csdn站点的架构,发现做的比较简单,看来开发者比较喜欢从程序着手,着重优化代码和数据库,对系统整体架构思考的时间不多。

我着重看了几个二级域名:www、news、bbs/community和blog,其中www、news这些静态文件都有通过squid缓存,用的 app_squid架构,然后是dns轮询做分流。 Continue reading

图片服务器的hash架构

这是一个最简洁的架构。在这个架构里,负载均衡器都可以省了,用最为廉价的dns来替代,dns的优点就是廉价,不用维护,也不愁性能和稳定,还可以跨机房多用几条带宽作分流。 另外,在图片服务中,可以选择用另一个域名做dns。优点是主站中的任何cookie等header不会带到图片服务中,省了不少上传流量和服务器可能有 的处理时间;缺点是多花了点域名的钱。目前门户都喜欢用这办法,小站用的话,用另一个域名还附带有一个特别的优点:因为部分域名服务商允许添加的二级域名 有限,所以用别的域名可以节约有限的域名资源。dns这一块也可以用泛域名,不过貌似国内的泛域名支持不是特别的稳定,有些网站的泛域名,在linux下 不能解析windows就正常,比较奇怪,我也没法解释。 Continue reading