簡單說,分佈式是以縮短單個任務的執行時間來提高效率的,而集羣則是經過提升單位時間內執行的任務數來提高效率。css
集羣主要分爲:高可用集羣(High Availability Cluster),負載均衡集羣(Load Balance Cluster,nginx便可實現),科學計算集羣(High Performance Computing Cluster)。html
分佈式是指將不一樣的業務分佈在不一樣的地方;而集羣指的是將幾臺服務器集中在一塊兒,實現同一業務。分佈式中的每個節點,均可以作集羣。 而集羣並不必定就是分佈式的。mysql
以前在網上看到一篇關於大型網站演化的博客。http://www.cnblogs.com/leefreeman/p/3993449.htmlnginx
每一個大型網站都會有不一樣的架構模式,而架構內容也就是在處理均衡負載,緩存,數據庫,文件系統等,只是在不一樣的環境下,不一樣的條件下,架構的模型不同,目的旨在提升網站的性能。git
最初的架構只有應用程序,數據庫,文件服務。github
到後來,分佈式服務、集羣架設。web
在上一篇,《Nginx反向代理實現均衡負載》討論過過的nginx現實均衡負載方案,這裏選擇另外一種HAProxy+Keepalived雙機高可用均衡負載方案。redis
HAProxy是免費、極速且可靠的用於爲TCP和基於HTTP應用程序提供高可用、負載均衡和代理服務的解決方案,尤爲適用於高負載且須要持久鏈接或7層處理機制的web站點。sql
不管是Haproxy仍是Keepalived甚至是上游服務器均提升生產力並加強可用性,也就是以下架構中Haproxy,Keepalived,Httpd服務器任意宕機一臺服務仍是能夠正常運行的。
HAProxy的優勢:
一、HAProxy是支持虛擬主機的,能夠工做在四、7層(支持多網段);
二、可以補充Nginx的一些缺點好比Session的保持,Cookie的引導等工做;
三、支持url檢測後端的服務器;
四、自己僅僅就只是一款負載均衡軟件;單純從效率上來說HAProxy更會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的;
五、HAProxy能夠對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡;
緩存分爲服務器緩存和應用程序緩存。
關於應用程序內緩存,已經在Jue後臺框架裏面作了模塊處理了。
關於服務器緩存,主要緩存服務器文件,減小服務器和php交互,減小均衡負載服務器和應用程序服務器交互。
緩存裏面有一種典型的memcached,如今用的多的是redis輕量級緩存方案。
關於memcached與redis,看這篇 《Memcached vs Redis?》
Redis主要將數據存儲在各類格式:列表,數組,集合和排序集,一次能接受多個命令,阻塞讀寫,等待直到另外一個進程將數據寫入高速緩存。
一篇關於Reids緩存方案。《高可用、開源的Redis緩存集羣方案》
(第一期不作,後期需求時候考慮)
Sphinx是俄羅斯人開發的,號稱是很吊啦,千萬級數據檢索,每秒10MB/s,搭過環境。
Sphinx和MySQL是基於數據庫的全文引擎,建立索引是B+樹和hash key-value的方式。
原理相似於用底層C檢索MySQL,而後弄出一個sphinx.conf配置文件,索引與搜索均以這個文件爲依據進行,要進行全文檢索,首先就要配置好sphinx.conf,告訴sphinx哪些字段須要進行索引,哪些字段須要在where,orderby,groupby中用到。
NoSQL在這裏的使用價值是處理一些雜事,好比用戶我的網站的一些css值,height,width,color等等的小而繁多的數據,採用NoSQL旨在提高數據庫速度,減小對MySQL的SELECT請求。
關於NoSQL的方案不少了,選一個簡單的MongDB好了。
(作分佈式MySQL還沒嘗試過,初期也不清楚mysql所須要的壓力,因此第一期不打算作分佈式MySQL)
綜合起來,大體就是以下模型,初探分佈式架構,不少模塊將就形勢作調整,時時更新中,待續。。。