一、目前网站架构一般分成负载均衡层、web层和数据库层,我其实一般还会多加一层,即文件服务器层,因为现在随着网站的PV越来越多,文件服务器的压力也越来越大;不过随着moosefs、DRDB+Heartbeat+NFS的日趋成熟,这问题也不大了.网站最前端的负载均衡层称之为Director,它起的是分摊请求的作用,最常见的就是轮询。
二、F5是通过硬件的方式来实现负载均衡,它较多应用于CDN系统,用于squid反向加速集群的负载均衡,是专业的硬件负载均衡设备,尤其适用于每秒新建连接数和并发连接数要求高的场景;LVS和Nginx是通过软件的方式来实现的,但稳定性也相当强悍,在处理高并发的情况也有相当不俗的表现。
三、Nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。
阅读全文…
Frank Linux/Unix相关, SNS社区 负载均衡
动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。
大型动态应用系统平台主要是针对于大流量、高并发网站建立的底层系统架构。大型网站的运行需要一个可靠、安全、可扩展、易维护的应用系统平台做为支撑,以保证网站应用的平稳运行。
大型动态应用系统又可分为几个子系统:
1)Web前端系统
2)负载均衡系统
3)数据库集群系统
4)缓存系统
5)分布式存储系统
6)分布式服务器管理系统
7)代码分发系统
阅读全文…
Frank Linux/Unix相关, Network/Servers相关, PHP相关, SNS社区 架构, 网站
最近又回到在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相关 IDE, 套件, 开发
又拍网是一个照片分享社区,从2005年6月至今积累了260万用户,1.1亿张照片,目前的日访问量为200多万。5年的发展历程里经历过许多起伏,也积累了一些经验,在这篇文章里,我要介绍一些我们在技术上的积累。
又拍网和大多数Web2.0站点一样,构建于大量开源软件之上,包括MySQL、PHP、nginx、Python、memcached、redis、Solr、Hadoop和RabbitMQ等等。又拍网的服务器端开发语言主要是PHP和Python,其中PHP用于编写Web逻辑(通过HTTP和用户直接打交道), 而Python则主要用于开发内部服务和后台任务。在客户端则使用了大量的Javascript, 这里要感谢一下MooTools这个JS框架,它使得我们很享受前端开发过程。 另外,我们把图片处理过程从PHP进程里独立出来变成一个服务。这个服务基于nginx,但是是作为nginx的一个模块而开放REST API。
阅读全文…
Frank Database相关, Linux/Unix相关, PHP相关 分库设计
Git 是 Linux Torvalds 为了帮助管理 Linux® 内核开发而开发的一个开放源码的版本控制软件。我们可以自己下载这个软件用于对内核的 hack 分析,或者用来管理自己的软件开发项目。本文将向您展示如何使用 Git 工具开始分析 Linux 。
在现代软件开发项目中,要成为一个有效的软件开发人员,我们必须能够与其他项目贡献者并行进行开发。源代码管理(SCM)系统不是什么新思想。为了 编写一些能够更快速、简单地开发以后软件项目的软件,已经进行了很多尝试。最新的源代码解决方案都包含了版本控制系统,它可以对源代码的修改进行回滚,从 而将有害的代码剔除出项目之外,或者简单地跟踪哪些人修改了代码的哪些行的内容。版本控制系统试图解决开发人员在试图同时对某个文件进行修改时所出现的冲 突问题,可以防止用户覆盖其他人所作的修改。源代码管理使用的很多流行解决方案都试图解决以前 SCM 解决方案中的失效问题。
集中化的版本控制系统通常采用两种方式:
- 有些提供了文件锁来防止多个用户的并行访问。这些系统对文件进行加锁,这样在某个时间只有一个开发人员对中心仓库具有写入权限。
- 另外一些工具,例如 CVS,允许多个开发人员同时对相同的文件进行编辑,并提供了一些机制稍后合并这些修改。
流行的版本控制系统包括:
- CVS
- Subversion
- Arch
- Bazaar
- BitKeeper
什么是 Git?
非常简单地说,Git 是 Linus Torvalds 最近实现的源代码管理软件。正如所提供的文档中说的一样,“Git 是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。”
Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如,X.org 最近就迁移到 Git 上来了,很多 Freedesktop.org 的项目也迁移到了 Git 上。
阅读全文…
Frank Linux/Unix相关, Network/Servers相关, 文章 git, 版本控制器
cwRsync是运用于windows 平台的数据同步机制,等于是Windows平台的 rsync 解决方案。cwRsync 打包了 rsync 和 cygwin 。
本站下载: cwrsync_404_installer
Frank Linux/Unix相关, Network/Servers相关 cwRsync, 数据同步
这里的大型网站架构只包括高互动性高交互性的数据型大型网站,基于大家众所周知的原因,我们就不谈新闻类和一些依靠HTML静态化就可以实现的架构 了,我们以高负载高数据交换高数据流动性的网站为例,比如海内,开心网等类似的web2.0系列架构。我们这里不讨论是PHP还是JSP或者.NET环 境,我们从架构的方面去看问题,实现语言方面并不是问题,语言的优势在于实现而不是好坏,不论你选择任何语言,架构都是必须要面对的。
这里讨论一下大型网站需要注意和考虑的问题
1、海量数据的处理
众所周知,对于一些相对小的站点来说,数据量并不是很大,select和update就可以解决我们面对的问题,本身负载量不是很大,最多再加几个 索引就可以搞定。对于大型网站,每天的数据量可能就上百万,如果一个设计不好的多对多关系,在前期是没有任何问题的,但是随着用户的增长,数据量会是几何 级的增长的。在这个时候我们对于一个表的select和update的时候(还不说多表联合查询)的成本的非常高的。
2、数据并发的处理
在一些时候,2.0的CTO都有个尚方宝剑,就是缓存。对于缓存,在高并发高处理的时候也是个大问题。在整个应用程序下,缓存是全局共享的,然而在 我们进行修改的时候就,如果两个或者多个请求同时对缓存有更新的要求的情况下,应用程序会直接的死掉。这个时候,就需要一个好的数据并发处理策略以及缓存 策略。
另外,就是数据库的死锁问题,也许平时我们感觉不到,死锁在高并发的情况下的出现的概率是非常高的,磁盘缓存就是一个大问题。
3、文件存贮的问题
对于一些支持文件上传的2.0的站点,在庆幸硬盘容量越来越大的时候我们更多的应该考虑的是文件应该如何被存储并且被有效的索引。常见的方案是对文 件按照日期和类型进行存贮。但是当文件量是海量的数据的情况下,如果一块硬盘存贮了500个G的琐碎文件,那么维护的时候和使用的时候磁盘的Io就是一个 巨大的问题,哪怕你的带宽足够,但是你的磁盘也未必响应过来。如果这个时候还涉及上传,磁盘很容易就over了。
也许用raid和专用存贮服务器能解决眼下的问题,但是还有个问题就是各地的访问问题,也许我们的服务器在北京,可能在云南或者新疆的访问速度如何 解决?如果做分布式,那么我们的文件索引以及架构该如何规划。
所以我们不得不承认,文件存贮是个很不容易的问题
阅读全文…
Frank Database相关, Linux/Unix相关, Network/Servers相关, 文章 平台架构
转一篇,方便查询用。
篇一:
下面用自启动apache为例;
自启动脚本:
/usr/local/apache2/bin;
./apachectl start
文件位于/etc/rc.d/init.d下,名为apached, 注意要可执行.
#chmod +x /etc/rc.d/init.d/apached //设置文件的属性为可执行
#ln -s /etc/rc.d/init.d/apached /etc/rc3.d/S90apache //建立软连接,快捷方式
#ln -s /etc/rc.d/init.d/apached /etc/rc0.d/K20apache
在Red Hat Linux中自动运行程序
1.开机启动时自动运行程序
Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。例如:编辑 /etc/rc.d/rc.local 文件,在文件最末加上一行”xinit”或”startx”,可以在开机启动后直接进入X-Window。
2.登录时自动运行程序
用户登录时,bash首先自动执行系统管理员建立的全局登录script :/etc/profile。然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、 /.profile,但只执行最先找到的一个。
因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。
阅读全文…
Frank Linux/Unix相关, 文章 Linux, 自启动
我的本本触板一直没有单击双击,感觉实不方便,查了一把,过程太复杂,问了同事,秒秒钟搞定,汗!现在记下来,方便需要的朋友。我的系统是Fedora 10.
具体操作:
建立一个文件/etc/hal/fdi/policy/11-x11-synaptics.fdi, 内容如下:
synaptics
true
true
1
SHMConfig值设置为True, 是允许设置动态调整, VertEdgeScroll为True, 启用上下滚动调, TapButton1为1, 指将单击触摸板理解为鼠标左键单机.
不需要在Xorg.conf中做任何修改, 事实上, 自Xorg 7以来, 在Xorg.conf中很多需要手工配置的内容, 都可以自动探测了, 省去了不少配置上的麻烦. 上面的方法也是通过修改HAL探测硬件的方式实现了对上下滚动和点击的支持. 我使用的Xorg.conf如下:
Section “ServerFlags”
Option ”AIGLX” “off”
EndSection
Section “Device”
Identifier ”Generic Video Card”
Driver ”radeon”
# Option “AccelMethod” “EXA”
# Option ”DRI”
# BusID “PCI:1:5:0″
EndSection
#Section “DRI”
# Mode 0666
#EndSection
#Section “Extensions”
# Option “XVideo” “Enable”
# Option ”Composite” “Disable”
#EndSection
不包括注释, 真正起作用的部分, 不到10行, 和最初将近100行的配置文件相比, 确实简单了不少.
要想不重启HAL和Xserver, 验证配置, 需要使用到synclient这个小工具. 比如关闭触摸版用
synclient TouchpadOff=1
开启触摸板使用
synclient TouchpadOff=0
这对于经常打字, 手又放的比较低, 容易碰到触摸板的同学, 会非常有用.
synaptics支持的所有选项可以在其手册页中看到, 也可以用synclient -l 看到.
Frank Linux/Unix相关, 文章 Linux, 单击双击
这样的问题在PHP v5.3.0以下版本中不会出现。
错误信息:“[2002] 无效的参数 trying to connect via unix SQLSTATE[HY000] [2002] ”
搜索了一把,类似的解决方案不多,总结了下,大致有两种方案:
第一种方法:
原因求证:php5.3内置驱动有问题。开始使用php5.3内置mysqlnd编译:
–with-mysql=mysqlnd \
–with-mysqli=mysqlnd \
–with-pdo-mysql=mysqlnd \
解决办法:把编译选项改为:
–with-mysql=/path/to/mysql \
–with-pdo-mysql=/path/to/mysql \
–with-mysqli=/path/to/mysql/bin/mysql_config \
第二种方法:
在运行环境: xampp for linux ,
将配置文件的 ‘dbHost’=>’localhost’, 改成 ‘dbHost’=>’127.0.0.1
问题就解决了。
Frank Database相关, Linux/Unix相关 mysql报错, pdo, PHP
最新评论