Warning: include(/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php): failed to open stream: No such file or directory in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24

Warning: include(/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php): failed to open stream: No such file or directory in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24

Warning: include(): Failed opening '/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php' for inclusion (include_path='.:/opt/cpanel/ea-php70/root/usr/share/pear') in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24
主機二三事 – 第 3 頁 – unethost無限空間虛擬主機 技術分享部落格

如何快速解決因為升級php版本,導致的程式問題呢?

近年來,php更新速度太快,導致早期開發的網站程式,可能因為新舊函式庫的相容性問題,因而導致網站無法應用的窘況,現在為了解決這樣的狀況,並可以先給修改程式一個緩衝,我們提供可自選php版本的方式。

閱讀全文 如何快速解決因為升級php版本,導致的程式問題呢?

如何查詢網站的關鍵字排名

我們在這幾天,搜索了一下網站關鍵字的排名,發現如果是靠肉眼去數排名次序,
是有些費神的,所以就找到了下列網站,其中一個查詢的網站,精準率是相當高的,
值得大家來試試:

=========================================
查詢的網站: http://unethost.com
搜索關鍵字: 外國主機
=========================================

網站: http://dir.twseo.org/keywordrank.php
精準度: 普通

同時是否可輸入多字串: 否 

01.關鍵字排名查詢工具

===========================================================

http://smallseotools.com/keyword-position/
精準度: 相當高(推薦使用)
同時是否可輸入多字串: 是

02

如何決定主機是否要分流?

disp.cc 是個很有特色的電子布告欄網站,它用http + Ajax做出類似BBS的瀏覽效果,而且比BBS更好用。作者是台大電信所畢業的高材生。最近,disp.cc的人氣愈來愈高,我也順便看了一下,disp.cc的站長,knuckles是如何處理分流問題的。

引述站長在他個人的文章中,寫下的效能調校方法:

disp.cc load balancing structure

不過弄了之後發現,在一樣的價錢下,一台16G + 一台8G 的效能,比一台 24G 的效能好太多了 之前用單獨一台24G時,記憶體還空著很多,系統負載就飆高了… 看來要增加使用者不是單純加記憶體就好了

disp.cc的站長是租用日本的主機,所以有RTT上的優勢。而且該日本的主機商有提供一些高級的分流工具,例如node balancer,所以站長也可以相對容易完成分流這件事。雖然我個人認為,disp.cc站長做的決策非常的正確,但是,我卻不會建議我所有的客戶採用類似的解法。要說明這個觀點,要先從disp.cc的web server 設定開始講起。

Disp.cc的web server架構

在我寫這篇文章的時間點,disp.cc使用的web server是apache 2.2.15,PHP/5.4.20。雖然說,我沒有進一步的效能調節資訊,但是從站長提供的資料,我會猜測,之所以會發生『單獨一台24G時,記憶體還空著很多,系統負載就飆高了這種情況,這跟apache C10K問題有關。

apache C10K問題

這個問題是這樣子產生的:對於要寫網路程式,最直覺的寫法,就是用阻塞式I/O並且配合多執行緒。( blocking I/O & multi-thread ),又稱之為thread-model的寫法。這樣子雖然是最簡單最直接的寫法,在連接數(connection number)到達一萬(10k)時,因為大量的執行緒不停地做環境切換(context switch),導致增加硬體也無法提升效能的窘境。Context switch帶來的效能損耗會隨著執行緒(thread)愈多愈加嚴重,終於在10000個連接數時,到達崩潰的時間點。以今日的瀏覽器,往往輕易地可以產生6~10個平行的連接數,同時上線人數到達2000人時,這個C10K現象就會日益嚴重。

C10K問題的解法

相對於傳統的阻塞式I/O和多執行緒寫法,另一種寫程式的寫法,是使用非阻塞式的I/O,單一執行緒處理大量連接的寫法。代表作品是nginx。( nginx為了可以發揮多核心處理器的效能,也是可以生成多執行緒的,但是本質上,nignx還是使用event-model來處理連接數的問題。) 我的客戶中,有同時1萬人上線的大論壇,用了nginx之後,就可以用獨立主機(dedicated server)順順地跑。

disp.cc這個站,雖然沒有使用event-model來處理,但是因為分流的緣故,每一台機器上的connection數剩下一半,如此一來,就巧妙地迴避了C10K問題。除此之外,一般而言,VPS的架構,不同的VPS,硬碟的IOPS也是獨立的。所以這種分流也迴避了硬碟I/O的瓶頸。

VPS 與 Dedicated Server

從價格上來說,一定是VPS便宜。但是真的要講性價比的時候,獨立主機(dedicated server)因為可以使用百分之百的硬體資源,反而可以有更高的性價比。也就是說,同樣一塊錢買到的硬體運算效能,Dedicated Server一般而言是大於VPS。

獨立主機雖然性價比高,但是如果遇到了這種C10K問題,沒有使用event-model來處理,就變成一定要分流。而且這種時候的分流是不經濟的,因為如果主機上的資源尚未充分使用就分流,這就造成了資源上的浪費。除此之外,VPS比較具有彈性,如果5000個connection只要使用2G的RAM,我們可以輕易找到提供2G RAM的VPS。但是獨立主機的硬碟規格就不能如此隨意地客製化,獨立主機配合不同世代的CPU,RAM的大小會愈來愈大。

總結,如果某個大站的站長想要節省主機的費用,一般而言,使用獨立主機,可以比VPS省到30%~50%左右。但是,使用獨立主機時,就可能不適合參考disp.cc現行的分流方式了。

中文次域名的設置

我們在 http://unethost.com/host/idn-converter 有介紹轉換國際域名的編碼方式。有些客戶,會要求使用中文域名,是為了幫助瀏覽器上搜索及seo排名。經我們的測試後發現,原不是使用國際域名的網址,也能夠變化出中文域名的子域名(sub domain)。

以下是我們使用 cpanel 控制台的設定教學:

 

1. 首先,要在http://unethost.com/host/idn-converter 先產生出相對應的 idn (punycode).

 

2. 登入 cpanel 控制台後,點選子網域功能。

 

3.  將相對應的 punycode 填入,並建立。

 

4. 正式產生子網域。

 

5.  將 xn--unethost-eh0mj59aq49coli.tw-blog.com 貼到瀏覽器上,就會自動轉換成中文域名。

mysql指令速記

我實在是覺得透過 cpanel來增新mysql user有點缺乏效率。
還是不用指令不爽呀… ( 以下指令需要以root身分登入mysql )

(1) 新增使用者
create user ‘使用者名’@’localhost’ identified by ‘密碼’;

(2) 新增資料庫
create database 資料庫名;

(3) 使用資料庫
use 資料庫名;

(4) 設定權限  ( 對某個資料庫的所有tables 設定給某個user )
grant ALL PRIVILEGES on 資料庫名.* to ‘使用者名’@’localhost’;

(5) 砍掉資料庫
drop database 資料庫名;

(6) 砍掉使用者
drop user ‘使用者名’@’localhost’;

mysql export import

如果要備分或是還原資料庫,遇到資料庫超過一定的大小,例如20MB之後,許多php版本的自動匯出/匯入程式都會出問題。因為php程式會受到 max_upload_size, max_execution_time等參數的限制。甚至連phpmyadmin也會有不管用的時候。

遇到這種時候,如果追求速度(不計難度),最有效率的方法,自然是透過ssh登入,直接下mysqldump指令來解決問題。

匯出: mysqldump -u 使用者名稱 -p –opt  -h localhost  資料庫名稱 > 檔案名.sql
匯入: mysql -u 使用者名稱 -p 資料庫名稱 < 檔案名.sql

然而,上述的方法,牽扯到使用ssh。這對很多只會用ftp的使用者是一大門檻。當然,也是有不需要ssh的解法。
(*) 匯出   backup your mysql database using php 

程式在這邊,使用方法:
(1) 修改這一行
backup_tables(‘localhost’,”使用者名”,”密碼”,”資料庫名”);
(2) 透過網頁來啟動這個php檔。
(3) 執行完後,這個php檔會自動生成一個mysql database的匯出檔。再用ftp下載即可。

這個程式看起來還滿複雜的,有些人心裡應該會有疑惑,明明php也可以直接呼叫 linux的指令吧? php可以做這件事,但是,在虛擬主機的環境中,為了安全性,這個直接呼叫 linux指令功能一向是被關閉的。所以才需要寫得這麼麻煩。

(*) 匯入  BigDump

使用方法如下:
(1) 在bigdump的官網上,下載bigdump.php這個檔案的壓縮檔。並且解壓縮。
(2) 修改bigdump.php的內容

$db_server = '主機名稱';(一般為localhost)
$db_name = '資料庫名稱';
$db_username = '使用者帳號';
>$db_password = '使用者密碼'

(3)  修改bigdump.php的內容

$filename = '檔案名稱.sql';
$ajax = true;
$linespersession = 3000; (設定每次還原幾筆資料)
$delaypersession = 5000; (每次間隔休息時間,設定5000為休息5秒鐘。)

(4) 將「bigdump.php」與「檔案名稱.sql」放入同一個資料夾,並上傳至伺服器。
最後打開瀏覽器輸入bigdump.php 所在網址,如: http://domain.tw/dump/bigdump.php

(5)當藍bar全滿後,出現「Congratulations: End of file reached, assuming OK」的訊息後,表示資料庫匯入完成。