当前位置: 首页 > 图文教程 > 网站运营 > 建站经验 > 图文解读Facebook 从设计原则到架构体系

建站经验
经验探讨 用户体验与搜索引擎优化的结合
让你的网站产生Google Sitelinks的六个要素
凸显使用体验 网站导航最受美国厂商关注
外国人眼中网站设计和网站建设二十个原则
网站更换域名应该注意的八个方面
五年经验告诉你 细节决定网站成败
新网站如何提高流量
稳中求升 购买付费链接应注意的九个问题
经验越多下手越难 你能抛弃你所学习的吗
站长进行设计网站时必须注意二十三个方面
路径突破 谈谈英文站比中文站更能做成功
谈谈网站运营中的关键的一环 团队的管理
最原始的东西最有价值 致天下所有创业者
名博怎样练成 析月光博客成功的六个原因
学生站长持续自己的冬天 仍坚守春天的期待
关于对web的分析 获得可行动的认识和度量
五个月前后五次改动 让我的流量稳在五万
亲手关闭自己论坛 泣血奉献一些心得经验
用户体验指导思想 易用友好 把用户当傻瓜
网站如何将用户体验与搜索引擎优化相结合

建站经验 中的 图文解读Facebook 从设计原则到架构体系


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 199 ::
收藏到网摘: n/a

在 QCon 2008 (旧金山站) 上Facebook 做的这个技术分享有不少值得借鉴的东西。所以,暂停对 QCon 北京的回顾,临时插播一贴。

设计原则

1尽可能的使用开源软件,并且在需要优化的时候进行优化

2Unix 哲学。包括,模块化原则;整合化原则;清晰化原则等

3任何组件具备扩展性

4最小化故障影响

5简化,简化,简化!

架构概览

Facebook 是 LAMP 的坚定支持者,也差不多是用 LAMP (或许用 LAM2P 更适合) 实现的最大的动态站点。

Facebook Arch Overview.png

基础组件加上服务,中间用自己实现的一些工具进行粘合。其中关于运维细节的事情基本不会说出来的,这是很多公司的软实力所在。

PHP 经验

参见《Facebook 的 PHP 性能与扩展性》

MySQL 经验

1主要用于做 Key-Value 类型的存储操作,数据随机分布在多台逻辑实例上,访问多数基于全局 ID 。

2逻辑实例分散在多台物理主机上(超过1800台),负载均衡在物理层进行。

3不做读复制。

4尽量不做逻辑数据迁移(成本太高)。

5不做 JOIN 操作 (豆瓣在 QCon 上也阐述了这一点)。数据是随机分布的,关联操作反而带来了极大的复杂度。

6对于数据访问,主要的操作集中在最新的数据上,针对这部分做优化,旧的数据进行归档。

7在中心 DB 绝不存储非静态数据。

8使用服务或者 Memcached 进行全局查询。

Memcached 经验

参见我以前的笔记:Facebook 的 Memcached 扩展经验。Facebook 对 Memcached 做了不小的改进。另外,顺便说一下,前两天 Memcached 刚在 1.2.7 发布几天之后又发布了新版本 1.2.8,修正了一些问题。

一个比较有价值的是关于个人页面数据的获取的描述。这个就完全是需要做单页面 Benchmark 的细致活儿了,可能还需要产品经理能够理解工程师的“抵抗”。

1获取个人信息数据:通过Cache,隐性通过用户所在的 DB 获取(基于 User-ID 获知 DB)

2获取朋友连接信息:通过Cache,否则的话通过DB(基于 User-ID 获知 DB)

3并行抓取每个朋友的 10个照片相册 ID ,从Cache抓取,如果失效,再从 DB 抓取(基于相册 ID)

4并行抓取最近相册中的照片数据

5运行PHP 把整个业务逻辑跑出来

6返回数据给用户

然后是对 Facebook 非 LAMP 体系的东西做了一番介绍,基本上也开源了。最后参考两个架构图。

Facebook NewsFeed 的架构示意图

Facebook_NewsFeed_Arch.png

Facebook 搜索功能的架构示意图

Facebook_Search_Arch.png

管中窥豹,盲人摸象而已。

3) 菜单调用大分类

Sidebar做好了,下面就让菜单上显示调用的大分类,调用 《?php wp_list_cats(’include=3,4,5,6′); ?》 这句函数即可。include=ID:是我们调用的大类,多个大类的ID号用英文“,”隔开。

4) 修改category.php

现在菜单上列出的是大分类调用,这样每个大分类下面就都会显示分类列表,但如果现在有的大分类不想显示分类列表,而显示该分类的第一篇文章,就需要来修改category.php文件了。思路和修改sidebar差不多。最初 category.php的结构应该如下:

  1. <?php get_header(); ?>
  2. <?php get_sidebar(); ?>
  3. <div id="content">
  4.   /*这里是调用分类的内容*/
  5. </div>
  6. <?php get_footer() ?>

现在因为需要点击大分类3、5、6时,页面上展示的是文章而非分类列表,所以在 《div id= ” content ” 》《/div》里添加一个if语句:

 

 

把以前的 /*这里是调用分类的内容*/

中。

 

而需要在结构中添加的是大分类3、5、6中

这一块的内容,代码如下

  1. <?php query_posts('name=production'); ?>
  2. <div class="post" >
  3.   <?php while (have_posts()) : the_post(); ?>
  4.     <h2><a href="<?php the_permalink()   ?>"   class="homesidetext1″ title="<?php the_title() ?>"> <?php the_title() ?> </a> </h2>
  5.     <div class="entry">
  6.       <?php  the_content('Read the rest of this entry »')?>
  7.     </div>
  8.   <?php endwhile;?>
  9. </div>

query_posts()是获取文章,其内参数可用 ’ p=文章ID ’ 或 ’ name=文章缩略名 ’ 来调用想放在大分类下首页的文章;

《h2》《/h2》里是文章名称;

the_content(); 是调用文章内容。

这样就可以在菜单中列出的大分类上点击,出来想要的文章或分类列表了。

以上几点就是企业级网站全站用WordPress搭建的大致思路。

二.注意事项

1、 这样的主题模板要基于WordPress的数据库,因为在写side时用到了分类的id号。

2、 正是因为第一条,这样的WordPress主题模板没有通用的,只能因企业而异。

3、 永久链接最好用 /%category%/%postname%/ (分类+文章缩略名)的形式,这样url地址会看起来更有结构性,看起来也更像企业或产品网站。