2gua 发表于 2011-09-12 16:04

欢迎大家多多参予~!

coolesting 发表于 2011-09-12 22:29

一般的企业,只有一台服务器,既是DB服务器,又是WEB服务器,甚至这只是一个VPS,或仅仅是虚拟主 ...
tomac_cu 发表于 2011-09-12 09:27 http://bbs.chinaunix.net/images/common/back.gif


    如果这个企业对网络上的经营只投入一台服务器,
    那么他也会不愿意高薪长期顾用一个高级程序員去帮他的WEB应用软件进行优化和维护,

    唯一极限的优化就是静态化, 这样达到单台服务器最极限的性能,
    他用的动态语言无论是什么都几乎不会成为拖累。

无风之谷 发表于 2011-09-12 23:33

回复 11# 七夜


    七夜,分享下你的案例嘛

tomac_cu 发表于 2011-09-13 08:38

如果这个企业对网络上的经营只投入一台服务器,
    那么他也会不愿意高薪长期顾用一个高级程序 ...
coolesting 发表于 2011-09-12 22:29 http://bbs.chinaunix.net/images/common/back.gif


    是最终用户只能投一台服务器,所以才有这么多的静态优化

兰花仙子 发表于 2011-09-13 12:22

1,初学者怎么入门Web开发?

我已经久未开发web了。当今主流的web开发环境,无非是php、.Net、Java,我认为对于缺乏编程经验的初学者来说,PHP很合适。PHP跟Perl很像(最早的PHP是用Perl开发的?),是面向过程的语言,通过简单的函数调用,就完成大部分的web和数据库处理。作为Perl版主,虽然我更喜欢其他web编程语言如Ruby,但是我仍然推荐PHP。它天生是一门web语言,与数据库结合紧密,并且容易上手,能快速完成工作,这就可以了。


2,你选哪种Web开发技术,JEE、PHP、.Net、RoR、Django......?,依据是什么?

我之前一直用Perl/Mod_perl开发WEB。Perl web开发在国内甚少,但在美国和欧洲,还是很多。互联网早期的动态网页,都使用Perl CGI开发。CGI并不代表过时的技术,国内的QQMail和俄罗斯的Mail.ru,他们的webmail都使用CGI技术(当然,不一定是Perl CGI),每天支撑数千万的动态访问。Perl开发CGI的好处也是容易上手,掌握Perl和HTTP的基础知识,再看下CGI这个模块的文档,就可以写网站了。另外CGI和Template::Toolkit结合,可以让HTML代码与perl代码彻底分离,从而让web开发员与UI设计师都很舒服。

对于性能要求高的网站,我们使用Mod_perl。mod_perl将perl解释器编译进Apache,这样每个apache进程启动时,就启动了一个perl解释器。然后,perl解释器从磁盘加载代码并编译,只要这个apache进程不退出,这些代码就都在内存驻留,避免了启动解释器、加载文件、编译等一系列开销,使程序运行速度很快。mod_perl还有个好处是可以直接访问Apache的内部API,这非常方便,我们可定制apache处理器,来实现一些特殊功能的处理,如输入输出前的过滤和访问控制。


3,如果你是一名Web开发者,请把你在Web开发中遇到的性能问题跟大家做个分享。

之前参与开发过一些较大的web系统,基本架构是:应用服务器Apache/Mod_perl,数据库服务器Mysql,反向代理服务器Nginx,数据库连接池Apache::DBI,数据缓存Memcache。

Apache和mod_perl是重型应用服务器,它们处理动态web请求,比如查询数据库、计算结果并返回。apache/mod_perl一般都是prefork运行,这样由apache直接面对客户端,会有很多不利因素。例如一个客户请求就要fork一个进程,并且慢客户端会导致进程吊起,浪费资源,因此通常在apache前端使用Nginx反向代理。Ngninx是事件驱动型的轻量级web服务器,它一方面可以承担更高并发、处理慢客户端连接,另一方面处理静态文件更快(当然,nginx不能完全代替modperl或java的应用服务器,我之前专门写过一篇帖子)。

除了web服务器外,与性能关系更为紧密的就是数据库。除了优化SQL查询、设计分库分表外,我们还可以使用Apache::DBI来保持长连接,避免程序每次与数据库建立连接的开销。还有Memcache也可以用得上(memcached是一种内存型的key/value数据库,我在CU很早前写过一篇帖子介绍memcache及其perl API),把查询量大、更新不频繁的内容放在memcache里,可以大大减轻数据库的压力。还有其他一些NoSQL技术如MongoDB、TTServer、Cassandra等,也可以作为关系型数据库的补充,这些我都测试过,但没正式应用过,不多述。

coolesting 发表于 2011-09-14 15:29

To 36 楼
“把查询量大、更新不频繁的内容放在memcache里” ? 是不是多了个字

兰花仙子 发表于 2011-09-14 15:58

To 36 楼
“把查询量大、更新不频繁的内容放在memcache里” ? 是不是多了个字
coolesting 发表于 2011-09-14 15:29 http://bbs.chinaunix.net/images/common/back.gif


    看怎么用。把读分离出来放memcache没什么不可以。

Orpherus 发表于 2011-09-14 21:29


    如果mysql 打开连接 即便是数据取用完成也不关闭 那样的代码简直就是灾难


我觉得persistent link可以避免反复建立和销毁连接的开销,能提高性能。
不准备复用的连接,用完了也不关闭,没人会这么做吧。

Orpherus 发表于 2011-09-14 21:45

前面有人提到,python处理中文有些搞,其实还好,
decode和encode方法,初学的时候可能会一头雾水,
理解了就觉得很优雅,很多知名的库都有类似设计,
例如C++的QT库,苹果objc的NSData和NSString.

Orpherus 发表于 2011-09-14 22:10

关于python并发高占用内存高的事情,这个没办法,毕竟不是C也不是C++。
在资源紧张的虚拟主机上可能会成问题,可以简单的计算一下,以nginx+uwsgi部署为例子,
8个nginx进程处理请求,静态资源处理掉,动态资源转发给python处理,假设有16个python进程,
每个进程每秒处理30个请求,动态请求的处理能力就有480/s了,算上静态处理能力,已经不低了,
而16个python进程,占用内存一般不会超过1GB,一个日均上百万PV的网站,这点内存算不了什么负担。
tornado是一个有名的python库,使用它可以达到8000/s的动态请求能力(hello word级别),
承载上业务逻辑后能到达什么性能,除了看业务逻辑有多复杂,更要看使用者的水平。
页: 1 2 3 [4] 5 6 7 8
查看完整版本: 专家座谈——Web开发中你所遇到的性能问题(大奖)