一些要點關我的事的頭頂,你應該知道:
- 如何以及爲什麼TCP工程... 3次握手,確認,延遲的ACK的Nagling,滑動窗口協議。這些功能中的每一個都有一個具體原因......如果處理不當,它們都會破壞應用程序的性能。
- UDP組播...即使你從來不認爲你會使用它,你也需要知道它爲什麼存在,所以你可以在設計系統時作出明智的決定。
- IP分片,以及MTU的影響。
- 二進制序列化和網絡字節排序(即使您只是要使用Google proto緩衝區,很高興能夠理解爲什麼它們是有效的)。
- Ascii碼序列化和消息框(這是什麼
\r\n\r\n
在HTTP的意思嗎?)
- 不同的I/O調度模型:Apache風格preforking,線程每連接,基於事件的單線程,基於事件與工人線程等
- 緩衝區溢出漏洞的在聯網的應用程序的影響
- 基於協議的設計,相對於API-或庫爲基礎的設計
- 異步VS同步協議。許多高性能系統是異步的。除非使用流水線,否則HTTP是同步的,即使如此,對可能的內容也有許多限制...例如沒有亂序響應。
更新:什麼是基於協議的設計是什麼意思?
考慮HTTP,網絡的協議。 Apache,IIS,Lighttpd,Firefox,Opera,WebKit等等......所有這些軟件都會講HTTP。很可能他們都沒有共享代碼來這樣做。不利的一面是,由於代碼的淨數量增加了錯誤的可能性增加。有許多上升空間:
- 任何程序都可以通過HTTP進行通信,不論實現語言的
- 輕型/嵌入式環境可以挑選該協議的一個子集,而不是使用整個事情
- 這是可能的爲特定情況優化協議處理程序。在不犧牲普遍性的情況下優化圖書館是不可能的。
- 各種不同的實現迫使圖書館提供商解決錯誤(而不是因爲每個人都使用相同的圖書館而把它們吹掉)。
- 對HTTP用戶沒有組織或合同負擔,沒有許可費用。
當您設計網絡協議時,您可以自己構建多個API,每個API都針對特定用例進行定製。或者你可以建立一個,這取決於你。聯網軟件組件可以獨立升級。基本上,您聽到的所有內容都適用於Java/C#Interfaces和C++抽象類,但應用於網絡層而不是編程語言層。
來源
2008-12-14 07:25:01
Tom
謝謝,很好的名單。你可以擴展這一點嗎? 「基於協議的設計,而不是基於API或基於庫的設計」 – ApplePieIsGood 2008-12-14 14:22:53