2006-06-27

cdn

CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",使用户可 以就近取得所需的内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均 等原因所造成的用户访问网站响应速度慢的问题。
实际上,内容分发布网络(CDN)是一种新型的网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;而从广义的角度,CDN代 表了一种基于质量与秩序的网络服务模式。简单地说,内容发布网(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内 容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。总的来说,内 容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们 客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。据统计,采用CDN技术,能处理整个网站页面的 70%~95%的内容访问量,减轻服务器的压力,提升了网站的性能和可扩展性。
与目前现有的内容发布模式相比较,CDN强调了网络在内容发布中的重要性。通过引入主动的内容管理层的和全局负载均衡,CDN从根本上区别于传统的内容发 布模式。在传统的内容发布模式中,内容的发布由ICP的应用服务器完成,而网络只表现为一个透明的数据传输通道,这种透明性表现在网络的质量保证仅仅停留 在数据包的层面,而不能根据内容对象的不同区分服务质量。此外,由于IP网的"尽力而为"的特性使得其质量保证是依靠在用户和应用服务器之间端到端地提供 充分的、远大于实际所需的带宽通量来实现的。在这样的内容发布模式下,不仅大量宝贵的骨干带宽被占用,同时ICP的应用服务器的负载也变得非常重,而且不 可预计。当发生一些热点事件和出现浪涌流量时,会产生局部热点效应,从而使应用服务器过载退出服务。这种基于中心的应用服务器的内容发布模式的另外一个缺 陷在于个性化服务的缺失和对宽带服务价值链的扭曲,内容提供商承担了他们不该干也干不好的内容发布服务。
纵观整个宽带服务的价值链,内容提供商和用户位于整个价值链的两端,中间依靠网络服务提供商将其串接起来。随着互联网工业的成熟和商业模式的变革,在这条 价值链上的角色越来越多也越来越细分。比如内容/应用的运营商、托管服务提供商、骨干网络服务提供商、接入服务提供商等等。在这一条价值链上的每一个角色 都要分工合作、各司其职才能为客户提供良好的服务,从而带来多赢的局面。从内容与网络的结合模式上看,内容的发布已经走过了ICP的内容(应用)服务器和 IDC这两个阶段。IDC的热潮也催生了托管服务提供商这一角色。但是,IDC并不能解决内容的有效发布问题。内容位于网络的中心并不能解决骨干带宽的占 用和建立IP网络上的流量秩序。因此将内容推到网络的边缘,为用户提供就近性的边缘服务,从而保证服务的质量和整个网络上的访问秩序就成了一种显而易见的 选择。而这就是内容发布网(CDN)服务模式。CDN的建立解决了困扰内容运营商的内容"集中与分散"的两难选择,无疑对于构建良好的互联网价值链是有价 值的,也是不可或缺的最优网站加速服务。

memcached使用笔记(转贴)

memcached使用笔记(转贴)

关键词memcached使用笔记

memcached使用笔记(转贴)

关键词memcached

= memcached使用笔记 =
--------------------------------------------------------------------------------

作者: 来源: 添加时间: 2005-11-11 12:00
= 第一.memcached是什么? =
memcached 事实上是一个分布式的存储缓存系统,它能够用来存储各种格式的数据,起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓 存系统。但是它本质上仍然只是一个缓存系统。 它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端, 同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!
= 第二.memcached的安装: =
memcached安装前首先确定你的服务器上面安装了libevent库,下载地址( http://www.monkey.org/~provos/libevent/)。安装完了libevent,就可以直接安装memcached了, 下载它的源码( http://www.danga.com/memcached/download.bml)。

tar -zxvf memcached-1.1.11.tar.gz

cd memcached-1.1.11

./configure //这里必须先要configure, 它会检测你的系统情况,然后生成一个config.h文件和其它的几个文件,另外和其它的configure一样,你可以配置它的安装路径等等!默认应用程序安装在/usr/local/bin目录下!

make //编译

su //切换到root

make install //安装

exit //退出到普通用户!

这样就安装好了memcahced, 我们启动memcached就可使用这块缓存系统了! = 第三.memcached的使用: =

<1>. memcached的启动:

memcached的启动非常简单,它没有配置文件,只要配置好个别参数就可以使用了。下面我的一个实际应用的例子(具体说明一下):
memcached -d -m 64 -l 192.168.241.195 -p 11212

启 动的这个memcached为一个后台守护进程模式(-d), 然后缓存的空间为64M(-m), 监听(-l)服务器192.168.241.195的11212号端口(-p). 其实memcached的参数也非常的有限,我使用了memcached -h命令,它也就下面的几种参数格式:

-p port number to listen on

-l interface to listen on, default is INDRR_ANY

-d run as a daemon

-r maximize core file limit

-u assume identity of (only when run as root)

-m max memory to use for items in megabytes, default is 64 MB

-M return error on memory exhausted (rather than removing items)

-c max simultaneous connections, default is 1024

-k lock down all paged memory

-v verbose (print errors/warnings while in event loop)

-vv very verbose (also print client commands/reponses)

-h print this help and exit

-i print memcached and libevent license
<2>. memcached的客户应用连接
目 前memcached已经编写好了perl, php, phyton这几种语言的客户端连接类,要应用其他的语言进行连接也可以自己编写(根据它们的协议protocol.txt)。 我个人使用了一下php的客户端的应用, 非常的方便,但是起初我得php没有安装socket支持, 它的客户端连接类里面用到了socket函数,所以重新安装了php, 在configure的时候加入参数--enable-sockets, 就可以了!当然你的其他的需要的php支持一定别忘了同时也要装上哦! 接下来就是使用memcached了。这里是我的一个测试的程序(我在服务器上开了两个memcached应用, 两个端口):

require("MemCachedClient.inc.php"); //加载下载的客户端类函数

$optionsservers = array("192.168.241.195:11211");

$optionsdebug = false;

$memc = new MemCachedClient($options);

$myarr = array("one","two", 3);

$memc->set("key_one", $myarr);

$val = $memc->get("key_one");

echo $val[0]."\n"; // prints 'one'

echo $val[1]."\n"; // prints 'two'

echo $val[2]."\n"; // prints 3

echo "\n";
$optionsservers = array("192.168.241.195:11212");

new MemCachedClient($options);
$myarr = "dongdongdong";
$newmemc->set("key_one", $myarr);
$val = $newmemc->get("key_one");

echo $val."\n"; //prints 'dongdongdong'
?>
这个php的连接类定义了以下的函数:
MemCachedClient::MemCachedClient($options);
MemCachedClient::set_servers($servers);
MemCachedClient::get($key);
MemCachedClient::get_multi($keys);
MemCachedClient::set($key, $value, $exptime);
MemCachedClient::add($key, $value, $exptime);
MemCachedClient::replace($key, $value, $exptime);
MemCachedClient::delete($key, $time = 0);
MemCachedClient::incr($key[, $value]);
MemCachedClient::decr($key[, $value]);
MemCachedClient::disconnect_all();
MemCachedClient::set_debug($do_debug);
MemCachedClient::forget_dead_hosts();
MemCachedClient::error();
MemCachedClient::error_string();
MemCachedClient::error_clear();

也就是说它的缓存可以缓存各种格式的数据,并且保持原来的格式不变,包括文件,图形,以及数据库检索的结果!
其它的perl, python语言的应该和这个类似吧, 我没有试过!
= 第四.memcached的优点: =
就我个人认为, memcached的最大优点就是可以分布式的缓存数据。这也是它所解决的主要问题。
= 第五.memcached的应用展望: =
使 用了memcached以后, 我发现以前做过的很多的项目都可以应用它提高效率,包括最近做的“大单追踪”, “数码搜索”等等。当然既然memcahced是分布式的缓存系统,那么它就是建立了一个分布式的平台, 我们可以用它来进行分布式的记数, 因为对于一个键值key我们可以设置它的数值以及有效期在参数中,另外还可以重新设置这个键值的数值。 所以我总结了一下我们目前可以应用到的地方:
<1>.数据库检索结果的缓存,也就是说可以有机的和数据库结合起来应用,提高效率!我们可以这样来实现:

打开memcached服务器连接
编写sql语句, 同时算出它的一个hash值(也就是key值)
获取这个hash值的memcached保存数据!(get)
如果获取的这个hash值的数据存在。返回!
否则连接数据库查找。
把这个查找结果保存在memcached中(set),可以设置有效期

返回查找结果!

?>

<2>.分布式计数
<3>.分布式共享数据等等。
对memcached的实际使用以及性能分析,可以参考http://www.linuxjournal.com/article.php?sid=7451.html
= 实际使用: =
作 者在内网的192.168.241.195上面开了两个memcahced服务,端口分别为11211, 11212每个都只有64M的缓存区, 如果要测试的话可以直接用客户端程序连接这两个memcached服务,来保存自己的数据。并且根据实际可能要使用的空间,开辟新的缓存区的大小! 另外现在在编写原来的一个大单追踪的程序,现在http://192.168.241.109:5806/bill/memcached/all.php (原来的http://192.168.241.109:5806/bill/all.php ),想要测试它在实际应用的效果,。
= 对memcached的性能分析: =
编 写程序,1个对数据库直接连接访问读取数据n次,一个访问一次以后缓存到memcached中, 以后到memcached中获取数据100次, 统计它们的时间。由于实际环境的限制,现在总共对以下的几种情况进行了分析: 因为在32位架构的服务器上, 最多有4G的地址空间, 所以开辟每个虚拟存储器内存空间不要超过4G, 但是根据需要我们可以同时打开多个memcahced,从而解决的这方面的限制! memcached设置:memcached -d -m 2048 -p 9876
<1>对数据库在本地但是memcached不在本地的情况的时间统计

对数据库直接进行查询:(mysql机在本地)
bash-2.05$ time php notusememche.php 1>not.dong
real 0m14.897s
user 0m8.794s
sys 0m2.242s
使用memcache时候的结果:

bash-2.05$ time php usememche.php 1>usememche.dong
real 1m9.275s
user 0m29.797s
sys 0m2.469s
<2>对于数据库和memcached都在本地的测试!都是本地机(192.168.241.109):
I。onetime 使用memcached的结果:

bash-2.05$ time php usememche.php 1>usememcache.log
real 0m33.463s
user 0m28.900s
sys 0m3.483s
对数据库直接进行查询的结果:
bash-2.05$ time php notusememche.php 1>notusememche.log
real 0m13.812s
user 0m8.796s
sys 0m2.243s
II。secondtime 使用memcached的结果:
bash-2.05$ time php usememche.php 1>usememcache.log
real 0m31.770s
user 0m28.635s
sys 0m2.480s

对数据库直接进行查询的结果:
bash-2.05$ time php notusememche.php 1>notusememche.log

real 0m25.263s
user 0m8.997s
sys 0m2.287s
通过以上的测试,反而看不出来它真正能够提高效率的地方,每次测试它的效率总是比本地取数据库的效率还要低!但是memcached可以同时很方便的打开n多个,这是mysql所不能达到的!

另外,对于memcached, 还测试了当我们要传送的数据要比缓存大的时候的情况: 那么它会自动的把以前保存的数据给删除掉, 从而保存最新的数据!这个有利有弊吧,如果用它来备份数据的话,这样可能会产生数据丢失!

对memcached的实际使用以及性能分析,可以参考http://www.linuxjournal.com/article.php?sid=7451.html

2006-06-08

雅虎网站的工作流程

网络产品设计:产品制作人写产品计划书,确定新产品或新功能的市场意义和经济效益,提交部门审批,同意 后,确认需要设计的部分,和用户体验研究员 (user researcher),信息建构师(information architect),视觉设计师(visual designer)、user interface designer,互动设计师(interaction designer),web developer,工程师(engineer)一起讨论需要的支持,然后订出时间计划分工合作。一般是先由用户体验研究员作调查、分析后由信息建构师设 计产品架构,然后由互动设计师作出互动流程,之后交给视觉设计师(visual designer)和user interface designer作出视觉设计。然后web developer把设计通过编写程序(html, dhtml, JavaScript)等等再现出来,最后交给工程师。做完后用户体验研究员需要做用户测试,QA(Quality assurance) 需要测验这一产品的每一步骤,确认产品的使用质量,如果有问题需要让工程师或相关人员解决。

小型项目的工作流程局往往限于有限的人力和时 间,经常是短、平、快:拿到brief,进行设计,综合意见,投放到网站,总结效果。比如广告设计,一般是我组织市场部开会,集体出创意,然后大家达成一 致意见。决定设计主题后发到德国和法国取得相关的翻译。按照雅虎的广告标准,我设计制作出最终的广告,交到广告发行部定期发行。广告运行两周后,拿到数据 信息,根据浏览量(page impressions),点击率(CTR: Click Through Rate),和conversion rate来分析广告效果,总结经验。

总结起来就是:

    1. 产品制作人,写产品计划书。
2. 用户体验研究员,作调查分析。
3. 信息建构师,设计产品架构。
4. 互动设计师,作出互动流程。
5. 视觉设计师和用户界面设计师,作出页面视觉设计。
6. 前台工程师,前台开发。
7. 后台工程师,后台开发。
8. 用户体验研究员,做用户测试确保质量。
应该算是一个比较完善成熟的流程了,“信息建构(IA)”和“互动设计(ID)”明显处于很重要的位置。

谈谈个人感受,国内项目普遍流程就如bluedodo所说:策划+设计+制作+开发,普遍忽略的是第2, 3, 4,或者说是其他某个流程附带完成,第6前台开发也是只存在于大型正规公司,或者说有普遍进一步完善的趋势。

至 于UE, IA, ID 如何进行,我觉得没有绝对固定的模式,根据项目实际情况,关键在于团队的默契。不是说国内从业者不知道如何进行,而是根本没有这个习惯,把项目环节细分一 下,就很清楚各自职能了。这些流程的核心目的就是逐步保证产品质量,减少“前台开发”和“后台开发”的重复劳动。这方面国内人才确实极少,整体水平基本处 于幼稚阶段。

就Yahoo这个流程来看,应该是针对大型的应用型产品项目。看看人家在“确认设计需求”时,就需要几乎所有项目环节参与者进行综合讨论,让人狂汗不已;定开发计划都是大家讨论进行,而不是单方面强制决定,多么人性化啊。