<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Frank's Blog</title>
	<atom:link href="http://www.isn8.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.isn8.com/blog</link>
	<description>Note &#38; Data Space</description>
	<pubDate>Fri, 03 Sep 2010 08:03:23 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7-beta3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Linux下的负载均衡</title>
		<link>http://www.isn8.com/blog/?p=870</link>
		<comments>http://www.isn8.com/blog/?p=870#comments</comments>
		<pubDate>Fri, 03 Sep 2010 08:03:23 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
		
		<category><![CDATA[Linux/Unix相关]]></category>

		<category><![CDATA[SNS社区]]></category>

		<category><![CDATA[负载均衡]]></category>

		<guid isPermaLink="false">http://www.isn8.com/blog/?p=870</guid>
		<description><![CDATA[一、目前网站架构一般分成负载均衡层、web层和数据库层，我其实一般还会多加一层，即文件服务器层，因为现在随着网站的PV越来越多，文件服务器的压力也越来越大；不过随着moosefs、DRDB+Heartbeat+NFS的日趋成熟，这问题也不大了.网站最前端的负载均衡层称之为Director，它起的是分摊请求的作用，最常见的就是轮询。
二、F5是通过硬件的方式来实现负载均衡，它较多应用于CDN系统，用于squid反向加速集群的负载均衡，是专业的硬件负载均衡设备，尤其适用于每秒新建连接数和并发连接数要求高的场景；LVS和Nginx是通过软件的方式来实现的，但稳定性也相当强悍，在处理高并发的情况也有相当不俗的表现。
三、Nginx对网络的依赖较小，理论上只要ping得通，网页访问正常，nginx就能连得通，nginx同时还能区分内外网，如果是同时拥有内外网的节点，就相当于单机拥有了备份线路；lvs就比较依赖于网络环境，目前来看服务器在同一网段内并且lvs使用direct方式分流，效果较能得到保证。

四、目前较成熟的负载均衡高可用技术有LVS+Keepalived、Nginx+Keepalived，以前Nginx没有成熟的双机备份方案，但通过shell脚本监控是可以实现的，有兴趣的可具体参考我在51cto上的项目实施方案；另外，如果考虑Nginx的负载均衡高可用，也可以通过DNS轮询的方式来实现，有兴趣的可以参考张宴的相关文章。
五、集群是指负载均衡后面的web集群或tomcat集群等，但现在的集群意义泛指了整个系统架构，它包括了负载均衡器以及后端的应用服务器集群等，现在许多人都喜欢把Linux集群指为LVS，但我觉得严格意义上应该区分开。
六、负载均衡高可用中的高可用指的是实现负载均衡器的HA，即一台负载均衡器坏掉后另一台可以在&#60;1s秒内切换，最常用的软件就是Keepalived和Heatbeat，成熟的生产环境下的负载均衡器方案有Lvs+Keepalived、Nginx+Keepalived。
七、LVS的优势非常多：①抗负载能力强；②工作稳定(因为有成熟的HA方案)；③无流量；④基本上能支持所有的应用，基于以上的优点，LVS拥有不少的粉丝；但世事无绝对，LVS对网络的依赖性太大了，在网络环境相对复杂的应用场景中，我不得不放弃它而选用Nginx。
八、Nginx对网络的依赖性小，而且它的正则强大而灵活，强悍的特点吸引了不少人，而且配置也是相当的方便和简约，小中型项目实施中我基本是考虑它的；当然，如果资金充足，F5是不二的选择。
九、大型网站架构中其实可以结合使用F5、LVS或Nginx，选择它们中的二种或三种全部选择；如果因为预算的原因不选择F5，那么网站最前端的指向应该是LVS，也就是DNS的指向应为lvs均衡器，lvs的优点令它非常适合做这个任务。重要的ip地址，最好交由lvs托管，比如数据库的ip、webservice服务器的ip等等，这些ip地址随着时间推移，使用面会越来越大，如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的。
十、VIP地址是Keepalived虚拟的一个IP，它是一个对外的公开IP，也是DNS指向的IP；所以在设计网站架构时，你必须向你的IDC多申请一个对外IP
十一、在实际项目实施过程中发现，Lvs和Nginx对https的支持都非常好，尤其是LVS，相对而言处理起来更为简便。
十二、在LVS+Keepalived及Nginx+Keepalived的故障处理中，这二者都是很方便的；如果发生了系统故障或服务器相关故障，即可将DNS指向由它们后端的某台真实web，达到短期处理故障的效果，毕竟广告网站和电子商务网站的PV就是金钱，这也是为什么要将负载均衡高可用设计于此的原因；大型的广告网站我就建议直接上CDN系统了。
十三、现在Linux集群都被大家神话了，其实这个也没多少复杂；关键看你的应用场景，哪种适用就选用哪种，Nginx和LVS、F5都不是神话，哪种方便哪种适用就选用哪种。
十四、另外关于session共享的问题，这也是一个老生长谈的问题了；Nginx可以用ip_hash机制来解决session的问题，而F5和LVS都有会话保持机制来解决这个问题，此外，还可以将session写进数据库，这也是一个解决session共享的好办法，当然这个也会加重数据库的负担，这个看系统架构师的取舍了。
十五、我现在目前维护的电子商务网站并发大约是1000左右，以前的证券资讯类网站是100左右，大型网上广告大约是3000，我感觉web层的并发越来越不是一个问题；现在由于服务器的强悍，再加上Nginx作web的高抗并发性，web层的并发并不是什么大问题；相反而言，文件服务器层和数据库层的压力是越来越大了，单NFS不可能胜任目前的工作，现在好的方案是moosefs和DRDB+Heartbeat+NFS；而我喜欢的Mysql服务器，成熟的应用方案还是主从，如果压力过大，我不得不选择oracle的RAC双机方案。
十六、现在受张宴的影响，大家都去玩Nginx了(尤其是作web)，其实在服务器性能优异，内存足够的情况下，Apache的抗并发能力并不弱，整个网站的瓶颈应该还是在数据库方面；我建议可以双方面了解Apache和Nginx，前端用Nginx作负载均衡，后端用Apache作web，效果也是相当的好。
十七、Heartbeat的脑裂问题没有想象中那么严重，在线上环境可以考虑使用；DRDB+Heartbeat算是成熟的应用了，建议掌握。我在相当多的场合用此组合来替代EMC共享存储，毕竟30万的价格并不是每个客户都愿意接受的。
十八、无论设计的方案是多么的成熟，还是建议要配置Nagios监控机来实时监控我们的服务器情况；邮件和短信报警都可以开启，毕竟手机可以随身携带嘛;有条件的还可以购买专门的商业扫描网站服务，它会每隔一分钟扫描你的网站，如果发现没有alive会向你的邮件发警告信息或直接电话联系。
十九、至少网站的安全性问题，我建议用硬件防火墙，比较推荐的是华赛三层防火墙+天泰web防火墙，DDOS的安全防护一定要到位；Linux服务器本身的iptables和SElinux均可关闭，当然，端口开放越少越好。
]]></description>
		<wfw:commentRss>http://www.isn8.com/blog/?feed=rss2&amp;p=870</wfw:commentRss>
		</item>
		<item>
		<title>浅谈大型网站动态应用系统</title>
		<link>http://www.isn8.com/blog/?p=857</link>
		<comments>http://www.isn8.com/blog/?p=857#comments</comments>
		<pubDate>Fri, 03 Sep 2010 04:03:22 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
		
		<category><![CDATA[Linux/Unix相关]]></category>

		<category><![CDATA[Network/Servers相关]]></category>

		<category><![CDATA[PHP相关]]></category>

		<category><![CDATA[SNS社区]]></category>

		<category><![CDATA[架构]]></category>

		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.isn8.com/blog/?p=857</guid>
		<description><![CDATA[动态应用，是相对于网站静态内容而言，是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件，比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。
大型动态应用系统平台主要是针对于大流量、高并发网站建立的底层系统架构。大型网站的运行需要一个可靠、安全、可扩展、易维护的应用系统平台做为支撑，以保证网站应用的平稳运行。
大型动态应用系统又可分为几个子系统：
1）Web前端系统
2）负载均衡系统
3）数据库集群系统
4）缓存系统
5）分布式存储系统
6）分布式服务器管理系统
7）代码分发系统

Web前端系统
结构图：

为了达到不同应用的服务器共享、避免单点故障、集中管理、统一配置等目的，不以应用划分服务器，而是将所有服务器做统一使用，每台服务器都可以对多个应用提供服务，当某些应用访问量升高时，通过增加服务器节点达到整个服务器集群的性能提高，同时使他应用也会受益。该Web前端系统基于Apache/Lighttpd/Eginx等的虚拟主机平台，提供PHP程序运行环境。服务器对开发人员是透明的，不需要开发人员介入服务器管理
负载均衡系统
结构图：

负载均衡系统分为硬件和软件两种。硬件负载均衡效率高，但是价格贵，比如F5等。软件负载均衡系统价格较低或者免费，效率较硬件负载均衡系统低，不过对于流量一般或稍大些网站来讲也足够使用，比如lvs, nginx。大多数网站都是硬件、软件负载均衡系统并用。
数据库集群系统
结构图：

由于Web前端采用了负载均衡集群结构提高了服务的有效性和扩展性，因此数据库必须也是高可靠的，才能保证整个服务体系的高可靠性，如何构建一个高可靠的、可以提供大规模并发处理的数据库体系？
我们可以采用如上图所示的方案：
1) 使用 MySQL 数据库，考虑到Web应用的数据库读多写少的特点，我们主要对读数据库做了优化，提供专用的读数据库和写数据库，在应用程序中实现读操作和写操作分别访问不同的数据库。
2) 使用 MySQL Replication 机制实现快速将主库（写库）的数据库复制到从库（读库）。一个主库对应多个从库，主库数据实时同步到从库。
3) 写数据库有多台，每台都可以提供多个应用共同使用，这样可以解决写库的性能瓶颈问题和单点故障问题。
4) 读数据库有多台，通过负载均衡设备实现负载均衡，从而达到读数据库的高性能、高可靠和高可扩展性。
5) 数据库服务器和应用服务器分离。
6) 从数据库使用BigIP做负载均衡。
缓存系统
结构图：

缓存分为文件缓存、内存缓存、数据库缓存。在大型Web应用中使用最多且效率最高的是内存缓存。最常用的内存缓存工具是Memcached。使用正确的缓存系统可以达到实现以下目标：
1）使用缓存系统可以提高访问效率，提高服务器吞吐能力，改善用户体验。
2）减轻对数据库及存储集服务器的访问压力。
3）Memcached服务器有多台，避免单点故障，提供高可靠性和可扩展性，提高性能。
分布式存储系统
结构图：

Web系统平台中的存储需求有下面两个特点：
1) 存储量很大，经常会达到单台服务器无法提供的规模，比如相册、视频等应用。因此需要专业的大规模存储系统。
2) 负载均衡cluster中的每个节点都有可能访问任何一个数据对象，每个节点对数据的处理也能被其他节点共享，因此这些节点要操作的数据从逻辑上看只能是一个整体，不是各自独立的数据资源。
因此高性能的分布式存储系统对于大型网站应用来说是非常重要的一环。（这个地方需要加入对某个分布式存储系统的简单介绍。）
分布式服务器管理系统
结构图：
 
随着网站访问流量的不断增加，大多的网络服务都是以负载均衡集群的方式对外提供服务，随之集群规模的扩大，原来基于单机的服务器管理模式已经不能够满足我们的需求，新的需求必须能够集中式的、分组的、批量的、自动化的对服务器进行管理，能够批量化的执行计划任务。
在分布式服务器管理系统软件中有一些比较优秀的软件，其中比较理想的一个是Cfengine。它可以对服务器进行分组，不同的分组可以分别定制系统配置文件、计划任务等配置。它是基于C/S 结构的，所有的服务器配置和管理脚本程序都保存在Cfengine Server上，而被管理的服务器运行着 Cfengine Client 程序，Cfengine Client通过SSL加密的连接定期的向服务器端发送请求以获取最新的配置文件和管理命令、脚本程序、补丁安装等任务。
有了Cfengine这种集中式的服务器管理工具，我们就可以高效的实现大规模的服务器集群管理，被管理服务器和 Cfengine Server 可以分布在任何位置，只要网络可以连通就能实现快速自动化的管理。
代码发布系统
结构图：

随着网站访问流量的不断增加，大多的网络服务都是以负载均衡集群的方式对外提供服务，随之集群规模的扩大，为了满足集群环境下程序代码的批量分发和更新，我们还需要一个程序代码发布系统。
这个发布系统可以帮我们实现下面的目标：
1) 生产环境的服务器以虚拟主机方式提供服务，不需要开发人员介入维护和直接操作，提供发布系统可以实现不需要登陆服务器就能把程序分发到目标服务器。
2) 我们要实现内部开发、内部测试、生产环境测试、生产环境发布的4个开发阶段的管理，发布系统可以介入各个阶段的代码发布。
3) 我们需要实现源代码管理和版本控制，SVN可以实现该需求。
这里面可以使用常用的工具Rsync，通过开发相应的脚本工具实现服务器集群间代码同步分发。
]]></description>
		<wfw:commentRss>http://www.isn8.com/blog/?feed=rss2&amp;p=857</wfw:commentRss>
		</item>
		<item>
		<title>轻易在zend studio for eclipse中获得一个黑暗主题</title>
		<link>http://www.isn8.com/blog/?p=846</link>
		<comments>http://www.isn8.com/blog/?p=846#comments</comments>
		<pubDate>Fri, 20 Aug 2010 09:51:09 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
		
		<category><![CDATA[PHP相关]]></category>

		<category><![CDATA[zend]]></category>

		<category><![CDATA[主题]]></category>

		<guid isPermaLink="false">http://www.isn8.com/blog/?p=846</guid>
		<description><![CDATA[嘿嘿！自从zend studio 6以后，其色彩配置一直都是一个噩梦，抛弃了zend studio 5.5的主题选项以后，让我们得到一个理想颜色的界面显得困难。今天就给大家呈现一个非常简单但是却非常好看的黑暗主题(dark theme)，看图！

在我看来，这和NetBeans的Norway Today主题有些类似，非常养眼，非常环保，非常低碳，非常省电。。。。。那么这是怎么做到的呢？
咳咳，非常简单，因为有前辈帮助我们定制好了颜色搭配，因此，我们要做的仅仅是导入。导入步骤如下：
1、下载附件（点击这里下载），解压，得到一个epf文件
2、打开Zend Studio
3、从菜单：File&#124; Import,然后选择General&#124;preferences，Next,选择那个刚刚下载的epf文件，Import All，点击Finished.
4、大功告成，你就能得到和图中一样的主题啦.BTW:如果和图中的颜色有些出入，建议重启Zend Studio.
是的，一切就是这么简单！话说，Zend Studio准备什么时候出主题功能啊？最新版的zend studio 8.0我还没有下载来看，最近在忙一些自己的事情，时间不多，这不，趁中午上来水一个！
文中提到的附件在这里：dark-theme
注意注意：由于导入完之后，修改回来原先的默认主题比较麻烦，因此在导入本主题之前，强烈建议您导出一份原来的配置作为备份。
]]></description>
		<wfw:commentRss>http://www.isn8.com/blog/?feed=rss2&amp;p=846</wfw:commentRss>
		</item>
		<item>
		<title>面向 PHP 开发人员的 CouchDB 基础知识[转]</title>
		<link>http://www.isn8.com/blog/?p=833</link>
		<comments>http://www.isn8.com/blog/?p=833#comments</comments>
		<pubDate>Wed, 23 Jun 2010 02:56:09 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
		
		<category><![CDATA[Database相关]]></category>

		<category><![CDATA[PHP相关]]></category>

		<category><![CDATA[couchDB]]></category>

		<guid isPermaLink="false">http://www.isn8.com/blog/?p=833</guid>
		<description><![CDATA[CouchDB又一种关系数据库.
如果您是位典型的 PHP                  开发人员，就不难通过以往的项目得到这样一个结论：在多数（如果不是全部）情况下，为了进行动态数据处理，您都会让                 PHP 与数据库后端进行对话；而在这些实例中，99% 的情况下使用的都是 MySQL。
如今，使用关系型数据库无可厚非。如果所处理的数据结构复杂，并具有多种关系，那么这么做是很合理的。您可以顺利地（或是不太顺利地，取决于 您对 SQL 的熟悉程度）进行对模式、数据关系、表等等的处理。
不过，您所从事的项目有时也会让您不经意间心生疑问：“为什么我要做所有这些工作？” 您所从事的这个项目包含了一些简单的或难以预测的数据  —  在不同的日子获得的数据字段可能不同甚至事务之间的数据字段都不尽相同。若是创建一个模式来预测将会出现什么数据字段，结果很可能会得到内含大量空字段的 表或大量的映射表。

常用缩略语


Ajax：异步 JavaScript +     [...]]]></description>
		<wfw:commentRss>http://www.isn8.com/blog/?feed=rss2&amp;p=833</wfw:commentRss>
		</item>
		<item>
		<title>好东东与大家分享&#8230;</title>
		<link>http://www.isn8.com/blog/?p=826</link>
		<comments>http://www.isn8.com/blog/?p=826#comments</comments>
		<pubDate>Wed, 16 Jun 2010 18:16:31 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
		
		<category><![CDATA[Linux/Unix相关]]></category>

		<category><![CDATA[PHP相关]]></category>

		<category><![CDATA[IDE]]></category>

		<category><![CDATA[套件]]></category>

		<category><![CDATA[开发]]></category>

		<guid isPermaLink="false">http://www.isn8.com/blog/?p=826</guid>
		<description><![CDATA[最近又回到在Ubuntu下开发，发现Zend的支持实在太差劲，问题一堆，用起来影响心情，就Go了一把，无意中发现几个好东东， 个人感觉不错，有兴趣的朋友下载试试.
1. 一个轻量级的PHP IDE工具，安装后简单使用了下，感觉 不错。
Dev-php,比起Editplus在开发的时候要强，当然各有强项，大小安装后2M多点，可惜只能在Window下用。
2. 一个集成环境套件，这个套件不同一般的套件，是需要自己来编译的（一键搞定），用它自带的“脚本bash”安装，目前只发现支持Linux, 名称：Lnmpp
3. 一个代码在线编辑器（无需安装，浏览器运行），可创建工程，可连接FTP {Ajax的操作页面，有点像EXTjs}。
地址：http://phpanywhere.net/
下载：devphp2_4_0_338
]]></description>
		<wfw:commentRss>http://www.isn8.com/blog/?feed=rss2&amp;p=826</wfw:commentRss>
		</item>
	</channel>
</rss>
