<s id="qx03x"></s>
  • <tt id="qx03x"><noscript id="qx03x"></noscript></tt><rt id="qx03x"><nav id="qx03x"></nav></rt>

    <strong id="qx03x"><li id="qx03x"></li></strong>
    <tt id="qx03x"></tt>

        1. 分頁: 1/2 第一頁 1 2 下頁 最后頁 [ 顯示模式: 摘要 | 列表 ]
            [文章作者:張宴 本文版本:v1.0 最后修改:2011.07.26 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/httpsqs_1_7/]

            HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 協議的輕量級開源簡單消息隊列服務,使用 Tokyo Cabinet 的 B+Tree Key/Value 數據庫來做數據的持久化存儲。

            項目網址http://code.google.com/p/httpsqs/
            使用文檔http://blog.www.lukangtou.cn/httpsqs/
            使用環境:Linux(同時支持32位、64位操作系統,推薦使用64位操作系統)
            軟件作者:張宴



            HTTPSQS 1.7 版本更新內容:

            下面的內容不只是介紹 HTTPSQS 1.7 更新了哪些東西,更多的介紹在于:如何繞開 Libevent 2.0.x evhttp 使用過程中,無法正常處理包含“|”字符的 URI 參數的問題;提供了一份比 Libevent 官方網站更新的在線文檔;Linux 下如何動態編譯程序,運行時不用在 /etc/ld.so.conf 文件中添加動態鏈接庫路徑。

            1、針對 Libevent 2.0.x 版本 evhttp_parse_query 函數的 BUG。

            網友發郵件,反應了一個 HTTPSQS 的 BUG,見下圖,data 的值為NULL。我查找發現,這不是 HTTPSQS 的 BUG,而是 Libevent 2.0.x 版本的 BUG。在 Libevent 1.4.14b 版本中,evhttp_parse_query 函數是能夠正常處理包含“|”字符的 URI 的,而在 Libevent 2.0.12 版本中,同樣使用 evhttp_parse_query 函數,包含“|”字符的 URI  處理后的結果是 NULL。

            點擊在新窗口中瀏覽此圖片

            對比 Libevent 2.0.12 和 1.4.14b 版本的 evhttp_parse_query 函數代碼,發現在 2.0.12 版本中,evhttp_parse_query(const char *uri, struct evkeyvalq *headers) 實際變成了調用 evhttp_parse_query_impl(uri, headers, 1) 函數,該函數內再調用的一個 2.0.x 版本新增的函數 evhttp_uri_parse(const char *source_uri),邏輯處理代碼在 evhttp_uri_parse_with_flags(const char *source_uri, unsigned flags) 函數中。evhttp_uri_parse(const char *source_uri) 無法正確解析含有“|”的URL,遇到類似“http://127.0.0.1:1218/?opt=get&name=aaa|bbb”的URL,直接返回NULL,也就是 BUG 所在。

            libevent-2.0.12-stable/http.c
            點擊在新窗口中瀏覽此圖片

            點擊在新窗口中瀏覽此圖片

            點擊在新窗口中瀏覽此圖片

            不建議修改第三方庫,這個 BUG 還是留給 Libevent 自己去解決吧。使用 Libevent 2.0.x evhttp 作開發的同學,遇到URI參數中包含“|”的問題,注意一下吧。

            我修改了 HTTPSQS 代碼,在 HTTPSQS 1.7 版本,采用以下方式來繞開evhttp_uri_parse(const char *source_uri)函數,解決這個問題。其中用到了 Libevent 2.0.x  evhttp_request 結構體中新增的 struct evhttp_uri *uri_elems,以及新增的函數 evhttp_parse_query_str (const char *uri, struct evkeyvalq *headers)。

            Libevent 的官方文檔只有 1.4.10-stable2.0.1-alpha 版本的,2.0.1x 很多新增的函數、結構體都沒有。

            我這里提供一份最新的 Libevent 在線文檔: http://blog.www.lukangtou.cn/book/libevent/



            2、靜態編譯改為動態編譯,并指定程序運行時查找的動態鏈接庫路徑

            一些網友反映,CentOS 6.0、Fedora 等系統沒有默認安裝lz、lbz2、lrt、...等靜態鏈接庫,出現無法編譯HTTPSQS的情況:
          gcc -o httpsqs httpsqs.c prename.c -L/usr/local/libevent-2.0.10-stable/lib/ -levent -L/usr/local/tokyocabinet-1.4.47/lib/ -ltokyocabinet -I/usr/local/libevent-2.0.10-stable/include/ -I/usr/local/tokyocabinet-1.4.47/include/ -lz -lbz2 -lrt -lpthread -lm -lc -O2 -g --static  
          /usr/bin/ld: cannot find -lz  
          /usr/bin/ld: cannot find -lbz2  
          /usr/bin/ld: cannot find -lrt  
          /usr/bin/ld: cannot find -lpthread  
          /usr/bin/ld: cannot find -lm  
          /usr/bin/ld: cannot find -lc  
          /usr/bin/ld: cannot find -lc  
          collect2: ld 返回 1  
          make: *** [httpsqs] 錯誤 1


            HTTPSQS 1.7 版本改為動態編譯,編譯時使用“-Wl,-rpath”參數指定了程序運行時的動態庫搜索路徑。這樣就不需要在 /etc/ld.so.conf 中 添加 HTTPSQS 程序運行時需要的 libevent、tokyocabinet 動態鏈接庫路徑了,可以避免與其他軟件(例如:Memcached、TT)使用的 libevent、tokyocabinet 動態鏈接庫版本相沖突。詳情請見 Makefile 文件:
          # Makefile for httpsqs
          CC=gcc
          CFLAGS=-Wl,-rpath,/usr/local/libevent-2.0.12-stable/lib/:/usr/local/tokyocabinet-1.4.47/lib/ -L/usr/local/libevent-2.0.12-stable/lib/ -levent -L/usr/local/tokyocabinet-1.4.47/lib/ -ltokyocabinet -I/usr/local/libevent-2.0.12-stable/include/ -I/usr/local/tokyocabinet-1.4.47/include/ -lz -lbz2 -lrt -lpthread -lm -lc -O2 -g

          httpsqs: httpsqs.c
            $(CC) -o httpsqs httpsqs.c prename.c $(CFLAGS)
            @echo ""
            @echo "httpsqs build complete."
            @echo ""  

          clean: httpsqs
            rm -f httpsqs

          install: httpsqs
            install $(INSTALL_FLAGS) -m 4755 -o root httpsqs $(DESTDIR)/usr/bin

            [文章作者:張宴 本文版本:v1.0 最后修改:2011.04.21 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/httpsqs_1_6/]

            HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 協議的輕量級開源簡單消息隊列服務,使用 Tokyo Cabinet 的 B+Tree Key/Value 數據庫來做數據的持久化存儲。

            項目網址http://code.google.com/p/httpsqs/
            使用文檔http://blog.www.lukangtou.cn/httpsqs/
            使用環境:Linux(同時支持32位、64位操作系統,推薦使用64位操作系統)
            軟件作者:張宴

            隊列(Queue)又稱先進先出表(First In First Out),即先進入隊列的元素,先從隊列中取出。加入元素的一頭叫“隊頭”,取出元素的一頭叫“隊尾”。利用消息隊列可以很好地異步處理數據傳送和存儲,當你頻繁地向數據庫中插入數據、頻繁地向搜索引擎提交數據,就可采取消息隊列來異步插入。另外,還可以將較慢的處理邏輯、有并發數量限制的處理邏輯,通過消息隊列放在后臺處理,例如FLV視頻轉換、發送手機短信、發送電子郵件等。

            HTTPSQS 具有以下特征:

            ● 非常簡單,基于 HTTP GET/POST 協議。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP協議的編程語言均可調用。
            ● 非??焖?,入隊列、出隊列速度超過10000次/秒。
            ● 高并發,支持上萬的并發連接,C10K不成問題。
            ● 支持多隊列。
            ● 單個隊列支持的最大隊列數量高達10億條。
            ● 低內存消耗,海量數據存儲,存儲幾十GB的數據只需不到100MB的物理內存緩沖區。
            ● 可以在不停止服務的情況下便捷地修改單個隊列的最大隊列數量。
            ● 可以實時查看隊列狀態(入隊列位置、出隊列位置、未讀隊列數量、最大隊列數量)。
            ● 可以查看指定隊列ID(隊列點)的內容,包括未出、已出的隊列內容。
            ● 查看隊列內容時,支持多字符集編碼。
            ● 源代碼不超過800行,適合二次開發。



            HTTPSQS 1.6 版本更新內容:

            一、服務器端:

            1、修正了定時將內存緩沖區內容同步到磁盤,有時候出現段錯誤,導致進程崩潰的BUG。感謝以下網友的反饋:

            點擊在新窗口中瀏覽此圖片

            點擊在新窗口中瀏覽此圖片

            點擊在新窗口中瀏覽此圖片



            2、修正了判斷隊列已滿,遺漏的一種情況。感謝以下網友的反饋:

            點擊在新窗口中瀏覽此圖片

            點擊在新窗口中瀏覽此圖片



            3、改為父子進程模式,生產環境穩定性更高。

            4、改進了 ps 命令查看 httpsqs 的用戶體驗:

            點擊在新窗口中瀏覽此圖片



            5、增加了密碼校驗功能(通過以下啟動參數設置密碼,通過URL參數“/?auth=密碼”訪問):

            點擊在新窗口中瀏覽此圖片



            6、改為靜態編譯,編譯完成后的 HTTPSQS 二進制文件,運行不再依賴 Libevent、Tokyocabinet 動態鏈接庫。



            7、HTTPSQS 舊版本如何升級到 HTTPSQS 1.6 版本:

            HTTPSQS 1.6 版本完全兼容以前版本:編譯安裝 HTTPSQS 1.6,替換舊的 HTTPSQS,然后“kill httpsqs的進程ID”,按原來的啟動參數啟動 HTTPSQS 即可,數據完全兼容。



            二、客戶端:

            1、客戶端代碼不再集成在 HTTPSQS 源碼包中,可通過鏈接自行查看。



            HTTPSQS 1.6 版本的詳細使用說明,請訪問: http://blog.www.lukangtou.cn/httpsqs/

            同事下午遇到一問題,MySQL 和 Memcached 對于同一個key,不能對應起來。最終原因是:PHP將key寫入MySQL數據庫之前,沒有經過trim()過濾首尾空格(關鍵是尾部空格),結果:

            1、MySQL的varchar、char類型字段,SELECT .... WHERE 查詢時忽略字段的尾部空格。例如varchar類型字段uidcode中,存儲的含有尾部空格的內容“rewinx ”,通過以下三種方式均可查詢到:

            點擊在新窗口中瀏覽此圖片

            在MySQL手冊第“11.4.1. CHAR和VARCHAR類型”節中寫道(http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#char):請注意所有MySQL校對規則屬于PADSPACE類。這說明在MySQL中的所有CHAR和VARCHAR值比較時不需要考慮任何尾部空格。請注意所有MySQL版本均如此,并且它不受SQL服務器模式的影響。



            2、PHP 的 Memcache 擴展,則在set、get時,自動將key中的空格,轉換成了半角下劃線“_”。當然,直接通過 Memcached 協議來讀取,key值“rewinx ”就要寫成“rewinx_”了。
            [文章作者:張宴 本文版本:v1.0 最后修改:2010.06.29 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/httpsqs_1_3/]

            HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 協議的輕量級開源簡單消息隊列服務,使用 Tokyo Cabinet 的 B+Tree Key/Value 數據庫來做數據的持久化存儲。

            項目網址http://code.google.com/p/httpsqs/
            使用文檔http://blog.www.lukangtou.cn/httpsqs/
            使用環境:Linux(同時支持32位、64位操作系統,推薦使用64位操作系統)
            軟件作者:張宴

            隊列(Queue)又稱先進先出表(First In First Out),即先進入隊列的元素,先從隊列中取出。加入元素的一頭叫“隊頭”,取出元素的一頭叫“隊尾”。利用消息隊列可以很好地異步處理數據傳送和存儲,當你頻繁地向數據庫中插入數據、頻繁地向搜索引擎提交數據,就可采取消息隊列來異步插入。另外,還可以將較慢的處理邏輯、有并發數量限制的處理邏輯,通過消息隊列放在后臺處理,例如FLV視頻轉換、發送手機短信、發送電子郵件等。

            HTTPSQS 具有以下特征:

            ● 非常簡單,基于 HTTP GET/POST 協議。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP協議的編程語言均可調用。
            ● 非??焖?,入隊列、出隊列速度超過10000次/秒。
            ● 高并發,支持上萬的并發連接,C10K不成問題。
            ● 支持多隊列。
            ● 單個隊列支持的最大隊列數量高達10億條。
            ● 低內存消耗,海量數據存儲,存儲幾十GB的數據只需不到100MB的物理內存緩沖區。
            ● 可以在不停止服務的情況下便捷地修改單個隊列的最大隊列數量。
            ● 可以實時查看隊列狀態(入隊列位置、出隊列位置、未讀隊列數量、最大隊列數量)。
            ● 可以查看指定隊列ID(隊列點)的內容,包括未出、已出的隊列內容。
            ● 查看隊列內容時,支持多字符集編碼。
            ● 源代碼不超過800行,適合二次開發。



            HTTPSQS 1.3 版本增加的功能:

            1、服務器端:

            ● 增加了重要功能:定時將內存緩沖區內容寫到磁盤的功能。
            HTTPSQS 1.2 及以前的版本,只有當內存緩沖區滿的時候,才將內存中的內容寫到磁盤,如果這期間服務器宕機,將導致一部分數據丟失。從 1.3 版本開始,支持了定時(默認5秒鐘/次)將內存緩沖區內容同步到磁盤的功能,可以在啟動 HTTPSQS 時使用“-s <second>”參數設置同步間隔。在 HTTPSQS 運行過程中,可以通過瀏覽器訪問“http://host:port/?name=your_queue_name&opt=synctime&num=間隔秒數”來實時修改同步間隔,無需重啟。

            ● 增加了輔助功能:以JSON格式查看隊列狀態。
            原有的查詢隊列狀態功能“http://host:port/?name=your_queue_name&opt=status”,適合通過瀏覽器訪問,人工查看,不便于程序處理。新增加的功能“http://host:port/?name=your_queue_name&opt=status_json”,以JSON格式輸出隊列狀態信息,便于客戶端程序進行處理,輸出的格式示例如下:
          {"name":"xoyo","maxqueue":1000000,"putpos":4562,"putlap":2,"getpos":900045,"getlap":1,"unread":104517}


            ● 增加了以下四項啟動參數:
          -s <second> 同步內存緩沖區內容到磁盤的間隔秒數(默認值:5)
          -c <num> 內存中緩存的最大非葉子節點數(默認值:10000)
          -m <size> 數據庫內存緩存大小,單位:MB(默認值:100)
          -i <file> 保存進程PID到文件中(默認值:/tmp/httpsqs.pid)


            2、客戶端:

            ● PHP客戶端Class增加了Keep-alive長連接斷線自動檢測、自動重連功能,PHP客服端守護進程從HTTPSQS讀取數據時,不用考慮連接異常斷開處理。非常適合PHP客服端作為守護進程,從隊列GET讀取數據,或者批量往隊列中寫入數據的應用。

            ● PHP客戶端Class增加了函數$httpsqs->status_json($host, $port, $charset, $name);、$httpsqs->synctime($host, $port, $charset, $name, $num);、$httpsqs->pstatus_json($host, $port, $charset, $name);、$httpsqs->psynctime($host, $port, $charset, $name, $num);,詳細使用說明請見:http://blog.www.lukangtou.cn/httpsqs/



            HTTPSQS 1.1/1.2 版本如何升級到 HTTPSQS 1.2 版本:

            ●服務器端版本完全兼容:編譯安裝 HTTPSQS 1.3,替換 HTTPSQS 1.1/1.2,然后“kill httpsqs的進程ID”,按原來的啟動參數啟動 HTTPSQS 即可,數據完全兼容。

            ●客戶端版本完全兼容:HTTPSQS 1.3 版本的PHP客戶端,仍可以直接操作 HTTPSQS 1.1/1.2。兩個版本的PHP客戶端函數使用方式、參數相同,1.3 版本的PHP客戶端與 1.2 版本相比,增加了status_json()、synctime()、pstatus_json()、psynctime()四個函數。



            HTTPSQS 的生產環境應用:

            ●金山通行證(https://my.xoyo.com
            隊列應用類型:手機短信上行、手機短信下發、郵件下發
            隊列應用要求:穩定性高,存儲數據量大
            隊列部署結構:一主、一備兩臺 HTTPSQS 熱備模式

            ●金山用戶行為分析系統(http://kbi.xoyo.com
            隊列應用類型:用戶鼠標點擊、訪問URL原始數據采集
            隊列應用要求:并發性能高,存儲數據量大
            隊列部署結構:多臺 HTTPSQS 應用層哈希分布式模式

            ●金山逍遙網站內搜索
            隊列應用類型:索引準實時更新。在金山游戲官網中,新聞、論壇帖子、客服公告、SNS社區等發生的增、刪、改操作,文本內容實時寫入HTTPSQS隊列,全站搜索引擎增量索引準實時(1分鐘內)更新的數據源取自HTTPSQS。

            ●金山逍遙網全站通用評論系統
            隊列應用類型:評論發表

            ●金山《劍俠情緣》電視連續劇四大角色人物選秀活動(http://zt.xoyo.com/haixuan/
            隊列應用類型:用戶上傳的照片異步裁剪、縮放處理

            ●新浪郵箱(http://mail.sina.com.cn
            隊列應用類型:用戶登陸日志記錄



            HTTPSQS 1.3 版本的詳細使用說明,請訪問: http://blog.www.lukangtou.cn/httpsqs/

            [文章作者:張宴 本文版本:v1.0 最后修改:2010.03.18 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/httpsqs_1_2/]

            HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 協議的輕量級開源簡單消息隊列服務,使用 Tokyo Cabinet 的 B+Tree Key/Value 數據庫來做數據的持久化存儲。

            項目網址http://code.google.com/p/httpsqs/
            使用文檔http://blog.www.lukangtou.cn/httpsqs/
            使用環境:Linux(同時支持32位、64位操作系統,推薦使用64位操作系統)
            軟件作者:張宴

            隊列(Queue)又稱先進先出表(First In First Out),即先進入隊列的元素,先從隊列中取出。加入元素的一頭叫“隊頭”,取出元素的一頭叫“隊尾”。利用消息隊列可以很好地異步處理數據傳送和存儲,當你頻繁地向數據庫中插入數據、頻繁地向搜索引擎提交數據,就可采取消息隊列來異步插入。另外,還可以將較慢的處理邏輯、有并發數量限制的處理邏輯,通過消息隊列放在后臺處理,例如FLV視頻轉換、發送手機短信、發送電子郵件等。



            HTTPSQS 具有以下特征:

            ● 非常簡單,基于 HTTP GET/POST 協議。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP協議的編程語言均可調用。
            ● 非??焖?,入隊列、出隊列速度超過10000次/秒。
            ● 高并發,支持上萬的并發連接,C10K不成問題。
            ● 支持多隊列。
            ● 單個隊列支持的最大隊列數量高達10億條。
            ● 低內存消耗,海量數據存儲,存儲幾十GB的數據只需不到100MB的物理內存緩沖區。
            ● 可以在不停止服務的情況下便捷地修改單個隊列的最大隊列數量。
            ● 可以實時查看隊列狀態(入隊列位置、出隊列位置、未讀隊列數量、最大隊列數量)。
            ● 可以查看指定隊列ID(隊列點)的內容,包括未出、已出的隊列內容。
            ● 查看隊列內容時,支持多字符集編碼。
            ● 源代碼不超過700行,適合二次開發。



            HTTPSQS 1.2 版本增加的功能:

            1、服務器端:

            ● PUT入隊列、GET出時,1.2版本在Header頭增加了一行Pos,輸出當前隊列“寫入點”或“讀取點”。假設從隊列取出一條消息,這條消息的隊列讀取點Pos為7,將這條消息插入數據庫失敗了,那么,就可以在失敗Pos日志文件中記錄這個隊列點。過段時間后,只要該Pos點的數據未被覆蓋,通過“http://127.0.0.1:1218/?charset=utf-8&name=your_queue_name&opt=view&pos=7”則可以再次取出該條消息,做失敗原因分析或進一步處理。

            ● PUT入隊列時,如果“隊列寫入點”追上“隊列讀取點”,會返回“HTTPSQS_PUT_END”,提示隊列已滿,而不是像1.1版本那樣直接覆蓋未讀數據。

            2、客戶端:

            ● 增加了Perl版本的客戶端。感謝網友tonny0830為HTTPSQS開發了Perl客戶端。

            ● PHP客戶端Class增加了函數$httpsqs->gets($host, $port, $charset, $name)、$httpsqs->pgets($host, $port, $charset, $name),詳細使用說明請見:http://blog.www.lukangtou.cn/httpsqs/



            HTTPSQS 1.1 版本如何升級到 HTTPSQS 1.2 版本:

            ●服務器端版本完全兼容:編譯安裝 HTTPSQS 1.2,替換 HTTPSQS 1.1,然后“kill httpsqs的進程ID”,按原來的啟動參數啟動 HTTPSQS 即可,數據完全兼容。

            ●客戶端版本完全兼容:HTTPSQS 1.1 版本的PHP客戶端,仍可以直接操作 HTTPSQS 1.2。兩個版本的PHP客戶端函數使用方式、參數相同,1.2 版本的PHP客戶端與 1.1 版本相比,增加了gets()和pgets()函數,用于從一個隊列中取出文本信息和當前隊列讀取點Pos。



            HTTPSQS 1.2 的生產環境典型應用案例架構:

            點擊在新窗口中瀏覽此圖片



            HTTPSQS 1.2 版本的詳細使用說明,請訪問:http://blog.www.lukangtou.cn/httpsqs/

            [文章作者:張宴 本文版本:v1.2 最后修改:2009.01.12 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/nginx_cache/]

            Nginx從0.7.48版本開始,支持了類似Squid的緩存功能。這個緩存是把URL及相關組合當作Key,用md5編碼哈希后保存在硬盤上,所以它可以支持任意URL鏈接,同時也支持404/301/302這樣的非200狀態碼。雖然目前官方的Nginx Web緩存服務只能為指定URL或狀態碼設置過期時間,不支持類似Squid的PURGE指令,手動清除指定緩存頁面,但是,通過一個第三方的Nginx模塊,可以清除指定URL的緩存。

            Nginx的Web緩存服務主要由proxy_cache相關指令集和fastcgi_cache相關指令集構成,前者用于反向代理時,對后端內容源服務器進行緩存,后者主要用于對FastCGI的動態程序進行緩存。兩者的功能基本上一樣。

            最新的Nginx 0.8.32版本,proxy_cache和fastcgi_cache已經比較完善,加上第三方的ngx_cache_purge模塊(用于清除指定URL的緩存),已經可以完全取代Squid。我們已經在生產環境使用了 Nginx 的 proxy_cache 緩存功能超過兩個月,十分穩定,速度不遜于 Squid。

            在功能上,Nginx已經具備Squid所擁有的Web緩存加速功能、清除指定URL緩存的功能。而在性能上,Nginx對多核CPU的利用,勝過Squid不少。另外,在反向代理、負載均衡、健康檢查、后端服務器故障轉移、Rewrite重寫、易用性上,Nginx也比Squid強大得多。這使得一臺Nginx可以同時作為“負載均衡服務器”與“Web緩存服務器”來使用。
            


            1、Nginx 負載均衡與緩存服務器在 Linux 下的編譯安裝:
          ulimit -SHn 65535
          wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gz
          tar zxvf pcre-8.00.tar.gz
          cd pcre-8.00/
          ./configure
          make && make install
          cd ../

          wget http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz
          tar zxvf ngx_cache_purge-1.0.tar.gz

          wget http://nginx.org/download/nginx-0.8.32.tar.gz
          tar zxvf nginx-0.8.32.tar.gz
          cd nginx-0.8.32/
          ./configure --user=www --group=www --add-module=../ngx_cache_purge-1.0 --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
          make && make install
          cd ../



            2、/usr/local/webserver/nginx/conf/nginx.conf 配置文件內容如下:
          user  www www;

          worker_processes 8;

          error_log  /usr/local/webserver/nginx/logs/nginx_error.log  crit;

          pid        /usr/local/webserver/nginx/nginx.pid;

          #Specifies the value for maximum file descriptors that can be opened by this process.
          worker_rlimit_nofile 65535;

          events
          {
            use epoll;
            worker_connections 65535;
          }

          http
          {
            include       mime.types;
            default_type  application/octet-stream;

            charset  utf-8;
                
            server_names_hash_bucket_size 128;
            client_header_buffer_size 32k;
            large_client_header_buffers 4 32k;
            client_max_body_size 300m;
                
            sendfile on;
            tcp_nopush     on;

            keepalive_timeout 60;

            tcp_nodelay on;

            client_body_buffer_size  512k;
            proxy_connect_timeout    5;
            proxy_read_timeout       60;
            proxy_send_timeout       5;
            proxy_buffer_size        16k;
            proxy_buffers            4 64k;
            proxy_busy_buffers_size 128k;
            proxy_temp_file_write_size 128k;

            gzip on;
            gzip_min_length  1k;
            gzip_buffers     4 16k;
            gzip_http_version 1.1;
            gzip_comp_level 2;
            gzip_types       text/plain application/x-javascript text/css application/xml;
            gzip_vary on;

            #注:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區
            proxy_temp_path   /data0/proxy_temp_dir;
            #設置Web緩存區名稱為cache_one,內存緩存空間大小為200MB,1天沒有被訪問的內容自動清除,硬盤緩存空間大小為30GB。
            proxy_cache_path  /data0/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=30g;
            
            upstream backend_server {
              server   192.168.8.43:80 weight=1 max_fails=2 fail_timeout=30s;
              server   192.168.8.44:80 weight=1 max_fails=2 fail_timeout=30s;
              server   192.168.8.45:80 weight=1 max_fails=2 fail_timeout=30s;
            }

            server
            {
              listen       80;
              server_name  www.yourdomain.com 192.168.8.42;
              index index.html index.htm;
              root  /data0/htdocs/www;  

              location /
              {
                   #如果后端的服務器返回502、504、執行超時等錯誤,自動將請求轉發到upstream負載均衡池中的另一臺服務器,實現故障轉移。
                   proxy_next_upstream http_502 http_504 error timeout invalid_header;
                   proxy_cache cache_one;
                   #對不同的HTTP狀態碼設置不同的緩存時間
                   proxy_cache_valid  200 304 12h;
                   #以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存內容到二級緩存目錄內
                   proxy_cache_key $host$uri$is_args$args;
                   proxy_set_header Host  $host;
                   proxy_set_header X-Forwarded-For  $remote_addr;
                   proxy_pass http://backend_server;
                   expires      1d;
              }
              
              #用于清除緩存,假設一個URL為http://192.168.8.42/test.txt,通過訪問http://192.168.8.42/purge/test.txt就可以清除該URL的緩存。
              location ~ /purge(/.*)
              {
               #設置只允許指定的IP或IP段才可以清除URL緩存。
               allow            127.0.0.1;
               allow            192.168.0.0/16;
               deny            all;
               proxy_cache_purge    cache_one   $host$1$is_args$args;
              }    

              #擴展名以.php、.jsp、.cgi結尾的動態應用程序不緩存。
              location ~ .*\.(php|jsp|cgi)?$
              {
                   proxy_set_header Host  $host;
                   proxy_set_header X-Forwarded-For  $remote_addr;
                   proxy_pass http://backend_server;
              }

              access_log  off;
            }
          }



            3、啟動 Nginx:
          /usr/local/webserver/nginx/sbin/nginx




            4、清除指定的URL緩存示例:

            點擊在新窗口中瀏覽此圖片
            [文章作者:張宴 本文版本:v1.7.1 最后修改:2011.11.04 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/httpsqs/]

            HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 協議的輕量級開源簡單消息隊列服務,使用 Tokyo Cabinet 的 B+Tree Key/Value 數據庫來做數據的持久化存儲。

            項目網址http://code.google.com/p/httpsqs/
            使用文檔http://blog.www.lukangtou.cn/httpsqs/
            使用環境:Linux(同時支持32位、64位操作系統,推薦使用64位操作系統)
            軟件作者:張宴

            隊列(Queue)又稱先進先出表(First In First Out),即先進入隊列的元素,先從隊列中取出。加入元素的一頭叫“隊頭”,取出元素的一頭叫“隊尾”。利用消息隊列可以很好地異步處理數據傳送和存儲,當你頻繁地向數據庫中插入數據、頻繁地向搜索引擎提交數據,就可采取消息隊列來異步插入。另外,還可以將較慢的處理邏輯、有并發數量限制的處理邏輯,通過消息隊列放在后臺處理,例如FLV視頻轉換、發送手機短信、發送電子郵件等。

            HTTPSQS 具有以下特征:

            ● 非常簡單,基于 HTTP GET/POST 協議。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP協議的編程語言均可調用。
            ● 非??焖?,入隊列、出隊列速度超過10000次/秒。
            ● 高并發,支持上萬的并發連接,C10K不成問題。
            ● 支持多隊列。
            ● 單個隊列支持的最大隊列數量高達10億條。
            ● 低內存消耗,海量數據存儲,存儲幾十GB的數據只需不到100MB的物理內存緩沖區。
            ● 可以在不停止服務的情況下便捷地修改單個隊列的最大隊列數量。
            ● 可以實時查看隊列狀態(入隊列位置、出隊列位置、未讀隊列數量、最大隊列數量)。
            ● 可以查看指定隊列ID(隊列點)的內容,包括未出、已出的隊列內容。
            ● 查看隊列內容時,支持多字符集編碼。
            ● 源代碼不超過800行,適合二次開發。

            點擊在新窗口中瀏覽此圖片



            1、HTTPSQS 1.7 壓力測試:

            采用Apache ab命令進行壓力測試,開啟10個線程,放入10萬條文本數據(每條512字節)到隊列中:
            使用HTTP Keep-Alive時:23018 requests/sec
            關閉HTTP Keep-Alive時:11840 requests/sec

            采用Apache ab命令進行壓力測試,開啟10個線程,從隊列中取出10萬條文本數據(每條512字節):
            使用HTTP Keep-Alive時:25982 requests/sec
            關閉HTTP Keep-Alive時:13294 requests/sec

            詳細測試內容:http://code.google.com/p/httpsqs/wiki/BenchmarkTest

            生產環境應用:在金山游戲官網中,新聞、論壇帖子、客服公告、SNS社區等發生的增、刪、改操作,文本內容實時寫入HTTPSQS隊列,全站搜索引擎增量索引準實時(1分鐘內)更新的數據源取自HTTPSQS。HTTPSQS 2009年12月18日上線至今,運行穩定,既有來自Web服務器的入隊列操作,也有來自命令行腳本的批量入、出隊列操作。



            2、HTTPSQS 的生產環境應用:

            ●金山通行證(https://my.xoyo.com
            隊列應用類型:手機短信上行、手機短信下發、郵件下發
            隊列應用要求:穩定性高,存儲數據量大
            隊列部署結構:一主、一備兩臺 HTTPSQS 熱備模式

            ●金山用戶行為分析系統(http://kbi.xoyo.com
            隊列應用類型:用戶鼠標點擊、訪問URL原始數據采集
            隊列應用要求:并發性能高,存儲數據量大
            隊列部署結構:多臺 HTTPSQS 應用層哈希分布式模式

            ●金山網絡游戲運營平臺 KingEyes
            隊列應用類型:用戶操作日志記錄

            ●金山逍遙網站內搜索
            隊列應用類型:索引準實時更新。在金山游戲官網中,新聞、論壇帖子、客服公告、SNS社區等發生的增、刪、改操作,文本內容實時寫入HTTPSQS隊列,全站搜索引擎增量索引準實時(1分鐘內)更新的數據源取自HTTPSQS。

            ●金山逍遙網全站通用評論系統
            隊列應用類型:評論發表

            ●金山《劍俠情緣》電視連續劇四大角色人物選秀活動(http://zt.xoyo.com/haixuan/
            隊列應用類型:用戶上傳的照片異步裁剪、縮放處理

            ●新浪郵箱(http://mail.sina.com.cn
            隊列應用類型:用戶登陸日志記錄



            3、HTTPSQS 編譯安裝:
            [文章作者:張宴 本文版本:v1.0 最后修改:2009.06.17 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/post/415/]

            正為視頻、圖片存儲發愁,一個偶然的機會,獲知公司在廊坊機房機架上有一臺“300GB*14塊硬盤”磁盤整列柜,竟然沒人使用。周一申請了一輛公司的車,去廊坊機房將該盤陣拖了回來。

            環境:

            一臺“惠普Proliant DL380 G4服務器(2U機架式)”,已安裝CentOS 5.3 64位操作系統;
            一臺“惠普Modular Smart Array 500G2磁盤陣列柜”,插滿14塊標稱300GB的SCSI硬盤;
            一塊“惠普 Smart Array 642陣列卡”,插在“惠普Proliant DL380 G4服務器”;
            一根SCSI連接線,連接“惠普 Smart Array 642陣列卡”和“惠普Modular Smart Array 500G2磁盤陣列柜”。

            點擊在新窗口中瀏覽此圖片



            配置步驟:

            1、在“惠普Proliant DL380 G4服務器”PCI插槽中安裝一塊Smart Array 642陣列卡,用SCSI線連接“惠普MSA 500G2磁盤陣列柜”。

            點擊在新窗口中瀏覽此圖片

            2、在以下網址點擊右側“Support”欄目中的“Support matrices”,查看“HP Proliant DL380 G4服務器”支持的“HP SmartStart CD光盤類型”:
            http://www.hp.com/servers/smartstart

            點擊在新窗口中瀏覽此圖片

            3、通過以下網址下載 HP SmartStart 8.25 x64 光盤,解壓后有一個ISO鏡像文件,將它刻錄到CD刻錄光盤上:
            ftp://ftp.hp.com/pub/softlib2/software1/cd/p1760479716/v51549/smartstart-8.25-0-x64.zip

            4、將SmartStart光盤插入“惠普Proliant DL380 G4服務器”的光驅,選擇服務器開機從光盤啟動,在光盤引導后的圖像界面“Array Configuration Utility”中,會顯示所有的磁盤陣列卡,包括“惠普Proliant DL380 G4服務器”自帶的陣列卡和“惠普MSA 500G2磁盤陣列柜”的陣列卡。
            (1)、點擊選擇“MSA 500G2”陣列卡。先選擇創建磁盤組(Create Array),14塊硬盤全選上;
            (2)、再選擇創建邏輯盤(Create Logical Drive)。因為這里插了14塊標稱300GB的SCSI硬盤(實際容量(300GB / 1.024 / 1.024 / 1.024) * 14 / 1024 ≈ 3.8TB),而“惠普MSA 500G2磁盤陣列柜”的每塊邏輯盤最大只能支持2TB的數據容量,所以至少需要創建兩塊邏輯盤,第一塊邏輯盤選擇2TB,第二塊邏輯盤使用默認值,即剩余大小。每塊邏輯盤可選擇做RAID 0、RAID 1、RAID 5和RAID 6,缺省配置是RAID 6(可損壞任意兩顆硬盤,但性能比RAID 5略低8%~15%)。因為是圖形界面,這一部分操作比較簡單,就不再詳細描述。

            5、使用SmartStart光盤創建完邏輯盤之后,重啟“惠普Proliant DL380 G4服務器”。

            6、重啟后,輸入root帳號密碼登入CentOS 5.3 x86_64系統。
            [文章作者:張宴 本文版本:v1.0 最后修改:2009.01.21 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/post/394/]

            key-value分布式存儲系統查詢速度快、存放數據量大、支持高并發,非常適合通過主鍵進行查詢,但不能進行復雜的條件查詢。如果輔以Real-Time Search Engine(實時搜索引擎)進行復雜條件檢索、全文檢索,就可以替代并發性能較低的MySQL等關系型數據庫,達到高并發、高性能,節省幾十倍服務器數量的目的。以MemcacheDB、Tokyo Tyrant為代表的key-value分布式存儲,在上萬并發連接下,輕松地完成高速查詢。而MySQL,在幾百個并發連接下,就基本上崩潰了。

            雖然key-value分布式存儲具有極高的性能,但是只能做類似于MySQL的SELECT * FROM table WHERE id = 123;簡單主鍵查詢。

            “搜索索引引擎+key-value分布式存儲”能夠實現高并發的復雜條件查詢、全文檢索與數據顯示。但是,由于索引更新需要時間,目前還不能實現完全意義上的Real-Time Search(實時搜索),只能稱之為Near Real-Time Search(準實時搜索)?!八阉魉饕妫玨ey-value分布式存儲”除了做全文檢索外,還可以在允許的索引延遲范圍內,取代MySQL進行復雜條件查詢。

            我的文章《億級數據的高并發通用搜索引擎架構設計》的程序編碼已經完成,第一輪測試昨天已經結束,能夠在高并發情況下實現1分鐘內索引更新,屬于“Near Real-Time Search Engine(準實時搜索引擎)+key-value分布式存儲”應用。其中,索引引擎采用Sphinx,存儲采用key-value分布式數據庫Tokyo Tyrant。

            以下是常見的key-value分布式存儲系統:

            

            其中,以下幾款值得關注:

            1、Hypertable:它是搜索引擎公司Zvents根據Google的9位研究人員在2006年發表的一篇論文《Bigtable:結構化數據的分布存儲系統》開發的一款開源分布式數據儲存系統。Hypertable是按照1000節點比例設計,以 C++撰寫,可架在 HDFS 和 KFS 上。盡管還在初期階段,但已有不錯的效能:寫入 28M 列的資料,各節點寫入速率可達7MB/s,讀取速率可達 1M cells/s。Hypertable目前一直沒有太多高負載和大存儲的應用實例,但是最近,Hypertable項目得到了百度的贊助支持,相信其會有更好的發展。

            點擊在新窗口中瀏覽此圖片



            2、Tokyo Tyrant:它是日本最大的SNS社交網站mixi.jp開發的 Tokyo Cabinet key-value數據庫網絡接口。它擁有Memcached兼容協議,也可以通過HTTP協議進行數據交換。對任何原有Memcached客戶端來講,可以將Tokyo Tyrant看成是一個Memcached,但是,它的數據是可以持久存儲的。Tokyo Tyrant 具有故障轉移、日志文件體積小、大數據量下表現出色等優勢,詳見:http://blog.www.lukangtou.cn/post/362.htm

            Tokyo Cabinet 2009年1月18日發布的新版本(Version 1.4.0)已經實現 Table Database,將key-value數據庫又擴展了一步,有了MySQL等關系型數據庫的表和字段的概念,相信不久的將來,Tokyo Tyrant 也將支持這一功能。值得期待。

            點擊在新窗口中瀏覽此圖片
            [文章作者:張宴 本文版本:v1.0 最后修改:2009.01.19 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/post/393/]

            magent是一款開源的Memcached代理服務器軟件,其項目網址為:

            http://code.google.com/p/memagent/

            一、安裝步驟:
            1、編譯安裝libevent:
          wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
          tar zxvf libevent-1.4.9-stable.tar.gz
          cd libevent-1.4.9-stable/
          ./configure --prefix=/usr
          make && make install
          cd ../


            2、編譯安裝Memcached:
          wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
          tar zxvf memcached-1.2.6.tar.gz
          cd memcached-1.2.6/
          ./configure --with-libevent=/usr
          make && make install
          cd ../


            3、編譯安裝magent:
          mkdir magent
          cd magent/
          wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
          tar zxvf magent-0.5.tar.gz
          /sbin/ldconfig
          sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
          make
          cp magent /usr/bin/magent
          cd ../




            二、使用實例:
          memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
          memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
          memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
          magent -u root -n 51200 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213

            1、分別在11211、11212、11213端口啟動3個Memcached進程,在12000端口開啟magent代理程序;
            2、11211、11212端口為主Memcached,11213端口為備份Memcached;
            3、連接上12000的magent,set key1和set key2,根據哈希算法,key1被寫入11212和11213端口的Memcached,key2被寫入11212和11213端口的Memcached;
            4、當11211、11212端口的Memcached死掉,連接到12000端口的magent取數據,數據會從11213端口的Memcached取出;
            5、當11211、11212端口的Memcached重啟復活,連接到12000端口,magent會從11211或11212端口的Memcached取數據,由于這兩臺Memcached重啟后無數據,因此magent取得的將是空值,盡管11213端口的Memcached還有數據(此問題尚待改進)。
            [文章作者:張宴 本文版本:v1.0 最后修改:2008.11.30 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/post/384/]

            首先,需要了解Memcached協議,如果不清楚可參考《Memcached 協議中英文對照》。

            1、數據存儲(假設key為zhangyan,value為12345)
          printf "set zhangyan 0 0 5\r\n12345\r\n" | nc 127.0.0.1 11211
           STORED

            2、數據取回(假設key為zhangyan)
          printf "get zhangyan\r\n" | nc 127.0.0.1 11211
           VALUE zhangyan 0 5
           12345
           END


            3、數值增加1(假設key為zhangyan,并且value為正整數)
          printf "incr zhangyan 1\r\n" | nc 127.0.0.1 11211
           12346
          Tags: ,
            [文章作者:張宴 本文版本:v1.4 最后修改:2010.06.11 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/read.php/362/]

            Tokyo Cabinet 是日本人 平林幹雄 開發的一款 DBM 數據庫,該數據庫讀寫非???,哈希模式寫入100萬條數據只需0.643秒,讀取100萬條數據只需0.773秒,是 Berkeley DB 等 DBM 的幾倍。

            點擊在新窗口中瀏覽此圖片



            Tokyo Tyrant 是由同一作者開發的 Tokyo Cabinet 數據庫網絡接口。它擁有Memcached兼容協議,也可以通過HTTP協議進行數據交換。

            Tokyo Tyrant 加上 Tokyo Cabinet,構成了一款支持高并發的分布式持久存儲系統,對任何原有Memcached客戶端來講,可以將Tokyo Tyrant看成是一個Memcached,但是,它的數據是可以持久存儲的。這一點,跟新浪的Memcachedb性質一樣。

            相比Memcachedb而言,Tokyo Tyrant具有以下優勢:

            1、故障轉移:Tokyo Tyrant支持雙機互為主輔模式,主輔庫均可讀寫,而Memcachedb目前支持類似MySQL主輔庫同步的方式實現讀寫分離,支持“主服務器可讀寫、輔助服務器只讀”模式。

            點擊在新窗口中瀏覽此圖片

            這里使用 $memcache->addServer 而不是 $memcache->connect 去連接 Tokyo Tyrant 服務器,是因為當 Memcache 客戶端使用 addServer 服務器池時,是根據“crc32(key) % current_server_num”哈希算法將 key 哈希到不同的服務器的,PHP、C 和 python 的客戶端都是如此的算法。Memcache 客戶端的 addserver 具有故障轉移機制,當 addserver 了2臺 Memcached 服務器,而其中1臺宕機了,那么 current_server_num 會由原先的2變成1。

            引用 memcached 官方網站和 PHP 手冊中的兩段話:
          引用
          http://www.danga.com/memcached/
          If a host goes down, the API re-maps that dead host's requests onto the servers that are available.

          http://cn.php.net/manual/zh/function.Memcache-addServer.php
          Failover may occur at any stage in any of the methods, as long as other servers are available the request the user won't notice. Any kind of socket or Memcached server level errors (except out-of-memory) may trigger the failover. Normal client errors such as adding an existing key will not trigger a failover.




            2、日志文件體積?。篢okyo Tyrant用于主輔同步的日志文件比較小,大約是數據庫文件的1.3倍,而Memcachedb的同步日志文件非常大,如果不定期清理,很容易將磁盤寫滿。



            3、超大數據量下表現出色:
            [文章作者:張宴 本文版本:v1.1 最后修改:2008.09.09 轉載請注明原文鏈接:http://blog.www.lukangtou.cn/post/357/]

            鑒于國內外還沒有人撰寫如何安裝Memcache_engine的文章,于是,我根據自己的編譯安裝步驟,寫下此文。

            Memcache_engine是一個MySQL 5.1數據庫的存儲引擎,它能夠讓用戶通過標準的SQL語句(SELECT/UPDATE/INSERTE/DELETE)訪問Memcached(還支持新浪的Memcachedb、dbcached)中存放的數據。

            限制:
            1、Memcache表必須有主鍵。
            2、只能使用主鍵去查詢,即只能使用SELECT ... FROM ... WHERE id = ... 方式去查詢。
            3、不支持自增ID。

            安裝與使用:
            1、編譯安裝memcache_engine的步驟:
          cd /tmp
          wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.26-rc.tar.gz/from/http://mirror.x10.com/mirror/mysql/
          tar zxvf mysql-5.1.26-rc.tar.gz
          #安裝、配置MySQL的步驟省略,注意不要以靜態方式編譯安裝。

          wget http://download.tangent.org/libmemcached-0.23.tar.gz
          tar zxvf libmemcached-0.23.tar.gz
          cd libmemcached-0.23/
          ./configure --prefix=/usr/local/memcache_engine
          make
          make install
          cd ../

          wget http://xmlsoft.org/sources/libxml2-2.6.32.tar.gz
          tar zxvf libxml2-2.6.32.tar.gz
          cd libxml2-2.6.32/
          ./configure --prefix=/usr/local/memcache_engine
          make
          make install
          cd ../

          wget http://download.tangent.org/libxmlrow-0.2.tar.gz
          tar zxvf libxmlrow-0.2.tar.gz
          cd libxmlrow-0.2/
          export PKG_CONFIG_PATH=/usr/local/memcache_engine/lib/pkgconfig/
          ./configure --prefix=/usr/local/memcache_engine
          make
          make install
          cd ../

          wget http://download.tangent.org/memcache_engine-0.7.tar.gz
          tar zxvf memcache_engine-0.7.tar.gz
          cd memcache_engine-0.7/
          sed -i "s#uint16_t#uint32_t#g" ./src/ha_memcache.cc
          export PKG_CONFIG_PATH=/usr/local/memcache_engine/lib/pkgconfig/
          ./configure --prefix=/usr/local/memcache_engine --with-mysql=/tmp/mysql-5.1.26-rc
          make
          make install
          cd ../

            注意:紅色標記部分為MySQL 5.1.22以上版本的源碼路徑。
            Linux下高并發的Squid服務器,TCP TIME_WAIT套接字數量經常達到兩、三萬,服務器很容易被拖死。通過修改Linux內核參數,可以減少Squid服務器的TIME_WAIT套接字數量。
            
          vi /etc/sysctl.conf

            增加以下幾行:
          引用
          net.ipv4.tcp_fin_timeout = 30
          net.ipv4.tcp_keepalive_time = 1200
          net.ipv4.tcp_syncookies = 1
          net.ipv4.tcp_tw_reuse = 1
          net.ipv4.tcp_tw_recycle = 1
          net.ipv4.ip_local_port_range = 1024    65000
          net.ipv4.tcp_max_syn_backlog = 8192
          net.ipv4.tcp_max_tw_buckets = 5000

            說明:
            net.ipv4.tcp_syncookies = 1 表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉;
            net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認為0,表示關閉;
            net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
            net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
            net.ipv4.tcp_keepalive_time = 1200 表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改為20分鐘。
            net.ipv4.ip_local_port_range = 1024    65000 表示用于向外連接的端口范圍。缺省情況下很?。?2768到61000,改為1024到65000。
            net.ipv4.tcp_max_syn_backlog = 8192 表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網絡連接數。
            net.ipv4.tcp_max_tw_buckets = 5000 表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除并打印警告信息。默認為180000,改為5000。對于Apache、Nginx等服務器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對于Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。

            執行以下命令使配置生效:
          /sbin/sysctl -p
          Tags: , , ,
            前言:dbcached 1.0 beta* 在 Memcached 1.2.4 的基礎上編寫而成,也是我的第一個開源C項目。編寫 dbcached 的目的是為了最大限度的發揮 Memcached 內存緩存的優勢,便捷地維護 Memcached 服務器節點哈希列表,智能地支持 Memcached 故障轉移,同時保證數據的持久化存儲。

            dbcached

            協議:New BSD License
            作者:張宴
            網址:http://code.google.com/p/dbcached/

            dbcached 是什么?

            ● dbcached 是一款基于 Memcached 和 NMDB 的分布式 key-value 數據庫內存緩存系統。

            ● dbcached = Memcached + 持久化存儲管理器 + NMDB 客戶端接口

            ● Memcached 是一款高性能的,分布式的內存對象緩存系統,用于在動態應用中減少數據庫負載,提升訪問速度。

            ● NMDB 是一款多協議網絡數據庫(dbm類)管理器,它由內存緩存和磁盤存儲兩部分構成,使用 QDBM 或 Berkeley DB 作為后端數據庫。

            ● QDBM 是一個管理數據庫的例程庫,它參照 GDBM 為了下述三點而被開發:更高的處理速度,更小的數據庫文件大小,和更簡單的API。QDBM 讀寫速度比 Berkeley DB 要快,詳細速度比較見《Report of Benchmark Test》。

            


            Memcached 和 dbcached 在功能上一樣嗎?

            ● 兼容:Memcached 能做的,dbcached 都能做。除此之外,dbcached 還將“Memcached、持久化存儲管理器、NMDB 客戶端接口”在一個程序中結合起來,對任何原有 Memcached 客戶端來講,dbcached 仍舊是個 Memcached 內存對象緩存系統,但是,它的數據可以持久存儲到本機或其它服務器上的 QDBM 或 Berkeley DB 數據庫中。
          分頁: 1/2 第一頁 1 2 下頁 最后頁 [ 顯示模式: 摘要 | 列表 ]
          在线精品国产在线视频