⑴ apache 这个软件是干嘛用
Apache是一个历史悠久并且功能十分强大的WEB服务器,但其丰富的功能对于一个新手来说往往不知道从何下手。我个人感觉Apache的设计充分体现了模块化设计的优势,通过在动态模块加载(DSO)模式下的安装,任何子应用模块都可以通过配置文件的简单修改进行积木式的灵活配置。安装的过程可以从简单的静态html服务开始,一个模块一个模块的学习使用。从单纯的HTML静态服务(core),到复杂的动态页面服务(core + php, core + resin, core + php + mod_gzip, core + resin + mod_expire)。
本文主要从简化安装==>性能调优==>维护方便的角度,介绍了WEB服务的规划、HTTPD安装/应用模块配置、升级/维护等过程。让Apache和PHP,Resin等应用模块的独立升级,完全互不影响。
WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式;
Apache安装过程:apache的通用的简化安装选项,方便以后的应用的模块化配置;
修改 HARD_SERVER_LIMIT:
vi /path/to/apache_src/src/include/httpd.h
#define HARD_SERVER_LIMIT 2560 <===将原来的 HARD_SERVER_LIMIT 256 后面加个“0”
apache编译:
./configure --prefix=/home/apache --enable-shared=max --enable-mole=most
可选应用模块/工具的安装:php resin mod_gzip mod_expire及各个模块之间的配合;
mod_php安装:./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql
mod_resin安装:./configure --with-apxs=/home/apache/bin/apxs
mod_gzip安装:修改Makefile中的 apxs路径:然后make make install
工具:日志轮循工具cronolog安装:http://www.cronolog.org
升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;
按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。
系统安装:系统管理员的职责就是安装好一台DSO模式的Apache,然后COLON即可,
应用安装:由应用管理员负责具体应用所需要的模块,比如PHP Resin等,并设置httpd.conf中相关的配置。
系统升级:系统管理员:升级操作系统/升级Apache
应用升级:应用管理员:升级应用模块,PHP Resin等。
WEB应用的容量规划
Apache主要是一个内存消耗型的服务应用,我个人总结的经验公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会因为进程过多导致性能下降。
例子1:
一个apache + mod_php的服务器:一个apache进程一般需要4M内存
因此在一个1G内存的机器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500
apache_max_process = 500 * 1.5 = 750
所以规划你的应用让服务尽量跑在500个进程以下以保持比较高的效率,并设置Apache的软上限在800个。
例子2:
一个apache + mod_resin的服务器: 一个apache进程一般需要2M内存
在一个2G内存的机器上:
apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000
apache_max_process = 2000 * 1.5 = 3000
以上估算都是按小文件服务估算的(一个请求一般大小在20k以下)。对于文件下载类型站点,可能还会受其他因素:比如带宽等的影响。
Apache安装过程
服务器个数的硬上限HARD_SERVER_LIMIT的修改:
在Apache的源代码中缺省的最大进程数是256个,需要修改apache_1.3.xx/src/include/httpd.h
#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#elif defined(NETWARE)
#define HARD_SERVER_LIMIT 2048
#else
#define HARD_SERVER_LIMIT 2560 <===将原来的HARD_SERVER_LIMIT 256 后面加个“0”
#endif
#endif
解释:
Apache缺省的最大用户数是256个:这个配置对于服务器内存还是256M左右的时代是一个非常好的缺省设置,但随着内存成本的急剧下降,现在大型站点的服务器内存配置一般比当时要高一个数量级不止。所以256个进程的硬限制对于一台1G内存的机器来说是太浪费了,而且Apache的软上限 max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服务器内存大于256M,都应该调高Apache的 HARD_SERVER_LIMIT。根据个人的经验:2560已经可以满足大部分小于2G内存的服务器的容量规划了(Apache的软上限的规划请看后面)。
Apache的编译:以下通用的编译选项能满足以后任意模块的安装
./configure --prefix=/another_driver/apache/ --enable-shared=max --enable-mole=most
比如:
./configure --prefix=/home/apache/ --enable-shared=max --enable-mole=most
解释:
--prefix=/another_driver/apache/:建议将apache服务安装在另外一个驱动设备上的目的在于硬盘往往是一个系统使用寿命最低的设备,因此:将服务数据和系统完全分开,不仅能提高了数据的访问速度,更重要的,大大方便系统升级,应用备份和恢复过程。
--shared-mole=max:使用动态加载方式载入子模块会带来5%的性能下降,但和带来的配置方便相比更本不算什么:比如模块升级方便,系统升级风险降低,安装过程标准化等
--enable-mole=most:用most可以将一些不常用的mole编译进来,比如后面讲到的mod_expire是就不在 apache的缺省常用模块中
如果不想build so, 也可以这样:
./configure \
"--with-layout=Apache" \
"--prefix=/path/to/apache" \
"--disable-mole=access" \
"--disable-mole=actions" \
"--disable-mole=autoindex" \
"--disable-mole=env" \
"--disable-mole=imap" \
"--disable-mole=negotiation" \
"--disable-mole=setenvif" \
"--disable-mole=status" \
"--disable-mole=userdir" \
"--disable-mole=cgi" \
"--disable-mole=include" \
"--disable-mole=auth" \
"--disable-mole=asis"
但结果会发现,这样编译对服务性能只能有微小的提高(5%左右),但却失去了以后系统升级和模块升级的灵活性,无论是模块还是Apache本身升级都必须把Apache和PHP的SOURCE加在一起重新编译。
apache的缺省配置文件一般比较大:可以使用去掉注释的方法精简一下:然后再进入具体的培植过程能让你更快的定制出你所需要的。
grep -v "#" httpd.conf.default >httpd.conf
需要修改的通用项目有以下几个:
#服务端口,缺省是8080,建议将整个Apache配置调整好后再将服务端口改到正式服务的端口
Port 8080 => 80
#服务器名:缺省没有
ServerName name.example.com
#最大服务进程数:根据服务容量预测设置
MaxClients 256 => 800
#缺省启动服务后的服务进程数:等服务比较平稳后,按平均负载下的httpd个数设置就可以
StartServers 5 => 200
不要修改:
以前有建议说修改:
MinSpareServers 5 => 100
MaxSpareServers 10 => 200
但从我的经验看来:缺省值已经是非常优化的了,而且让Apache自己调整子共享进程个数还是比较好的。
特别修改:
在solaris或一些比较容易出现内存泄露的应用上:
MaxRequestsPerChild 0 =>3000
应用模块和工具的安装配置:
由于使用模块动态加载的模式,所以可以方便的通过简单的配置调整来把Apache定制成你需要的:最好把不常用模块全部清除(无论处于安全还是效率)。
比如:对于静态页面服务器:就什么其他子模块都不加载,对于PHP应用就加上PHP模块,对于JAVA应用就把Resin模块加载上。而且各种模块的插拔非常简单,这样调试过程中就可以简单的通过注释掉不需要的模块,而不用重新编译。
一般说来,可以不需要的模块包括:
#LoadMole env_mole libexec/mod_env.so
#LoadMole negotiation_mole libexec/mod_negotiation.so
#LoadMole status_mole libexec/mod_status.so
#server side include已经过时了
#LoadMole includes_mole libexec/mod_include.so
#不需要将没有缺省index文件的目录下所有文件列出
#LoadMole autoindex_mole libexec/mod_autoindex.so
#尽量不使用CGI:一直是Apache安全问题最多的地方
#LoadMole cgi_mole libexec/mod_cgi.so
#LoadMole asis_mole libexec/mod_asis.so
#LoadMole imap_mole libexec/mod_imap.so
#LoadMole action_mole libexec/mod_actions.so
#不使用安全认证可以大大提高访问速度
#LoadMole access_mole libexec/mod_access.so
#LoadMole auth_mole libexec/mod_auth.so
#LoadMole setenvif_mole libexec/mod_setenvif.so
最好保留的有:
#用于定制log格式
LoadMole config_log_mole libexec/mod_log_config.so
#用于增加文件应用的关联
LoadMole mime_mole libexec/mod_mime.so
#用于缺省index文件:index.php等
LoadMole dir_mole libexec/mod_dir.so
可用可不用的有:
#比如:需要在~/username/下调试php可以将
LoadMole userdir_mole libexec/mod_userdir.so
#比如:需要将以前的URL进行转向或者需要使用CGI script-alias
LoadMole alias_mole libexec/mod_alias.so
常用的模块:
最常用的可能就是php和JAVA应用服务器的前端,此外,从性能上讲利用mod_gzip可以减少40%左右的流量,减少机器用于传输的负载,而 mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。
建议将所有MODULE的配置都放到相应模块的配置内部:<IfMole some_mole.c>some_mole config </IfMole>
PHP的安装:
/path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --with-other-moles-you-need
需要修改的配置:
AddType application/x-httpd-php .php .php3 .any_file_in_php
resin的安装设置:
/path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs
具体的resin设置放在另外一个文件中:比如/home/resin/conf/resin.conf
<IfMole mod_caucho.c>
CauchoConfigFile /path/to/apache/conf/resin.conf
</IfMole>
mod_expires的安装配置:
<IfMole mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 month"
ExpiresByType text/css "now plus 1 month"
ExpiresDefault "now plus 1 day"
</IfMole>
注释:
所有的.gif文件1个月以后过期
所有的文件缺省1天以后过期
mod_gzip的安装
http://www.chedong.com/tech/compress.html
日志的轮循:cronolog的安装和设置
cronolog可以非常整齐的将日志按天轮循存储
缺省编译安装到/usr/local/bin/下,只需要将配置改成:
CustomLog "|/usr/local/sbin/cronolog /home/apache/logs/%w/access_log" combined
日志将按天截断并存放在以星期为目录名的目录下:比如:log/1是周一,log/5是周五, log/0是周日
用gzip压缩每天的日志:
30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log
日志的定期删除:
30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f
升级维护:
由于使用动态模块加载方式(DSO模式)安装Apache,Apache的HTTPD核心服务和应用模块以及应用模块之间都变的非常灵活,建议将所有独立模块的配置都放在
<IfMole mod_name>
CONFIGURATIONS..
</IfMole>
里,这样配置非常容易通过屏蔽某个模块来进行功能调整:比如:
#AddMole mod_gzip.c
就屏蔽了mod_gzip,而其他模块不首任何影响。
安装和维护过程:
系统安装:系统管理员的职责就是安装系统和一个按照DSO模式安装的Apache,然后COLON。
应用安装:由应用管理员负责具体应用所需要的模块并设置HTTPD。
系统升级:系统管理员:升级系统/升级Apache
应用升级:应用管理员:升级应用模块:PHP CAUCHO等
系统备份/恢复:如果Apache不在缺省的系统盘上,只需要将Apache目录备份就可以了,遇到系统分区的硬件问题直接使用预先准备好的系统COLON,再直接将Apache所在物理盘恢复就行了。
系统管理员:Apache的最简化安装 OS + Apache (httpd core only)
应用管理员:应用模块定制 纯静态页面服务
core
PHP动态页面
core+so
+php
JAVA应用
core+so
+caucho
+ssl
应用例子: www.example.com
image.example.com
bbs.example.com mall.example.com
例子:Apache和PHP模块的独立升级。
如果Apache是按照以下方式安装:
./configure --prefix=/home/apache --enable-shared=max --enable-mole=most
PHP是按照以下方式安装:
./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql
以后单独升级Apache的时候,仍然是:
./configure --prefix=/home/apache --enable-shared=max --enable-mole=most
make
su
#/home/apache/bin/apachectl stop
#make install
单独升级php时,仍然是:
./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql
make
su
#/home/apache/bin/apachectl stop
#make install
#/home/apache/bin/apachectl start
基于反相代理的WEB加速:
squid和mod_proxy都可以实现反相代理加速。而基于缓存的代理加速比起原有WEB服务,速度会有数量级的提升。
小提示:
Apache安装后,缺省根目录下没有但很有用的2个文件:
favicon.ico: favicon.ico是一个16x16的站点图标文件,如果浏览器发现有这个文件,在地址栏中会用这个图标替换调浏览器的网页图标。IE6和 MOZILLA等主流浏览器都支持这个功能。
例如: http://www.chedong.com/favicon.ico
robots.txt: 用于告诉搜索引擎的爬虫程序(spider)网站那些页面可以被索引,那些不可以。
具体说明请参考:http://www.robotstxt.org/wc/robots.html
参考文档:
Apache项目
http://httpd.apache.org
PHP
http://www.php.net
Resin
http://www.caucho.com
mod_gzip
http://sourceforge.net/projects/mod-gzip/
Cronolog
http://www.cronolog.org
mod_expires
http://httpd.apache.org/docs/mod/mod_expires.html
面向搜索引擎的CMS设计:
http://www.chedong.com/tech/cms.html
⑵ Apache是什么软件 有什么好处和坏处 急!!!!!!!!!!!!!!! 谢谢
Apache是一个历史悠久并且功能十分强大的WEB服务器,但其丰富的功能对于一个新手来说往往不知道从何下手。我个人感觉Apache的设计充分体现了模块化设计的优势,通过在动态模块加载(DSO)模式下的安装,任何子应用模块都可以通过配置文件的简单修改进行积木式的灵活配置。安装的过程可以从简单的静态html服务开始,一个模块一个模块的学习使用。从单纯的HTML静态服务(core),到复杂的动态页面服务(core + php, core + resin, core + php + mod_gzip, core + resin + mod_expire)。
本文主要从简化安装==>性能调优==>维护方便的角度,介绍了WEB服务的规划、HTTPD安装/应用模块配置、升级/维护等过程。让Apache和PHP,Resin等应用模块的独立升级,完全互不影响。
WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式;
Apache安装过程:apache的通用的简化安装选项,方便以后的应用的模块化配置;
修改 HARD_SERVER_LIMIT:
vi /path/to/apache_src/src/include/httpd.h
#define HARD_SERVER_LIMIT 2560 <===将原来的 HARD_SERVER_LIMIT 256 后面加个“0”
apache编译:
./configure --prefix=/home/apache --enable-shared=max --enable-mole=most
可选应用模块/工具的安装:php resin mod_gzip mod_expire及各个模块之间的配合;
mod_php安装:./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql
mod_resin安装:./configure --with-apxs=/home/apache/bin/apxs
mod_gzip安装:修改Makefile中的 apxs路径:然后make make install
工具:日志轮循工具cronolog安装:http://www.cronolog.org
升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;
按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。
系统安装:系统管理员的职责就是安装好一台DSO模式的Apache,然后COLON即可,
应用安装:由应用管理员负责具体应用所需要的模块,比如PHP Resin等,并设置httpd.conf中相关的配置。
系统升级:系统管理员:升级操作系统/升级Apache
应用升级:应用管理员:升级应用模块,PHP Resin等。
WEB应用的容量规划
Apache主要是一个内存消耗型的服务应用,我个人总结的经验公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会因为进程过多导致性能下降。
⑶ web测试中对客户端和服务器的性能测试都涉及到什么
这种就类似于云计算等后端基础服务的测试,对于一些大的公司,会有一个专门的团队来开发这种后端基础服务,这种服务当然也需要测试人员来保证质量。
这类服务一般都是通过HTTP接口的方式提供给刚才讲的WEB/APP的后端使用,所以,第一个要做的也就是接口测试,也就是用Postman等工具做手工测试、用TestNG+HttpClient或者Python的Nose框架做自动化测试。
不过,对于这类后端服务来说,接口只是暴露给外用的部分,内部逻辑通常是非常复杂的,所以,除了针对接口做测试之外,测试人员还需要细致地了解这些服务端产品的技术框架及技术实现,需要了解到模块的级别,对于系统框架图、时序图等都有很好的理解。针对这些理解去设计用例,再跟开发一起讨论如何实现用例。
如果这种基础服务用了某一个开源软件,那通常也需要测试人员能关注社区的进展,并把我们发现的Bug及解决方案等推到社区,为社区做贡献。
除了接口测试之外,在我们公司,异常测试、稳定性测试、性能测试也是服务端测试必备的测试类型。
异常测试会模拟各种异常情况,比如硬件异常-机器挂掉的情况下能否启动备机、硬盘挂掉的情况下是否会丢失数据;网络异常-网络忽然断掉、或者网络流量变小的情况;系统异常-操作系统忽然挂掉的情况。这些极端的情况出现的时候,我们需要验证数据有没有丢、能不能尽快启动备机对外提供服务、系统状态有没有异常等。我们会采用各种方式或者工具来模拟这些异常,比如用TrafficControl工具来控制网络流量。
稳定性测试,就是模拟系统在7*24的运行下会不会出问题,一般会用接口测试或者性能测试用例不断地跑,在运行期间,我们会模拟各种情况,比如说负载的变化、系统的各种干扰等。可以用ChaosMonkey等工具来进行这类测试。
性能测试,其实细分起来会有各种类型,比如负载测试、压力测试、配置测试、甚至还有线上压测、容量规划等。最常规的性能测试,一般是先规定一个系统需要承受的压力,比如说,某一个系统,1个小时之内会有1W单的单子,那基于这个需求我们分析服务器后端需要承受的压力,分析出来以后,就写性能测试脚本,然后逐渐增加压测的力度,直到超过这个预定的压力。通常在这个测试过程中会发现各种问题,比如数据库索引没有建、线程池太小、系统异常等。需要解决了之后再加大压力测试。也是用Grinder/JMeter等工具来进行性能测试,不过难的不是这些工具的使用,而是发现问题以后的定位。
对于这种后端服务的测试人员来说,技术上的要求是挺高的,需要有较好的编程能力,需要对数据库、操作系统等机制有很好的了解才行。
⑷ 网站数据库如何进行容量规划
关系型数据库有四个显着的特征,即安全性、完整性、并发性和监测性。数据库的安全性就是要保证数据库中数据的安全,防止未授权用户随意修改数据库中的数据,确保数据的安全。在大多数数据库管理系统中,主要是通过许可来保证数据库的安全性。完整性是数据库的一个重要特征,也是保证数据库中的数据切实有效、防止错误、实现商业规则的一种重要机制。在数据库中,区别所保存的数据是无用的垃圾还是有价值的信息,主要是依据数据库的完整性是否健全。在SQL Server 7.0中,数据的完整性是通过一系列逻辑来保障的,这些逻辑分为三个方面,即实体完整性、域完整性和参考完整性。对任何系统都可以这样说,没有监测,就没有优化.。
中安威士数据库安全加固系统是在进行数据库审计的同时兼有防火墙实时阻断和数据库透明加密的综合系统。主要功能包括:详尽的数据库审计、多因子认证访问控制、风险评估、自动建模、敏感数据加密和综合报表等。为客户带来的价值:
满足合规要求,快速通过评测;
简化业务至理,核心数据加密,提高数据安全管理能力;
完善纵深防御体系,提升整体安全防护能力;
降低核心数据资产被侵犯的风险,保障业务连续性。
⑸ 关于apache的缓存
B服务器,但其丰富的功能对于一个新手来说往往不知道从何下手。我个人感觉Apache的设计充分体现了模块化设计的优势,通过在动态模块加载(DSO)模式下的安装,任何子应用模块都可以通过配置文件的简单修改进行积木式的灵活配置。安装的过程可以从简单的静态html服务开始,一个模块一个模块的学习使用。从单纯的HTML静态服务(core),到复杂的动态页面服务(core + php, core + resin, core + php + mod_gzip, core + resin + mod_expire)。
本文主要从简化安装==>性能调优==>维护方便的角度,介绍了WEB服务的规划、HTTPD安装/应用模块配置、升级/维护等过程。让Apache和PHP,Resin等应用模块的独立升级,完全互不影响。
WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式;
Apache安装过程:apache的通用的简化安装选项,方便以后的应用的模块化配置;
修改 HARD_SERVER_LIMIT:
vi /path/to/apache_src/src/include/httpd.h
#define HARD_SERVER_LIMIT 2560 <===将原来的 HARD_SERVER_LIMIT 256 后面加个“0”
apache编译:
./configure --prefix=/home/apache --enable-shared=max --enable-mole=most
可选应用模块/工具的安装:php resin mod_gzip mod_expire及各个模块之间的配合;
mod_php安装:./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql
mod_resin安装:./configure --with-apxs=/home/apache/bin/apxs
mod_gzip安装:修改Makefile中的 apxs路径:然后make make install
工具:日志轮循工具cronolog安装:
升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;
按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。
系统安装:系统管理员的职责就是安装好一台DSO模式的Apache,然后COLON即可,
应用安装:由应用管理员负责具体应用所需要的模块,比如PHP Resin等,并设置httpd.conf中相关的配置。
系统升级:系统管理员:升级操作系统/升级Apache
应用升级:应用管理员:升级应用模块,PHP Resin等。
WEB应用的容量规划
Apache主要是一个内存消耗型的服务应用,我个人总结的经验公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会因为进程过多导致性能下降。
⑹ web应用高并发导致系统数据库崩溃一般怎么解决
1、程序和数据库部署在同一台服务器上 2.多学习一些相关的书籍比如:构建高性能Web站点,大规模Web服务开发技术 构建可扩展的Web站点 , Web容量规划的技术,分布式数据库系统及其应用。 掌握其原理和结构 。
⑺ 什么是web网站设计
首先web是网站的一个程序,是一个文件夹,每个网站必不可少的一个文件,这个文件里面存储的东西主要就是网站的代码,因为你没有在长春世纪学过,所以理解可能费点劲,不过我还是挺愿意为你解答的,以后有什么网络问题就找我
⑻ Apache是用来干什么的
Apache是一个历史悠久并且功能十分强大的WEB服务器,但其丰富的功能对于一个新手来说往往不知道从何下手。我个人感觉Apache的设计充分体现了模块化设计的优势,通过在动态模块加载(DSO)模式下的安装,任何子应用模块都可以通过配置文件的简单修改进行积木式的灵活配置。安装的过程可以从简单的静态html服务开始,一个模块一个模块的学习使用。从单纯的HTML静态服务(core),到复杂的动态页面服务(core + php, core + resin, core + php + mod_gzip, core + resin + mod_expire)。
本文主要从简化安装==>性能调优==>维护方便的角度,介绍了WEB服务的规划、HTTPD安装/应用模块配置、升级/维护等过程。让Apache和PHP,Resin等应用模块的独立升级,完全互不影响。
WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式;
Apache安装过程:apache的通用的简化安装选项,方便以后的应用的模块化配置;
修改 HARD_SERVER_LIMIT:
vi /path/to/apache_src/src/include/httpd.h
#define HARD_SERVER_LIMIT 2560 <===将原来的 HARD_SERVER_LIMIT 256 后面加个“0”
apache编译:
./configure --prefix=/home/apache --enable-shared=max --enable-mole=most
可选应用模块/工具的安装:php resin mod_gzip mod_expire及各个模块之间的配合;
mod_php安装:./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql
mod_resin安装:./configure --with-apxs=/home/apache/bin/apxs
mod_gzip安装:修改Makefile中的 apxs路径:然后make make install
工具:日志轮循工具cronolog安装:http://www.cronolog.org
升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;
按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。
系统安装:系统管理员的职责就是安装好一台DSO模式的Apache,然后COLON即可,
应用安装:由应用管理员负责具体应用所需要的模块,比如PHP Resin等,并设置httpd.conf中相关的配置。
系统升级:系统管理员:升级操作系统/升级Apache
应用升级:应用管理员:升级应用模块,PHP Resin等。
WEB应用的容量规划
Apache主要是一个内存消耗型的服务应用,我个人总结的经验公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会因为进程过多导致性能下降。
例子1:
一个apache + mod_php的服务器:一个apache进程一般需要4M内存
因此在一个1G内存的机器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500
apache_max_process = 500 * 1.5 = 750
所以规划你的应用让服务尽量跑在500个进程以下以保持比较高的效率,并设置Apache的软上限在800个。
例子2:
一个apache + mod_resin的服务器: 一个apache进程一般需要2M内存
在一个2G内存的机器上:
apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000
apache_max_process = 2000 * 1.5 = 3000
以上估算都是按小文件服务估算的(一个请求一般大小在20k以下)。对于文件下载类型站点,可能还会受其他因素:比如带宽等的影响。
Apache安装过程
服务器个数的硬上限HARD_SERVER_LIMIT的修改:
在Apache的源代码中缺省的最大进程数是256个,需要修改apache_1.3.xx/src/include/httpd.h
#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#elif defined(NETWARE)
#define HARD_SERVER_LIMIT 2048
#else
#define HARD_SERVER_LIMIT 2560 <===将原来的HARD_SERVER_LIMIT 256 后面加个“0”
#endif
#endif
解释:
Apache缺省的最大用户数是256个:这个配置对于服务器内存还是256M左右的时代是一个非常好的缺省设置,但随着内存成本的急剧下降,现在大型站点的服务器内存配置一般比当时要高一个数量级不止。所以256个进程的硬限制对于一台1G内存的机器来说是太浪费了,而且Apache的软上限 max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服务器内存大于256M,都应该调高Apache的 HARD_SERVER_LIMIT。根据个人的经验:2560已经可以满足大部分小于2G内存的服务器的容量规划了(Apache的软上限的规划请看后面)。
Apache的编译:以下通用的编译选项能满足以后任意模块的安装
./configure --prefix=/another_driver/apache/ --enable-shared=max --enable-mole=most
比如:
./configure --prefix=/home/apache/ --enable-shared=max --enable-mole=most
解释:
--prefix=/another_driver/apache/:建议将apache服务安装在另外一个驱动设备上的目的在于硬盘往往是一个系统使用寿命最低的设备,因此:将服务数据和系统完全分开,不仅能提高了数据的访问速度,更重要的,大大方便系统升级,应用备份和恢复过程。
--shared-mole=max:使用动态加载方式载入子模块会带来5%的性能下降,但和带来的配置方便相比更本不算什么:比如模块升级方便,系统升级风险降低,安装过程标准化等
--enable-mole=most:用most可以将一些不常用的mole编译进来,比如后面讲到的mod_expire是就不在 apache的缺省常用模块中
如果不想build so, 也可以这样:
./configure \
"--with-layout=Apache" \
"--prefix=/path/to/apache" \
"--disable-mole=access" \
"--disable-mole=actions" \
"--disable-mole=autoindex" \
"--disable-mole=env" \
"--disable-mole=imap" \
"--disable-mole=negotiation" \
"--disable-mole=setenvif" \
"--disable-mole=status" \
"--disable-mole=userdir" \
"--disable-mole=cgi" \
"--disable-mole=include" \
"--disable-mole=auth" \
"--disable-mole=asis"
但结果会发现,这样编译对服务性能只能有微小的提高(5%左右),但却失去了以后系统升级和模块升级的灵活性,无论是模块还是Apache本身升级都必须把Apache和PHP的SOURCE加在一起重新编译。
apache的缺省配置文件一般比较大:可以使用去掉注释的方法精简一下:然后再进入具体的培植过程能让你更快的定制出你所需要的。
grep -v "#" httpd.conf.default >httpd.conf
需要修改的通用项目有以下几个:
#服务端口,缺省是8080,建议将整个Apache配置调整好后再将服务端口改到正式服务的端口
Port 8080 => 80
#服务器名:缺省没有
ServerName name.example.com
#最大服务进程数:根据服务容量预测设置
MaxClients 256 => 800
#缺省启动服务后的服务进程数:等服务比较平稳后,按平均负载下的httpd个数设置就可以
StartServers 5 => 200
不要修改:
以前有建议说修改:
MinSpareServers 5 => 100
MaxSpareServers 10 => 200
但从我的经验看来:缺省值已经是非常优化的了,而且让Apache自己调整子共享进程个数还是比较好的。
特别修改:
在solaris或一些比较容易出现内存泄露的应用上:
MaxRequestsPerChild 0 =>3000
应用模块和工具的安装配置:
由于使用模块动态加载的模式,所以可以方便的通过简单的配置调整来把Apache定制成你需要的:最好把不常用模块全部清除(无论处于安全还是效率)。
比如:对于静态页面服务器:就什么其他子模块都不加载,对于PHP应用就加上PHP模块,对于JAVA应用就把Resin模块加载上。而且各种模块的插拔非常简单,这样调试过程中就可以简单的通过注释掉不需要的模块,而不用重新编译。
一般说来,可以不需要的模块包括:
#LoadMole env_mole libexec/mod_env.so
#LoadMole negotiation_mole libexec/mod_negotiation.so
#LoadMole status_mole libexec/mod_status.so
#server side include已经过时了
#LoadMole includes_mole libexec/mod_include.so
#不需要将没有缺省index文件的目录下所有文件列出
#LoadMole autoindex_mole libexec/mod_autoindex.so
#尽量不使用CGI:一直是Apache安全问题最多的地方
#LoadMole cgi_mole libexec/mod_cgi.so
#LoadMole asis_mole libexec/mod_asis.so
#LoadMole imap_mole libexec/mod_imap.so
#LoadMole action_mole libexec/mod_actions.so
#不使用安全认证可以大大提高访问速度
#LoadMole access_mole libexec/mod_access.so
#LoadMole auth_mole libexec/mod_auth.so
#LoadMole setenvif_mole libexec/mod_setenvif.so
最好保留的有:
#用于定制log格式
LoadMole config_log_mole libexec/mod_log_config.so
#用于增加文件应用的关联
LoadMole mime_mole libexec/mod_mime.so
#用于缺省index文件:index.php等
LoadMole dir_mole libexec/mod_dir.so
可用可不用的有:
#比如:需要在~/username/下调试php可以将
LoadMole userdir_mole libexec/mod_userdir.so
#比如:需要将以前的URL进行转向或者需要使用CGI script-alias
LoadMole alias_mole libexec/mod_alias.so
常用的模块:
最常用的可能就是php和JAVA应用服务器的前端,此外,从性能上讲利用mod_gzip可以减少40%左右的流量,减少机器用于传输的负载,而 mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。
建议将所有MODULE的配置都放到相应模块的配置内部:<IfMole some_mole.c>some_mole config </IfMole>
PHP的安装:
/path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --with-other-moles-you-need
需要修改的配置:
AddType application/x-httpd-php .php .php3 .any_file_in_php
resin的安装设置:
/path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs
具体的resin设置放在另外一个文件中:比如/home/resin/conf/resin.conf
<IfMole mod_caucho.c>
CauchoConfigFile /path/to/apache/conf/resin.conf
</IfMole>
mod_expires的安装配置:
<IfMole mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 month"
ExpiresByType text/css "now plus 1 month"
ExpiresDefault "now plus 1 day"
</IfMole>
注释:
所有的.gif文件1个月以后过期
所有的文件缺省1天以后过期
mod_gzip的安装
http://www.chedong.com/tech/compress.html
日志的轮循:cronolog的安装和设置
cronolog可以非常整齐的将日志按天轮循存储
缺省编译安装到/usr/local/bin/下,只需要将配置改成:
CustomLog "|/usr/local/sbin/cronolog /home/apache/logs/%w/access_log" combined
日志将按天截断并存放在以星期为目录名的目录下:比如:log/1是周一,log/5是周五, log/0是周日
用gzip压缩每天的日志:
30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log
日志的定期删除:
30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f
升级维护:
由于使用动态模块加载方式(DSO模式)安装Apache,Apache的HTTPD核心服务和应用模块以及应用模块之间都变的非常灵活,建议将所有独立模块的配置都放在
<IfMole mod_name>
CONFIGURATIONS..
</IfMole>
里,这样配置非常容易通过屏蔽某个模块来进行功能调整:比如:
#AddMole mod_gzip.c
就屏蔽了mod_gzip,而其他模块不首任何影响。
安装和维护过程:
系统安装:系统管理员的职责就是安装系统和一个按照DSO模式安装的Apache,然后COLON。
应用安装:由应用管理员负责具体应用所需要的模块并设置HTTPD。
系统升级:系统管理员:升级系统/升级Apache
应用升级:应用管理员:升级应用模块:PHP CAUCHO等
系统备份/恢复:如果Apache不在缺省的系统盘上,只需要将Apache目录备份就可以了,遇到系统分区的硬件问题直接使用预先准备好的系统COLON,再直接将Apache所在物理盘恢复就行了。
系统管理员:Apache的最简化安装 OS + Apache (httpd core only)
应用管理员:应用模块定制 纯静态页面服务
core
PHP动态页面
core+so
+php
JAVA应用
core+so
+caucho
+ssl
应用例子: www.example.com
image.example.com
bbs.example.com mall.example.com
例子:Apache和PHP模块的独立升级。
如果Apache是按照以下方式安装:
./configure --prefix=/home/apache --enable-shared=max --enable-mole=most
PHP是按照以下方式安装:
./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql
以后单独升级Apache的时候,仍然是:
./configure --prefix=/home/apache --enable-shared=max --enable-mole=most
make
su
#/home/apache/bin/apachectl stop
#make install
单独升级php时,仍然是:
./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql
make
su
#/home/apache/bin/apachectl stop
#make install
#/home/apache/bin/apachectl start
基于反相代理的WEB加速:
squid和mod_proxy都可以实现反相代理加速。而基于缓存的代理加速比起原有WEB服务,速度会有数量级的提升。
小提示:
Apache安装后,缺省根目录下没有但很有用的2个文件:
⑼ 求《大型网站服务器容量规划》全文免费下载百度网盘资源,谢谢~
《大型网站服务器容量规划》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1lV6WYMbSORDq0WDzvovBwA
简介:本书讲解了用数学回归分析方法来做服务器容量规划的思路,让读者掌握服务器容量规划的量化方法;模型的选择是服务器容量规划的关键,不同的程序有不同的模型。本书使用nginx+PHP+MySQL为实例演示了具体的规划过程,以便达到触类旁通的作用,使读者具备构建复杂模型的能力,以解决服务器容量规划的实际问题。本书还介绍了服务器容量一般监控的技术及实现方法,如整机CPU、进程CPU、进程IO等。学习完相关章节后,读者也可以编写监控程序了。
⑽ php 系统架构
网上收索的,共享给你:
《Beautiful Architecture》?
《Beautiful Code》的姐妹作,里面有三成的架构是自己感兴趣的,已经有国内出版社拿下了,架构师的唐诗三百首------O'reilly新书Beautiful Architecture(InfoQ)?。
《97 Things Every Software Architect Should Know 》?
一个开放的wiki?,O'Reilly 将它发布成书,不知道有没人在翻,架构公理的书(InfoQ)?。
《Pattern-Oriented Software Architecture, Volume 4 - A Pattern Language forDistributed Computing》?
架构模式的集大成者,号称有人在翻但等了一年中文版还是没翻出来啊,面向模式软件架构第4、5卷出版(InfoQ)?。
架构技术类
云计算已经开始代替SOA成为新一代Buz Word,回顾一下整个SOA出版风潮,自己觉得值得一读不忽悠的居然只有一本《SOA in Practic - SOA实践指南-分布式系统设计的艺术》?。
在热潮彻底退却前,SOA的书还在继续出着,OSGI与SCA的书也开始出现:
《SOA Design Patterns》?
又是Thomas Erl的书,很奇怪的连电子版都找不到,SOA设计模式出版啦(InfoQ)?。
还 没出版的呀一大堆 --《SOA Patterns》、《ESB Architecture for SOA》、《SOA with Java》、《Open Source SOA》、《OSGi in Action》、《SpringSource dm Server in Action》、《Molar Java: Creating Flexible Applications with OSGi and Spring》、《Understanding SCA》、《Apache Tuscany in Action》...
编程匠师类
立志做一个匠师的人今年比较幸福,可以看的书很多:
《Beautiful Code - 代码之美》 ?
很有经典潜质的一本,去年没有读完今年继续,《代码之美》的精选版(InfoQ)?。
《Protive Programmer - 卓有成效的程序员》?
Thoughtworks中国翻译的,看了下样章,熊节(透明)的翻译依然是这么好, 《卓有成效的程序员》推荐序:做一个懒人(InfoQ)?。
《Clean Code: A Handbook of Agile Software Craftsmanship》?
Rober。C大叔的书,不知道谁在翻,应该很容易翻啊,到后面大段大段都是代码。
《Effective Java中文版(第2版)》
Web系统架构及开发推荐书籍:
一、《Linux企业集群—用商用硬件和免费软件构件高可用集群》
深入分析了LVS, HeartBeat等,是构建Linux集群不可多得的资料。
二、《构建高性能Web站点》
重点介绍如何构建一个高性能的Web系统,国内为数不多的值得一读的技术书籍。
三、《大规模Web服务开发技术》
对大型网站涉及到的技术及相关知识点做了介绍。
四、《构建可扩展的Web站点》
Flicker的经验之谈,重点讲述如何构建一个可扩展的Web系统。
五、《Web容量规划的技术》
Flicker的经验之谈,重点讲述如何进行容量规划。
六、Scalability Rules: 50 Principles for Scaling Web Sites
主要讲述如何开发易扩展的系统。
七、《分布式数据库系统及其应用》(第二版)
中
科院研究生教材,很有料!大型网站的数据库通常是分布式的,如何设计分布式数据库系统?如何优化分布式查询?本书都作了比较专业的解答。另外,
《MongoDB权威指南》、《Cassandra权威指南》对了解NoSQL的同学来说,也非常值得一读。选择合适的数据存储工具是架构师经常面对的问
题。
php架构:
《企业应用架构模式》
《软件架构的艺术》
《J2EE核心模式》
四人帮《设计模式》——推荐其他衍生书籍。
《架构实战—软件架构设计的过程》英文版最好,中文翻译的太差。
《J2EE反模式》
《POSA》的5本(《面向模式的软件架构》系列)
《架构之美》
《模型驱动设计》