serv-u 无法开始服务器!服务器执行缺少?
无法开始服务器!服务器执行缺少!
点击连接时提示:
无法连接到服务器!
127.0.0.1端口43958
已经在serv-u的文件夹属性里的安全选项卡上加上system(或其它操作用户)的完全控制权限.
还是没有用呀?急!! 解决办法:
将FTP的目录添加上administrators组权限,就可以了,serv-u的文件夹属性里的安全选项卡上加上system(或其它操作用户)的完全控制权限
By admin
read more无法开始服务器!服务器执行缺少!
点击连接时提示:
无法连接到服务器!
127.0.0.1端口43958
已经在serv-u的文件夹属性里的安全选项卡上加上system(或其它操作用户)的完全控制权限.
还是没有用呀?急!! 解决办法:
将FTP的目录添加上administrators组权限,就可以了,serv-u的文件夹属性里的安全选项卡上加上system(或其它操作用户)的完全控制权限
By admin
read more以前用windows的时候,发现直接修改my.ini文件里的datadir变量就可以了,现在发现在FreeBSD下直接修改这个变量值不行的,进到mysql后,用命令mysql>show variables like ‘datadir’ 查看的时候还是默认的/var/db/mysql这个路径.在网上查了一些资料,正解方法如下.
数据目录为:/usr/local/mysql
运行/usr/local/bin/mysql_install_db –datadir=/usr/local/mysql –user=mysql
vi /etc/rc.conf,加入 mysql_enable=”YES”
mysql_dbdir=”/usr/local/mysql”
启动myql,现在原来账户的信息全部丢失.(不知道如果把原来的数据全部复制到这里行不行的,没有测试!)
/usr/local/bin/mysqladmin -u root password ‘密码’
#mysql -u root -p
进入看一下
show variables like “datadir”
OK, 出现datadir=/usr/local/mysql
By admin
read more方法一、robots Meta标签
robots.txt是放在网站中,文件级的网络蜘蛛授权;而robots Meta标签是放在网页中,一般用于部分网页需要单独设置的情况下。两者的功能是一样的。 Meta robots标签必须放在和之间,格式:
content中的值决定允许抓取的类型,必须同时包含两个值:是否允许索引(index)和是否跟踪链接(follow,也可以理解为是否允许沿着网页中的超级链接继续抓取)。共有4个参数可选,组成4个组合: index,follow:允许抓取本页,允许跟踪链接。 index,nofollow:允许抓取本页,但禁止跟踪链接。 noindex,follow:禁止抓取本页,但允许跟踪链接。 noindex,nofllow:禁止抓取本页,同时禁止跟踪本页中的链接。 以上1和4还有另一种写法: index,follow可以写成all,如:
noindex,nofollow可以写成none,如:
方法二、创建robots.txt文本 对于robots.txt文本的相关概念或者是协议我就不提了,主要是直接告诉大家这个文件的写法。 文件应该同时包含2个域,“User-agent:”和“Disallow:”,每条指令独立一行。
(1)User-agent: 指定允许哪些蜘蛛抓取,如果给出参数,则只有指定的蜘蛛能够抓取;如值为通配符“*”号,代表允许所有蜘蛛抓取。如: User-agent: Googlebot 只允许Google的蜘蛛抓取; User-agent: * 允许所有蜘蛛抓取。 注意:User-agent必须出现在第一行(有意义的行,注释除外),首先声明用户代理。 (2)Disallow: 指定禁止蜘蛛抓取的目录或文件,如: Disallow: /help.php 禁止抓取根目录下help.php文件; Disallow: /admin/ 禁止抓取根目录下的admin子目录中任何内容; Disallow: 值为空时,表示不限制,蜘蛛可以抓取站内任何内容。 Disallow: / 禁止了蜘蛛抓取根目录下的所有内容。 如果需要指定多个目录或文件,可以用多个“Disallow: 文件或目录名”来指定,但必须每一项单独一行。 示例: 禁止百度蜘蛛: User-agent: baiduspider Disallow: / 禁止谷歌蜘蛛: User-agent: Googlebot Disallow: / 禁止所有蜘蛛: User-agent: * Disallow: /
By admin
read more一,什么是haproxy
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。 HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
二,安装haproxy
下载列表地址 http://haproxy.1wt.eu
wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz
#tar zxvf haproxy-1.4.8.tar.gz #cd haproxy-1.4.8 #uname -a //查看linux内核版本 #make TARGET=linux26 PREFIX=/usr/local/haproxy #make install PREFIX=/usr/local/haproxy
三,配置haproxy
vi /usr/local/haproxy/haproxy.cfg
global
maxconn 5120
chroot /usr/local/haproxy
uid 99
gid 99
daemon
quiet
nbproc 2
pidfile /usr/local/haproxy/haproxy.pid
defaults
log global
mode http
option httplog
option dontlognull
log 127.0.0.1 local3
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webinfo :1080
mode http
balance roundrobin
option httpclose
option forwardfor
server phpinfo1 192.168.18.2:10000 check weight 1 minconn 1 maxconn 3 check inter 40000
server phpinfo2 127.0.0.1:80 check weight 1 minconn 1 maxconn 3 check inter 40000
listen webmb :1081
mode http
balance roundrobin
option httpclose
option forwardfor
server webmb1 192.168.1.91:10000 weight 1 minconn 1 maxconn 3 check inter 40000
server webmb2 127.0.0.1:10000 weight 1 minconn 1 maxconn 3 check inter 40000
listen stats :8888
mode http
transparent
stats uri / haproxy-stats
stats realm Haproxy \ statistic
stats auth zhangy:xtajmd
三,启动haproxy
By admin
read more/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文 件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:
[root@server test]# cat /proc/sys/vm/drop_caches
首先,/proc/sys /vm/drop_caches的值,默认为0
[root@server test]# sync
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
[root@server test]# echo 3 > /proc/sys/vm/drop_caches [root@server test]# cat /proc/sys/vm/drop_caches 3
将/proc/sys/vm/drop_caches值设为3
[root@server test]# free -m total used free shared buffers cached Mem: 249 66 182 0 0 11 -/+ buffers/cache: 55 194 Swap: 511 0 511
再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了 buffer和cache.
有关/proc/sys/vm/drop_caches的用法在下面进行了说明
/proc/sys/vm/drop_caches (since Linux 2.6.16) Writing to this file causes the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
By admin
read moreJQuery中的$(function(){})和js中onload,谁先加载?
在$(document).ready()执行时,整个DOM文档树已经解析完成,即各个DOM元素都已经可以访问了(但是对于某些元素的某些属性此时访问可能还不精确,如图片的宽度高度)。$(function(){})在根据需要放置位置,可能在ready之前,可以在其之后。
onload需要页面上所有的资源都加载上之后执行,而ready则是DOM文档树已经解析完成时,说ready比onload快最显著的是比如一个页面上有一个很大的图片,加载要好久,onload只有在图片加载完成之后执行,而ready不必等图片加载完成.
而且一些人所说的向document添加load事件 是完全不可能的。
document准备之前是添加不进onload的,而且在document准备之后加onload是不会执行的。所以,document的onload只在html中声明有时才有用,动态加进去的一般是没用的。
因此要想实现页面加载时的loading效果,一般是在节点里面第一个位置添加div覆盖窗口,然后在或者onload里面把覆盖层移除。
ext的sample就是这么做的,而且把之类的放入body里面也能计算出js文件的加载时间。
$(document).ready()在通常的情况下是限于onload加载的,他是基于DOM形成后就加载相关的应用的,而onload是待整个文档或者说页面加载完成后才会触发的,大家可以做个非常简单的实验,给一个页面加载一张大图片,然后限制下你的网络带宽,页面运用这两种写法alert一个提示。结果就很明显了.
$(document).ready();和$(function(){});是一样的。
$(document).ready()是DOM加载好后就执行,而onload要网页中的内容全部加载后才执行,比如说一个页面里有很多图片,onload就要等这些图片都加载好后才执行。另外一个页面中如果有两个onload只会执行一个,而$(document).ready();可以执行多个.
By admin
read more1.RESET MASTER
****可以删除列于索引文件中的所有二进制日志,把二进制日志索引文件重新设置为空,并创建一个新的二进制日志文件
2.PURGE MASTER LOGS
语法 PURGE {MASTER | BINARY} LOGS TO ‘log_name‘ PURGE {MASTER | BINARY} LOGS BEFORE ‘date‘ 用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
(1).用reset master命令删除所有日志,新日志重新从000001开始编号
(2).用purge master logs to ‘mysq-bin.**’ 命令可以删除指定编号前的所有日志
(3).用purge master logs to before ‘YYYY-MM-DD HH24:MI:SS’命令可以删除’YYYY-MM-DD HH24:MI:SS’之前的产生的所有日志
(4).可以在my.cnf中指定–expire_logs_days=#,此参数设置了binlog日志的过期天数
例如:
PURGE MASTER LOGS TO ‘mysql-bin.010’; PURGE MASTER LOGS BEFORE ‘2003-04-02 22:46:26’; BEFORE变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。MASTER和BINARY是同义词。 注意: 如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。 要清理日志,需按照以下步骤:
在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
使用SHOW MASTER LOGS获得主服务器上的一系列日志。
在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)
清理所有的日志,但是不包括目标日志。下面讲一下怎么从二进制文件恢复数据, 假如不小心执行了drop table xxx_db, 假如你保留了完整的二进制日志的话, 先不要冒汗, 这是可以恢复的.先看看日志
By admin
read more1、Proftpd如何限速和设置发呆退出?
可以使用: RateReadBPS RateReadFreeBytes RateWriteBPS RateWriteFreeBytes 来限制下载和上载速度: RateReadBPS和RateWriteBPS限制下载和上载的速率 RateReadFreeBytes和RateWriteFreeBytes限制当用户现在这么多数据量以后再进行限速,这样可以实现对于小文件不限速,而大文件限速。 TimeoutIdle — 设置空闲连接超时时钟 TimeoutLogin — 设置空闲登陆超时时钟 TimeoutNoTransfer — 设置当没有数据传输时的超时时钟 TimeoutStalled — 设置被阻塞的下载的超时时钟
2、proftpd如何实现磁盘限额
首先编译的时候指定–with-modules的时候要包含mod_quota。
然后在配置文件中使用: Quotas on QuotaCalc on DefaultQuota 8000 QuotaBlockSize 1024 QuotaBlockName kb 就可以实现磁盘限额。其中DefaultQuota说明用户只能用8000个block,而QuotaBlockSize则指明每个block大小是1024byte也就是1k。
QuotaBlockName只在提示中出现,告诉用户block的单位。
3、如何设置proftpd的服务进程数
如果机器硬件配置不是非常好,或者为了防止DoS攻击,有时候需要限制proftpd所能提供的同时连接数。在standalone情况下,可以设置: MaxInstances 100 这样就能限制当外界的所有连接数到100的时候,proftpd将禁止新连接。
4、Proftpd如何限制每个客户端机器的同时连接
只要在配置文件里面使用: MaxClientsPerHost 10 这样限制客户端机器最多只能10个连接。用在匿名用户的配置中特别有用,有效地防止了某个客户端大量占用了其他人的连接数。
5、Proftpd如何限制某个用户的同时连接数
Proftpd 1.2.7rc1以后提供了一个新参数-MaxClientsPerUser。在配置文件中添加下列参数: MaxClientsPerUser 5 这样就能限制每个用户只能同时有5个连接,使用例如flashget等下载工具的时候就最多只能分成5块下载。
6、Proftpd如何提供续传功能
如果要支持下载续传,那么必须指定: AllowRetrieveRestart on 如果要支持上传续传,那么必须指定: AllowOverwrite on AllowStoreRestart on 必须同时指定AllowOverwrite和AllowStoreRestart的原因是由于重新上传或者续传也是属于覆盖文件。 同时记得不要同时使用HiddenStor和AllowStoreRestart。
7、proftpd如何允许以root身份登录
在配置文件中使用下面的配置: RootLogin on
8、如何缩短连接到proftpd服务的时间
在proftpd.conf里面加入两行: UseReverseDNS off IdentLookups off 防止proftpd进行DNS反查以及对用户端进行ident确认。
By admin
read more配置文件是根据原来版本的基础上修改的,所以有些指令可能默认配置文件里没有了,但并不影响使用。
一.安装MySQL
安装教程请参考:
二.安装proftpd
#cd /usr/ports/ftp/proftpd-mysql #make install clean
安装的时候会要求选择proftpd要安装的模块,选择好mysql和quota,其他的根据情况选择.这里系统默认安装的是proftpd-1.3.3d.tar.bz2.
配置系统自启动proftpd服务,用vi编辑/etc/rc.conf配置文件,在末尾加入一行:
proftpd_enable=”YES”
三、创建ftp用户、用户组和目录设置 1、创建proftpd服务运行的用户和用户组(用于虚拟主机网站ftp用户)
#pw groupadd FTPGRP -g 2001 #pw adduser FTPUSR -u 2001 -g 2001 -d /var/ftp/haohtml -s /sbin/nologin #mkdir /var/ftp/haohtml #chown -R FTPUSR:FTPGRP /var/ftp/haohtml
2、创建匿名登陆用户映射的系统用户和用户组(ftp匿名登录,使用独立的组和用户)
#pw groupadd ftp -g 2002 #pw adduser ftp -u 2002 -g 2002 -d /var/ftp/incoming -s /sbin/nologin #mkdir /var/ftp/incoming #chown -R ftp:ftp /var/ftp/incoming
四、配置proftpd.conf
完成上面的安装,proftpd其实已经可以运行了,但是我们还需要根据自己的安装要求进行必要的配置,默认的配置文件为/usr/local/etc/proftpd.conf,配置备份文件为proftpd.conf.sample.
1、编辑proftpd.conf,下面是Michael的文件,大家完全照抄就基本可以了
#基本配置
ServerName “haohtml’s Ftp Site”
By admin
read more在 Windows、Linux 操作系统,分别利用BAT批处理文件和Shell脚本,生成类似“20110228_082905.txt”以“年月日_时分秒”命名的文件。
Windows BAT批处理文件:
@echo off set time_hh=%time:~0,2% if /i %time_hh% LSS 10 (set time_hh=0%time:
1,1%) set filename=%date:,4%%date:~5,2%%date:~8,2%_%time_hh%%time:~3,2%%time:~6,2% echo test » %filename%.txt
Linux Shell 脚本:
#!/bin/sh echo test » $(date -d “today” +”%Y%m%d_%H%M%S”).txt
By admin
read more参考(已经修正),在下面搞了个ftp,结果发现vsftpd的虚拟用户无法获得chmod权限,后来找了找,解决办法如下:
修改配置文件
#让虚用户获得本地用户权限 virtual_use_local_privs=YES #开启chmod命令 chmod_enable=YES
By admin
read more解决方法:
找到 php.ini 中的并修改如下:
写道
;extension=php_xdebug-2.1.0-5.2-vc6.dll
zend_extension_ts=”d:/AppServ\php5\ext\php_xdebug-2.1.0-5.2-vc6.dll” //如果有其它提示,将”_ts”去掉就可以了
xdebug 必须使用 zend_extension_ts 或者 zend_extension 来标明它是zend的扩展
写道
另:根据 PHP 版本,zend_extension 指令可以是以下之一:
zend_extension (non ZTS, non debug build)
zend_extension_ts ( ZTS, non debug build)
zend_extension_debug (non ZTS, debug build)
zend_extension_debug_ts ( ZTS, debug build)
ZTS:ZEND Thread Safety
可通过phpinfo()查看ZTS是否启用,从而决定用zend_extension还是zend_extension_ts。
extension意为基于php引擎的扩展
zend_extension意为基于zend引擎的扩展
By admin
read more服务器出现错误,一时摸不着头脑,google……..解决方法 : 修改注册表禁用PerfNet性能计数器,批处理如下
reg add HKLMSYSTEMCurrentControlSetServicesPerfNetPerformance /v “Disable Performance Counters” /t REG_DWORD /d 1 /f相关文章:http://hi.baidu.com/newshow/blog/item/4a1869cb49e7a911bf09e6e6.html
By admin
read more摘自:
在eBay,可伸缩性是我们每天奋力抵抗的一大架构压力。我们所做的每一项架构及设计决策,身前身后都能看到它的踪影。当我们面对的是全世界数以亿计的用户,每天的页面浏览量超过10亿,系统中的数据量要用皮字节(1015或250)来计算——可伸缩性是生死交关的问题。
在一个可伸缩的架构中,资源的消耗应该随负载线性(或更佳)上升,负载可由用户流量、数据量等测量。如果说性能衡量的是每一工作单元所需的资源消 耗,可伸缩性则是衡量当工作单元的数量或尺寸增加时,资源消耗的变化情况。换句话说,可伸缩性是整个价格-性能曲线的形状,而不是曲线上某一点的取值。
可伸缩性有很多侧面——事务的方面、运营的方面、还有开发的方面。我们在改善一个Web系统的事务吞吐量的过程中学到了很多经验,本文总结了其中若 干关键的最佳实践。可能很多最佳实践你会觉得似曾相识,也可能有素未谋面的。这些都是开发和运营eBay网站的众人的集体经验结晶。
相关的功能部分应该合在一起,不相关的功能部分应该分割开来——不管你把它叫做SOA、功能分解还是工程秘诀。而且,不相关的功能之间耦合程度越松散,就越能灵活地独立伸缩其中的一部分。
在编码层次,我们无时不刻都在运用这条原则。JAR文件、包、Bundle等等,都是用来隔离和抽象功能的机制。
在应用层次,eBay将不同的功能划分成几个应用程序池。销售功能由一组应用服务器运行,投标功能由另一组负责,搜索又是另外一组服务器。我们把总 共约16,000台应用服务器分成220个池。这样就可以根据某项功能的资源消耗,单独地伸缩其中一个池。我们也因此得以进一步隔离及合理化资源依赖关系 ——比如销售池只需要访问后台资源的一个相对较小的子集。
在数据库层次,我们也采取同样的做法。eBay没有无所不包的单一数据库,相反我们有一组数据库主机存放用户数据、一组存放商品数据、一组存放购买数据……总共1000个逻辑数据库分布在400台物理主机上。同样,这种做法让我们得以单独为某一类数据伸缩其数据库设施。
按功能分割对我们的帮助很大,但单凭它还不足以得到完全可伸缩的架构。即使将功能一一解耦,单项功能的资源需求随着时间增长,仍然有可能超出单一系 统的能力。我们常常提醒自己,“没有分割就没有伸缩”。在单项功能内部,我们需要能把工作负载分解成许多我们有能力驾驭的小单元,让每个单元都能维持良好 的性能价格比。这就是水平分割出场的时候了。
在应用层次,由于eBay将各种交互都设计成无状态的,所以水平分割是轻而易举之事。用标准的负载均衡服务器来路由进入的流量。所有应用服务器都是 均等的,而且任何服务器都不会维持事务性的状态,因此负载均衡可以任意选择应用服务器。如果需要更多处理能力,只需要简单地增加新的应用服务器。
数据库层次的问题比较有挑战性,原因是数据天生就是有状态的。我们会按照主要的访问路径对数据作水平分割(或称为“sharding”)。例如用户 数据目前被分割到20台主机上,每台主机存放1/20的用户。随着用户数量的增长,以及每个用户的数据量增长,我们会增加更多的主机,将用户分散到更多的 机器上去。商品数据、购买数据、帐户数据等等也都用同样的方式处理。用例不同,我们分割数据的方案也不同:有些是对主键简单取模(ID尾数为1的放到第一 台主机,尾数为二的放到下一台,以此类推),有些是按照ID的区间分割(1-1M、1-2M等等),有些用一个查找表,还有些是综合以上的策略。不过具体 的分割方案如何,总的思想是支持数据分割及重分割的基础设施在可伸缩性上远比不支持的优越。
看到这里,你可能在疑惑按功能划分数据和水平划分数据的实践如何满足事务要求。毕竟,几乎任何有意义的操作都要更新一个以上的实体——立即就可以举 出用户和商品的例子。正统的广为人知的答案是:建立跨资源的分布式事务,用两段式提交来保证要么所有资源全都更新,要么全都不更新。很不幸,这种悲观方案 的成本很可观。伸缩、性能和响应延迟都受到协调成本的反面影响,随着依赖的资源数量和客户数量的上升,这些指标都会以几何级数恶化。可用性亦受到限制,因 为所有依赖的资源都必须就位。实用主义的答案是,对于不相关的系统,放宽对它们的跨系统事务的保证。
左右逢源是办不到的。保证跨多个系统或分区之间的即时的一致性,通常既无必要,也不现实。Inktomi的Eric Brewer十年前提出的CAP公理是这样说的:分布式系统的三项重要指标——一致性(Consistency)、可用性(Availability)和 分区耐受性(Partition-tolerance)——在任意时刻,只有两项能同时成立。对于高流量的网站来说,我们必须选择分区耐受性,因为它是实 现可伸缩的根本。对于24×7运行的网站,选择可用性也是理所当然的。于是只好放弃即时一致性(immediate consistency)。
在eBay,我们绝对不允许任何形式的客户端或者分布式事务——因此绝不需要两段式提交。在某些经过仔细定义的情形下,我们会将作用于同一个数据库 的若干语句捆绑成单个事务性的操作。而对于绝大部分操作,单条语句是自动提交的。虽然我们故意放宽正统的ACID属性,以致不能在所有地方保证即时一致 性,但现实的结果是大部分系统在绝大部分时间都是可用的。当然我们也采用了一些技术来帮助系统达到最终的一致性(eventual consistency):周密调整数据库操作的次序、异步恢复事件,以及数据核对(reconciliation)或者集中决算(settlement batches)。具体选择哪种技术要根据特定用例对一致性的需求来决定。
对于架构师和系统的设计者来说,关键是要明白一致性并非“有”和“没有”的单选题。现实中大多数的用例都不要求即时一致性。正如我们经常根据成本和其他压力因素来权衡可用性的高低,一致性也同样可以量体裁衣,根据特定操作的需要而保证适当程度的一致性。
提高可伸缩性的另一项关键措施是积极地采取异步策略。如果组件A同步调用组件B,那么A和B就是紧密耦合的,而紧耦合的系统其可伸缩性特征是各部分 必须共同进退——要伸缩A必须同时伸缩B。同步调用的组件在可用性方面也面临着同样的问题。我们回到最基本的逻辑:如果A推出B,那么非B推出非A。也就 是说,若B不可用,则A也不可用。如果反过来A和B的联系是异步的,不管是通过队列、多播消息、批处理还是什么其他手段,它们就可以分别地伸缩。而且,此 时A和B的可用性特征是相互独立的——即使B受困或者死掉,A仍然能够继续前进。
整个基础设施从上到下都应该贯彻这项原则。即使在单个组件内部也可通过SEDA(分阶段的事件驱动架构,Staged Event-Driven Architecture)等技术实现异步性,同时保持一个易于理解的编程模型。组件之间也遵守同样的原则——尽可能避免同步带来的耦合。在多数情况下, 两个组件在任何事件中都不会有直接的业务联系。在所有的层次,把过程分解为阶段(stages or phases),然后将它们异步地连接起来,这是伸缩的关键。
用异步的原则解耦程序,尽可能将过程变为异步的。对于要求快速响应的系统,这样做可以从根本上减少请求者所经历的响应延迟。对于网站或者交易系统, 牺牲数据或执行的延迟时间(完成全部工作的实践)来换取用户的延迟时间(用户得到响应的时间)是值得的。活动跟踪、单据开付、决算和报表等处理过程显然都 应该属于后台活动。主要用例过程中常常有很多步骤可以进一部分解成异步运行。任何可以晚点再做的事情都应该晚点再做。
还有一个同等重要的方面认识到的人不多:异步性可以从根本上降低基础设施的成本。同步地执行操作迫使你必须按照负载的峰值来配备基础设施——即使在 任务最重的那一天里任务最重的那一秒,设施也必须有能力立即完成处理。而将昂贵的处理过程转变为异步的流,基础设施就不需要按照峰值来配备,只需要满足平 均负载。而且也不需要立即处理所有的请求,异步队列可以将处理任务分摊到较长的时间里,因而起到削峰的作用。系统的负载变化越大,曲线越多尖峰,就越能从 异步处理中得益。
虚拟化和抽象化无所不在,计算机科学里有一句老话:所有问题都可以通过增加一个间接层次来解决。操作系统是对硬件的抽象,而许多现代语言所用的虚拟 机又是对操作系统的抽象。对象-关系映射层抽象了数据库。负载均衡器和虚拟IP抽象了网络终端。当我们通过分割数据和程序来提高基础设施的可伸缩性,为各 种分割增加额外的虚拟层次就成为重中之重。
在eBay,我们虚拟化了数据库。应用与逻辑数据库交互,逻辑数据库再按照配置映射到某个特定的物理机器和数据库实例。应用也抽象于执行数据分割的 路由逻辑,路由逻辑会把特定的记录(如用户XYZ)分配到指定的分区。这两类抽象都是在我们自己开发的O/R层上实现的。这样虚拟化之后,我们的运营团队 可以按需要在物理主机群上重新分配逻辑主机——分离、合并、移动——而完全不需要接触应用程序代码。
By admin
read more之前有讲过公司新买的服务器使用的是CentOS 5.5,部署好Tomcat之后却发现输入114.80..:8080(即ip:8080)却无法显示Tomcat默认的首页。因为以前部署在Win Server的VPS,Linux开发时也只用到localhost,所以就有点头大。
好吧,G一下网上有说是防火墙的问题,敲入
/etc/init.d/iptables stop
关闭之后再次查看114.80..:8080(即ip:8080)发现果然成功。但是貌似安全隐患大大增加……使用
/etc/init.d/iptables status
查看防火墙信息,可以看到打开的端口。那么我们把需要使用的端口打开应该是一个比较可行的办法了,命令如下:
/sbin/iptables -I INPUT -p tcp –dport 8080 -j ACCEPT #8080为指定端口
/etc/init.d/iptables restart #重启防火墙以便改动生效,当然如果不觉得麻烦也可重启系统(命令:reboot)
/etc/rc.d/init.d/iptables save #将更改进行保存
当然了,还有另外直接在/etc/sysconfig/iptables中增加一行:
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT
永久关闭防火墙
chkconfig –level 35 iptables off #此方法源自网络,未实验,安全考虑拒绝使用此方法
By admin
read more