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

建站经验
建站经验:闲话:spam、帖吧、网摘、其他
建立一个完全不同的完美的图像搜索选择
减少和避免Google Adsense无效点击的建议
网站站长:网站改版应注意的事项
网站增加Blog,论关于Zblog的SEO优化
制作好网站 关于网站策划的一些观点
推广技巧:发帖推广注意的重要细节
从5个方面为你的2.0社区提高选择价值
SuSE Linux操作系统下Apache的设定方法
企业网站网站要弄清楚为什么要做网站优化?
网站让百度(Baidu)天天更新、收录的更多的方法
竞争对手的网站是如何得到较好的排名
网赚研究:由免费QQ所联想的一些知识
网站用户体验基础是网页文字优化
9月后百度收录新站潜规则及对应方法
忘记SEO,通过10个步骤网站照样取得成功
网站运营可能失败的7大原因
网站友情链接的一些知识
SEO常用的欺骗技术
与SEO相关的网页内容质量

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 77 ::
收藏到网摘: 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地址会看起来更有结构性,看起来也更像企业或产品网站。