處理高併發的解決方案

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

簡單做一個歸納,從低成本、高性能和高擴張性的角度來說有如下處理方案:
 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語句作分析。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章