Reporting项目是我在åšçš„Railsé¡¹ç›®ï¼Œå› ä¸ºæ€§èƒ½é—®é¢˜ï¼Œæˆ‘ä»¬ç»åŽ†æ›²æŠ˜åŽå·çš„è°ƒä¼˜è¿‡ç¨‹ï¼Œä¸ºèƒ½å¦æŒ‰è®¡åˆ’å‘布而担心。庆ç¥å®Œå‘布,我得把一些总结写下æ¥ã€‚
æ•…äº‹æ˜¯è¿™æ ·
- 项目开始于今年三月份,预计在åä¸€æœˆä¸æ—¬æœ‰ä¸ªå¤§çš„å‘布。
- 早在四月份,团队就开始为æ¯ä¸ªè¯·æ±‚ã€æ¯ä¸ªæŸ¥è¯¢åŠ benchmark,目的是监视执行时间,但并没有验收æ¡ä»¶ã€‚
- 八月份,使用Apache Benchmark tool为所有请求在staging环境上åšäº†æ€§èƒ½æµ‹è¯•,å‘现有5个图表性能低,甚至在选择地区数目很大(数百个)时,å“应时间呈指数增长。之åŽåšäº†ä¸¤ä»¶äº‹ï¼Œä¸€æ˜¯åœ¨åšåŠŸèƒ½å¼€å‘çš„åŒæ—¶åšæŒåšæ€§èƒ½ä¼˜åŒ–ï¼Œç›®æ ‡å°±æ˜¯è¿™äº›è¿‡æ…¢çš„è¯·æ±‚ï¼›äºŒæ˜¯é™åˆ¶åœ°åŒºæ•°ç›®é€‰æ‹©çš„上é™åˆ°100ï¼Œä»¥æŽ§åˆ¶æœ€åæƒ…况下的性能。
- 乿œˆä»½ï¼Œä¼˜åŒ–之åŽå¯¹é‚£äº›é‡ç‚¹è¯·æ±‚釿–°è¿›è¡Œäº†å¹¶å‘级别为1的性能测试,结果是å“应时间å‡å°‘了70%~85%,Tom对æ¤å¾ˆé«˜å…´ï¼Œæˆ‘们以为性能问题ä¸å¤å˜åœ¨äº†ã€‚åæœˆäºŒåæ—¥ï¼Œæˆ‘ä»¬å¼€å§‹é‡æ–°åšå…¨é¢çš„压力测试,å‘现一些请求的并å‘访问性能确实æˆé—®é¢˜ã€‚我们立å³å‘ŠçŸ¥äº†å®¢æˆ·è¿™ä¸ªé—®é¢˜ã€‚我们没有利用起这期间的时间,å‘现问题时已ç»å¾ˆæ™šäº†ï¼Œç¦»å‘布åªå‰©1月。
- æŽ¥ç€æˆ‘们就分æžåŽŸå› ï¼Œç„¶åŽå°±å‘现数æ®åº“çš„å¹¶å‘æŸ¥è¯¢æ€§èƒ½æ˜¯é—®é¢˜çš„æ ¸å¿ƒï¼Œå› 为数æ®åº“执行时间å 了请求å“应时间的70%ï¼Œåœ¨å¹¶å‘æŸ¥è¯¢æ—¶ï¼Œæ•°æ®åº“å应时间增长地很快,直接导致请求的å“应时间增长很快。我们需è¦DBA帮忙,但Paul的全部时间已ç»åœ¨å¦å¤–一个项目上了,我们å‘å®¢æˆ·äº‰å–æ¥äº†Paulçš„éƒ¨åˆ†æ—¶é—´ï¼ŒåŽæ¥å®¢æˆ·ä¸ºæˆ‘们安排了å¦ä¸€ä½DBA专门æ¥å¸®å¿™ã€‚
- 请DBAå¸®å¿™çš„æ–¹å¼æ˜¯ï¼Œæˆ‘们告诉他æŸä¸ªæŸ¥è¯¢çš„sqlè¯å¥ï¼Œä»¥åŠç›®å‰çš„æ‰§è¡Œæ—¶é—´å’Œæˆ‘们期望的时间,他们æ¥å¸®å¿™åšä¼˜åŒ–ã€‚è¿™æ ·åšçš„好处是他们立刻知é“è¦å¹²ä»€ä¹ˆï¼Œä¸è€½è¯¯æ—¶é—´ã€‚
- 我们在staging环境上的测试越æ¥è¶Šå¥½ï¼Œç†è®ºä¸Šäº§å“æ•°æ®åº“上的测试结果应更好æ‰å¯¹ï¼Œä½†æ˜¯ä¸æ˜¯è¿™æ ·ï¼ŒæƒŠå–œäº†ã€‚åœ¨äº§å“æ•°æ®åº“上å˜åœ¨ä¸€ä¸ªé¦–次访问å“应时间的问题,就是说在时隔若干时间之åŽçš„头次访问,å“应时间éžå¸¸æ…¢ï¼Œä½†æ˜¯ç´§æŽ¥ç€ç¬¬äºŒæ¬¡è®¿é—®é¡µé¢å°±ä¼šå¾ˆå¿«ã€‚这个问题在stagingä¸Šæ˜¯æ²¡æœ‰çš„ï¼Œè€Œä¸”æˆ‘ä»¬ä¹Ÿæ— æ³•åœ¨äº§å“æ•°æ®åº“上é‡çŽ°ï¼Œä¸çŸ¥é“这个间隔时间是多少,所以很难请DBA监视。
- 如今,所有查询的优化已ç»ç»“æŸäº†ï¼Œåœ¨äº§å“çŽ¯å¢ƒä¸Šæ‰€æœ‰è¯·æ±‚åœ¨å¹¶å‘æµ‹è¯•ä¸çš„ä¸ä½æ•°å“åº”æ—¶é—´æ˜¯åœ¨è¦æ±‚之内的。虽然首次访问å“应时间的问题还在,但是我们和DBA都没有找到办法能åˆç†åœ°é‡çŽ°å®ƒï¼Œå®¢æˆ·åŒæ„的解决方案是:如果需è¦çš„è¯ï¼Œå‘用户æç¤ºç›¸å…³ä¿¡æ¯ã€‚
- 昨天æˆåŠŸå‘布了。
我们å¦åˆ°äº†ä»€ä¹ˆ
如何处ç†é—®é¢˜ï¼Ÿ
- å‘现问题åŽï¼Œåº”è¯¥åŠæ—¶è®©å®¢æˆ·å’ŒDMçŸ¥é“æƒ…å†µï¼Œå› ä¸ºè¿™æ ·çš„é—®é¢˜å¯¹é¡¹ç›®å‘布有直接的影å“。
- 通过一些手段,比如profilerç‰å·¥å…·ï¼Œæ¥æ£€æµ‹åº”用,诊æ–出性能问题å‘生的部ä½å’ŒåŽŸå› ã€‚
- æ€§èƒ½è°ƒä¼˜éœ€è¦æœ‰ä¸€ä¸ªæŒ‡æ ‡ï¼Œåº”该在调优å‰å°±å‘客户ã€ç”šè‡³å®¢æˆ·çš„客户è¦è¿™ä¸ªæŒ‡æ ‡ã€‚ä¸ä»…è¦ä¸Žå®¢æˆ·çš„业务人员谈,还è¦å’ŒæŠ€æœ¯äººå‘˜åŽ»è°ˆï¼Œå› ä¸ºæ€§èƒ½æŒ‡æ ‡åœ¨è¿™ä¸¤æ–¹äººçœ¼ä¸å¯èƒ½å·®å¼‚很大。
- è‡ªå·±åŽ»ç ”ç©¶æ˜¯å¯¹çš„ï¼Œä½†åº”è®¾å®šæ—¶é—´é™åˆ¶ï¼›ä¸åº”该让讨论åªå‘生在团队内部,应该去请教专家,效率会更高。
- åŒæ—¶åº”该让其他项目的åŒäº‹ä¹Ÿäº†è§£æˆ‘们目å‰é¢ä¸´çš„é—®é¢˜ï¼Œå› ä¸ºä»–ä»¬å¯èƒ½å°±æœ‰è¿™æ–¹é¢çš„ç»éªŒï¼Œä¹Ÿå¯èƒ½ä»¥åŽä¼šé‡åˆ°ç›¸ä¼¼çš„æƒ…况。
- 对于数æ®åº“的问题,我们需è¦å®¢æˆ·çš„DBA帮忙,一方é¢è¦äº‰å–ä»–ä»¬çš„æ—¶é—´ä¸æ–催促他们åšäº‹ï¼Œå¦ä¸€æ–¹é¢è¦åšè¶³å‡†å¤‡ï¼Œå‘Šè¯‰DBA最直接的需è¦åšçš„ä»»åŠ¡æ˜¯ä»€ä¹ˆï¼Œè¿™æ ·ä»–ä»¬ä¹Ÿä¼šæ•ˆçŽ‡æ›´é«˜ã€‚æ¯”å¦‚å‘Šè¯‰ä»–ä»¬sql是什么,目å‰è¿è¡Œæ—¶é—´æ˜¯å¤šä¹…,期望时间是多久。
- åˆç†åœ°ä¸Žå®¢æˆ·â€œè°ˆåˆ¤â€ï¼Œæ‰¾åˆ°æŠ˜ä¸çš„è§£å†³æ–¹æ¡ˆã€‚è¿™ä¸ªè°ˆåˆ¤ä¸æ˜¯æŽ¨è¯¿ï¼Œè€Œæ˜¯å在一起讨论,我们的æè®®è¦æœ‰è¶³å¤Ÿçš„业务ç†ç”±å𿔝æŒã€‚
如何é¿å…问题?
- æˆ‘ä»¬åº”è¯¥ä»Žä¸€å¼€å§‹å°±æŠŠæ€§èƒ½çº³å…¥è€ƒè™‘ï¼Œåœ¨ç¼–å†™ä»£ç æ—¶æ³¨æ„åˆ°å®ƒï¼Œè€Œä¸æ˜¯ä¸“é—¨åšä¼˜åŒ–时被迫é‡å†™éƒ¨åˆ†ä»£ç
- 我们应该把性能测试和调优的ç€çœ¼ç‚¹æ”¾åœ¨äº§å“çŽ¯å¢ƒä¸Šï¼Œè¿™æ ·å¯ä»¥é™ä½Žæœ€åŽå¾—到惊喜的风险
- 我们应该尽早地å‚è€ƒæ€§èƒ½æŒ‡æ ‡è®¾è®¡åŒ…æ‹¬åŽ‹åŠ›æµ‹è¯•åœ¨å†…çš„æ€§èƒ½æµ‹è¯•ç–ç•¥
- 对新版本的探索性测试时,应当对性能表现留心,更早地察觉并æ„识到问题,这应该å«åšæŒç»ä½“验(continuous experience)
当å‰å‘å¸ƒä¸æ£åœ¨åšçš„事
- åœ¨æŠ€æœ¯é€‰åž‹æ—¶ä¸ºæ€§èƒ½åšæ›´å¤šçš„考虑
- å…ˆåšåŒ…括å¯èƒ½å‡ºçŽ°æ€§èƒ½é—®é¢˜çš„æ•…äº‹åœ¨å†…çš„é«˜é£Žé™©æ•…äº‹
- 在第一个页é¢å¯è®¿é—®ä¹‹åŽå°±è®¾è®¡æ€§èƒ½æµ‹è¯•ç–ç•¥
- åœ¨åšæ›´å¤šçš„æ•…事之å‰å°±ä¸ºæ€§èƒ½åšç»Ÿç¹è€ƒè™‘