Linux下的负载均衡

2010年9月3日

一、目前网站架构一般分成负载均衡层、web层和数据库层,我其实一般还会多加一层,即文件服务器层,因为现在随着网站的PV越来越多,文件服务器的压力也越来越大;不过随着moosefs、DRDB+Heartbeat+NFS的日趋成熟,这问题也不大了.网站最前端的负载均衡层称之为Director,它起的是分摊请求的作用,最常见的就是轮询。

二、F5是通过硬件的方式来实现负载均衡,它较多应用于CDN系统,用于squid反向加速集群的负载均衡,是专业的硬件负载均衡设备,尤其适用于每秒新建连接数和并发连接数要求高的场景;LVS和Nginx是通过软件的方式来实现的,但稳定性也相当强悍,在处理高并发的情况也有相当不俗的表现。

三、Nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。

阅读全文…

Frank Linux/Unix相关, SNS社区

浅谈大型网站动态应用系统

2010年9月3日

动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。

大型动态应用系统平台主要是针对于大流量、高并发网站建立的底层系统架构。大型网站的运行需要一个可靠、安全、可扩展、易维护的应用系统平台做为支撑,以保证网站应用的平稳运行。

大型动态应用系统又可分为几个子系统:

1)Web前端系统

2)负载均衡系统

3)数据库集群系统

4)缓存系统

5)分布式存储系统

6)分布式服务器管理系统

7)代码分发系统

阅读全文…

Frank Linux/Unix相关, Network/Servers相关, PHP相关, SNS社区 ,

轻易在zend studio for eclipse中获得一个黑暗主题

2010年8月20日

嘿嘿!自从zend studio 6以后,其色彩配置一直都是一个噩梦,抛弃了zend studio 5.5的主题选项以后,让我们得到一个理想颜色的界面显得困难。今天就给大家呈现一个非常简单但是却非常好看的黑暗主题(dark theme),看图!

在我看来,这和NetBeans的Norway Today主题有些类似,非常养眼,非常环保,非常低碳,非常省电。。。。。那么这是怎么做到的呢?

咳咳,非常简单,因为有前辈帮助我们定制好了颜色搭配,因此,我们要做的仅仅是导入。导入步骤如下:
1、下载附件(点击这里下载),解压,得到一个epf文件
2、打开Zend Studio
3、从菜单:File| Import,然后选择General|preferences,Next,选择那个刚刚下载的epf文件,Import All,点击Finished.
4、大功告成,你就能得到和图中一样的主题啦.BTW:如果和图中的颜色有些出入,建议重启Zend Studio.

是的,一切就是这么简单!话说,Zend Studio准备什么时候出主题功能啊?最新版的zend studio 8.0我还没有下载来看,最近在忙一些自己的事情,时间不多,这不,趁中午上来水一个!

文中提到的附件在这里:dark-theme

注意注意:由于导入完之后,修改回来原先的默认主题比较麻烦,因此在导入本主题之前,强烈建议您导出一份原来的配置作为备份

Frank PHP相关 ,

面向 PHP 开发人员的 CouchDB 基础知识[转]

2010年6月23日

CouchDB又一种关系数据库.

如果您是位典型的 PHP 开发人员,就不难通过以往的项目得到这样一个结论:在多数(如果不是全部)情况下,为了进行动态数据处理,您都会让 PHP 与数据库后端进行对话;而在这些实例中,99% 的情况下使用的都是 MySQL。

如今,使用关系型数据库无可厚非。如果所处理的数据结构复杂,并具有多种关系,那么这么做是很合理的。您可以顺利地(或是不太顺利地,取决于 您对 SQL 的熟悉程度)进行对模式、数据关系、表等等的处理。

不过,您所从事的项目有时也会让您不经意间心生疑问:“为什么我要做所有这些工作?” 您所从事的这个项目包含了一些简单的或难以预测的数据 — 在不同的日子获得的数据字段可能不同甚至事务之间的数据字段都不尽相同。若是创建一个模式来预测将会出现什么数据字段,结果很可能会得到内含大量空字段的 表或大量的映射表。

常用缩略语

  • Ajax:异步 JavaScript + XML
  • API:应用程序编程接口
  • GUID:全局惟一标示符
  • HTTP:超文本标记语言
  • JSON:JavaScript 对象注释
  • REST:具象状态传输
  • SQL:结构化查询语言
  • UUID:通用惟一标识符

对于这些项目,您需要采用一种不同的方式 — 不涉及关系型数据库。在这些情况下,您需要的是一个基于文档的、没有模式的、具有扁平地址空间的特别数据库。简言之,您需要 Apache CouchDB。

阅读全文…

Frank Database相关, PHP相关

好东东与大家分享…

2010年6月17日

最近又回到在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

Frank Linux/Unix相关, PHP相关 , ,

又拍网架构中的分库设计[转]

2010年6月15日

又拍网是一个照片分享社区,从2005年6月至今积累了260万用户,1.1亿张照片,目前的日访问量为200多万。5年的发展历程里经历过许多起伏,也积累了一些经验,在这篇文章里,我要介绍一些我们在技术上的积累。

又拍网和大多数Web2.0站点一样,构建于大量开源软件之上,包括MySQLPHPnginxPythonmemcachedredisSolrHadoopRabbitMQ等等。又拍网的服务器端开发语言主要是PHPPython,其中PHP用于编写Web逻辑(通过HTTP和用户直接打交道), 而Python则主要用于开发内部服务和后台任务。在客户端则使用了大量的Javascript, 这里要感谢一下MooTools这个JS框架,它使得我们很享受前端开发过程。 另外,我们把图片处理过程从PHP进程里独立出来变成一个服务。这个服务基于nginx,但是是作为nginx的一个模块而开放REST API。

阅读全文…

Frank Database相关, Linux/Unix相关, PHP相关

15 个 JavaScript Web UI 库 [转]

2010年6月1日

几乎所有的富 Web 应用都基于一个或多个 Web UI 库或框架,这些 UI 库与框架极大地简化了开发进程,并带来一致,可靠,以及高度交互性的用户界面。本文介绍了 15 个非常强大的 JavaScript Web UI 库,非常适合各种各种规模的富 Web 应用的开发。

LivePipe

LivePipe UI基于Prototype Javascript 框架,包含了一整套经严格测试并高度可扩展的 UI 控件,拥有很好的文档,在不支持 JavaScript 的环境中,可以无缝降级使用。包括 Tab, 窗体,文本框,多选框,评分控件,进度条,滚动条,右键菜单等多种控件。

LivePipe首页与下载
LivePipe演示与示例

阅读全文…

Frank Ajax相关 ,

如何有效强奸百度排名

2010年5月6日

如何有效强奸百度,跟百度以硬碰硬,并以节约成本为基本,靠百度赚钱为本。加盟百度联盟,放个百度代码,重新提 交后就可以。一旦拥有优质优化模板,你可以用于电影,音乐,彩信,交友等大量娱乐站上,可为你后期提升带来极大的帮助。

首页

如何有效强奸百度,跟百度以硬碰硬,并以节约成本为基本,靠百度赚钱为本。更好地反百度,看完 此篇文章后,就无需再上什么fanbaidu.com了

一。瞒天过海

俗称隐藏内容,多用于BLOG论坛等 web1.5、web2.0平台,多数此类平台,都以正规话题为主题,有技术,文字,财经,网络安全,百科,教育,也有生活休闲,时尚百科,吃喝玩乐等, 在此类表面好似正规的平台中,时常夹杂一些刻意优化或者作弊手法的文章,让百度防不胜防。也可用于新站收录,现在一般电影站,彩信站,成人站,百度是不收 录的,就算你换了再多的米,也是无济于事,这时就可先放个正规内容的主页,再到http://www.baidu.com/search /url_submit.html登录网址,即可让百度收录,快则隔天,慢者不超一周。这里要着重讲一下百度的“三度检查”,很多新收录的站就因为不晓得 三度检查,而收录不久再度被封。百度在收录网站当天,会对网站进行首次人工检查,隔一周后,百度机器人已完成对网站的初步索引,会有二次人工检查,再隔两 周(即收录20天),百度已全面做好网站索引,把绝大部分网页都显示出来,会有第三次人工检查,简称百度三度检查。如果有心对百度动手脚的话,一定要懂得 忍住性子,逃过百度三度检查,坚决不放任何百度不喜欢的内容。之后你想放什么,百度都很少再会人工光顾了。我的一个站长朋友,用此法,成功让百度收录了近 十个充满成人电影词优化贴的BLOG,长达半年之久也依然收录。

阅读全文…

Frank 文章 ,

学习Ruby On Rails

2010年5月5日

最近在看Ruby On Rails,将一些相关的资源记录下来,方便有需要的朋友查找。

准备工作

1. 生产环境,集成套件来得快,推荐Instant Rails,SVN下载地址

svn checkout http://instantrails.rubyforge.org/svn/

svn checkout svn://rubyforge.org/var/svn/instantrails

(原地址:http://rubyforge.org/scm/?group_id=904)

2. IDE开发工具,重量级的用NetBean, 中量级用RadRails,轻量级编辑器用SciTE,如果你一直用Eclipse,也可去下载一个插件。

3. Rails开发,当然离不开API手册, 贴一个在线手册

http://api.rubyonrails.org/

到此学习Ruby On Rails的准备工作完成,可以开工了,体验Ruby On Rails的乐趣!

Redmine: 一款基于WEB项目管理的软件,是用Ruby On Rails框架开发的跨平台的项目管理软件.

Frank Ruby相关

通用权限系统设计[转]

2010年4月21日

通用权限系统设计是更换权限时候尽量不要涉及到代码修改

/*
03	*控制访问表
04	*  acl值    功能
05	*    1        需要登录
06	*    2         自身修改
07	*    4         需要组的权限集合
08	*    8         需要身份访问集合
09	*    16         身份被禁止访问
10	*    32         可访问的日期
11	*    64         可访问的周日
12	*    128         可访问的<span class="t_tag" onclick="tagshow(event)">时间</span>
13	*    256         输入密码才能访问
14	*    512         超级管理使用
15	*/
class aclACL extends acl {
    public $routername="acl";
    public $aclid='2';            //权限资源ID,如果登录人员没有拥用这个权限那么其(下面)它值都为0也不能访问
    public $roledisable=array(9); //禁用身份
    public $pwd=123456;           //密码访问 ACL-&gt;noPwd();
    public $date=array('begin'=&gt;0,'end'=&gt;0);   //允许日期之间
    public $hours=array('begin'=&gt;0,'end'=&gt;0);  //一日内小时区间
    public $weeks=array('begin'=&gt;0,'end'=&gt;0);  //一周内周一到周七
    public $aclgroup=array("create"=&gt;"4,45,8"); //create需要的组才能创建
    public $aclrole=array("all"=&gt;"6","create"=&gt;"7,95,78"); //create需要的角色才能创建,该组需要ID为6的角色才能访问
    public $acl=array("all"=&gt;0,
                      "index"=&gt;4,    //表列4表示检查组的组合
                      "delete"=&gt;1,   //删除只登录后删除,当然呆以设置为2或4
                      "update"=&gt;1,   //更新提交只能登录后才能更新,在这里做也防止非法、<span class="t_tag" onclick="tagshow(event)">post</span>,edit是不能访问显示编辑内容页
                      "createForm"=&gt;1, //也不能新提交<span class="t_tag" onclick="tagshow(event)">数据库</span>
                      "edit"=&gt;0,       //登录才显示编辑框
                      "show"=&gt;0,       //不用登录也能显示
                      "create"=&gt;1);    //创新表单需要登录操作 可以设置某个组才能创建 
 
}  
 
?&gt;

这个是要认证的文件模块是acl 每当用户访问acl模块时候,如果开启了认证那么会调用这个类 然后这个类会根据$acl 的all或index等值去做认证检查。 把这个文件放在router/acl目录里面就可以了,框架会自动认证如果用户没有相应的正向授权是无法访问相 应的限制的。 比如crud create方法 负向权限为17 那按照前面解释应该是 需要登录和组授权 就是$aclgroup 数组中create的4 45 8三个组, 首先会员没有登录将提示登录,如果会员不在这三个组是无法访问该方法的会提示没有权限。 目前router可以自己根据情况开启用acl控制 方法是在xxxxRouter.class.php文件中 添加 public function isAcl(){} 可以返回权限文件名比如返回curd,那么自动会调用curdACL.class.php类和名 curdRouter类设置验证


&lt;?php
class curdRouter extends controller{ 
 
    //返回 RBAC 控制访问列表验证类默认是跟router同名也就是curd
    //可以不写这个&lt;span href="tag.php?name=%BA%AF%CA%FD" onclick="tagshow(event)" class="t_tag"&gt;函数&lt;/span&gt;,那么不会启用通用权限系统。
    public function isAcl(){}
    public function index()
    {
       $booktype=M("booktype");
       $this-&gt;pager=C("pager");//取得分类
       $this-&gt;pager-&gt;setPager($booktype-&gt;count(),10,'page');//取得&lt;span href="tag.php?name=%CA%FD%BE%DD" onclick="tagshow(event)" class="t_tag"&gt;数据&lt;/span&gt;总数中,设置每页为10
       $this-&gt;assign("list",$booktype-&gt;orderby("bookid desc")-&gt;limit($this-&gt;pager-&gt;offset(),10)-&gt;fetch()-&gt;getRecord());
    }
 public function login(){  //登录&lt;span href="tag.php?name=%D2%B3%C3%E6" onclick="tagshow(event)" class="t_tag"&gt;页面&lt;/span&gt;
 
  }
  public function logout(){ //退出页面
 
      MY()-&gt;logout(); //退出登录
     redirect(url_for("guestbook/index"),"退出成功",3);
  }
  public function noAcl($mask) { //处理一下如果没有权限转向登录
      redirect(url_for("guestbook/login"),"需要登录",3);
  }
  public function loginpost() {  //登录提交地方 简单处理下登录认证
      if($_POST['author']=='queryphp'&amp;&amp;md5($_POST['pwd'])==md5('123456'))
    {
      MY()-&gt;setLogin(); //设置登录状态
      redirect(url_for("guestbook/adminlist"),"登录成功",3);
    }
    redirect(url_for("guestbook/login"),"登录失败",3);
  }
 
/////////////////////////////////////////////
缓存数据,登录时候恢复。
*/
 class mybase {
  public $options=array();
        public $uid;
  public $username;
  public $isadmin;
  public $role=array();  //我使用的身份
  public $group=array(); //我所在组
  public $grouprole=array(); //组的身份
  public $mygroupMar=array(); //我拥有管理的组
  public $mygroupOwn=array(); //属于我的组
  public $acl=array();       //主动控制表 groupacl和myacl控制权限集合 内容是rbac的rbacid
  public $groupacl=array();  //组拥用的控制权限
  public $myacl=array();     //我的身份拥用的控制权限
  public $loginfaild=0;      //登录失败次数 如果超过这个数应该禁止IP登录几分种
 
////////////////////////////////////////
//这是基本可以把myUser.class.php放在项目lib目录里面
////////////////////////////////////////

使用MY()函数就可以取得myUser了。


下载测试例子和chm手册
http://code.google.com/p/queryphp/downloads/list

原文

Frank Database相关, PHP相关