久久沒動手寫 code,手又開始癢了… 前陣子跟小熊子聊的時後想到一個新的 IDEA,就順手記下來。像我們這種自己用ADSL架的小型網站,瓶頸都是卡在頻寬。愛拍照的小熊子最在意的當然就是網站擺照片所需要的頻寬… 解決方式其實有一堆,像是 Live Writer 就有個很有名的 PLUGIN,可以直接插入你放在 Flickr 的照片…
其實這類的 solution 很多,但是用起來就覺的不大喜歡,怎麼說? 倒不是說軟體不好用,而是它的作法。這類 plug-ins 都是幫你一次把事情作好,幫你上傳到 flickr,幫你查出 link,幫你產生HTML片段,貼到 WLW… 這種作法的問題在於你張貼文章時,這些資訊就得確定下來。你沒辦法裝了這個外掛,就把你八百年前貼的照片一起轉到 flickr,你也被這個外掛還有你的 flickr 帳號綁死了,未來換帳號的話,或是你沒有 WLW 可以用時,這些功能都沒有了。
我比較喜歡的是 server side 的 solution,如果是透明的 (像 PROXY) 更好,如果隨時可以不要或是改設定最好,這樣我不但不用綁死在我的某個 flickr 帳號上,甚至不用綁在 flickr 這樣的服務…
過去 (沒想到已經快四年了 -_- ) 其實我作過幾個類似的 HttpHandler,都是用一樣的理念去開發的。這次想的是利用 Flickr 提供的 API,來做一樣的事。
簡單的說,如果我能夠寫個程式,能夠在 Run Time 動態去檢查網站上某張圖檔有沒有傳到 flickr 上? 如果沒有且判定不需要,則像一般網站一樣直接在 Http Response 傳回圖檔的內容。如果需要則自動上傳到 flickr,最後把這個 Http Request 重新導向到 flickr 上的照片網址。
這樣作法最後的結果跟 WLW 搭配 flickr plugins 差不多,差別在一個是靠 client 端,在你張貼文章時幫你處理掉一連串的動作,我的作法是統一在 server 端,在觀看文章內容時才做這件事。效能一定不如 WLW + Flickr plugin 好,不過就是多了彈性。我可以隨時關掉這個功能,隨時換相片服務,另一個更重要的是我自己保有一份完整的網站跟檔案資料。如果我的 BLOG 資料散在各地各個服務,我要備份或是還原等等也都很辛苦…
講了一堆都是廢話,其實這篇主題只有一個,就是想到好點子又要開始動手寫 code 了 [:D] ,有點成果之後會陸續在貼幾篇相關的文章。在之前作了 POC ( Prove Of Concept ),證明這個技巧是可行的,剩下的就是真正動手寫了。另外也有一個目的,就是想把之前寫的另外兩個 HttpHandler整合起來,弄成統一的 provider 架構來實作。
想的很美,照片就轉到 Flickr,影片就轉到 YouTube … 不過影片那邊的難度就高的多了,現在的實作只是從 HTTP 自動轉到 RTSP 而以.. ZIP 檔現在是虛擬化成一個資料夾,未來看看能不能自動轉到 Microsoft SkyDrive 之類的服務….
好,先寫到這裡,敬請期待下集 [:D]
經過一個禮拜的準備,總算在這週末完成移機的動作了… 為什麼標題叫 “Next Ten Years” ? 因為換下來的 server 已經陪我十年了,不知道這次換的新 SERVER 能不能陪我再撐十年?
沒想到當年的 ASUS P2B-DS 這麼耐用,中間換了 CPU,換了 RAM,機殼,顯示卡,連硬碟光碟都換過好幾次了,唯獨主機板跟 Power 都沒換過…
_thumb.jpg)
舊 server 拆掉前
其實舊 server 能撐這麼久也不是沒有原因的,除了硬體都沒壞之外,老實說跑跑簡單的 NAT / DHCP / DNS 也都夠用,跑現在這個網站 (BLOG + SQL) 也都撐的住。不過規格時在是不饒人啊,現在已經買不大到 IDE 的硬碟了,就算買的到也很不划算。前陣子弄了張 PCI 的 4 ports SATA card,結果也因為BIOS實在太古董了,裝上硬碟就停在那邊不開機 @_@,舊硬碟只要 COPY 大檔,SQL 2005 Express 就給我罷工… 最後跟同事借了台量耗電的機器,舊SERVER一開機就要 150W… 以它的處理能力來說實在不划算,所以才會忍不住去敗了零件來換…
本來換機的 roadmap 規劃的很漂亮,想說等到 2009 Q1 ~ Q2,INTEL換了新的架構後,現在的桌機 (P5B-E Plus + E6300) 拿來當SERVER,桌機就換新的… 不過實在是受不了硬碟一直維持不到 5% 剩餘空間,加上每次一挪空間網站就給我掛掉,就改變策略直接買來換掉現在的SERVER,桌機就將就點用吧…
這次換的配備,都是以省電為主要訴求,規格就挑同級裡最低階的:
| 配件 | 規格 |
|---|---|
| CPU | Intel Core2 Quad Q9300 |
| RAM | A牌 DDR2-800 2GB x 4 |
| 主機板 | Intel Q35 (ASUS P5E-VM DO) |
| 硬碟 | WD7500AACS (750GB) x 3 |
| Power | S牌 330W |
一直覺的SERVER還要找張VGA卡裝上去實在是很雞肋,跟本用不到幾次,不過不裝又很麻煩… 雖然2003號稱可以支援,不過我想還是別自找麻煩好了 [H],主機板就鎖定 Q35 的,因為它定位在商用機種,內建 VGA,同時又保有基本的效能… 不會像其它內建顯示晶片的板子,要嘛RAM只能插兩條,不然就是SATA只有四個…
CPU挑了四核最入門的 Q9300,為什麼不挑 Q6600 ? 差一千五左右,不過耗電量跟溫度都有差,因為我堆SERVER的房間通風很差,太熱實在很麻煩,就挑了Q9300. 硬碟挑的是WD GP系列,閒的時後轉速可以自動從7200降到5400,正好符合我的需求。我一向不大在意硬碟有多快… 反正快慢頂多差個10%,實在沒差多少,容量多一點,溫度低一點比較實在..
_thumb.jpg)
裝好的新 SERVER
舊 SERVER 把機殼塞的滿滿的,相對之下新SERVER就顯的小多了,多插張網路卡就一切搞定了,之前插的滿滿的 (網卡 x 2 + USB + VGA …) 耗電量也省的多,之前只接一顆硬碟,只要 70W… 四顆硬碟都加上去應該也不到 100W… 早知道買 330W 的 POWER 幹嘛…
移機的過程就不提了,原本還很謹慎的弄台IP分享器,想說換機過程中至少讓家裡對外網路是通的,事實證明這完全是多此一舉… 家裡會上網的人全都睡覺去了 [H]… 不過還是要感謝一下提供IP分享器的米國人 [:D] (沒錯,Honga 就是你..),貼張照片感謝一下:
_thumb.jpg)
換完後又設定東設定西,檔案這裡搬過來那裡搬過去,總算弄完了。最後除了舊的 Modem 找不到 windows 2003 x64 driver 之外,其它一切正常。因為系統都重灌了,有缺啥設定漏掉的,或是發現網站那裡不正常的再通知我吧!
趁機借問一下,有沒有推薦的 USB Modem (我只要拿來收發傳真而以),有 2003 x64 驅動程式的? 網站是找到幾款,不過都是天價,不然就是市面上買不到…
因為現在 SERVER 已經是換機櫃, 藏在雜物間了, 拔機器很麻煩… 隨便換個東西就要半天一天的, 因此先公告一下.
時間不是這週末 (2008/05/10 ~ 11), 就是下週末 (2008/05/17 ~ 18), 會被影響的人請事先作好心理準備吧 [H]
誰會被影響? 不多啦, 只有…
看起來好像很多? 哈哈… 加一加不知道有沒有十個人? [H]
看來是換四核心CPU的時機到了 [H]
之前弄了半天的歸檔程式,效能都卡在 .CR2 -> .JPG 這段。雖然祭出了 ThreadPool,也想盡辦法把獨立的工作湊在一起,盡量提升 CPU 的利用率,不過得到的效果有限,因為最後都是剩下 .CR2 的檔案轉不完啊,其它拿來填空檔的工作早就做完了,實在不成比例… 整體效能還是卡在最慢的 Canon Codec 身上…
這次無意間想到,單一 process 內,Canon Codec 有過多不能重複進入的問題 (不能同時利用到兩顆CPU),那麼拆成兩個獨立的 process 是否就解決了?
想一想還蠻可行的,通常為了安全,都只需要做到 process 內的 LOCK 就夠了,不需要做到全域的 LOCK,除非要 LOCK 的資源是跨 process 會用的到的才需要這樣做… 在真正改程式下去之前,當然要先驗證一下…
用之前的 LIB 簡單寫了個執行檔,就單純的把 .CR2 轉 .JPG 而以。寫好後同時 RUN 兩份,讚! CPU 利用率飆到 80% (雖然離理想的 100% 還有段距離) … 不過在我的 E6300 CPU,同時跑兩份,執行速度倒沒有下降,差不多..
確定這方式有效之後,花了點時間改我的歸檔程式,把轉檔部份抽成 .exe 然後由歸檔程式來啟動,一樣維持同時有兩個 .CR2 轉檔程序進行。耶! 情況不錯,轉一個檔案一樣要 70 秒,但是 70 秒過後可以轉完兩個檔案… 平均起來等於速度加倍了…
之前一直不想用這個方法,因為一來 IPC (inter-process communication) 是件麻煩事,不想去碰,二來啟動另一個 process,參數的傳遞也是個麻煩事,大概就只能靠檔案或是 arguments … 或多或少都要處理到一些 parsing 的問題… 三來執行的回傳值也是一樣,總之都碰到 IPC 的問題就不想去碰他了
不過這次評估了一下,這些動作麻煩歸麻煩,至少不是花運算資源的動作,跟一張照片轉 70 秒,一次動則上百張的量比起來,怎麼算都划算…
真糟糕,這樣下去是不是代表該換 Q9450 了? 咳咳…
.jpg)
沒錯,我的文章在四月號的 RUN! PC 刊出來了,之前花了些時間在研究執行緒跟 ASP.NET 搭配起來用的技術問題,有點小心得,就整理了一下投稿了,運氣還不錯,雜誌社也願意刊出。初次投稿花了不少時間,花在重新思考 sample code 怎麼寫比較能突顯主題,圖表要怎麼畫才清楚明瞭等等瑣事上面,原來當個專欄作家 (我沒有專欄啦,只是投稿而以) 也不是這麼簡單的…
文章的內容嘛,看雜誌就知道了,這篇是留著作個紀念,同時也是讓看了這篇文章有話要說的讀者們,有個留下 comments 的地方。
文章裡提到的 sample code 可以到 這裡 下載,懶的抓回去執行的人,也可以直接到 這裡 試 RUN 看看文章裡提到的範例。
在執行這個範例程式之前,請先注意一下,IE預設只會對同一個網站建立兩個Http Connection,因此有可能會看到不一樣的測試結果。如果想要調大這個限制,請修改下列的註冊機碼,或是下載本文的範例程式,匯入IE.reg註冊機碼。
調整IE同時連線數的註冊機碼
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"MaxConnectionsPerServer"=dword:00000008
"MaxConnectionsPer1_0Server"=dword:00000008
相關連結: 範例程式下載 執行範例程式 下載調整IE連線上限的註冊檔