分類群組 ◊ 資訊科技 ◊

07 7月 2010 CDN 並不是甚麼好東西!
 |  分類: 資訊科技  | 我要留言

CDN 就是 Content Delivery Network。 一種檔案發送的網路手法;它可以將檔案分散在世界各地的主機,當有使用者對這個檔案發出要求時,CDN 會就最接近的主機結點將這個檔案送出到使用者的電腦。 這麼做可以大大的減少網路的擁塞,加快傳送速度。

但是 這都只是 “理論”,理論的東西在任何地方只要沒有意外,都是非常完美的。 不過如果有萬一,新的技術往往不比傳統的技術來的可靠。

我本身在一家電腦遊戲公司工作,主要負責提供海外的技術支援,還有工具程式的開發。
大家應該知道遊戲是一種很常會需要更新的程式,我們的遊戲基本上每星期都會有新的內容需要更新出去,所以理論上去使用 CDN 會達到很好的效果。 我一開始也是很相信這種技術的,直到接二連三的發生問題後;我非常的肯定,這種技術並不是甚麼好東西。

有一間外國的代理商代理了我們公司的產品,但是常常會發生有部份玩家沒辦法正常更新的情形;沒有正常的更新自然就沒辦法進去遊戲。(所以就損失這些玩家) 起初我們都相信是個案,但是後來經過統計後,每一次更新後就會造成百多人的人數損失;這些人可都是我們薪水的來源呀。

我們慢慢的發現到部份使用者下載下來的檔案是舊的版本,跟我們 flush 出去的檔案是不一樣的,我們怎麼知道為什麼? 我這邊下載的沒問題呀!

接著人數越掉越兇,連外國的 PM 都變成了受害者,他們自己下載下來的檔案,兩個人在同一個地方下載,檔案 size 整個不一樣;他們知道問題大條了,找我們求救。 我們能怎麼救呢? 是不是這一家 CDN 提供商有問題? 換一家嘛。
很好,換到新的一家後,問題還是存在;可以說更嚴重了。

最後,我建議的辦法還是最可靠的。
架設一個獨立的檔案主機給玩家使用,所有的玩家都連到這一台做更新!

沒錯,很土,很俗! 但是古老的方法永遠都是最可靠的!
新的技術不一定就是好,賣錢的技術往往都是舊的!
以上,提供給各界參考。

22 5月 2010 主機升級
 |  分類: 資訊科技  | 我要留言

最近公司真的忙到一個沒辦法的地步,通常回家也只有剩下一兩個小時的時間可以做這個升級的動作;加一加搞了半個月 -_-

就到現在為止都還沒有真正的完成升級的動作。 網站暫時的搬到了一台古老的 Acer C110 小筆電來跑。
所以,主機升級是生了甚麼?
原本的系統是 Ubuntu 9.10 版本,升成了 Ubuntu 10.04 版本;另外硬碟從原本的單一顆 1TB 的架構,大改了多一張 3Ware 9650SE 來跑 RAID5 (1TB x 4),IO一整個變的超快!
這之中遇到比較大的問題還是 2TB 容量瓶頸的問題。

將來這一台 Server 準備要把公司的 E-mail server 也移過來自己管,又有 RAID5 的保護,應該很安全。
以上!

04 4月 2010 各個國家的工作態度
 |  分類: 碎碎唸, 資訊科技  | 一則留言

最近因為工作的關係,必須面對許多不同國家的合作伙伴;也開始發現到了各個國家在處理事情時的態度。
我的工作是在一家網路遊戲公司處理海外廠商的主機,及大大小小的技術支援。 我將舉例幾個我覺得比較特別的國家家來說明。

德國
最好溝通,合作最愉快的國家。 與德國合作不需要給自己過多的壓力,或是可以說是幾乎沒有壓力了。 這個國家的朋友都非常的樂觀;之前有遊戲在接下來的幾分鐘就要公測了,居然還有一些小問題;我整個急到了胃快要暴開了,他們的然還是很輕鬆的請我別擔心慢慢來,最後離預定公測的時間都超過了半個小時問題才解決掉。 但是他們並沒有非常的急著要公開給玩家;他們所有的 GM 都穿著神裝站在新生點在那邊表演換裝,騎飛龍亂跑。 我最後對他們說,我準備要對外公開了,你們要不要都躲起來免的新手一進來看到你們這些神裝都不敢玩了;他們卻很爽快的說沒關係,他們這樣子可以幫助新手。 一般多數的國家的 GM 都是會躲起來怕被看到的;但是他們整個就很 free. 所以跟他們合作真的非常的愉快,且比較沒有壓力。

日本
跟日本人合作其實是還算順利的,他們常常會題出許多的要求,一開始會讓人覺得很龜毛;但是久了你慢慢會瞭解到其實他們是很努力的希望這個遊戲運作的更好更成功,讓營收更好為目地的要求。 對於他們的要求我是沒話說的,只是也常常會為了這個國家多花許多時間就是了。

韓國
跟韓國人合作其實是會非常不愉快的。 我們的 Game Server 主要都還是跑在 Linux 系統上的,但是韓國的工程師似乎都清一色的是 Windows 派系的,對方在系統操控能力上本身就已經技不如人了,但是他們的態度又不願意學習。 他們喜歡提出許多的要求,但這些要求很明顯的就是 “甚麼都要有” 的態度,跟遊戲的收入根本沒有太大的關係。 常常會要求我們 “馬上” 弄出一些怪東西給他們用,且都是以命令的口氣。
他們的能力不足以處理幾乎所有的主機問題 99.8% ?  但是他們又不願意去學習是讓我最頭大的。
之前他們要求我去更該某些 GM 的名字顯示時,我就跟他們工程師說我沒辦打韓國字,接著我把更改名字的資料庫語法很明白的寫好給對方,跟對方說只要填入他們想更改的韓國字就可以了,但是他們不願意自己來;丟來了一個清單共50 – 60 個韓國名字,我在那邊剪剪貼貼浪費了一堆時間後,把 sql 檔傳到主機上用倒的方式幫他們改好了,但這也浪費了我們很多時間。

再次強調一次他們能力很差又不願意學習。 他們臨時的在台灣時間早上8點就把遊戲關機了,我們客服部門看到韓國連線人數快速的下降,緊急的找我去公司要看到底發生甚麼事了,查了一下原因發現是被韓國人自己關掉的,我馬上問對方到底發生甚麼事,他們說因為要換防火牆。 我說為什麼都沒先通知我們? 你們把機器關了,起不來誰要負責? (他們很爽快的說,你們(台灣)要負責)
我除了傻眼還是傻眼,為什麼會有這麼霸道不講理的國家。

另外,韓國人很喜歡用嘴巴在處理事情,因為他們不願意學,也不願意做。 只要有問題,有想法,有意見;馬上就是發信過來要求我們馬上做。 我們也許5分鐘內沒來的及回信,馬上MSN就會被他們砲轟並要求我們快一點快一點快一點。 我火大了,我們主管也是火大了;決定不再百依百順,我們對韓國所提出的要求都會先經過評估,沒辦法做的就會說不幫他們做 (當然他們還是會一直吵著要)。
讓我很不解的是,他們甚麼都不會做;但是要求我們做的事情還會說風涼話,比方說為什麼這麼慢、這不是很容易的事嗎、你們不會做嗎,等等等的風涼話,看了就很氣。

韓國的要求其實是很過份的,他們並不是因為需要而要求,他們的要求純粹是 “甚麼都要有” , “要多凹一點” , “別人的兒子死不完” 的態度。

建議將來如果有機會跟類似的國家合作的朋友,要多多考慮一下!

07 1月 2010 用 PHP 讀取 Excel 檔案。
 |  分類: 資訊科技  | 我要留言

最近因為公司希望我去做一個可以直接讀取 Excel 檔案中的值並更新到資料庫的網頁程式。
就找到了 phpExcelReader 的套件,經過了幾次的測試發現它有一些編碼及格式上的問題。 phpExcelReader 並沒辦法處理某些 Excel 檔案,目前我也還沒找到原因;只知道這樣子不穩定的現象對我會造成困擾。 所以放棄了這一個套件。

接著又再找到另外一套叫 PHPExcel 的套件,他的功能更是強大,且可對 excel 檔案做寫入的動作。
PHPExcel 可以在 http://www.codeplex.com/PHPExcel/ 被找到。

網路上有很多人對 PHPExcel 有一種誤解,認為它只能存取 Excel 2007 的檔案。 其實現在新的版本已經把 Excel 2003 等早期的 Excel 存取支援做進去了。 以下小示範一下如何將一個 Excel 讀入後轉成 Array。

ini_set(“memory_limit”,”1024M”);  //設定php可使用的最大記憶體量,如果你的 Excel 只是幾十KB的話,可以將這個值設小一點。
require_once(‘Classes/PHPExcel/IOFactory.php’);
$objPHPExcel = PHPExcel_IOFactory::createReader(‘Excel5′); //設定為舊 Excel 版本相容
$objPHPExcel = PHPExcel_IOFactory::load(“j88.xls”);  //設定要讀取的檔案
//$objWorksheet = $objPHPExcel->getActiveSheet();  //設定讀取當前頁面
$objWorksheet = $objPHPExcel->getSheet(0);  //設定讀取第一個頁面
$array_out[] = null; //建立一個空 array
foreach ($objWorksheet->getRowIterator() as $row_key => $row){  //開始做 row 迴圈
$cellIterator = $row->getCellIterator();     //抓取這一行的 cell 資訊
$cellIterator->setIterateOnlyExistingCells(false);  //讀入整行的cells,如果為空就回傳 null
foreach ($cellIterator as $cell_key => $cell){  //做 cell 迴圈
$array_out[$row_key][$cell_key] = $cell->getValue().”; //將每一個row 的 cell 寫入 array
//上面會看到最後有 .” 是為了要強破 array 寫入的是字
//串,不然到時候 array 裡存的會是 object
}
}
echo “<pre>”;
print_r($array_out);  //輸出的 array
echo “</pre>”;

06 1月 2010 Linux 沒辦法裝在超過 2TB 的媒體上?
 |  分類: 資訊科技  | 2 則留言

昨天在公司的一位前輩在機房安裝一台 RAID 5 加總超過 2TB 的主機時遇到了問題。 後來他把那台 2U 且長版的主機整台抱回了公司(首先要對他的耐力致敬, 主機插滿了硬碟共有 20多公斤)

回來公司後就由我接手了,一開始有在網路上看了一下為什麼 CentOS 在超過 2TB 的 disk array 會沒辦法安裝,連抓都抓不到硬碟。 發現原來是因為 boot loader 還沒辦法使用 GPT 這種可以超過 2TB 限制的硬碟分割表。

我也沒有時間再去深入研究怎麼硬裝。 所以我改從 RAID 的設定下手。 6顆 500G 的硬碟在 RAID 5  下變共有 2.5T 的總空間,既然 CentOS 不讓我用這 2.5T 的 array,那我就設定這個 RAID 5 成兩顆 1.25TB 的硬碟。 在安裝時被抓到並辨識為 sda 及 sdb。

直接改用 LVM 的方式把這兩顆綁起來;因為單顆變為 1.25TB,成功的避開了 2TB 的限制。  裝起來後,重開,正常! 收工。

所以,如果有朋友想要將一個系統裝在超過 2TB 的媒體時,要特別注意一下這個問題。
這 2TB 並不是說直接把他切成兩顆 1TB  (sda1, sda2) 就有辦法突破 2TB 限制,目前我所知道比較快的方法還是要從 raid 設定下手,讓 Linux 把這 2TB 看成是 sda 及 sdb…..