1.FastDFS與Nginx
Nginx:高性能的http和反向代理服務器
Nginx ("engine x")是一個高性能的 HTTP 和?反向代理 服務器,也是一個 IMAP/POP3/SMTP 服務器。因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發布。
正向代理:
是一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。
反向代理:
正好相反,對于客戶端而言它就像是原始服務器,并且客戶端不需要進行任何特別的設置。客戶端向反向代理的名字空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始服務器)轉交請求,并將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。
典型用途方面:
正向代理:
[if !supportLists]1)[endif]是為在防火墻內的局域網客戶端提供訪問Internet的途徑。
[if !supportLists]2)[endif]正向代理還可以使用緩沖特性減少網絡使用率。
反向代理:
[if !supportLists]1)[endif]將防火墻后面的服務器提供給Internet用戶訪問。
[if !supportLists]2)[endif]為后端的多臺服務器提供負載平衡,或為后端較慢的服務器提供緩沖服務。
[if !supportLists]3)[endif]啟用高級URL策略和管理技術,從而使處于不同web服務器系統的web頁面同時存在于同一個URL空間下。
安全性:
正向代理:
允許客戶端通過它訪問任意網站并且隱藏客戶端自身,因此你必須采取安全措施以確保僅為經過授權的客戶端提供服務。
反向代理:
對外都是透明的,訪問者并不知道自己訪問的是一個代理。
打個比方,a,b,c三個人,正向代理是a通過b向C借錢,a知道c的存在 。反向代理是a向b借錢,b又向C借,a不知道c的存在。
FastDFS為什么要結合Nginx?
我們在使用FastDFS部署一個分布式文件系統的時候,通過FastDFS的客戶端API來進行文件的上傳、下載、刪除等操作。同時通過FastDFS的HTTP服務器來提供HTTP服務。但是FastDFS的HTTP服務較為簡單,無法提供負載均衡等高性能的服務,所以FastDFS的開發者——淘寶的架構師余慶同學,為我們提供了Nginx上使用的FastDFS模塊(也可以叫FastDFS的Nginx模塊)。其使用非常簡單。FastDFS通過Tracker服務器,將文件放在Storage服務器存儲,但是同組之間的服務器需要復制文件,有延遲的問題.假設Tracker服務器將文件上傳到了192.168.1.80,文件ID已經返回客戶端,這時,后臺會將這個文件復制到192.168.1.30,如果復制沒有完成,客戶端就用這個ID在192.168.1.30取文件,肯定會出現錯誤。這個fastdfs-nginx-module可以重定向連接到源服務器取文件,避免客戶端由于復制延遲的問題,出現錯誤。
nginx負載均衡的5種策略
nginx可以根據客戶端IP進行負載均衡,在upstream里設置ip_hash,就可以針對同一個C類地址段中的客戶端選擇同一個后端服務器,除非那個后端服務器宕了才會換一個。
nginx的upstream目前支持的5種方式的分配
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。?upstream backserver {?server 192.168.0.14;?server 192.168.0.15;?}?
2、指定權重指定輪詢幾率,
weight和訪問比率成正比,用于后端服務器性能不均的情況。?upstream backserver {?server 192.168.0.14 weight=10;?server 192.168.0.15 weight=10;?}
?3、IP綁定 ip_hash每個請求按訪問ip的hash結果分配,
這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
?upstream backserver {?ip_hash;?server 192.168.0.14:88;?server 192.168.0.15:80;?}
?4、fair(第三方)按后端服務器的響應時間來分配請求,響應時間短的優先分配。
upstream backserver {?server server1;?server server2;?fair;?}?
5、url_hash(第三方)按訪問url的hash結果來分配請求,
使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。?
upstream backserver {?server squid1:3128;?server squid2:3128;?hash $request_uri;?hash_method crc32;?}?在需要使用負載均衡的server中增加?proxy_pass http://backserver/;?upstream backserver{?ip_hash;?server 127.0.0.1:9090 down; (down表示單前的server暫時不參與負載)?server 127.0.0.1:8080 weight=2; (weight默認為1.weight越大,負載的權重就越大)?server 127.0.0.1:6060;?server 127.0.0.1:7070 backup; (其它所有的非backup機器down或者忙的時候,請求backup機器)?}?max_fails:允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤?
fail_timeout:max_fails次失敗后,暫停的時間
FastDFS與HDFS
FastDFS是阿里巴巴開源的一套輕量級,天生就是分布式設計的文件系統是由C語言開發。
HDFS(Hadoop Distributed File System)Hadoop實現了一個分布式文件系統,主要用于大數據計算存儲,簡稱HDFS。 Hadoop是Apache Lucene創始人Doug Cutting開發的使用廣泛的文本搜索庫。它起源于Apache Nutch,后者是一個開源的網絡搜索引擎,本身也是Luene項目的一部分。Aapche Hadoop架構是MapReduce算法的一種開源應用,是Google開創其帝國的重要基石。
2.?什么是solr?Solr的使用場景
Solr是一個獨立的企業級搜索應用服務器,它對外提供類似于Web-service的API接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,并得到XML格式的返回結果。
Solr是一個高性能,采用Java5開發,基于Lucene(全文搜索引擎)的全文搜索服務器。同時對其進行了擴展,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴展并對查詢性能進行了優化,并且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎。
Solr,站內搜索,小米6
Select * from product where namelike %小米6%?or sale_point like %小米6%
表
數據量會不斷上升,500萬
效果:查詢越來越慢
場景:讀多寫少
優化:加索引name加索引
為什么?
Table1全表掃描
加索引避免全表掃描
like小米6% 索引
like %小米6% 索引失效 --- 全表掃描
?
Solr
應用程序----> DB
應用程序---->搜索庫(來源DB)
百度,google互聯網的搜索引擎 爬蟲收集互聯網數據---分析---提供搜索(站內搜索)
簡單來說呢:
1.solr主要用于對其他存儲系統中已有的一些數據做分析,查詢,然后顯示結果。當然它也可以直接存儲數據,但,這不是它的強項。
2.對原有的數據作分析,需要對文本作一些處理(格式,分頁高亮等等),然后導入到solr中,利用solr強大的搜索功能,找到自己想要的結果。
3適用場景:
[if !supportLists]1)[endif]對于存儲在文件中的日志,可以導入到solr中做分析。
[if !supportLists]2)[endif]對于關系型數據庫中需要做全文搜索的字段,可以導入到solr中。
4.安裝solr(中文分詞器)
5.將數據庫數據導入索引庫
6.實現數據庫與索引庫的同步