免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: cryboy2001

[Web] 有奖讨论:Web性能优化:说说您的独门绝技~(获奖名单已公布-2014-5-28) [复制链接]

论坛徽章:
1
巨蟹座
日期:2013-12-30 17:06:34
发表于 2014-05-23 21:54 |显示全部楼层
没啥秘籍:一个字 “拆”

论坛徽章:
26
CU十二周年纪念徽章
日期:2013-10-24 15:41:34技术图书徽章
日期:2014-07-11 16:27:52辰龙
日期:2014-09-04 13:40:43白羊座
日期:2014-09-09 12:51:55双子座
日期:2014-09-26 11:00:042014年中国系统架构师大会
日期:2014-10-14 15:59:00子鼠
日期:2014-10-23 16:48:23巨蟹座
日期:2014-10-27 08:21:10申猴
日期:2014-12-08 10:16:282015年辞旧岁徽章
日期:2015-03-03 16:54:15NBA常规赛纪念章
日期:2015-05-04 22:32:03IT运维版块每日发帖之星
日期:2016-01-29 06:20:00
发表于 2014-05-26 08:42 |显示全部楼层
Darleter 发表于 2014-05-23 21:54
没啥秘籍:一个字 “拆”



“拆”如何理解。

论坛徽章:
1
巨蟹座
日期:2013-12-30 17:06:34
发表于 2014-05-27 10:10 |显示全部楼层
cryboy2001 发表于 2014-05-26 08:42
“拆”如何理解。


和这里绝大部分同行的理解可能都不一致。
主要拆的方式:
从业务上入手进行拆分,比如前台页面,和后台就可以明显的拆分成不同的入口,针对不同的业务特性采用不同的系统架构设计,这部分主要解决业务之间的相互影响。
另外一个拆主要针对数据,水平拆库同样需要很强的业务支撑。
拆后的目的主要支持业务能水平扩展,相互之间的影响要降低。

从技术上来说:
主要满足业务池的快速缩减增加。
中间数据缓存降低数据库压力的同时,需要满足相互不受影响。
数据层面需要满足,查询和写入在不同库上。

然后为了满足以上需求,干活!



论坛徽章:
0
发表于 2014-06-13 16:24 |显示全部楼层
关于web性能优化,结合我自身的项目经历,简单总结一下:


1.  DNS优化
     第一次网页浏览会加载各种资源,发出很多动态请求,从输入地址框DNS解析主域名就要开始优化了,好的或者说企业级的DNS提供商可以大大缩短各个地域的本域名dns解析时间。貌似html5 还有一些浏览器支持dns 预加载的东西,可以加速网页其他资源域名解析速度。

2. CDN & BDN
    总的特点是横向负载,CDN 内容负载一些静态请求,BDN业务负载一些动态请求。
    关于CDN的工作方式,
       A需要向CDN服务器单独上传静态资源.
       B.CDN server 主动向后端主站发请求,会缓存静态请求,对于这种情况后端主站可以有单独的图片服务器,或者用nginx的 proxy_cache  或者squid 功能做一个后端的静态缓存,降低后端服务器IO和部分网络负载。
    CDN 可以自建或者购买CDN服务,甚至可以只是同一台主机,同一个域名的别名,其效果就是充分利用浏览器可以为单个域名同时并发6个请求的限制,比如搞几个img0.xx.com img1.xxx.com  css.xx.com js.xxx.com 等等 ,此种情况最好结合DNS优化,效果会更好。
   
     关于BDN的工作原理和效果跟CDN类似,由于动态请求涉及业务逻辑,比如用户各种状态,session,数据共享等等,如果采用多这个集群还要考虑消息队列机制来保持数据一致性,所以实现起来相对复杂一些,但是对于大型应用比如淘宝规模的,BDN负载还是很必要的。

  3. BigPipe & 各种前端技术
      首先保证,静态资源Etag,保证静态资源不需要重复加载。建议在1和2优化的基础上,因为3的优化影响到前端业务实现的方式,程序开发工作量大,如果是起初就在3的基础上做还可以,否则已经成型的网站最后单独做3的优化时,面临各种业务测试任务。
     优化要点包括:
      1.分拆业务到ajax请求,json请求+js模板函数更佳
      2.css 优化减小css体积, 将css调用的样式图片整合到1张图片减少请求数,或者只加载页面所需的css样式
      3.js 优化减小js文件调用以及体积,只加载所需的js
      4.页面输出流采用bigpipe模式,不需要等整个页面在后台跑完,再输出给前端,这样很多已完成部分渲染的静态资源可以提前加载,而不是等到整个页面输出完之后。

4.后端服务优化
    1.负载 均衡
         请求层server本身通过增加节点来负载,比如多搭建几个lnmp,或者lamp节点来做前端load balancer的负载
        数据读写层DB比如mysql,本身支持负载比如master/slave 或者cluster集群负载,还有一些nosql的比如mongodb, redis,memcache,couchbase都支持集群负载,一般用过haproxy来做负载均衡器。
   2.业务优化
      比如大型DB需要分拆表,甚至可以分拆表到不同的server像淘宝。在合适的地方使用高速缓存比如memcache,redis等等,尽可能减少数据层的读写。
     还有就是比如我是php程序员,所涉及也是php的web编程比较多,但有些业务可能php本身不擅长,所以可以考虑采用其他语言来实现,比如nodejs的异步IO特性,用来做实时消息队列,python已存在各种高效库用起来,要比php重写的类似功能用起来估计更稳定高效。业务层的深入优化需要根据详细的业务本身来定制,这已经超出了web性能优化的范畴。

我能想到的就这四点,还请高手指教。 :)
        
      
   

论坛徽章:
0
发表于 2014-09-07 13:54 |显示全部楼层
cqb0202 发表于 2014-05-10 12:51
1、你的Web服务应用是用的什么架构,实现什么应用?(分别列出硬件与软件)
   a、服务器dell, nginx +  ...


楼主写的很好楼主写的很好楼主写的很好

论坛徽章:
0
发表于 2014-09-07 13:59 |显示全部楼层
fire_cpp 发表于 2014-05-10 22:04
1、你的Web服务应用是用的什么架构,实现什么应用?(分别列出硬件与软件)
部分使用的是云服务器(WEB/DB ...


感谢楼主分享感谢楼主分享

论坛徽章:
0
发表于 2014-09-16 22:34 |显示全部楼层

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
发表于 2015-03-08 21:22 |显示全部楼层
我觉得全栈工程师不可能全部都很熟悉,尤其是调优方面。

调优很吃经验的,但是前提是要对各种理论理解的相当深刻,并有一定的经验。

论坛徽章:
0
发表于 2015-03-25 16:55 |显示全部楼层
貌似很牛B,貌似很强大

论坛徽章:
0
发表于 2015-04-24 14:20 |显示全部楼层
占座围观学习各位大神的经验
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP