免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷
打印 上一主题 下一主题

专家座谈——Web开发中你所遇到的性能问题(大奖) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-09-07 18:41 |只看该作者
回复 5# kns1024wh


    你这情况真遇到过 , 客户说数据库连接为什么不断开!  听说 那项目小组查出问题后 , 查记录,重罚了做测试的人...

论坛徽章:
0
12 [报告]
发表于 2011-09-08 09:45 |只看该作者
回复 12# taojie2000


    项目做多了,遇到很多类似的现象。做系统架构的关注的并不是一个系统架构方面。很多问题都是要和应用的代码整合优化有关系的。系统是从专业层面给出建议。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
13 [报告]
发表于 2011-09-08 13:02 |只看该作者
本帖最后由 renxiao2003 于 2011-09-10 22:08 编辑
1,初学者怎么入门Web开发?

其实我接触WEB开发的时候,我已经做过四五年的软件开发了,但对于WEB而言,我真的是初学者。至于怎么入门最好。我觉得如果你没有相关的编程经验,那么要做WEB开发,至少你应该熟悉一些HTML的知识和规范,已经CSS和JavaScript语言,这都是WEB开发的基本知识了。我最初的时候接触WEB开发(其实我觉得这个不像WEB开发,更像MIS的开发,当时做的是一个OA系统)时,就是对原有系统的维护,其实当时是会一点JavaScript和Html的。因为原来的系统有一定的规模了,所以要做东西的时候很快。后来是做一个电厂的系统,再后来做一个日本的WEB项目,这时静态页面都是美工做好的,我们只需要把数据添加进去。如果让我去做画面可能会很糟糕。
所以,做WEB开发,特别是初学者,应该选好方向,将来是做UI部分还是做后台部分(毕竟现在的WEB开发不可能让你只写HTML静态页面了)。如果要做UI,那么你必定得有相应的美术基础(否则你做的页面是没法看的),其实要了解一定的JS知识,CSS是必会的了,如果你还会使用FLASH等相关的展示就更好了。
如果你对写代码感兴趣而又自觉得没什么美术天份,那你就要想好你的语言方向了。现在流行的开发语言(针对WEB的)很多,有.NET,PHP,JAVA等等。

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

我使用过的WEB开发技术,主要有ASP.NET,PHP和JAVA,这也是目前WEB开发中主流的Web开发语言,用PHP和ASP.NET分别做过一个项目,用JAVA做过三个项目。针对这三种语言,选择依据如下:
如果你要开发的是大型分布式应用,那么首选是JAVA了,JAVA的分布式处理能力以及跨平台性,使得他有更强的生命力。
而如果开发的是一个中型项目,那么使用ASP.NET是首选,他的开发速度远快于JAVA,而稳定性对于中型项目是足够的。
而PHP,做快速开发是比较适合的,而且很容易入门上手,他的难度远低于前两种语言。

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

随着现代WEB开发技术的发展,开发技术日新月异,这就要求我们必须不断的学习,才能跟得上时代的发展。因为我所开发的项目不是上万级的访问量,一般是几百,所以使用普通的PC SERVER就能满足。性能上没有太大的问题,但就是我开发的那个OA,使用的是WINDOWS2003做SERVER,TOMCAT在运行一定时间后就会内在泄露,必须重启服务或者重启服务器,我想关于OutofMemory这个错误是很多JAVA开发员都碰到过的问题。

论坛徽章:
10
CU大牛徽章
日期:2013-09-18 15:20:48程序设计版块每日发帖之星
日期:2016-07-21 06:20:00IT运维版块每日发帖之星
日期:2015-07-30 09:40:01技术图书徽章
日期:2014-10-14 16:00:43天蝎座
日期:2013-09-27 17:41:29CU大牛徽章
日期:2013-09-18 15:21:17CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:20:58每日论坛发贴之星
日期:2016-07-21 06:20:00
14 [报告]
发表于 2011-09-08 21:11 |只看该作者
1,初学者怎么入门Web开发?
  有VB基础的当然用ASP
  有C基础的建议用PHP
  有JAVA基础的还是建议用PHP,简单嘛。
  在接触PHP之前是用的CGI , 用过perl,自己也写过一个简单的CCGI程序库
  后来PHP得到了发展,也就一直在用PHP方便嘛
  在实际应用过程中,ASP的部署还是比较简单的,易用,人手还便宜。
  在一些小应用中ASP的整体性能要比PHP高。

2,你选哪种Web开发技术,JEE、PHP、.Net、RoR、Django......?,依据是什么?
  目前用的是C,因为连CCGI也算不上,几乎全套都是自己写的。
  SOCKET引擎+CGI数据处理,最后用OTL来连接ORACLE。
  这个构架花了我接近一年的时间不断完善。过程和原因正好就是第三点。

3,如果你是一名Web开发者,请把你在Web开发中遇到的性能问题跟大家做个分享。
a.前提:由于某些行业非强制规范,要求实现SOA。同时不能有知识产权问题。
        数据库可以甲供,但操作系统什么的一般不会甲供,所以除了数据库,其他成本都要低。
        维护量还要小。
b.选型:
  用PHP代码的保密性比较差,加密的话就涉及到成本问题,所以PHP扔掉。
  ASP,.NET也扔掉总体成本还是比较高,而且在前一个版本的运行中发现,WINDOWS服务器的
  超内存使用会有一些意想不到的问题。现在想来还是心有余悸,这也是重新构架软件的主要原因之一。
  后来考虑用PYTHON来实现,这样构架上比较方便,而且各方面好评也比较多。
     在实际应用中发现PYTHON有一个不好地方,就是内存管理上面,并发量一上来,内存就吃得比较多
     同时国内的PYTHON用的人也不多,完成后,后继维护比较困难。
     PYTHON处理中文什么的还是比较搞的,后来用PYTHON做了一个小项目后就扔掉了。
  再后来自己设计了一个代码生成系统,用PHP来生成C代码,用NGINX+FASTCGI+OTL。
     看上去好象不错。也可能是自己水平问题,生成的代码运行一段时间以后进程会陆陆续续掉下去。
     这个情况在hi-pda也经常看到一访问就是500,要重启spawn比较麻烦。要知道hi-pda是用的php,
     所以综合一考虑,spawn-fcgi方式还是扔了吧,写好的500K的代码也就直接扔了。
     更主要是在不同的LINUX上布署NGINX,FASTCGI实在也不是个好差事!
     NGINX的配置也比较麻烦,业务系统和网站系统在nginx里混合也很乱,这个规划真的不太好做。
     
c.结果:
  WEB其实很容易,就是输入一堆字符串,再输出一堆字符串。
  所以自己写个SOCKET框架,架设起来就很容易,布署起来也就不需要亲自出马,只要懂得chown cp的就可以部署。
  自己写个cgi分析,把输入的值全部变成char * ,出于安全还可以提前做好过滤操作,从低层做了全局的输入安全保障。
  最后业务逻辑不管输入的是GET还是POST还是SOAP,只管读参数处理就OK
  另一个很大的好处就是可以用C++与其他的业务逻辑进行耦合。
  
d.应用:
  调试很方便,因为可以象PYTHON那样在控制台上输出调试信息,比PHP ASP JSP都爽
  布署方便,装好ORACLE客户端,配置好信息,在rc.local里启动,最多再cron里杀杀可以保证运行稳定。
  性能方便和APACHE+PHP做一个比较,用AB做了一个简单的测试
  1.纯IO,比APACHE略差,做了SOCKET池后,有了比较明显的提升。
  2.数据库操作,快的不是一点点。
  部署了近一个月了,运行非常稳定。
  
e.结论:
  想要在维护中少花精力,就在前提做好设计。这个应用还是比较极端的可能不具有代表性
  但在实际WEB开发中,想要以后偷懒的人,值得一起思考一下。

论坛徽章:
0
15 [报告]
发表于 2011-09-09 08:18 |只看该作者
本帖最后由 首天 于 2011-09-09 11:35 编辑

先占个位子

论坛徽章:
4
CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2014-02-10 17:22:57技术图书徽章
日期:2014-02-18 08:44:12技术图书徽章
日期:2014-04-29 14:15:42
16 [报告]
发表于 2011-09-09 09:17 |只看该作者
本帖最后由 gnah 于 2011-09-13 18:14 编辑

做过JEE,.net,django
最后又回到了JEE

说下JEE吧,导致性能问题的因素比较多,线程数配置,内存,sql效率,缓存等等。
我们生产环境用的是Tomcat,根据服务器具体情况,设置合适的线程数(maxThreads),数据库连接池最大连接数了,最少空闲连接数量等等,发挥服务器最大的性能。
对于内存方面Web长期使用产生OOM等,可以profile找出原因并尽可能解决之。
编码方面,工厂模式,单例模式的运用很重要,可以减少对象创建的数量,减少内存使用,降低垃圾回收频率。
如果用apache commons logging或直接log4j,要加保护代码,减少字符对象的创建,要养成良好的习惯。

JEE的许多orm产品提供了缓存机制,对性能也很有帮助,比如我现在正在做的项目使用的JPA
开启二级缓存(L2 cache)后,性能有了明显的提高。(当然,也碰到了一些问题,比如多个app server之间同步问题,等等)

还有些优化不是JEE独有的:
比如浏览器缓存,对于静态内容,图片,js,css等等,可以将expires header设定的比较长些,可以减少服务器负担。
还有文本内容的压缩传输等

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
17 [报告]
发表于 2011-09-09 10:22 |只看该作者
回复 15# tomac_cu


用PHP代码的保密性比较差,加密的话就涉及到成本问题,所以PHP扔掉。

这个应该是php一直被称为"草根"语言的原因之一吧.正如你帖子里面讲的,php源代码加密确实成本有点高.Java倒是可以编译,但是,在学习过程中,修改代码需要编译,时间成本又提高了.
喜欢php,就是喜欢他的灵活,修改容易,可以说基本上是即时修改,客户端刷新,就能看到效果,很方便.

更主要是在不同的LINUX上布署NGINX,FASTCGI实在也不是个好差事!
     NGINX的配置也比较麻烦,业务系统和网站系统在nginx里混合也很乱,这个规划真的不太好做。

这个可以问下"抚琴煮酒",他在nginx做反向代理方面很有心得

    在实际应用中发现PYTHON有一个不好地方,就是内存管理上面,并发量一上来,内存就吃得比较多
     同时国内的PYTHON用的人也不多,完成后,后继维护比较困难。

python还没用过呢,据说Java用内存也很厉害!

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
18 [报告]
发表于 2011-09-09 10:45 |只看该作者
写一个真实的例子吧,我遇到的.
web系统是别人开发的
1. 问题场景/现象:
php的CMS系统,被人注入攻击,成功获取权限,修改主页面
2. 问题分析:
通过分析apache日志,过滤POST关键字,获取到攻击者的ip,通过反查ip所有web访问记录,查询到该用户所使用的注入方法,经过查询源代码,得到注入攻击的漏洞点.
3. 问题处理:
通过分析,是源代码中对用户输入的过滤有问题,那个参数应该是数字形式的,没有进行适当过滤,使得攻击者可以传输任何恶意代码进行攻击,并成功获取到权限.
通过修改源代码,那个数字参数通过a=a-0的方式,变成纯粹的数字,堵上了漏洞.(php弱类型的毛病啊)
同时,加强权限管理,web目录权限root收回,需要上传附件的目录,才给apache用户,同时,在apache配置文件中添加规则,附件目录不允许执行php文件.

4. 处理结果:
通过观察,漏洞被成功堵上了.

5. 经验教训总结:
代码漏洞在所难免,关键是出现漏洞之后,如何能在第一时间发现攻击并且修补漏洞.

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
19 [报告]
发表于 2011-09-09 11:05 |只看该作者
说起来,聊聊几句话,可是日志分析确实是个苦差事,3G+的日志分析,通过层层过滤,最终得到的结果还有将近10M.
修改源代码,也颇费周章,通过查询类似的源代码,发现漏洞是普遍现象,一通修改,大半天的时间就飞逝了.

论坛徽章:
0
20 [报告]
发表于 2011-09-09 11:44 |只看该作者
1,        初学者怎么入门Web开发?
     这个问题比较我是这样建议的,现在大主流的是 java  asp.net 以后可能会有 python
下面我说下为什么。
   比如我现在懂vb 要不要学习 asp.net 因为毕竟都是微软的,可能会有点相同之处,但是你入门了web开发,以后肯定要深入,那就直接确定好要学习的语言,可能你喜欢开源等,到时候你要在 asp.net 转 java 不是很郁闷?不建议学php。原因是我个人的看法。不谈技术方面的,单拿 招聘的人数是 java 和 .net 里面是,企业级应用也好,还是 4大门户也好,基本都是 java的居多。

2,        你选哪种Web开发技术
Java  这个我不说太多了,我本身也是java开发的。开源也好,大型应用也好。
4大门户都是 java(他们不傻吧)。等,我记得看过一篇文章,忘了是美国的哪个社交网站了,之前是用Rails  开发的,后台流量等问题,说要换java
3,        如果你是一名Web开发者,请把你在Web开发中遇到的性能问题跟大家做个分享。
我这个问题是一个数据接口的并发问题。
  我们公司业务需要,做了数据接口,但是测试要求达到 300并发。
测试结果:达到 200并发的时候 已经响应超时了。
数据库:oracle  记录数大概在 万条数据以内(因为刚开始,数据库的数据很少)
机器:32位 pcServer
这个程序,基本上就是放缓存,如果去同一条数据,我会先取 Memcatch
最后得到的结论:这个硬件,就是这个瓶颈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP