怎麼樣才能高效的開發程序?有一部份人會說,程序就是堆積木,到網上找些模塊來用就好了;有另外一部份人會說,能夠找一些現成的框架與開源軟件下載來修改就好了。php
大型高併發高負載網站的系統架構淺淡
怎麼樣才能高效的開發程序?有一部份人會說,程序就是堆積木,到網上找些模塊來用就好了;有另外一部份人會說,能夠找一些現成的框架與開源軟件下載來修改就好了。你們都說的沒錯,如今國內的開發人員廣泛不會考慮程序的性能與代碼的大小,只圖快速完成任務就OK了。
那麼怎樣才能高效的開發出功能強大、穩定性高、安全性強、負載量重的程序呢?不少程序開發相關人員可能從未想過這方面的問題。當今的程序是愈來愈大,不少網站代碼都差很少,使用的框架太盡相同,代碼中包含了太多無用的代碼模塊,我相信也有一部分程序開發人員對本身所使用的框架是怎麼運行的都不太清楚。清楚是框架是怎麼運行的太麻煩了,會用就好了,這話說的沒錯,但也別忘了程序代碼能夠隨便COPY,但程序真正的精髓是思想,思路是沒法COPY的。算法
本文我將以Nginx + Php + MySql + Memcached來討論一下如何設計高負載的網站系統架構。
之前我一直覺得大型高併發高負載的網站瓶頸是MYSQL,後來我從一高人那瞭解到一種全新的設計思想才知道原來大型網站的瓶頸是WEB服務器鏈接數。
高人的設計思想是,動態網站的內容第一次生成後就存儲到Memcached當中,當第二次有鏈接請求時,PHP程序先判斷此頁面的內容是否在Memcached當中有存在,若存在則直接輸出Memcached當中所對應的頁面內容。那麼又會有人問:要是個人頁面須要即時更新怎麼辦了?對於這個問題,我想更新不會整個頁面當中的內容全更新吧,就拿論壇來講,咱們須要即時更新訪問人數,而頁面的內容並無作修改,這時怎麼辦纔好了?這時咱們能夠在顯示訪問人數處做一個標記,而且記錄訪問數量時並不時時同步更新到數據庫當中,而先更新來到Memcached當中,再將須要更新的SQL語句也存儲到Memcached異步SQL更新的隊列當中,當有人訪問頁面時,再從Memcached當中獲取訪問人數,再替換標記就OK了。
我可能沒有說清楚,但這種東西講不清楚,我最後將總結的幾句寫下。
1、 數據庫設置1臺MASTER數據庫只寫,N臺SLAVE數據庫只讀。
2、 記住MASTER數據庫不建立索引,而SLAVE數據庫定要建立大量索引。
3、 頁面的生成可採用靜態,若非要採用動態請加上Memcached。
4、 非即時需更新與新增的SQL採用異步更新到MASTER庫,異步的SQL存儲到Memcached當中,定時或條件觸發更新到主庫當中。
5、 存儲到Memcached當中的數據儘量的小,不要存儲大數組,若非來存儲大數組,請拆分紅多個KEY分別進行存儲。
6、 MYSQL 與Memcached不對外網,只對WEB服務提供內網服務。
7、 不採用SESSION,採用COOKIE加密碼校驗算法,非要採用SEESION請將SESSION存儲到數據表內存表或Memcached當中。
8、 多服務器WEB程序與WEB服務器作境像,採用DNS輪循定位。
9、 儘量的少寫代碼,能重複使用的代碼儘量的重用,代碼儘量的精短高效,以追求精益求精爲宗旨。
10、 動態頁面(PHP JSP ASP)與靜態頁面(HTML JPG GIF PNG)最好分服務器專門提供服務。
11、 有條件的話靜態文件或大圖片文件有條件可採用CDN服務。
12、 有C語言技術作後盾的話可用C語言開發PHP擴展。
固然以上的辦法較適合服務器資源有限,如果財大氣粗的您還將會有不少的解決方案,在此就不描述了。
順便藉此來推銷一下本人使用多年的PHP框架,您也還能夠下載wcore框架試試http://www.hoojar.com/tmp/wcore.zip但願能對您在程序設計思想上有所幫助。謝謝!
言談不足,望衆互教,衆獻良思,技藝超羣,普遍學習,授教如衆。數據庫
轉載:http://www.hoojar.com/view-lore.php?lid=66963 大型高併發高負載網站的系統架構淺淡數組