#
ZSP project started.SourceView2.0 and SourceFlow1.0 will be
deployed there.
This project is my first project since I came to GZ,wishing it
success.
Fedora為什么不用mp3,而選擇ogg?
Freedom: Make ogg, not mp3
Why is mp3 popular? Because it's better than everything else out there?
No. mp3 is popular because its creators licensed it broadly to spur its adoption. Then, once it was the de facto format, they started to enforce their patents aggressively and restrictively.
The free and open multimedia codecs such as the Ogg family of codecs are superior, and they are not patent-encumbered. Never have been, never will be. That's why we support free and open formats like Ogg Vorbis (lossy) and FLAC (lossless) for general audio and Ogg Theora for video.
For those people who insist upon using mp3, it's not difficult to figure out how to get these players. Still, we'd much rather change the world instead of going along with it.
http://fedoraproject.org/wiki/Overview
An operating system, a set of projects, and a mindset.
What is Fedora? Fedora is a Linux-based operating system that showcases the latest in free and open source software. Fedora is always free for anyone to use, modify, and distribute. It is built by people across the globe who work together as a community: the Fedora Project. The Fedora Project is open and anyone is welcome to join. The Fedora Project is out front for you, leading the advancement of free, open software and content.
The operating system is Fedora. It comes out twice a year. It's completely free, and we're committed to keeping it that way. It's the best combination of robust and latest software that exists in the free software world.
The mindset is doing the right thing. To us, that means providing free and open software and content, at no cost, freely usable, modifiable, redistributable, and unencumbered by software patents.
覺得Fedora做得挺好,特別是對(duì)我們這樣的程序員。
集成了MySQL,Tomcat,JDK,Eclipse,C的編譯器以及C的庫文件,簡(jiǎn)直是天然的開發(fā)環(huán)境。
今天用c連接mysql,調(diào)試成功。
編譯包含mysql的c程序的命令如下:
[root@localhost ~]# gcc -o /forc/testmy /forc/testmy.c -lz /usr/lib/mysql/libmysqlclient.so.15.0.0
同時(shí),也試了一下Tomcat。
啟動(dòng)tomcat使用如下命令:
cd /usr/share/tomcat5/bin
java -jar bootstrap.jar
停止tomcat:
java -jar bootstrap.jar stop
今天真正理解什么是“
Free software”
What is Free Software?
“Free software” is a matter of liberty, not price. To understand the concept, you should think of “free” as in “free speech”, not as in “free beer”.
Free software is a matter of the users' freedom to run, copy, distribute, study, change and improve the software. More precisely, it refers to four kinds of freedom, for the users of the software:
The freedom to run the program, for any purpose (freedom 0).
The freedom to study how the program works, and adapt it to your needs (freedom 1). Access to the source code is a precondition for this.
The freedom to redistribute copies so you can help your neighbor (freedom 2).
The freedom to improve the program, and release your improvements to the public, so that the whole community benefits (freedom 3). Access to the source code is a precondition for this.
大約有10年沒寫過c程序了。由于工作需要,我又重新開始學(xué)習(xí)c。
今天解決兩個(gè)問題:
1.段錯(cuò)誤
原來字符串?dāng)?shù)組在使用前必須為它分配內(nèi)存,這跟java可不一樣。用calloc就可以。
2.警告:隱式聲明與內(nèi)建函數(shù) ‘calloc’ 不兼容
加入#include "stdlib.h" 就可以了。
struct sockaddr {
unsigned short sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};
sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF_INET。
sa_data是14字節(jié)協(xié)議地址。
此數(shù)據(jù)結(jié)構(gòu)用做bind、connect、recvfrom、sendto等函數(shù)的參數(shù),指明地址信息。
但一般編程中并不直接針對(duì)此數(shù)據(jù)結(jié)構(gòu)操作,而是使用另一個(gè)與sockaddr等價(jià)的數(shù)據(jù)結(jié)構(gòu)
sockaddr_in(在netinet/in.h中定義):
struct sockaddr_in {
short int sin_family; /* Address family */
unsigned short int sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[8]; /* Same size as struct sockaddr */
};
struct in_addr {
unsigned long s_addr;
};
sin_family指代協(xié)議族,在socket編程中只能是AF_INET
sin_port存儲(chǔ)端口號(hào)(使用網(wǎng)絡(luò)字節(jié)順序)
sin_addr存儲(chǔ)IP地址,使用in_addr這個(gè)數(shù)據(jù)結(jié)構(gòu)
sin_zero是為了讓sockaddr與sockaddr_in兩個(gè)數(shù)據(jù)結(jié)構(gòu)保持大小相同而保留的空字節(jié)。
s_addr按照網(wǎng)絡(luò)字節(jié)順序存儲(chǔ)IP地址
sockaddr_in和sockaddr是并列的結(jié)構(gòu),指向sockaddr_in的結(jié)構(gòu)體的指針也可以指向
sockadd的結(jié)構(gòu)體,并代替它。也就是說,你可以使用sockaddr_in建立你所需要的信息,
在最后用進(jìn)行類型轉(zhuǎn)換就可以了bzero((char*)&mysock,sizeof(mysock));//初始化
mysock結(jié)構(gòu)體名
mysock.sa_family=AF_INET;
mysock.sin_addr.s_addr=inet_addr("192.168.0.1");
……
等到要做轉(zhuǎn)換的時(shí)候用:
(struct sockaddr*)mysock
---------send to--------
#include "stdio.h"
#include "sys/socket.h"
#include "netinet/in.h"

int main(void)


{
struct sockaddr_in sockin;
int sockId = 0,ret = 0;
char* buf;

sockId = socket(AF_INET,SOCK_DGRAM,0);
if(sockId < 0)

{
printf("Socket Failed!\n");
return 1;
}
memset(&sockin,0x0,sizeof(sockin));

sockin.sin_family = AF_INET;
sockin.sin_port = htons(1234);
sockin.sin_addr.s_addr = inet_addr("192.168.2.4");
//memset(&buf,'A',100);

buf = "This is message from server";
ret = sendto(sockId,buf,100,0,(struct sockaddr *)&sockin,sizeof(sockin));
if(ret != 100)

{
printf("Sendto failed!\n");
return 1;
}
close(sockId);
printf("Sendto succeed!\n");
return 0;
}

-----------receive----------
#include "stdio.h"
#include "sys/socket.h"
#include "netinet/in.h"

int main(void)


{
struct sockaddr_in sockin;
int sockId = 0,ret = 0;
char buf[100];

sockId = socket(AF_INET,SOCK_DGRAM,0);
if(sockId < 0)

{
printf("Socket Failed!\n");
return 1;
}
memset(&sockin,0x0,sizeof(sockin));

sockin.sin_family = AF_INET;
sockin.sin_port = htons(1234);
sockin.sin_addr.s_addr = INADDR_ANY;


ret = bind(sockId,(struct sockaddr *)&sockin,sizeof(sockin));
if(ret < 0)

{
printf("bind failed!\n");
return 1;
}
ret = recvfrom(sockId,buf,100,0,NULL,NULL);
if(ret < 0)

{
printf("Recvfrom failed!\n");
return 1;
}
printf("Recvfrom result=%d\n",ret);
close(sockId);
printf("%s\n",buf);
return 0;
}
http://www.knowsky.com/366521.html
在實(shí)際的任何一個(gè)系統(tǒng)中,查詢都是必不可少的一個(gè)功能,而查詢?cè)O(shè)計(jì)的好壞又影響到系統(tǒng)的響應(yīng)時(shí)間和性能這兩個(gè)要害指標(biāo),尤其是當(dāng)數(shù)據(jù)量變得越來越大時(shí),于是如何處理大數(shù)據(jù)量的查詢成了每個(gè)系統(tǒng)架構(gòu)設(shè)計(jì)時(shí)都必須面對(duì)的問題。本文將從數(shù)據(jù)及數(shù)據(jù)查詢的特點(diǎn)分析出發(fā),結(jié)合討論現(xiàn)有各種解決方案的優(yōu)缺點(diǎn)及其適用范圍,來闡述J2EE平臺(tái)下如何進(jìn)行查詢框架的設(shè)計(jì)。
Value List Handler模式及其局限性
在J2EE應(yīng)用中,對(duì)于大數(shù)據(jù)量查詢的處理有許多好的成功經(jīng)驗(yàn),比如Value List Handler設(shè)計(jì)模式就是其中非常經(jīng)典的一個(gè),見圖1。該模式創(chuàng)建一個(gè)ValueListHandler對(duì)象來控制查詢的執(zhí)行以及結(jié)果集的緩存,它通過DAO(Data Access Object)來執(zhí)行查詢,并將數(shù)據(jù)庫返回的結(jié)果集(傳輸對(duì)象Transfer Object的集合)緩存起來,接下來的客戶端查詢請(qǐng)求將直接從緩存中獲得。它的特點(diǎn)主要體現(xiàn)在兩點(diǎn):服務(wù)器端緩存數(shù)據(jù),每次只返回客戶端本次操作所需的數(shù)據(jù),通過這兩個(gè)措施來減少數(shù)據(jù)庫的訪問次數(shù)以及增加客戶端的響應(yīng)速度,達(dá)到最優(yōu)的查詢效果。當(dāng)然,這里面隱含一個(gè)前提就是客戶端采用分頁的方式來瀏覽數(shù)據(jù)。關(guān)于該模式的具體介紹,請(qǐng)參考[Core J2EE Patterns]一書。
但是在實(shí)際的應(yīng)用過程中,會(huì)發(fā)現(xiàn)該模式存在一定的局限性,其實(shí)可以說是該模式應(yīng)用具有一些前提條件:
1、由于緩存是以內(nèi)存來換性能,這對(duì)于小數(shù)據(jù)量會(huì)工作得很好,但是假如結(jié)果集很大,內(nèi)存消耗將會(huì)非常嚴(yán)重。同時(shí),消耗在處理結(jié)果集上的時(shí)間也會(huì)越來越長(zhǎng),比如要循環(huán)讀取記錄集中的數(shù)據(jù),然后依次填充每個(gè)傳輸對(duì)象,想想看幾百萬條數(shù)據(jù)這樣處理起來肯定讓人不能忍受。過長(zhǎng)的處理時(shí)間不僅降低反應(yīng)速度,同時(shí)還會(huì)占用寶貴的數(shù)據(jù)庫連接資源,造成其它地方無連接可用。雖然,在DAO模式中利用CachedRowSet,Read Only RowSet ,RowSet Wrapper List等策略(詳見參考資料)來代替Transfer Object Collection策略,有效地提高了處理速度,但是仍然存在著在大集合數(shù)據(jù)中進(jìn)行定位、遍歷等問題。試想一想,即使在CachedRowSet中的absolute(2000000)也是非常費(fèi)時(shí)的操作。所有這一切的根源就在于緩存是一次性讀取所有的數(shù)據(jù),雖然有時(shí)你可以利用業(yè)務(wù)邏輯來強(qiáng)制性增加一些限制條件(比如產(chǎn)品查詢必須選擇大類和次類),但這種限制往往是不牢靠的或者說只是一時(shí)的權(quán)宜之計(jì)。也有人提出,可以不必緩存所有的查詢結(jié)果,而采取只緩存部分結(jié)果集,比如500,1000條,但這樣一來,就涉及到復(fù)雜的查詢數(shù)據(jù)是否越界的控制,增加了復(fù)雜度,同時(shí)也不易實(shí)現(xiàn)。
2、既然使用緩存,那就不得不面對(duì)一個(gè)數(shù)據(jù)更新的問題,使用緩存,實(shí)際上就假定了在數(shù)據(jù)緩存期間,數(shù)據(jù)庫中的數(shù)據(jù)不會(huì)改變,或者這些改變可以不被反映出來。但是,在很多場(chǎng)合下(比如常見的業(yè)務(wù)系統(tǒng)中)這些數(shù)據(jù)庫中的數(shù)據(jù)經(jīng)常會(huì)發(fā)生變化,而且這些改變需要及時(shí)反映給客戶端。
3、緩存其實(shí)存在一個(gè)基本前提,就是緩存的數(shù)據(jù)會(huì)被客戶端反復(fù)查詢使用,具體到分頁查詢就是客戶會(huì)選擇不同的頁數(shù)來查看數(shù)據(jù)。假如客戶端的查詢條件始終變化,或者用戶基本上只關(guān)心第一頁的數(shù)據(jù)(仔細(xì)琢磨一下用戶的習(xí)慣,這在很多中應(yīng)用場(chǎng)合都很常見),那緩存就失去了應(yīng)有的意義,變得多此一舉了。
數(shù)據(jù)分析
所以說,在決定是否應(yīng)用某種設(shè)計(jì)模式前,我們需要對(duì)被查詢數(shù)據(jù)的特點(diǎn)以及這些數(shù)據(jù)以何種方式被使用(查詢的特點(diǎn))進(jìn)行一個(gè)分析,根據(jù)不同的結(jié)論來決定采用何種處理策略。而且,數(shù)據(jù)本身的特點(diǎn)和被使用的方式往往交織在一起,需要綜合起來考慮,但這其中主要的考量點(diǎn)還是數(shù)據(jù)查詢的特點(diǎn)。
一般來說,可以從以下幾個(gè)方面來分析數(shù)據(jù):
1、 數(shù)據(jù)量大。
這是我們今天討論的數(shù)據(jù)的一個(gè)最基本特點(diǎn),這個(gè)特點(diǎn)在查詢框架設(shè)計(jì)時(shí)要引起足夠的重視。
注重:大數(shù)據(jù)量的查詢是指查詢時(shí)匹配條件的數(shù)據(jù)量大,而不是指表中的數(shù)據(jù)量大,雖然大部分時(shí)候這兩者都是一致的。因?yàn)樵谀承┣闆r下,業(yè)務(wù)邏輯可以限制或者只需要一次獲取很少量的數(shù)據(jù),而查詢的表中的數(shù)據(jù)量卻可能很大,那這種情況就不屬于本文的討論范圍。
2、 關(guān)聯(lián)復(fù)雜,多表關(guān)聯(lián)。
越是簡(jiǎn)單的數(shù)據(jù)可能關(guān)聯(lián)越少,而越是復(fù)雜的數(shù)據(jù)往往都是多表關(guān)聯(lián),這樣很多時(shí)候你需要將這幾張表作為一個(gè)整體來考慮。
3、 變化頻率。
從這個(gè)角度出發(fā),可以大致將數(shù)據(jù)分為以下幾類:幾乎不變化的睡眠數(shù)據(jù);有規(guī)律定時(shí)更新的數(shù)據(jù),比如招聘網(wǎng)站的職位信息;經(jīng)常性無規(guī)律更新的數(shù)據(jù)。
4、 成長(zhǎng)性。
數(shù)據(jù)是否具有成長(zhǎng)性,要預(yù)見數(shù)據(jù)的成長(zhǎng)性,并在現(xiàn)有方案中考慮這種成長(zhǎng)性,避免到時(shí)候查詢框架的重新設(shè)計(jì),象大部分的業(yè)務(wù)數(shù)據(jù)都具有這種成長(zhǎng)性。
注重:這里也要非凡注重區(qū)分?jǐn)?shù)據(jù)本身的成長(zhǎng)性和數(shù)據(jù)查詢的成長(zhǎng)性,這看似等同的兩者其實(shí)還是存在很大的區(qū)別。就拿招聘網(wǎng)站來說,有效職位的數(shù)據(jù)肯定是一天天在增加,具有高成長(zhǎng)性,但是在某個(gè)區(qū)間(比如一個(gè)月,一個(gè)星期)內(nèi)的有效職位查詢則變化不會(huì)太大,不具有成長(zhǎng)性。而后者卻往往是實(shí)際系統(tǒng)中最常碰到的查詢情況。
5、 數(shù)據(jù)查詢的頻率和方式。
所有的數(shù)據(jù)查詢不可能被等同地使用,你要分清楚系統(tǒng)中的幾個(gè)要害查詢,這些查詢使用頻率高,響應(yīng)要快。試想一想,假如一個(gè)電子商務(wù)系統(tǒng)的產(chǎn)品查詢每次都要讓顧客等上十秒鐘,結(jié)果就可想而知。
用戶的使用習(xí)慣分析
除了對(duì)數(shù)據(jù)查詢本身需要進(jìn)行分析之外,我們還需要去分析一下用戶如何來使用或者看待這些數(shù)據(jù),用戶的使用習(xí)慣如何。有人可能覺得這作用不大,或者很難去分析,其實(shí)查詢的最終使用者是用戶,他們的一些習(xí)慣會(huì)很大程度上左右你的設(shè)計(jì)。
1、 用戶關(guān)心數(shù)據(jù)哪些方面的特性,不關(guān)心哪些方面的特性。
上面我們分析了數(shù)據(jù)本身的許多特性,那用戶對(duì)其中哪些特性最敏感呢?比如說對(duì)臟數(shù)據(jù)非凡不能接受,那我們就必須在查詢框架設(shè)計(jì)時(shí)非凡照顧到這一點(diǎn)。因?yàn)樵俸玫目蚣茉O(shè)計(jì)都不可能在每個(gè)方面都能達(dá)到最優(yōu)的效果,當(dāng)必須有所取舍的時(shí)候,我們就要明白哪些特性是客戶最關(guān)心的。
2、 用戶如何來使用數(shù)據(jù)。
現(xiàn)在一般查詢的客戶端都采用分頁的方式,一個(gè)查詢可能會(huì)存在十幾頁甚至幾十頁結(jié)果。對(duì)于某些查詢,用戶可能往往只關(guān)心第一頁或者前幾頁的結(jié)果,比如用戶需要查詢出最近完成的工單,而對(duì)于另外一些查詢,用戶可能對(duì)所有頁結(jié)果都很關(guān)注,比如用戶查詢出最近三天新增的招聘職位。這不同類型的查詢?cè)诓樵兛蚣茉O(shè)計(jì)的時(shí)候都需要有所考慮并給予不同的處理策略。
查詢框架的設(shè)計(jì)
對(duì)數(shù)據(jù)及用戶使用習(xí)慣進(jìn)行了仔細(xì)的分析,接下來就可以根據(jù)這些分析來設(shè)計(jì)你的查詢框架了。在J2EE架構(gòu)下,對(duì)于大數(shù)據(jù)量的查詢主要采取以下兩種方法:
基于緩存的方式:
從數(shù)據(jù)庫得到全部(部分)數(shù)據(jù),并將其在服務(wù)器端進(jìn)行緩存,接下來的客戶端請(qǐng)求,將直接從緩存中取得需要的數(shù)據(jù)。這其實(shí)就是Value List Handler模式的原理,它主要適用于數(shù)據(jù)量不是非常大,變化不是很頻繁(或者變化頻繁但是有規(guī)律)且不具有成長(zhǎng)性的情況,比如招聘網(wǎng)站或者電子商務(wù)網(wǎng)站的大部分查詢就非常適合采取這種方式。
采用這種方式,要非凡注重第一次查詢問題,避免響應(yīng)性能達(dá)不到要求,因?yàn)槊總€(gè)查詢第一次都需要連接數(shù)據(jù)庫,從中獲取數(shù)據(jù)并緩存起來,所以第一次查詢會(huì)比接下來的查詢都顯得更慢一些。
對(duì)于數(shù)據(jù)的緩存,有以下幾種實(shí)現(xiàn)方式:
? 直接緩存在服務(wù)器端
Value List Handler模式就采取這種方式,并且可以根據(jù)不同的情況采取不同的緩存策略,比如Transfer Object集合,CachedRowSet等,這取決于你的DAO實(shí)現(xiàn)策略。
? 用臨時(shí)表來保存查詢結(jié)果
WLDJ(www.sys-con.com/weblogic/)雜志2004年第7期上有一篇名為“Handling Large Database Result Sets”的文章,它具體介紹了如何利用臨時(shí)表來改良Value List Handler模式以支持大型的J2EE應(yīng)用。
當(dāng)然除了以上這些方法以外,實(shí)現(xiàn)緩存也可以求助于操作系統(tǒng)的特定實(shí)現(xiàn),以前我在IBM DW發(fā)表過一篇探討MMF在Java中應(yīng)用的文章(見參考資料),可惜未有深入,有愛好的朋友可以參考一下。
在使用Value List Handler模式時(shí),要非凡注重以下幾點(diǎn):
1、 該模式一般和DAO模式搭配使用。
2、 該模式有POJO,stateful session bean兩種實(shí)現(xiàn)策略。
3、 假如采取stateful session bean實(shí)現(xiàn)策略,則默認(rèn)該緩存的時(shí)間長(zhǎng)度為整個(gè)用戶會(huì)話。
前面我們也提到過,假如數(shù)據(jù)不是絕對(duì)不變的,那緩存就面臨更新的問題,一旦更新就可能存在著數(shù)據(jù)不一致,假如恰巧客戶也希望能夠看到變化的效果,這個(gè)時(shí)候就需要采取某種措施來保證這種一致性。常見的措施可以是設(shè)置一個(gè)標(biāo)志位,每次發(fā)生數(shù)據(jù)更新后都將其對(duì)應(yīng)的標(biāo)志位更新,查詢時(shí)假如發(fā)現(xiàn)標(biāo)志位更新了,就直接從數(shù)據(jù)庫獲取數(shù)據(jù),而不是從緩存中獲取數(shù)據(jù)。另外一種方式就是數(shù)據(jù)更新的同時(shí)主動(dòng)去清空session中的緩存,假如采用stateful session bean實(shí)現(xiàn)策略的話。
當(dāng)然,采取緩存方式的大數(shù)據(jù)量查詢一般來說都不大可能碰到設(shè)置更新標(biāo)志位的問題,因?yàn)檫@種應(yīng)用方式?jīng)Q定了數(shù)據(jù)不大可能變化,或者數(shù)據(jù)變化不要求馬上反應(yīng)給用戶。比如招聘網(wǎng)站新增加了一些職位信息,假如這些更新恰巧發(fā)生在某些用戶的會(huì)話期間,且沒有設(shè)置更新標(biāo)志位,那這些新增信息就不會(huì)反應(yīng)到用戶的查詢結(jié)果中,這種處理方式也是可以接受的。
經(jīng)過UI工程師的努力,我們的軟件變得更加美觀。
http://bbs.8s8s.com/linux/linux7571.htm
高速路由器的系統(tǒng)交換能力與處理能力是其有別于一般路由器能力的重要體現(xiàn)。目前,高速路由器的背板交換能力應(yīng)達(dá)到40Gbps以上,同時(shí)系統(tǒng)即使暫時(shí)不提供OC-192/STM-64接口,也必須在將來無須對(duì)現(xiàn)有接口卡和通用部件升級(jí)的情況下支持該接口。在設(shè)備處理能力方面,當(dāng)系統(tǒng)滿負(fù)荷運(yùn)行時(shí),所有接口應(yīng)該能夠以線速處理短包,如40字節(jié)、64字節(jié),同時(shí),高速路由器的交換矩陣應(yīng)該能夠無阻塞地以線速處理所有接口的交換,且與流量的類型無關(guān)。
指標(biāo)之一: 吞吐量
吞吐量是路由器的包轉(zhuǎn)發(fā)能力。吞吐量與路由器端口數(shù)量、端口速率、數(shù)據(jù)包長(zhǎng)度、數(shù)據(jù)包類型、路由計(jì)算模式(分布或集中)以及測(cè)試方法有關(guān),一般泛指處理器處理數(shù)據(jù)包的能力。高速路由器的包轉(zhuǎn)發(fā)能力至少達(dá)到20Mpps以上。吞吐量主要包括兩個(gè)方面:
1. 整機(jī)吞吐量
整機(jī)指設(shè)備整機(jī)的包轉(zhuǎn)發(fā)能力,是設(shè)備性能的重要指標(biāo)。路由器的工作在于根據(jù)IP包頭或者M(jìn)PLS 標(biāo)記選路,因此性能指標(biāo)是指每秒轉(zhuǎn)發(fā)包的數(shù)量。整機(jī)吞吐量通常小于路由器所有端口吞吐量之和。
2. 端口吞吐量
端口吞吐量是指端口包轉(zhuǎn)發(fā)能力,它是路由器在某端口上的包轉(zhuǎn)發(fā)能力。通常采用兩個(gè)相同速率測(cè)試接口。一般測(cè)試接口可能與接口位置及關(guān)系相關(guān),例如同一插卡上端口間測(cè)試的吞吐量可能與不同插卡上端口間吞吐量值不同。
指標(biāo)之二:路由表能力
路由器通常依靠所建立及維護(hù)的路由表來決定包的轉(zhuǎn)發(fā)。路由表能力是指路由表內(nèi)所容納路由表項(xiàng)數(shù)量的極限。由于在Internet上執(zhí)行BGP協(xié)議的路由器通常擁有數(shù)十萬條路由表項(xiàng),所以該項(xiàng)目也是路由器能力的重要體現(xiàn)。一般而言,高速路由器應(yīng)該能夠支持至少25萬條路由,平均每個(gè)目的地址至少提供2條路徑,系統(tǒng)必須支持至少25個(gè)BGP對(duì)等以及至少50個(gè)IGP鄰居。
指標(biāo)之三:背板能力
背板指輸入與輸出端口間的物理通路。背板能力是路由器的內(nèi)部實(shí)現(xiàn),傳統(tǒng)路由器采用共享背板,但是作為高性能路由器不可避免會(huì)遇到擁塞問題,其次也很難設(shè)計(jì)出高速的共享總線,所以現(xiàn)有高速路由器一般采用可交換式背板的設(shè)計(jì)。背板能力能夠體現(xiàn)在路由器吞吐量上,背板能力通常大于依據(jù)吞吐量和測(cè)試包長(zhǎng)所計(jì)算的值。但是背板能力只能在設(shè)計(jì)中體現(xiàn),一般無法測(cè)試。
指標(biāo)之四:丟包率
丟包率是指路由器在穩(wěn)定的持續(xù)負(fù)荷下,由于資源缺少而不能轉(zhuǎn)發(fā)的數(shù)據(jù)包在應(yīng)該轉(zhuǎn)發(fā)的數(shù)據(jù)包中所占的比例。丟包率通常用作衡量路由器在超負(fù)荷工作時(shí)路由器的性能。丟包率與數(shù)據(jù)包長(zhǎng)度以及包發(fā)送頻率相關(guān),在一些環(huán)境下,可以加上路由抖動(dòng)或大量路由后進(jìn)行測(cè)試模擬。
指標(biāo)之五:時(shí)延
時(shí)延是指數(shù)據(jù)包第一個(gè)比特進(jìn)入路由器到最后一個(gè)比特從路由器輸出的時(shí)間間隔。該時(shí)間間隔是存儲(chǔ)轉(zhuǎn)發(fā)方式工作的路由器的處理時(shí)間。時(shí)延與數(shù)據(jù)包長(zhǎng)度和鏈路速率都有關(guān),通常在路由器端口吞吐量范圍內(nèi)測(cè)試。時(shí)延對(duì)網(wǎng)絡(luò)性能影響較大, 作為高速路由器,在最差情況下, 要求對(duì)1518字節(jié)及以下的IP包時(shí)延均都小于1ms。
指標(biāo)之六:背靠背幀數(shù)
背靠背幀數(shù)是指以最小幀間隔發(fā)送最多數(shù)據(jù)包不引起丟包時(shí)的數(shù)據(jù)包數(shù)量。該指標(biāo)用于測(cè)試路由器緩存能力。具有線速全雙工轉(zhuǎn)發(fā)能力的路由器,該指標(biāo)值無限大。
指標(biāo)之七:時(shí)延抖動(dòng)
時(shí)延抖動(dòng)是指時(shí)延變化。數(shù)據(jù)業(yè)務(wù)對(duì)時(shí)延抖動(dòng)不敏感,所以該指標(biāo)通常不作為衡量高速路由器的重要指標(biāo)。對(duì)IP上除數(shù)據(jù)外的其他業(yè)務(wù),如語音、視頻業(yè)務(wù),該指標(biāo)才有測(cè)試的必要性。
指標(biāo)之八:服務(wù)質(zhì)量能力
1.隊(duì)列管理機(jī)制
隊(duì)列管理控制機(jī)制通常指路由器擁塞管理機(jī)制及其隊(duì)列調(diào)度算法。常見的方法有RED、WRED、 WRR、DRR、WFQ、WF2Q等。
排隊(duì)策略:
● 支持公平排隊(duì)算法。
● 支持加權(quán)公平排隊(duì)算法。該算法給每個(gè)隊(duì)列一個(gè)權(quán)(weight),由它決定該隊(duì)列可享用的鏈路帶寬。這樣,實(shí)時(shí)業(yè)務(wù)可以確實(shí)得到所要求的性能,非彈性業(yè)務(wù)流可以與普通(Best-effort)業(yè)務(wù)流相互隔離。
● 在輸入/輸出隊(duì)列的管理上,應(yīng)采用虛擬輸出隊(duì)列的方法。
擁塞控制:
● 必須支持WFQ、RED等擁塞控制機(jī)制。
● 必須支持一種機(jī)制,由該機(jī)制可以為不符合其業(yè)務(wù)級(jí)別CIR/Burst合同的流量標(biāo)記一個(gè)較高的丟棄優(yōu)先級(jí),該優(yōu)先級(jí)應(yīng)比滿足合同的流量和盡力而為的流量的丟棄優(yōu)先級(jí)高。
● 在有可能存在輸出隊(duì)列爭(zhēng)搶的交換環(huán)境中,必須提供有效的方法消除頭部擁塞。
2.端口硬件隊(duì)列數(shù)
通常路由器所支持的優(yōu)先級(jí)由端口硬件隊(duì)列來保證。每個(gè)隊(duì)列中的優(yōu)先級(jí)由隊(duì)列調(diào)度算法控制。
指標(biāo)之九:網(wǎng)絡(luò)管理
網(wǎng)管是指網(wǎng)絡(luò)管理員通過網(wǎng)絡(luò)管理程序?qū)W(wǎng)絡(luò)上資源進(jìn)行集中化管理的操作,包括配置管理、計(jì)賬管理、性能管理、差錯(cuò)管理和安全管理。設(shè)備所支持的網(wǎng)管程度體現(xiàn)設(shè)備的可管理性與可維護(hù)性,通常使用SNMPv2協(xié)議進(jìn)行管理。網(wǎng)管粒度指示路由器管理的精細(xì)程度,如管理到端口、到網(wǎng)段、到IP地址、到MAC地址等粒度。管理粒度可能會(huì)影響路由器轉(zhuǎn)發(fā)能力。
指標(biāo)之十:可靠性和可用性
1.設(shè)備的冗余
冗余可以包括接口冗余、插卡冗余、電源冗余、系統(tǒng)板冗余、時(shí)鐘板冗余、設(shè)備冗余等。冗余用于保證設(shè)備的可靠性與可用性,冗余量的設(shè)計(jì)應(yīng)當(dāng)在設(shè)備可靠性要求與投資間折衷。 路由器可以通過VRRP等協(xié)議來保證路由器的冗余。
2.熱插拔組件
由于路由器通常要求24小時(shí)工作,所以更換部件不應(yīng)影響路由器工作。部件熱插拔是路由器24小時(shí)工作的保障。
3.無故障工作時(shí)間
該指標(biāo)按照統(tǒng)計(jì)方式指出設(shè)備無故障工作的時(shí)間。一般無法測(cè)試,可以通過主要器件的無故障工作時(shí)間計(jì)算或者大量相同設(shè)備的工作情況計(jì)算。
4.內(nèi)部時(shí)鐘精度
擁有ATM端口做電路仿真或者POS口的路由器互連通常需要同步。在使用內(nèi)部時(shí)鐘時(shí),其精度會(huì)影響誤碼率。
在高速路由器技術(shù)規(guī)范中,高速路由器的可靠性與可靠性規(guī)定應(yīng)達(dá)到以下要求:
① 系統(tǒng)應(yīng)達(dá)到或超過99.999%的可用性。
② 無故障連續(xù)工作時(shí)間:MTBF>10萬小時(shí)。
③ 故障恢復(fù)時(shí)間:系統(tǒng)故障恢復(fù)時(shí)間 < 30 mins。
④ 系統(tǒng)應(yīng)具有自動(dòng)保護(hù)切換功能。主備用切換時(shí)間應(yīng)小于50ms。
⑤ SDH和ATM接口應(yīng)具有自動(dòng)保護(hù)切換功能,切換時(shí)間應(yīng)小于50ms。
⑥ 要求設(shè)備具有高可靠性和高穩(wěn)定性。主處理器、主存儲(chǔ)器、交換矩陣、電源、總線仲裁器和管理接口等系統(tǒng)主要部件應(yīng)具有熱備份冗余。線卡要求m+n備份并提供遠(yuǎn)端測(cè)試診斷功能。電源故障能保持連接的有效性。
⑦ 系統(tǒng)必須不存在單故障點(diǎn)。
好幾年沒寫過存諸過程了,都忘光了。今天由于需求,又寫了一個(gè)。
create or replace procedure stat_app_traffic
as
queryhour varchar2(15);
lasthour number;
begin
lasthour:= to_number(to_char(sysdate,'HH24')) - 1;
if(lasthour=-1) then
queryhour:= to_char(sysdate-1,'YYYY-MM-DD ') || '23';
else
queryhour:= to_char(sysdate,'YYYY-MM-DD ') || lasthour;
end if;
insert into app_traffic(app,bytes,log_time)
select app,round(sum(bytes)/1024/1024,2),max(log_time) from
((select b.app,a.src_port port,a.out_bytes bytes,a.log_time
from raw_netflow a,app_config b
where a.src_port=b.port and a.protocol=b.protocol_id
and to_char(log_time,'YYYY-MM-DD HH24')=queryhour)
union
(select b.app,a.dst_port port,a.in_bytes bytes,a.log_time
from raw_netflow a,app_config b
where a.dst_port=b.port and a.protocol=b.protocol_id
and to_char(log_time,'YYYY-MM-DD HH24')=queryhour)) group by app;
commit;
end stat_app_traffic;
完成首頁,實(shí)現(xiàn)了JFreeChart柱狀圖可鉆取的功能。

讀后,終于對(duì)BI的一些基本概念有比較清楚地認(rèn)識(shí)。