标签 SAE 下的文章

memcache对于网站架构的作用思考

最近思考一些网站架构的问题,这两天着重思考了下memcache对于网站架构的作用以及意义。

memcache作为一个很早就出现的网站架构的一环有很重要的历史意义,但随着技术的不断发展,各种不同的中间件在整个系统中的作用也在不断的发生着变化。

myspace曾经作为全世界流量最大的网站,而memcache在myspace的网站架构中起到了至关重要的作用,myspace采用了自行开发的memcache,每台服务器拥有至少64g的内存,全部用来做缓冲,每个服务器缓冲的内容完全相同,每个服务器之间采用类似连锁复制的概念来进行同步,每当一个服务器的cache发生了变化,会从该服务器开始顺序的触发复制更新到所有的cache服务器。

在myspace的架构中,memchache的作用毋庸置疑,没有cahce这一层,只靠sqlserver是无法支撑这么大的流量的,但我并不清楚myspace是在什么阶段引入的cache层,而且在myspace使用的是收费的sqlserver,每台高配的sqlserver需要巨额的授权费,每台8核的服务器,需要支付微软近rmb80万的授权费,这样引入cache层的另一个很重要的作用是减少成本。

现代的数据库服务器都自己带有cache层,同时绝大部分数据库的操作都完全是在内存中完成的,所以数据库的支持能力比起memchache来说,除了多了存储开销以外,就是数据的重新组织,但如果有足够的内存,而经常访问的sql比较固定来说,那么数据库本身的cache层可以部分替代memcache的功效。

无论如何,纯粹做cache的性能是要高于数据库服务器的,这点毋庸置疑,但是要考虑到引入cache层意味着给开发以及部署都带来了新的麻烦,这点是需要有得失权衡的,我思考的建议是,当网站的访问量并不那么大时,不需要引入memcache,直到访问量到达一定的级别,比如数据库服务器如果少于10台,完全没有必要引入memcache,因为此时运营的成本很低,而不考虑cache层无论是开发,部署还是运营都可以减少很大的便利。当访问量进一步增加,此时假设每增加一台数据库可以提供200的并发性能提升,而引入cache层可以提供300的并发提升,此时引入cache层将在性价比上得到体现,当数据库规模比如达到了100台的规模,此时同时维护100台数据库服务器会是一种很大的运营开销,而相对来说cache的运营维护要低很多,所以到不如使用60台cache,40台数据库的架构,如果数据库是收费的,则此时的成本优势则更明显。

综上所述,在网站的访问量规模不大的情况下,尽量不要引入cache层增加网站架构的复杂,带来不必要的运营,开发,测试的麻烦,当访问规模到达一定程度后再考虑使用memcache而提高性价比。

浅谈PaaS服务(xAE)发展缓慢的原因

最近在某社区网站上看到一位网友的吐槽——“免费云空间除了搭博客还能干点啥?”,看到这个问题,我的心情完全可以用五味杂陈来形容。一方面,功能强大的PaaS服务,竟被看做一个只能搭建博客的玩具,心里多少有些不舒服;另一方面,PaaS服务近年来鲜有大的发展,各方面依然有待提高,所以更多的是被作为免费空间或搭建个人博客使用。作为一个长期关注并看好PaaS服务的IT爱好者,看到PaaS的这种窘境,心中有种说不出的痛。那么,究竟是什么原因使得PaaS(xAE)服务发展缓慢?我认为是下面几个因素造成的。

第一、政策因素。有关政策规定,服务器位于国内的网站必须先备案才能上线运营。然而,国内各大PaaS服务商普遍面临的一个窘境就是,一方面用户有强烈的绑定独立域名的需求,而另一方面,受制于现有政策,PaaS服务商没有提供ICP备案的资格。

因此,大多数PaaS服务商选择了不支持独立域名绑定,或者在海外搭建反向代理来间接支持该功能。如此一来,或不能满足用户的基本需求,或访问缓慢,经常出现“连接超时”、“网络被重置”等网络错误,影响用户体验。即便是支持域名绑定到国内IP的服务商,也要求待绑定域名已经完成备案,从而导致了很多用户不得不先购买一个廉价的国内空间备案,再将域名绑回PaaS服务。即便这样操作具有一定的可行性,但也大大增加了使用PaaS服务的复杂程度;从另一方面讲,在用户将顶级域名解析到PaaS服务之后,同时也面临着因IP指向变更而导致备案被注销的危险。

假如备案政策能够对PaaS服务有所倾斜的话,那么许多要求不甚严格的中小网站(如企业宣传网站、个人博客)便可以直接迁移到PaaS云服务,既提高了网站性能,同时又降低使用成本(按需付费有利于中小网站)。

第二、兼容性不好。从xAE的始祖Google App Engine(GAE)开始,xAE便有一个“臭毛病”,就是要使用其提供的服务,则必须使用给定的API接口。如此一来,造成了非常严重的后果:

1.给用户程序的迁入造成了很大障碍。特殊的服务器环境使得绝大多数既有程序必须移植才能使用,既增加了程序的使用难度,降低了可用程序的丰富性,也加大了程序因移植而导致的不确定性和不稳定性。以新浪SAE的PHP环境为例,尽管PHP语言有很多现成的程序,但受限于本地I/O写操作,Discuz!、PHPWind等热门程序均不能直接使用;即便是最成熟的WordPress程序,也存在一些问题,远不如在虚拟主机上跑原生程序方便。

2.这也给用户程序的迁出造成了不便。在PaaS服务的稳定性还不能完全得到验证的情况下,保证应用可以在发生故障时迅速迁出就显得至关重要了。但是,由于程序严格依赖于PaaS环境,就使得迁移时不得不二次修改程序,增加了迁移难度;更糟糕的是,可能会因为迁出云平台有某一服务能力、而迁入云平台没有该能力导致服务不可用。以NoSQL数据库为例,新浪SAE使用的是KVDB,而百度BAE使用的则是MongoDB和Redis,一旦更换平台,势必造成很多麻烦。此外,当云平台储存的数据量稍大些时,数据的导出也是一个不小的问题。从迁出这个角度来看,我们也不难理解WordPress为什么会成为PaaS平台上最流行的程序了。

所以,我认为PaaS服务向虚拟主机看齐并不是一件十分丢人的事情,而是一件十分紧迫的事情,一件PaaS要腾飞必须做的事情。当然,看齐并不是要照抄,毕竟PaaS附带的众多服务是普通虚拟主机所难以企及的。我的建议是,借鉴新浪SAE的Wrappers设计,将MemCache、云存储等服务以文件夹映射的形式提供给开发者使用,尽量做到在为开发者提供优质、丰富服务的同时做到对其透明,这才是PaaS服务超越虚拟主机的根本。

第三、安全问题。PaaS服务因为资源共享而使得价格相对低廉,但资源共享的同时也带来了很大的安全问题,怎样保证其他应用在存在漏洞或遭受攻击时不致影响自身的稳定运行,依然是一个很大的挑战。另外,用户将最重要的程序和数据毫无保留地托付给PaaS服务商,服务商能否保证不会因内部机制而导致数据泄露,也是一个很大的问号。

第四、费用问题。目前PaaS服务普遍采用的是按需付费方式,尽管这对中小客户非常划算,但是一旦访问流量剧增,那按需付费的PaaS服务就远不如租用服务器划算了。另外,要是被恶意刷流量的话,那么支付的费用也是很可观的。

如果能够解决上述几个问题的话,我相信中小用户基本就可以放心地使用PaaS服务了。当然,对于有SEO需求的客户,最好还能考虑实现独立IP。总之,只要能够充分汲取虚拟主机的优点,同时充分发挥自身优势,那么代替虚拟主机不过是时间上的问题。而当PaaS逐渐获得人们的信任后,PaaS甚至可以取代SaaS的不小份额,毕竟配置服务器还是有很高的门槛的。

抛砖引玉,更期待您的精彩观点。

SAE中使用TmpFS功能

前一段时间做的项目需要提供导出CSV报表的功能,我用php直接拼出csv的文件流输出到页面,以提供csv文件的下载,功能在wamp环境中运行很正常,但是到了SAE平台却怎么都不好使。不管是改请求的响应头content-type 还是修改输出的文件格式,每次SAE都是把内容直接输出在了页面。因为SAE不支持通用方式的本地IO,于是想到了使用SAE提供的tmpFS功能。
TmpFS
因为平台安全性的考虑,SAE限制了用户对于本地IO的使用,但这样对于一些传统的PHP项目,也许带来了很多不便,因为它们都或多或少的有对本地 IO的操作,像Smarty的编译模板。为了解决这个问题,SAE提供了TmpFS功能。TmpFS允许开发者通过标准的IO函数临时读写本地IO,这样 方便了很多非SAE项目的移植。
特别注意:
临时文件的生存周期等同于PHP请求,也就是当该PHP请求完成执行时,所有写入TmpFS的临时文件都会被销毁
TmpFS是本地临时文件,不是共享存储,而SAE是全分布式环境,所以不同请求之间无法通过TmpFS共享操作文件
TmpFS操作的文件限于SAETMPPATH目录内,而不同App的SAETMPPATH是不同的
TmpFS的文件为纯内存存储
应用场景
用户的可持久化存储,请使用Storage或者MySQL存储,而缓存存储请使用Memcache服务存储,TmpFS是满足用户的一个请求的临时 文件的读写需求。比如抓取一个URL的图片,判断一下大小,再决定是否写入Storage。需要在本地生成文件的情况大致分以下几种:
缓存
配置文件
静态文件
临时文件
例子:
appname: saetest
appversion: 1
在一个php文件中:
file_put_contents( SAE_TMP_PATH . ‘/mycode.txt’ , ‘dummy test’ );
echo file_get_contents( SAE_TMP_PATH . ‘/mycode.txt’ ); // will echo dummy test;
如果是两个独立的php文件:
a.php
file_put_contents( SAE_TMP_PATH . ‘/mycode.txt’ , ‘dummy test’ );
b.php
echo file_get_contents( SAE_TMP_PATH . ‘/mycode.txt’ ); // 出错啦,文件已经不存在了…
说到这里,大家应该明白了, tmpFS中的文件在后台PHP代码执行完后就已经不存在了,囧。最后只好用了个折中的办法,临时把文件放在了SAE的永久化存储的Storage里面。不知看到这里的朋友有无更好的办法解决SAE中导出文件的问题,欢迎联系告知~

SAE未备案域名加速

众所周知,SAE对于未备案的域名比较的不仁慈,访问二级域名还好说,但对于大多数绑定顶级域名而又苦于备案的站长来说,不但得不到SAE的高速,反而变得更慢。虽然通过DNSPOD+加速乐/360DNS等免费资源可以实现双DNS加速,以及开启GZIP对网站改良的措施,对网站速度有了一定的改观,但毕竟使用的是海外代理,速度终究不理想。

网站的速度无论从SEO角度还是用户体验方面来说,都是一个网站不可忽视的要素,相信众多站长长期奔走于对此优化的道路上,由此也引出了一些极其优秀的缓存软件,诸如Hyper Cache、W3 Total Cache、Wp Super Cache这些插件在网站的优化上有着极其优秀的表现,然而对于驻扎在SAE上的用户来说,目录写入权限是不可改变的硬伤。所以这些所谓的加速神器也是爱莫能助了,加之SAE的优化方法少之又少,除了压缩和DNS外似乎别无他法。

本人也是经过长期致力于此,最终发现一个好方法,作为福利共享出来-SAE未备案域名加速插件:

这个插件的作用主要是用来加速SAE未备案域名的访问速度,用创新的方法实现加速:采用的策略是将资源文件通过SAE二级域名进行访问,而将网站主要文件通过主域名访问,进而加快了访问速度。这个插件最初是由SAE云商店用于加速wordpress的访问,当然在SAE上也是可以使用的,由于SAE和云商店环境的细微差异,所以在SAE只需要稍加修改即可使用,下面是已经修改的可以在SAE使用的插件源代码。

 

 

运行在SAE上的WordPress修改Storage地址的方法

找到wp-includes/functions.php在大约第1714行找到

1 $url 'http://' $_SERVER['HTTP_APPNAME'] . '-'.SAE_STORAGE.'.stor.sinaapp.com'.SAE_DIR;

‘.stor.sinaapp.com’替换为‘.stor.vipsinaapp.com’
保存,覆盖。
只是这样子还不行,原来的图片还是使用*.stor.sinaapp.com的地址,我们需要进去PHPMYADMIN,执行

1 UPDATE wp_posts SET post_content = replace(post_content, 'http://***.stor.sinaapp.com','http://***.stor.vipsinaapp.com')

其中:’http://***.stor.sinaapp.com’替换成你原来的Storage地址,’http://***.stor.vipsinaapp.com’替换成现在的Storage地址。
然后看看自己主题以及插件中是否调用了原来的Storage地址,修改过来即可。

2024年5月
« 2月    
 12345
6789101112
13141516171819
20212223242526
2728293031  

广告

分类目录

近期评论

标签

历史上的今天

文章归档