天天看點

高并發處理方案

時常看到高并發的問題,但高并發其實是最不需要考慮的東西。為何,他虛無缥缈,很少有網站真的需要這些東西,而且其中很多技術,其實你已經在用了。有這個意識就夠了,不需要時刻盯着這個問題。隻有很少的網站真的能達到高并發。 

簡單做一個歸納,從低成本、高性能和高擴張性的角度來說有如下處理方案: 

  1、HTML靜态化 

  2、圖檔伺服器分離 

  3、資料庫叢集和庫表散列 

  4、緩存 

   5、鏡像 

   6、負載均衡;一個典型的使用負載均衡的政策就是,在軟體或者硬體四層交換的基礎上搭建squid叢集,這種思路在很多大型網站包括搜尋引擎上被采用,這樣的架構低成本、高性能還有很強的擴張性,随時往架構裡面增減節點都非常容易。 

下面也是一個牛人所做的總結,跟上面部分相同。 

高并發時,性能瓶頸及目前常用的應對措施 

1.資料庫瓶頸。Mysql并發連結100 

2.apache 并發連結1500 

3.程式執行效率 

1.有資料庫瓶頸時,目前處理方案無外乎 主從,叢集。增加cache(memcached). 

如:手機之家新系統介紹及架構分享(http://www.slideshare.net/Fenng/ss-1218991?from=ss_embed) 

就是在cache層做優化 

又拍網架構(http://www.bopor.com/?p=652) 

是以增加資料庫,分表分庫的方法解決。 

Sina增加了mq(消息隊列)來分發資料。 

還有風站用了key-value的資料庫。其實這可以了解成一個持久化的緩存。 

2.apache瓶頸。 

增加伺服器。負載均衡。如sina的F5 

由于程序數的限制。會把一些基本不變的代碼挪出來放到單獨的伺服器。如css/js/圖檔。 

國内成功的案例是tom的cdn 

又如nginx的橫空出世和squid的反向代理都是基于這個原因出來的。 

3.php的執行效率。原因有多個。 

1).本身的效率低。 

解決的成功案例是Zend Optimizer 和 facebooke的hiphop 

Taobao是把php代碼編譯成子產品解決效率問題。 

2). 資料庫查詢效率問題。如可能有order by ,group by 等Sql資料問題。 

這個其實應該歸結到資料庫設計問題。 

解決的辦法是建立正确的索引。增加memcache.。 

對like表 用專用的sphinx.和lucence 等搜尋服務。 

程式員都應該會用explain對sql語句作分析。 

說到底。解決高并發就是上面所列技術,程式員要做的就是把每個技術具體實作。

下一篇: Git介紹