cloud computing 網路 資工

CDN如何加速網站讀取速度?

在雲端運算(氾濫)的時代,所有服務都講求加速再加速,傳統的單一伺服器(Server)服務多個用戶端(Client)的方法,在面臨行動網路用戶迅速增多,而造成大量資源索取時,無論是資料的傳輸、服務的回應時間,反而變得「緩不濟急」。 因此,CDN(Content Delivery Network,內容傳遞網路)的技術興起,正是運用雲端運算分散式計算的概念,加速資料的存取與降低伺服器端的負載。 傳統網路服務模式與CDN服務模式(取自Wiki) 我們傳統的網路服務模式如上圖左,所有的用戶端都連線到伺服器上索取資源。但是,當用戶數量成長到百萬數量級時,伺服器的負擔便會開始變得重,回應時間慢,開始發生取不到資源的狀況。而這個現象若發生在向伺服主機業者租賃虛擬主機或是雲端主機的服務提供商(Service Provider, 這邊簡稱SP) 而言,可不是一個好兆頭。因為這些主機商會跟SP依照頻寬、IO數量與CPU運算量計價,代表著錢都還沒進來就開始付出昂貴的費用了,更不用說因為網路服務不穩、回應時間太慢造成客戶流失的慘劇。 因此,CDN的出現變成了這些服務提供商的救星。CDN網路主要是靠著分散在各地的(雲端)主機,就近提供這些服務提供商的用戶資源。 它有著巨量的頻寬與速度,只要服務提供商將主機網址(例如,http://www.example.com) 寄放給CDN,CDN業者的主機便會先到http://www.example.com 抓取靜態的資料(主要是圖檔、影片、一些雜七雜八肥大的線上存取函式庫等等),然後將這些靜態資料派送給這一大群CDN網路內的主機。 因此,過沒多久,所有的CDN主機都有同樣的資料複本(如上圖右),那麼使用者在跟這個SP提供的服務做連線時,在索取圖像、影片等資料時,會「就近」選擇最近的CDN。例如,台灣的使用者,連上某個美國的服務時,會先到新加坡的CDN主機進行存取,由於網路封包路由比較近,速度上會快很多。 這項技術已經被很多雲端服務業者採用,例如FB就是一個例子,它很多照片都是委託給akamaihd.net這個CDN來幫忙做圖床複本,所以大家在載入時便會快很多(但是安全性就…)。 有些小聰明的使用者,或許會問以下問題。 使用者的網路存取是怎麼自動連線CDN的? 有些興趣的使用者會在網路上Google一下做法,但是要有點DNS的知識才看得懂這在做啥?我就我知道的,從實務面來簡單講述一下基本流程: 身為服務提供者(SP),為了降低頻寬,拿它的服務網址(例如,http://www.example.com) 去跟CDN業者申請一個帳號。 CDN業者給他一個CDN對應domain,假設是cdnexample.cloudcdn.net 好了。 CDN業者使用CDN主機去抓取http://www.example.com 的資料(通常是抓取圖片、影片等) 業者到自己的註冊網域服務提供者,加入一個CNAME(網域別名),假設是media.example.com ,對應到cdnexample.cloudcdn.net。這樣子大家連到media.example.com時,便會到cdnexample.cloudcdn.net。 由於CDN業者僅只有抓取靜態資源(如圖片、影片)等,正式的動態產生頁面還是要SP的主機來做。因此,在程式的寫法上,如果是圖片、影片的資源提供,會寫成<img srcf=”media.example.com/01.png” />。如此一來,大家在讀取圖片或是影片時,會藉由media.example.com連到最近的CDN(cdnexample.cloudcdn.net) 取得資源。這樣子存取速度變會大幅提升,真正提供服務的主機其負擔便會降低不少。 再狠一點的話,就是把動態的網頁在生成時,全部做成HTML,這樣子服務的主機只要對CDN提供服務,不用對使用者用戶端提供服務。 這樣子,CDN整體概念可以描述成下面這張圖來理解: 參考資料 Wikipedia:CDN Amazon CloudFront:CDN DNS資源記錄介紹

Read More
C/C++ Windows 程式設計 網路

Use the CURL Library in Code::Blocks on Windows Platform

In current days, our college students meet the problem while compiling the CURL library in Code:: Blocks on Windows(i.e. Windows 7) platform. I noted the process that how to write the sample program with CURL library and compile it successfully. There are some steps which we should do: (This is a simple example run on […]

Read More
C/C++ 科技 程式設計

RS232相關研讀資源

推薦的資料來源: http://www.vr.ncue.edu.tw/esa/a1001/ch07.pdf http://www.esdesigner.com.tw/esd/article/RS232.pdf http://tinyurl.com/c3o73eg http://www.bandcoach.net/LarryDIY@PALMisLIFE/null_modem.htm http://bbs3.nsysu.edu.tw/txtVersion/boards/math-asm/M.867852899.A.html http://www.ftdichip.com/Support/Documents/ProgramGuides/FTChipIDPG11.pdf  [The one of driver supprt documents for UART chip] http://www.wretch.cc/blog/superMagon/34279205 http://www.ltivs.ilc.edu.tw/kocp/mpu/m7/m7-4-1.htm [Recommended]

Read More
程式設計 資工 軟體(Software)

淺談專案管理

  需求分析(RA, Request Analysis): 系統分析(SA, System Analysis): 進行開發前所需的工作: 確認開發工具:IDE選擇,開發函式庫選擇,使用的程式語言。 版本控制:Git or SVN? 版本號命名規則? 程式開發準則:Coding Style、參數訂定 元件設計解析:Design Pattern 測試階段: 測試流程與測試策略訂定:黑箱測試或白箱測試?測試流程? 測試文件撰寫:測試狀況,是否為Bug? Bug回報採用Issue Tracker進行管理。 發布階段: 安裝包建立(需另外以子專案進行開發、測試): 防止反組譯工具: 文件撰寫: 授權書:GPL、MIT或其他授權 著作權聲明: 說明手冊: 正式釋出!

Read More
C/C++ Linux Programming 程式設計

[Linux] Autoconf, Automake

[筆記一下自己學Autoconf, Automake這一類的GNU Build Tool。][2013/07/14 更新:把linker 引用libraries的順序寫得更清楚一些。] 身為常常用Linux的程式設計師兼MIS人員來說,在Linux系統上面要編譯程式是很家常便飯的事情。最常用的指令是./configure; make; make install ,筆者稱之為「大三元」。只是如果今天角色互換,變成我們來開發程式,並且把程式以開放原始碼的方式發送出去,該怎麼做呢?其實上述說的大三元指令,是由GNU Build System提供的aclocal, autoconf, automake幫你產生configure script file以及對應的Makefile。由於筆者做專案需要引用curl這個library。石頭閒言閒語部落格提供教學雖然基本,但是又不太夠用。以下便筆記一下自己在做該專案的方式,稱不上專業,若有謬誤,敬請多多包涵。 以下分為四個步驟來解說。 一、 先前準備工作1. 今假設你的專案名稱為project。程式碼資料夾為src。    而且我們寫了一份程式碼,放在src/add.cpp底下。2. 先準備四個文件:AUTHORS、ChangeLog、NEWS、README    (1) AUTHORS:寫明作者資訊。    (2) ChangeLog:程式碼異動記錄。    (3) NEWS:最新消息    (4) README:軟體說明與介紹其它像是INSTALL(軟體安裝文件)以及COPYING(版權聲明),automake時,便會幫我們自動產生。注意!如果你用的是舊版的Linux系統(例如筆者的CentOS 5),COPYING是用GPL v2,如果是新的Linux系統,COPYING是用GPL v3。3. 建立doc資料夾。 二、撰寫configure.ac在產生configure之前,我們必須先準備configure.ac這個檔案。我們將檔案撰寫如下: 三、撰寫對應的Makefile.am由於我們習慣直接在專案目錄下輸入make。其實仔細去看各個開放原始碼專案,不難發現它們都在專案資料夾底下,放置Makefile。然後再透過該Makefile撰寫的規則,進入src底下各個程式資料夾的Makefile,進行make工作。因此,為了達成這個目的,我們也需要在專案資料夾與src資料夾各放置一個Makefile。但是,先前提到,我們會利用automake工具達成自動產生Makefile的工作。而此工具需要撰寫Makefile.am檔案。所以,我們在這邊就另外寫Makefile.am檔案。 1. 專案資料夾底下的Makefile.am寫法: 2. src資料夾底下的Makefile.am寫法: 請注意,由於我們要用的curl函式庫編譯參數,根據linker order這篇教學指出,gcc library引用原則:「要用到某個library的程式檔,請放在要引用的library前面(舉例來說,libcurl.so會用到libz.so,則必須寫成-lcurl -lz)」。然而,網路上有些教學會跟我們說設定LIBS跟Add_LDFLAGS都一樣,這個在本例子使用automake是嚴重錯誤的!根據我們會自動產出的Makefile,其中一行可能長成這樣子:$(CXXLINK) $(Add_LDFLAGS) $(Add_OBJECTS) $(Add_LDADD) $(LIBS)如果我們把上面的src/Makefile.am改寫如下: Add_LDFLAGS […]

Read More
Windows 程式設計 軟體(Software)

[Windows] AD Server 使用心得與注意事項

在台灣的中大型企業中,都會建立Windows AD Server來控管電腦使用者並且達到單一登入(Single Sign On)的要求。我最近在學著使用AD Server,因為某些需求,發現它也可以透過GPO來派送與佈署軟體給電腦或是使用者。 若是要我推薦AD Server入門書籍,我推薦「Windows Server 2008(或是2003) Active Directory建置實務」。 但是,在學著使用GPO進行操作時,要特別注意以下事項: 不要拿你自己的Domain Server兼AD Server來測試剛建立使用者的登入,因為預設的Domain Server 安全性原則是不允許剛建立使用者進行登入的。 不要拿VMWare的虛擬機器來模擬軟體派送。我曾經因為VMWare把軟體派送擋住,讓我白忙一整天的時間。 若是要派送msi 安裝檔,並設定該安裝檔為使用者登入時自動安裝。請確定該msi installer可以在靜默模式與背景模式下安裝,如果沒辦法登入安裝的話,可以參照以下方法解決。 若該msi安裝檔是那種有GUI介面的,我們可以透過msiexec 這個指令,將你要安裝的檔案設定為背景模式與進度條模式安裝 。也就是直接輸入msiexec /i “你的msi安裝檔路徑” /qn,進行安裝 (msiexec的簡易教學可以看這篇)。 在知道要怎麼使用msiexec的話,接著我們可以參考這篇GPO原則自動安裝印表機教學文,寫一個簡單的bat script,透過該篇教學,設定使用者登入後,執行你寫好的自動安裝script。 好了,注意事項撰寫完畢。再來推薦一個AD Server派送軟體的教學影片。

Read More
程式設計 資工 軟體(Software)

[Fixed] Don’t make Bug Tracker’s online editor convert your links into relative paths.

Bug Tracker is our excellent homemade issue tracker software. However, its TinyMCE editor converts all your links which are made by your host into relative paths. For example, if your host is http://example.com and you have established your bug tracker on it. Then, you want to add one link e.g. http://example.com/some_information.html to your report in […]

Read More
ASP.NET Programming Web Design 程式設計

[ASP.NET] ASP.NET撰寫時應注意的觀念

有撰寫過PHP/JSP/ASP網頁程式設計的人員請注意! ASP.NET 使用Window Form的設計模式與一般我們在使用GET/POST表單傳遞方式不一樣。 請謹記以下6個基本要點,以免到時候撰寫程式時卡東卡西的。 1. ASP.NET 採用的Window Form,預設會塞一個Form表單在裡面,請勿另外自己撰寫<form>… </form>標籤。 2. ASP.NET 控制項所有的操作,都是自動作用在自己這張頁面中(自己傳給自己)。採用的方式即是所有的動作都使用表單傳回給自己。例如,在ASP.NET專案的Default.aspx 加入以下: <asp:button id=”button1″ click=”button1_click(xxx…)”></button> 它的button1_click事件,是自動傳參數給本身的頁面(Default.aspx),頁面在接收到傳遞的資訊後,再執行click事件所委派的方法。 3. 按照ASP.NET執行流程,會先執行Page_Load方法,再依序初始化控制項,並執行其他方法。 4. 承3,由於每個動作都會引發Page_Load方法,所以要判定是否第一次存取頁面,請善用if ( this.IsPostBack … )這個判斷式,如果回傳false,代表第一次讀取頁面。若回傳true,代表第二次之後的頁面讀取。 5. 學習ASP.NET時,會使用ViewState[]、Session[] 與 Application[] 這幾個變數。差別如下:    (1) ViewState[] 是將變數內嵌在html程式碼中,以<input type=’hidden’ … >的方式存在。因此,不能跨頁面存取。這類變數只能在自己本身的頁面內做存取。   (2) Session[] 可以跨頁面存取,但是無法跨站存取。   (3) Application[]: 用於跨站存取(本機內可能有多個ASP.NET應用程式)。  6. 預設具有Postback功能的就只有Button,其它的控制項若是要具有Postback功能只要將控制項的屬性AutoPostBack=”True”即可。 以上重要觀念來自文魁出版公司的ASP.NET程式設計徹底研究 (前6章節)。  

Read More
Back To Top