緩存伺服器開源
1. php開源工具哪些比較受歡迎
眾所周知,軟體行業是一個相對苦逼的行業,特別是遇到趕項目,很多程序猿就只有累成狗了。為了提高開發效率,讓開發任務更簡便、快捷,開源工具的使用是少不了的。今天小編整理了10款最受歡迎的php開源工具,分享給大家,希望可以幫助大家更便捷的開發php應用。
1、Monsta FTP
如果想在瀏覽器中設置一個FTP文件管理,你需要有一款像Monsta FTP一樣的開源PHP或者Ajax Cloudware。不僅支持屏幕上的文件編輯,而且文件還可以被拖放到瀏覽器上實現快速上傳。經測試Monsta FTP,支持所有主流瀏覽器,如:火狐,Chrome,IE瀏覽器,Safari瀏覽器等,並配備了多語言支持。
2、Pinba
Pinba使用只讀格式的Mysql作為實時統計/監督伺服器,幾乎是一個MySQL存儲引擎。它可以生成格式簡單的統計報表,處理後通過UDP發送累計數據,並且還可以創建復雜的報表。
3、CaseBox
CaseBox是一個用於管理任務、記錄和文檔的開源PHP Web應用程序。它允許我們創建大量的目錄,並將數據存儲在一個類似於桌面界面的首選結構中。通過將指定了期限的任務分配給用戶並跟蹤性能,CaseBox極大地簡化了工作流程。
4、Sylius
Sylius是一個基於Symfony 2的php開源工具,它允許你創建一個電子商務網站,並管理產品和類別復雜的網上商店。同時,Sylius還支持多種功能,如管理不同稅率和運輸方式。此外,Sylius還與支付網關(payment gateway)OmniPay集成而成為一款完美的電子商務工具。如果你用php開發了一個電子商務商城,不妨可以試試這個工具,它將極大的簡化你的工作量。
5、Pico
Pico是一款開源的內容管理程序,使用Flat File文件作為其資料庫,無需安裝即可使用。使用這個開源工具,可以方便你在你所喜愛的文本編輯器中編輯儲存在.md文件中的內容。
6、Munee
全面網站圖書館Munee,作為一款開源的php工具,可以讓你優化和操作網站website assets、實現客戶端和伺服器端的資源緩存。同時Munee也可以集成PHP圖像處理庫,方便調整或裁剪圖像並對它們進行緩存。
7、Phalcon PHP
Phalcon PHP是一款由C語言編寫的web框架,提供了低資源消耗和高性能,適用於任何操作系統。
8、phpMyFAQ
phpMyFAQ是PHP FAQ(常見問題解答)的應用程序,同時也是一個優秀的FAQ系統。它可以管理用戶、項目、類別和統計數據。phpMyFAQ中還自帶一個先進的搜索系統,可幫助用戶快速尋找到相關答案。
9、PHPImageWorkshop
PHP Image Workshop使用GD庫來管理圖像,允許以類似於Photoshop的方式編輯照片。同時,這款php開源工具也非常靈活,允許你疊加大量圖像,使用旋轉功能甚至縮略圖。
10、DebugBar
DebugBar也是php開源應用程序中常用的一款工具,免費提供在線版本,並且可以集成到PHP 項目中。它包括通用庫和流行庫,支持Ajax請求,並且在頁腳有一個JavaScript欄。
不管是什麼語言的開發,要提高開發效率,掌握一些開源的工具都是少不了的。熟悉並掌握以上這10款PHP 開源工具,可極大的簡化你的開發進程。如果你還沒有使用過這些工具,不妨可以試試。
2. varnish緩存可以做正向帶理嗎
arnish是一款高性能的開源HTTP加速器,挪威最大的在線報紙 erdens Gang 使用3台arnish代替了原來的12台Suid,性能比以前更好。但與老牌的suid相比,各有各的優劣勢,網上大量的相對比較只是在其個人對自己熟悉的應用的最大使用上的發揮而已,可能suid到了有能力的人手上才足以發揮最強大的威力arnish採用了「isual Page Cache」技術,在內存的利用上,arnish比Suid具有優勢,它避免了Suid頻繁在內存、磁碟中交換文件,性能要比Suid高。通過arnish管理埠,可以使用正則表達式快速、批量地清除部分緩存,這一點是Suid不能具備的。 本人就varnish的一些見解與配置方法做簡單的介紹與筆記實驗環境:Red Hat Enterprise linux Server release 5.4 (Tikanga) 內核2.6.18-.el5yum install pcre-devel ##預先安裝一個軟體包,不然會提示錯誤tar zxvf varnish-2.1.3.tar.gzcd varnish-2.1.3 ./configure --prefix=/usr/local/varnish-2.1.3ke && ke install編輯配置文件,有模版,但太多注釋,最好自己新建一個vim /usr/local/varnish-2.1.3/etc/varnish/varnish.conf ############下面附上配置文件的內容及注釋########################http請求處理過程#1,receive請求入口狀態,根據vcl判斷pass還是lookup本地查詢#lookup,在hash表中查找數據,若找到則進入hit狀態,否則進入fetch狀態#pass,選擇後台,進入fetch狀態#fetch,對請求進行後端的獲取,發送請求,獲得數據,並進行本地存儲#deliver,將數據發送給客戶端,進入done#done,處理結束##########配置後端伺服器##############代碼 代碼如下:backend linuxidc01 { .host = "..1."; .port = ""; .probe = { .timeout = 5s; .interval = 2s; .window = 10; .threshold = 8; } }backend linuxidc02 { .host = "..1."; .port = ""; .probe = { .timeout = 5s; .interval = 2s; .window = 10; .threshold = 8; } }##############配置後端伺服器組,進行健康檢測6秒,使用random方式設置權重######## #########另一種方式round-robin則默認輪詢機制####################代碼 代碼如下:director linuxidc random { .retries = 6; { .backend = linuxidc02; .weight = 2; } { .backend = linuxidc01; .weight = 2; } }##########定義訪問列表,允許下列清除varnish緩存#######################代碼 代碼如下:acl local { "localhost"; ".0.0.1"; }########從url判斷針對哪類後面伺服器及緩存配置############################代碼 代碼如下:sub vcl_recv { if (re.http.host ~ "^linuxidc.vicp") #匹配域名跳轉後台伺服器 { set re.backend = linuxidc; } else { error "Unknown HostName!"; } if (re.reuest == "PURGE") #不允許非訪問控制列表內的IP清除varnish緩存 { if (!client.ip ~ local) { error "Not Allowed."; return (lookup); } } #清除url中有jpg等文件的cookie if (re.reuest == "GET" && re.url ~ "\.(jpg|png|gif|swf|jpeg|ico)$") { unset re.http.cookie; } #判斷re.http.X-Forwarded-For 如果前端有多重反向代理,這樣可以獲取客戶端IP。 if (re.http.x-forwarded-for) { set re.http.X-Forwarded-For = re.http.X-Forwarded-For ", " client.ip; } else { set re.http.X-Forwarded-For = client.ip; }##varnish實現圖片的防盜鏈# if (re.http.referer ~ ") # {# if ( !(re.http.referer ~ "" ||# re.http.referer ~ "" ) )# {# set re.http.host = "linuxidc.vicp";# set re.url = "/referer.jpg"; # }# return(lookup);# }# else {return(pass);} if (re.reuest != "GET" && re.reuest != "HEAD" && re.reuest != "PUT" && re.reuest != "POST" && re.reuest != "TRACE" && re.reuest != "OPTIONS" && re.reuest != "DELETE") { return (pipe); } #對非GET|HEAD請求的直接轉發給後端伺服器 if (re.reuest != "GET" && re.reuest != "HEAD") { return (pass); } ##對GET請求,且url里以.php和.php?結尾的,直接轉發給後端伺服器 if (re.reuest == "GET" && re.url ~ "\.(php)($|\?)") { return (pass); } ##對請求中有驗證及cookie,直接轉發給後端伺服器 if (re.http.Authorization || re.http.Cookie) { return (pass);} { ##除以上的訪問請求,從緩存中查找 return (lookup); } ##指定的font目錄不進行緩存 if (re.url ~ "^/fonts/") { return (pass); }}sub vcl_pipe { return (pipe); }##進入pass模式,請求被送往後端,後端返回數據給客戶端,但不進入緩存處理 sub vcl_pass { return (pass); }sub vcl_hash { set re.hash += re.url; if (re.http.host) { set re.hash += re.http.host; } else { set re.hash += server.ip; } return (hash); }##在lookup後如果在cache中找到請求的緩存,一般以下面幾個關鍵詞結束sub vcl_hit { if (!obj.cacheable) { return (pass); } return (deliver); } ##lookup後沒有找到緩存時調用,以下面幾個關鍵詞結束,及調用fetch參數重新測試是否加入緩存sub vcl_miss { return (fetch); }#讓varnish伺服器緩存的類型,從後端取得數據後調用sub vcl_fetch { if (!beresp.cacheable) { return (pass); } if (beresp.http.Set-Cookie) { return (pass); } ##WEB伺服器指明不緩存的內容,varnish伺服器不緩存 if (beresp.http.Prag ~ "no-cache" || beresp.http.Cache-Control ~ "no-cache" || beresp.http.Cache-Control ~ "private") { return (pass); } ##對訪問中get有包含jpg,png等格式的文件進行緩存,緩存時間為7天,s為秒 if (re.reuest == "GET" && re.url ~ "\.(js|css|mp3|jpg|png|gif|swf|jpeg|ico)$") { set beresp.ttl = 7d; } ##對訪問get中包含htm等靜態頁面,緩存秒 if (re.reuest == "GET" && re.url ~ "\/[0-9]\.htm$") { set beresp.ttl = s; } return (deliver); }####添加在頁面head頭信息中查看緩存命中情況########sub vcl_deliver { set resp.http.x-hits = obj.hits ; if (obj.hits > 0) { set resp.http.X-Cache = "HIT ctel-bbs"; } else { set resp.http.X-Cache = "MISS ctel-bbs"; } }#########################以上為 varnish的配置文件##########################創建用戶:groupadd useradd -g 創建 varnish_cache的緩存位置mkdir /data/varnish_cache啟動varnishulimit -SHn ####設置文件描述符,因為我的機子性能並不好,可以按照自己的配置去設置/usr/local/varnish-2.1.3/in/varnishd -u -g -f /usr/local/varnish-2.1.3/etc/varnish/varnish.conf -a 0.0.0.0:80 -s file,/data/varnish_cache/varnish_cache.data,M -w ,,10 -t -T .0.0.1:####-u 以什麼用運行 -g 以什麼組運行 -f varnish配置文件 -a 綁定IP和埠 -s varnish緩存文件位置與大小 -w 最小,最大線程和超時時間 -T varnish管理埠,主要用來清除緩存#結束varnishd進程pkill varnishd啟動varnishncsa用來將arnish訪問日誌寫入日誌文件:/usr/local/varnish-2.1.3/bin/varnishncsa -w /data/logs/varnish.log &每天0點運行,按天切割arnish日誌,生成一個壓縮文件,同時刪除上個月舊日誌的腳本(/var/logs/cutlog.sh):vim /usr/local/varnish-2.1.3/etc/varnish/cut_varnish_log.sh寫入以下腳本:#!/bin/sh# This file run at 00:00date=$(date -d "yesterday" +"%Y-%m-%d")pkill -9 varnishncsamv /data/logs/varnish.log /data/logs/${date}.log/usr/local/varnish-2.1.3/bin/varnishncsa -w /data/logs/varnish.log &mkdir -p /data/logs/varnish/gzip -c /data/logs/${date}.log > /data/logs/varnish/${date}.log.gzrm -f /data/logs/${date}.logrm -f /data/logs/varnish/$(date -d "-1 month" +"%Y-%m*").log.gz定時任務:crontab -e00 00 * * * /usr/local/varnish-2.1.3/etc/varnish/cut_varnish_log.sh優化Linux內核參數vi /etc/sysctl.confnet.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_keepalive_time = net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.ip_local_port_range = 使配置生效/in/sysctl -p通過arnish管理埠,使用正則表達式批量清除緩存清除所有緩存/usr/local/varnish-2.1.3/bin/varnishadm -T .0.0.1: url.purge *$清除ige目錄下所有緩存/usr/local/varnish-2.1.3/bin/varnishadm -T .0.0.1: url.purge /ige/.0.0.1: 為被清除緩存伺服器 為被清除的域名 /static/ige/tt.jsp 為被清除的url列表/usr/local/varnish-2.1.3/bin/varnishadm -T .0.0.1: purge "re.http.host ~ && re.url ~ /static/ige/tt.jsp"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++一個清除Suid緩存的PHP函數代碼 代碼如下:<?php function purge($ip, $url) { $errstr = ''; $errno = ''; $fp = fsockopen ($ip, 80, $errno, $errstr, 2); if (!$fp) { return false; } else { $out = "PURGE $url HTTP/1.1\r\n"; $out .= "; $out .= "Connection: close\r\n\r\n"; fputs ($fp, $out); $out = fgets($fp , ); fclose ($fp); return true; } } purge("..0.4", "/index.php"); ?> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++配置開機自動啟動arnishvim /etc/rc.d/rc.local在末行寫入以下內容:ulimit -SHn /usr/local/varnish-2.1.3/in/varnishd -u -g -f /usr/local/varnish-2.1.3/etc/varnish/varnish.conf -a 0.0.0.0:80 -s file,/data/varnish_cache/varnish_cache.data,M -w ,,10 -t -T .0.0.1:/usr/local/varnish-2.1.3/bin/varnishncsa -w /data/logs/varnish.log &查看arnish伺服器連接數與命中率:/usr/local/varnish-2.1.3/bin/varnishstat以上為varnish的狀態, 0.00 0.06 Client reuests received 為服務端接收的客戶端請求次數 0.00 0.01 Cache hits 為命中緩存,從緩存中取得數據返回給客戶端的次數,即命中率11 0.00 0.00 Cache misses 為跳過pass緩存,從後端服務應用中取得數據返回給用戶的次數用help看看可以使用哪些arnish命令:/usr/local/varnish-2.1.3/bin/varnishadm -T .0.0.1: help
3. 什麼是網路多媒體視頻伺服器
網路視頻伺服器(DVS,Digital Video Server)主要用於乙太網實時傳輸數字音視頻的多媒體伺服器,它能通過乙太網(區域網/廣域網)將實時的圖像和聲音同時通過網路傳輸。視頻伺服器可以在保留現有模擬視頻監控設備的同時,將視頻監視系統平滑升級到基於網路的視頻監控系統,它非常適用於與現存的模擬CCTV(閉路電視監控)系統相集成。視頻伺服器為模擬視頻設備帶來了全新的功能特性,並徹底消除了系統對於同軸電纜、模擬監視器和DVR等專用設備的依賴。DVR將不再成為實現錄像功能的必需品,因為在視頻伺服器的幫助下,視頻圖像可以通過標準的PC伺服器來進行錄制和管理。一台視頻伺服器通常具備1至4個模擬視頻輸入介面用於連接模擬攝像機,同時具備1個乙太網介面用於連接到網路。與網路攝像機一樣,它包含內置的Web伺服器、圖像壓縮晶元以及操作系統,在這些部件的作用下,模擬視頻輸入將被轉化為數字視頻信號,並能夠通過計算機網路進行傳輸和存儲,從而大大簡化了視頻資源的訪問和管理。
除了視頻輸入之外,視頻伺服器還可以通過同一個網路連接實現其他更多的功能和傳輸更多的信息,其中包括:數字化報警輸入和輸出(I/O介面,可用於觸發伺服器啟動錄像功能和傳輸視頻,或者激活外部報警設備如警燈或打開房門等等)、音頻、用於串列數據傳輸或PTZ設備控制的串列埠燈。通過圖像緩存,視頻伺服器還可以發送報警前後的圖像。視頻伺服器還可以連接更多的專用攝像機,例如高感光度黑白攝像機、微型攝像機或顯微攝像機等等。
視頻伺服器用於監控領域,大家都很清楚,但不常見的應用,如流媒體。採用流媒體方式,即設立一台流媒體伺服器,建立與視頻伺服器的連接,對該視頻伺服器的視頻訪問全部通過流媒體轉發伺服器軟體模塊來進行轉發,使得該視頻伺服器的視頻服務只佔一個通道。這樣保證與視頻伺服器只有一個連接,提高了播放性能和質量。
4. iPhone除了指尖瀏覽器外還有什麼瀏覽器可以緩存視頻
有以下幾個瀏覽器:
1、網路瀏覽器。
網路瀏覽器,是一款簡潔輕快、智能懂你的瀏覽器。依靠網路強大的搜索平台,在滿足用戶瀏覽網頁的基礎上,它整合網路體系業務優勢,帶給用戶更方便的瀏覽方式,更舒適的網路特色上網體驗。
2、千影瀏覽器
是一款功能強大的影視瀏覽器。強大的視頻去廣告功能,影視庫、全網影視搜索功能與一體的在線播放器,Chrome內核、體積小、速度快、綠色安裝、廣告攔截、安全防護,一鍵觸達海量優質影視資源。
3、獵豹瀏覽器
具有強大的視頻緩存下載功能,超越所有傳統瀏覽器與視頻APP應用;用獵豹手機瀏覽器,你不僅僅可以在線觀看,手指輕輕一點,所有視頻直接下到本地。
4、Google Chrome
是一款由Google公司開發的網頁瀏覽器,該瀏覽器基於其他開源軟體撰寫,包括WebKit,目標是提升穩定性、速度和安全性,並創造出簡單且有效率的使用者界面。
5、QQ瀏覽器
支持斷點續傳,支持多任務同時下載,圖片、音樂、小說、視頻、游戲、軟體無所不能。
5. 全球四個最大的四個開源庫
開源世界中的那幾個免費資料庫發布時間:2011-11-22 09:34:30 來源:CSDN 評論:0 點擊:1476 次 【字型大小:大 中 小】QQ空間 新浪微博 騰訊微博 人人網 豆瓣網 網路空間 網路搜藏 開心網 復制 更多 0開源資料庫MySQLMySQL是一個開放源碼的小型關聯式資料庫管理系統,開發者為瑞典MySQL AB公司。目前MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源...開源資料庫MySQLMySQL是一個開放源碼的小型關聯式資料庫管理系統,開發者為瑞典MySQL AB公司。目前MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫。盤點:開源社區那些免費的資料庫軟體MySQL為多種編程語言提供了API,包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。而其自身是採用C和C++編寫的,使用了多種編譯器進行測試,所以,MySQL能夠保證源代碼具有很強的可移植性。這樣的一款資料庫,自然能夠支持幾乎所有的操作系統,從Unix、Linux到Windows,具體包括AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多種操作系統。最重要的是,它是一個可以處理擁有上千萬條記錄的大型資料庫。與此同時,MySQL也產生了很多分支版本的資料庫也非常值得推薦。首先是MariaDB,它是一個採用Maria存儲引擎的MySQL分支版本,是由原來MySQL的作者 Michael Widenius創辦的公司所開發的免費開源的資料庫伺服器。與MySQL相比較,MariaDB更強的地方在於它擁有更多的引擎,包括Maria存儲引擎、PBXT存儲引擎、XtraDB存儲引擎、FederatedX存儲引擎,它能夠更快的復制查詢處理、運行的速度更快、更好的功能測試以及支持對Unicode的排序等。其次是rcona,它為MySQL資料庫伺服器進行了改進,在功能和性能上較MySQL有著很顯著的提升。該版本提升了在高負載情況下的InnoDB的性能,同時,它還為DBA提供一些非常有用的性能診斷工具,並且提供很多參數和命令來控制伺服器行為。第三是Percona Server,它使用了諸如google-mysql-tools、Proven Scaling和 Open Query對MySQL進行改造。並且,它只包含MySQL的伺服器版,並沒有提供相應對 MySQL的Connector和GUI工具進行改進。非關系型資料庫NoSQL從NoSQL的字面上理解,NoSQL就是Not Only SQL,被業界認為是一項全新的資料庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關系型的數據存儲,相對於目前鋪天蓋地的關系型資料庫運用,這一概念無疑是一種全新的思維的注入。盤點:開源社區那些免費的資料庫軟體當然,NoSQL也是隨著互聯網Web2.0網站的興起才能取得長足的進步。關鍵的需求在於,傳統的關系資料庫在應付Web2.0網站,特別是超大規模和高並發的SNS類型的web2.0純動態網站顯得力不從心,暴露了很多難以克服的問題,而非關系型的資料庫則由於其本身的特點得到了非常迅速的發展。首先推薦的是Oracle NoSQL Database,這是一個社區版。Oracle的這個NoSQL Database, 是在10月4號的甲骨文全球大全上發布的Big Data Appliance的其中一個組件,Big Data Appliance是一個集成了Hadoop、NoSQL Database、Oracle資料庫Hadoop適配器、Oracle資料庫Hadoop裝載器及R語言的系統。其次推薦的是Membase。Membase是NoSQL家族的一個新的重量級的成員。Membase是開源項目,源代碼採用了Apache2.0的使用許可。該項目託管在GitHub.Source tarballs上,目前可以下載beta版本的Linux二進制包。該產品主要是由North Scale的memcached核心團隊成員開發完成,其中還包括Zynga和NHN這兩個主要貢獻者的工程師,這兩個組織都是很大的在線游戲和社區網路空間的供應商。並且,Membase容易安裝、操作,可以從單節點方便的擴展到集群,而且為memcached(有線協議的兼容性)實現了即插即用功能,在應用方面為開 發者和經營者提供了一個比較低的門檻。做為緩存解決方案,Memcached已經在不同類型的領域(特別是大容量的Web應用)有了廣泛的使用,其中 Memcached的部分基礎代碼被直接應用到了Membase伺服器的前端。通過兼容多種編程語言和框架,Membase具備了很好的復用性。在安裝和配置方面,Membase提供了有效的圖形化界面和編程介面,包括可配置 的告警信息。Membase的目標是提供對外的線性擴展能力,包括為了增加集群容量,可以針對統一的節點進行復制。 另外,對存儲的數據進行再分配仍然是必要的。第三推薦的是Hibari。Hibari在日語中意思為「雲雀」,它是一個專為高可靠性和大數據存儲的資料庫引擎,可用於雲計算環境中,例如 webmail、SNS和其他要求T/P級數據存儲的環境中。同時,Hibari也支持Java,C/C++,Python,Ruby和Erlang語言的客戶端。第四推薦的是memcachedb。這是一個由新浪網的開發人員開放出來的開源項目,給memcached分布式緩存伺服器添加了Berkeley DB的持久化存儲機制和非同步主輔復制機制,讓memcached具備了事務恢復能力、持久化能力和分布式復制能力,非常適合於需要超高性能讀寫速度,但是 不需要嚴格事務約束,能夠被持久化保存的應用場景,例如memcachedb被應用在新浪博客上面。第五推薦的是Leveldb。這是一個Google實現的非常高效的kv資料庫,目前的版本1.2能夠支持billion級別的數據量了。 在這個數量級別下還有著非常高的性能,主要歸功於它的良好的設計,特別是LSM演算法。LevelDB是單進程的服務,性能非常之高,在一台4個Q6600的CPU機器上,每秒鍾寫數據超過40w,而隨機讀的性能每秒鍾超過10w。XML資料庫的優勢XML資料庫是一種支持對XML格式文檔進行存儲和查詢等操作的數據管理系統。在系統中,開發人員可以對資料庫中的XML文檔進行查詢、導出和指定格式的序列化。目前XML資料庫有三種類型:XMLEnabledDatabase(XEDB),即能處理XML的資料庫;NativeXMLDatabase(NXD),即純XML資料庫;HybridXMLDatabase(HXD),即混合XML資料庫。關系資料庫中的第一代XML支持是切分(或分解)文檔,以適應關系表格或將文檔原封不動地存儲為字元或二進制大對象(CLOB 或 BLOB)。這兩個方法中的任一種都嘗試將XML模型強制轉換成關系模型。然而,這兩種方法在功能和性能上都有很大的局限性。混合型模型將XML存儲在類似於DOM的模型中。XML數據被格式化為緩沖數據頁,以便快速導航和執行查詢以及簡化索引編制。在這里,首要要推薦的XML資料庫是Sedna。它號稱是一款原生態的XML資料庫,提供了全功能的核心資料庫服務,包括持久化存儲、ACID事務、索引、安全、熱備、UTF8等。實現了 W3C XQuery 規范,支持全文搜索以及節點級別的更新操作。第二款XML資料庫是BaseX。這款資料庫用來存儲緊縮的XML數據,提供了高效的 XPath和XQuery的實現,同時,它還提供一個前端操作界面。盤點:開源社區那些免費的資料庫軟體第三款推薦的是XMLDB。這款資料庫使用了關系型資料庫來存儲任意的XML文檔,因為所採用的存儲機制,所以文檔的搜索速度特別快,同時執行XSL轉換也相當快。XMLDB同時還提供了一個PHP的模塊,可以應用在Web應用中。第四塊推薦的是X-Hive/DB。它是一個為需要高級XML數據處理和存儲功能的軟體開發者設計的強大的專屬XML資料庫。X-Hive/DB Java API包含存儲、查詢、檢索、轉換和發表XML數據的方法。與傳統關系型資料庫相比,XML資料庫具有以下優勢:第一,XML資料庫能夠對半結構化數據進行有效的存取和管理。如網頁內容就是一種半結構化數據,而傳統的關系資料庫對於類似網頁內容這類半結構化數據無法進行有效的管理。第二,提供對標簽和路徑的操作。傳統資料庫語言允許對數據元素的值進行操作,不能對元素名稱操作,半結構化資料庫提供了對標簽名稱的操作,還包括了對路徑的操作。第三,當數據本身具有層次特徵時,由於XML數據格式能夠清晰表達數據的層次特徵,因此XML資料庫便於對層次化的數據進行操作。XML資料庫適合管理復雜數據結構的數據集,如果己經以XML格式存儲信息,則XML資料庫利於文檔存儲和檢索;可以用方便實用的方式檢索文檔,並能夠提供高質量的全文搜索引擎。另外XML資料庫能夠存儲和查詢異種的文檔結構,提供對異種信息存取的支持。
6. 在抽象工廠模式中怎樣使用memcached緩存數據
一、Memcached簡介
memcached 常被用來加速應用程序的處理,在這里,我們將著重於介紹將它部署於應用程序和環境中的最佳實踐。這包括應該存儲或不應存儲哪些、如何處理數據的靈活分布以 及如何調節用來更新 memcached 和所存儲數據的方法。我們還將介紹對高可用性的解決方案的支持,比如 IBM WebSphere® eXtreme Scale。
所有的應用程序,特別是很多 web 應用程序都需要優化它們訪問客戶機和將信息返回至客戶機的速度。可是,通常,返回的都是相同的信息。從數據源(資料庫或文件系統)載入數據十分低效,若是每次想要訪問該信息時都運行相同的查詢,就尤顯低效。
雖然很多 web 伺服器都可被配置成使用緩存發回信息,但那與大多數應用程序的動態特性無法相適。而這正是 memcached 的用武之地。它提供了一個通用的內存存儲器,可保存任何東西,包括本地語言的對象,這就讓您可以存儲各種各樣的信息並可以從諸多的應用程序和環境訪問這些信息。
二、基礎知識
memcached 是一個開源項目,旨在利用多個伺服器內的多餘 RAM 來充當一個可存放經常被訪問信息的內存緩存。這里的關鍵是使用了術語緩存:memcached 為載入自他處的信息提供的是內存中的暫時存儲。
比如,考慮這樣一個典型的基於 web 的應用程序。即便是一個動態網站可能也會有一些組件或信息常量是貫穿頁面整個生命周期的。在一個博客站點內,針對單個 blog post 的類別列表不大可能在頁面查看間經常性地變更。每次都通過一個對資料庫的查詢載入此信息相對比較昂貴,特別是在數據沒有更改的情況下,就更是如此。從圖 1 可以看到一個博客站點內可被緩存的頁面分區。
圖1.一個典型的博客頁面內的可緩存元素
將這種結構放在 blog 站點的其他元素,poster 信息、注釋 — 設置 blog post 本身 — 進行推斷,可以看出為了顯示主頁的內容很可能需要發生 10-20 次資料庫查詢和格式化。 每天對數百甚至數千的的頁面查看重復此過程,那麼您的伺服器和應用程序執行的查詢要遠遠多於為了顯示頁面內容所需執行的查詢。
通過使用 memcached,可以將載入自資料庫的格式化信息存儲為一種可直接用在 Web 頁面上的格式。並且由於信息是從 RAM 而不是通過資料庫和其他處理從磁碟載入的,所以對信息的訪問幾乎是瞬時的。
再強調一下,memcached 是一個用來存儲常用信息的緩存,有了它,您便無需從緩慢的資源,比如磁碟或資料庫,載入並處理信息了。
對 memcached 的介面是通過網路連接提供的。這意味著您可以在多個客戶機間共享單個的 memcached 伺服器(或多個伺服器,如本文稍後所示的)。這個網路介面非常迅速,並且為了改善性能,伺服器會故意不支持身份驗證或安全性通信。但這不應限制部署選項。 memcached 伺服器應該存在於您網路的內部。網路介面的實用性以及可以部署多個 memcached 實例的簡便性讓您可以使用多個機器上的多餘 RAM 來提高您緩存的整體大小。
三、存儲方法
memcached 的存儲方法是一個簡單的鍵/值對,類似於很多語言內的散列或關聯數組。通過提供鍵和值來將信息存儲到 memcached 內,通過按特定的鍵請求信息來恢復信息。
信息會無限期地保留在緩存內,除非發生如下的情況:
為緩存分配的內存耗盡 — 在這種情況下,memcached 使用 LRU(最近最少使用)方法從此緩存刪除條目。最近未曾使用的條目會從此緩存中先刪除,最舊的最先訪問。
條目被明確刪除 — 總是可以從此緩存內刪除條目。
條目過期失效 — 各條目均有一個有效的期限以便針對此鍵存儲的信息在過於陳舊時可從緩存中清除這些條目。
上述這些情況可以與您應用程序的邏輯綜合使用以便確保緩存內的信息是最新的。有了這些基礎知識後,讓我們來看看在應用程序內如何能最好地利用 memcached。
四、何時使用memcached?
在使用 memcached 改進應用程序性能時,可以對一些關鍵的過程和步驟進行修改。
在載入信息時,典型的場景如圖 2 所示。
圖2.載入要顯示的信息的典型順序
一般而言,這些步驟是:
執行一個或多個查詢來從資料庫載入信息
格式化適合於顯示(或進一步處理)的信息
使用或顯示格式化了的數據
在使用 memcached 時,為配合這個緩存,可對應用程序的邏輯進行稍許修改:
盡量從緩存載入信息
如果存在,使用信息的被緩存版本
如果它不存在:
執行一個或多個查詢來從資料庫載入信息
格式化適合於顯示或進一步處理的信息
將信息存儲到緩存內
使用格式化了的數據
圖 3 是對這些步驟的總結。
圖3.在使用memcached時載入適合於顯示的信息
數據載入成為了至多三個步驟的一個過程,從緩存載入數據或從資料庫(視情況而定)載入數據並存儲在緩存內。
當這個過程首次發生時,數據將正常地從資料庫或其他數據源載入,然後再存儲到 memcached 內。當下一次訪問此信息時,它就會從 memcached 拉出,而不是從資料庫載入,節省了時間和 CPU 循環。
問題的另一個方面是要確保如果更改了要存儲在 memcached 內的信息,在更新後端信息的同時還要更新 memcached 的版本。這會讓圖 4 內所示的這個典型順序發生稍許變化,如 圖 5 所示。
圖4.在一個典型的應用程序內更新或存儲數據
圖 5 顯示了使用 memcached 後發生了變化的流程。
圖5.在使用memcached時更新或存儲數據
比如,仍以博客站點為例,在博客系統更新資料庫內的類別列表時,更新應該遵循如下順序:
更新資料庫內的類別列表
格式化信息
將信息存儲到 memcached 內
將信息返回至客戶機
memcached 內的存儲操作是原子的,所以信息的更新不會讓客戶機只獲得部分數據;它們獲得的或者是老版本,或者是新版本。
對於大多數應用程序,這兩個操作是您惟一需要注意的。在訪問他人使用的數據時,它會自動被添加到這個緩存內,而且如果對該數據進行了更改,此緩存內也會自動進行更新。
五、鍵、名稱空間和值
memcached 另一個需要重點考慮的因素是如何組織和命名存儲在緩存內的這些數據。從之前博客站點的例子中,不難看出需要使用一種一致的命名結構以便您能載入博客類別、歷史和其他信息,然後再在載入信息(並更新緩存)時或者在更新數據(同樣也要更新緩存)時使用。
使用的何種具體的命名系統特定於應用程序,但通常可以使用一種與現有應用程序類似的結構,並且這種結構很可能基於某種惟一識別符。當從資料庫拉出信息或在整理信息集時,就會發生這種情況。
以 blog post 為例,可以在一個具有鍵 category-list 的項中存儲類別列表。與此 post ID 對應的單個 post,比如 blogpost-29 相關的值都可以使用,而該項的注釋則可以存儲在 blogcomments-29內,其中 29 就是這個 blog post 的 ID。這樣一來, 您就可以將各種各樣的信息存儲在緩存內,使用不同的前綴來標識這些信息。
memcached 鍵/值存儲的簡便性(以及安全性的缺乏)意味著如果您想要在使用同一個 memcached 伺服器的同時支持多個應用程序,那麼就可以考慮使用其他格式的量詞來標識數據屬於某種特定的應用程序。比如,可以添加像 blogapp:blogpost-29 這樣的應用程序前綴。這些鍵是沒有格式的,所以可以使用任何字元串作為鍵的名稱。
在存儲值的方面,應該確保存儲在緩存內的信息適合於您的應用程序。比如,對於這個博客系統,您可能想要存儲被博客應用程序使用的對象以便格式化博客信息,而不是原始的 HTML。如果同一個基礎結構用在應用程序內的多個地方,這一點更具實用性。
大多數語言的介面,包括 Java™、Perl、PHP 等,都能串列化語言對象以便存儲在 memcached 內。這就讓您可以存儲並隨後從內存存儲恢復全部對象,而不是在您的應用程序內手動重構它們。 很多對象,或它們使用的結構,都基於某種散列或數組結構。對於跨語言的環境,比如在 JSP 環境和 JavaScript 環境間共享相同信息,可以使用一種架構中立的格式,比如 JavaScript Object Notation (JSON) 甚或 XML。
六、填充並使用memcached
作為一種開源產品以及一種最初開發用來工作於現有開源環境內的產品,memcached 受大量環境和平台支持。與 memcached 伺服器通信的介面有很多,並常常具有針對所有語言的多個實現。參見參考資料 以獲得常用的庫和工具箱。
要列出所有受支持的介面和環境不太可能,但它們均支持 memcached 協議提供的基礎 API。這些描述已經被簡化並應用在不同語言的上下文內,在這些語言中,使用不同的值可指示錯誤。主要的函數有:
get(key) — 從存儲了特定鍵的 memcached 獲得信息。 如果鍵不存在,就返回錯誤。
set(key, value [, expiry]) — 使用緩存內的標識符鍵存儲這個特定的值。如果鍵已經存在,那麼它就會被更新。期滿時間的單位為秒,並且如果值小於 30 天 (30*24*60*60),那麼就用作相對時間,如果值大於 30 天,那麼就用作絕對時間 (epoch)。
add(key, value [, expiry]) — 如果鍵不存在就將這個鍵添加到緩存內,如果鍵已經存在就返回錯誤。如果您想要顯式地添加一個新鍵而又不會因它已經存在而更新它,那麼這個函數將十分有用。
replace(key, value [, expiry]) — 更新此特定鍵的值,如果鍵不存在就返回一個錯誤。
delete(key [, time]) — 從緩存中刪除此鍵/值對。如果您提供一個時間,那麼添加具有此鍵的一個新值就會被阻塞這個特定的時期。超時讓您可以確保此值總是可以重新讀取自您的數據中心。
incr(key [, value]) — 為特定的鍵增 1 或特定的值。只適用於數值。
decr(key [, value]) — 為特定的鍵減 1 或特定的值,只適用於數值。
flush_all — 讓緩存內的所有當前條目無效(或到期失效)。
比如,在 Perl 內,基本 set 操作可以如清單 1 所示的那樣處理。
清單 1. Perl 內的基本 set 操作
use Cache::Memcached;
my $cache = new Cache::Memcached {
'servers' => [
'localhost:11211',
],
};
$cache->set('mykey', 'myvalue');
Ruby 內的相同的基本操作如清單 2 所示。
清單 2. Ruby 內的基本 set 操作
require 'memcache'
memc = MemCache::new '192.168.0.100:11211'
memc["mykey"] = "myvalue"
在兩個例子中可以看到相同的基本結構:設置 memcached 伺服器,然後分配或設置值。其他的介面也可用,包括適合於 Java 技術的那些介面,讓您可以在 WebSphere 應用程序內使用 memcached。memcached 介面類允許將 Java 對象直接序列化到 memcached 以便於存儲和載入復雜的結構。當在像 WebSphere 這樣的環境內進行部署時,有兩個事情非常重要:服務的彈性(在 memcached 不可用時如何做)以及如何提高緩存存儲量來改進在使用多個應用程序伺服器或在使用像 WebSphere eXtreme Scale 這樣的環境時的性能。我們接下來就來看看這兩個問題。
七、彈性和可用性
有關 memcached 最常見的一個問題是:「若緩存不可用了,會發生什麼情況呢?」正如之前章節中明示的,緩存內的信息不應該成為信息的的惟一資源。必須要能夠從其他位置載入存儲在緩存內的數據。
雖然,無法從緩存訪問信息將會減緩應用程序的性能,但它不應該阻止應用程序的運轉。可能會發生這樣幾個場景:
如果 memcached 服務宕掉,應用程序應該回退到從原始數據源載入信息並對信息進行顯示所需的格式化。此應用程序還應繼續嘗試在 memcached 內載入和存儲信息。
一旦 memcached 伺服器恢復可用,應用程序就應該自動嘗試存儲數據。沒有必要強制重載已緩存了的數據,可以使用標準的訪問來用信息載入和填充緩存。最終,緩存將會被最常用的數據重新填充。
再次重申,memcached 是信息的緩存但並非惟一的數據源。memcached 伺服器不可用不應該是應用程序的終結,雖然這意味著在 memcached 伺服器恢復正常之前性能會有所降低。實際上,memcached 伺服器相對簡單,並且雖然不是絕對無故障的,但它的簡單性的結果就是它很少會出錯。
八、分配緩存
memcached 伺服器只是網路上針對一些鍵存儲值的一個緩存。如果有多台機器,那麼很自然地會想要在所有多餘機器上設置一個 memcached 的實例來提供一個超大的聯網 RAM 緩存存儲。
有了這個想法後,還有一種想當然是需要使用某種分配或復制機制來在機器之間復制鍵/值對。這種方式的問題是如果這么做反而會減少可用的 RAM 緩存,而不是增加。如圖 6 所示,可以看出這里有三個應用程序伺服器,每個伺服器都可以訪問一個 memcached 實例。
圖6.多重memcached實例的不正確使用
盡管每個 memcached 實例都是 1 GB 的大小(產生 3 GB 的 RAM 緩存),但如果每個應用程序伺服器只有其自己的緩存(或者在 memcached 之間存在著數據的復制),那麼整個安裝也仍只能有 1 GB 的緩存在每個實例間復制。
由於 memcached 通過一個網路介面提供信息,因此單個的客戶機可以從它所能訪問的任何一個 memcached 實例訪問數據。如果數據沒有跨每個實例被復制,那麼最終在每個應用程序伺服器上,就可以有 3 GB 的 RAM 緩存可用,如圖 7 所示。
圖7.多重memcached實例的正確使用
這個方法的問題是選擇哪個伺服器來儲存鍵/值對,以及當想要重新獲得一個值時,如何決定要與哪個 memcached 伺服器對話。問題的解決方案就是忽略復雜的東西,比如查找表,或是寄望 memcached 伺服器來為您處理這個過程。而 memcached 客戶機則必須要力求簡單。
memcached 客戶機不必決定此信息,它只需對在存儲信息時指定的鍵使用一個簡單的散列演算法。當想要從一列 memcached 伺服器存儲或獲取信息時,memcached 客戶機就會用一個一致的散列演算法從這個鍵獲取一個數值。舉個例子,鍵 mykey 被轉換成數值 23875 。是保存還是獲取信息無關緊要,這個鍵將總是被用作惟一標識符來從 memcached 伺服器載入,因此在本例中,「mykey」 散列轉化後對應的值總是 23875。
如果有兩個伺服器,那麼 memcached 客戶機將對這個數值進行一個簡單的運算(例如,系數)來決定它應將此值存儲在第一個還是第二個配置了的 memcached 實例上。
當存儲一個值時,客戶機會從這個鍵確定出散列值以及它原來存儲在哪個伺服器上。當獲取一個值時,客戶機會從這個鍵確定出相同的散列值並會選擇相同的伺服器來獲取信息。
如果在每個應用程序伺服器上使用的是相同的伺服器列表(並且順序相同),那麼當需要保存或檢索同一個鍵時,每個應用程序伺服器都將選擇同一個 伺服器。現在,在這個例子中,有 3GB 的 memcached 空間可以共享,而不是同一個 1 GB 的空間的復制,這就帶來了更多的可用緩存,並很有可能會提高有多個用戶情況下的應用程序的性能。
九、如何能不使用memcached?
盡管 memcached 很簡單,但 memcached 實例有時候還是會被不正確地使用。
memcached不是一個資料庫
最常見的 memcached 誤用就是把它用作一個數據存儲,而不是一個緩存。memcached 的首要目的就是加快數據的響應時間,否則數據從其他數據源構建或恢復需要很長時間。一個典型的例子就是從一個資料庫中恢復信息,特別是在信息顯示給用戶前 需要對信息進行格式化或處理的時候。Memcached 被設計用來將信息存儲在內存中以避免每次在數據需要恢復時重復執行相同的任務。
切不可將 memcached 用作運行應用程序所需信息的惟一信息源;數據應總是可以從其他信息源獲取。此外,要記住 memcached 只是一個鍵/值的存儲。不能在數據上執行查詢,或者對內容進行迭代來提取信息。應該使用它來存儲數據塊或對象以備批量使用。
不要緩存資料庫行或文件
雖然可以使用 memcached 存儲載入自資料庫的數據行,但這實際上是查詢緩存,並且大多數資料庫都提供各自的查詢緩存的機制。其他的對象,比如文件系統的圖像或文件的情況與此相同。很多應用程序和 web 伺服器針對此類工作已經有了一些很好的解決方案。
如果在載入和格式化後,使用它來存儲全部信息塊,就可以從 memcached 獲得更多的實用工具和性能上的改善。仍以我們的博客站點為例,存儲信息的最佳點是在將博客類別格式化為對象,甚至是在格式化成 HTML 後。博客頁面的構造可通過從 memcached 載入各個組件(比如 blog post、category list、post history 等)並將完成的 HTML 寫回至客戶機實現。
memcached並不安全
為了確保最佳性能,memcached 並未提供任何形式的安全性,沒有身份驗證,也沒有加密。這意味著對 memcached 伺服器的訪問應該這么處理:一是通過將它們放到應用程序部署環境相同的私有側,二是如果安全性是必須的,那麼就使用 UNIX® socket 並只允許當前主機上的應用程序訪問此 memcached 伺服器。
這多少犧牲了一些靈活性和彈性,以及跨網路上的多台機器共享 RAM 緩存的能力,但這是在目前的情況下確保 memcached 數據安全性的惟一一種解決方案。
十、不要限制自己
除了不應該使用 memcached 實例的情況外,memcached 的靈活性不應忽視。由於 memcached 與應用程序處於相同的架構水平,所以很容易集成並連接到它。並且更改應用程序以便利用 memcached 也並不復雜。此外,由於 memcached 只是一個緩存,所以在出現問題時它不會停止應用程序的執行。如果使用正確的話,它所做的是減輕其餘伺服器基礎設施的負載(減少對資料庫和數據源的讀操 作),這意味著無需更多的硬體就可以支持更多的客戶機。
但請記住,它僅僅是個緩存!
結束語
在本文中,我們了解了 memcached 以及如何最佳地使用它。我們看到了信息如何存儲、如何選擇合理的鍵以及如何選擇要存儲的信息。我們還討論了所有 memcached 用戶都要遇到的一些關鍵的部署問題,包括多伺服器的使用、當 memcached 實例消亡時該怎麼做,以及(也許最為重要的)在哪些情況下不能使用 memcached。
作為一種開源的應用程序並且是目的簡單而直白的應用程序,memcached 的功能和實用性均來自於這種簡單性。通過為信息提供巨大的 RAM 存儲空間、讓它在網路上可用,然後再讓它可通過各種不同的介面和語言訪問到,memcached 可被集成到多種多樣的安裝和環境中。
7. golang有沒有好的開源游戲框架
1.為什麼golang的開發效率高? golang是一編譯型的強類型語言,它在開發上的高效率主要來自於後發優勢,不用考慮舊有惡心的歷史,又有一個較高的工程視角。
8. 緩存伺服器的緩存概念
這是兩種主要的Web緩存:
直接緩存,將用戶頻繁訪問的來自Internet伺服器的Web對象的拷貝保存在企業本地網路中。
反向緩存,企業內部Web伺服器的Web對象的拷貝保存在企業網路邊緣的代理伺服器上以提高外界訪問企業站點的性能。
Web緩存可以根據不同等級進行配置:
本地緩存:將Web對象緩存的拷貝保存在本地計算機中。大多數流行的Web瀏覽器默認情況下保留一個先前訪問對象的緩存。例如,Internet Explorer稱之為「臨時Internet文件」。本地緩存拷貝只是在用戶頻繁地從同一台機器訪問頁面時有用。
代理緩存:代理伺服器是為公司內的多個用戶/客戶計算機緩存Web對象的單獨機器。它們是位於客戶端和託管的Web伺服器之間的計算機,而且它們比本地緩存效率更高,因為在企業本地網路中的任何用戶或計算機訪問某個Web對象時,緩存拷貝對想訪問該對象的任何其他用戶/計算機是可用的,無需到Internet伺服器上再次下載它。代理緩存可以在網路邊緣與防火牆結合使用。
微軟的ISA Server和BlueCoat的工具一樣,既包括防火牆也包括緩存代理伺服器。緩存伺服器也可以是單獨的機器,運行免費的緩存軟體或商業產品,例如:
Linux版的Squid免費緩存代理
MOWS基於Java分布式web和緩存伺服器
Vicomsoft RapidCache Server for Windows或Macintosh
WinProxy for Windows
可升級的緩存解決方案
隨著公司的擴大,單一的Web緩存伺服器可能無法處理所有的通信或存儲足夠的Web對象。在這種情況下,可以擴展緩存解決方案以建立一個緩存陣列——一組共同工作以便在組內分配緩存負載的緩存代理伺服器。萬一某個緩存伺服器停機,還提供預設的容量。
要在陣列中操作,緩存伺服器必須能夠彼此使用協議進行通信,例如:
WCCP(Web緩存協調協議),Cisco緩存產品以及諸如Squid這樣的開源代理使用。
ICP(Internet緩存協議),被Squid和BlueCoat支持。
CARP(緩存陣列路由協議),被ISA Server Enterprise Edition用來管理緩存伺服器陣列的失效轉移和負載平衡。
CARP能夠支持幾乎無限的線性擴展以滿足快速增長型企業的需求。當向某個陣列中添加或移除一台伺服器時,CARP自動調整並再指定URL以有效地分布負載。
緩存陣列能夠以等級的或分布式的架構排列。在分布式緩存中,陣列中所有代理伺服器處在一個「平等地位」而且負載在它們之間進行分配。在分等級的緩存中,代理以鏈式進行配置,它們處在不同的等級,所以伺服器或陣列連接到其它離Internet更近的伺服器或陣列(離Internet最近的那些伺服器或陣列被看作「上游的」,那些最遠的被看作「下游的」)。這樣,緩存內容會盡可能地靠近需要它的用戶。
陣列是高度可升級的,因為可以向陣列添加伺服器,或向分等級的架構增加陣列等級,而無需擾亂目 前的緩存解決方案。
另一個可擴展性問題是使用緩存減少分支機構網路帶寬的能力。分支機構代理可能沒有直接連接到Internet,但是可以使用撥號連接或辦公室到辦公室的WAN連接以便從總公司的上游代理伺服器上請求Web對象。
另一個選擇是為需要向消費者提供基於Web的應用,可使用諸如由Akamai提供的服務。他們的Web Application Accelerator服務通過下列方法優化性能:
向他們的邊緣伺服器動態映射請求,並監視Internet路由以便在最快和最可靠的路由上傳輸。
利用壓縮技術和預取技術(pre-fetching)以最小化帶寬使用率。
用安全套接層(SSL)保護Web傳輸。
緩存支持的有些硬體標准:
目前緩存支持的硬體標准:
內存不超過4G,超過的只識別4G。
硬碟不超過2T,超過的只識別2T
存儲硬碟數量最大支持4塊(如果系統盤是電子盤不包含在內)
另外推薦使用INTEL的機器和網卡。
9. cdn 如何實現基礎架構
CDN基本原理
最簡單的CDN網路由一個DNS伺服器和幾台緩存伺服器組成:
①當用戶點擊網站頁面上的內容URL,經過本地DNS系統解析,DNS系統會最終將域名的解析權交給CNAME指向的CDN專用DNS伺服器。
②CDN的DNS伺服器將CDN的全局負載均衡設備IP地址返回用戶。
③用戶向CDN的全局負載均衡設備發起內容URL訪問請求。
④CDN全局負載均衡設備根據用戶IP地址,以及用戶請求的內容URL,選擇一台用戶所屬區域的區域負載均衡設備,告訴用戶向這台設備發起請求。
⑤區域負載均衡設備會為用戶選擇一台合適的緩存伺服器提供服務,選擇的依據包括:根據用戶IP地址,判斷哪一台伺服器距用戶最近;根據用戶所請求的URL中攜帶的內容名稱,判斷哪一台伺服器上有用戶所需內容;查詢各個伺服器當前的負載情況,判斷哪一台伺服器尚有服務能力。基於以上這些條件的綜合分析之後,區域負載均衡設備會向全局負載均衡設備返回一台緩存伺服器的IP地址。
⑥全局負載均衡設備把伺服器的IP地址返回給用戶。
⑦用戶向緩存伺服器發起請求,緩存伺服器響應用戶請求,將用戶所需內容傳送到用戶終端。如果這台緩存伺服器上並沒有用戶想要的內容,而區域均衡設備依然將它分配給了用戶,那麼這台伺服器就要向它的上一級緩存伺服器請求內容,直至追溯到網站的源伺服器將內容拉到本地。
CDN關鍵組件
LVS做四層均衡負載
Tengine做七層負載均衡
Swift做HTTP緩存
DR模式
雙LVS做Active-Active互備
負載均衡演算法採用wrr
阿里基於Nginx開發的高性能HTTP伺服器,已經開源
主動健康檢查
SPDY v3支持
高性能Cache
磁碟(SSD/SATA)
CDN基礎架構
CDN部署架構