• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            twzheng's cppblog

            『站在風口浪尖緊握住鼠標旋轉!』 http://www.cnblogs.com/twzheng

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              136 隨筆 :: 78 文章 :: 353 評論 :: 0 Trackbacks
            [轉]微軟msn服務器設計思想初步理解
            來源不明

            由于工作需要,我用了近2個月的時間去了解msn的協議,通過長時間的抓包和試圖實現,我將我了解了的msn的服務器端的部分設計思想總結如下。

                    作為服務器設計,比較重要的幾個問題是:(不妥之處,希望大家修正)

                            1.安全性

                            2.并發服務能力

                            3.性能的可線性提高



                一、安全性

                        服務器的安全性包括兩部分,一是服務器本身軟硬件配置上的安全性,比如防止系統漏洞;二是服務器和客戶端通訊協議的安全性設計,防止通過協議本身導致密碼泄露、服務器被非法攻擊等。

                         在協議上,msn的密碼是通過ssl傳送到服務器的;我對ssl的內部細節不是很了解,但是顯然,密碼經過ssl傳輸過程到服務器端后,是被明文解出的, 因此安全性依賴于ssl本身提供。在這方面,我傾向于yahoo的設計,密碼不通過自身的明文或者任何本身的加密后密文傳輸,而是同服務器返回的 session和password結合,進行混合的不可反向解密的md5密文進行傳輸。這樣的加密結果被任何第三方截獲都是沒有意義的;因為不可能從這樣 的密文中分析出原來的密碼。

                        我認為,傳輸協議中,密碼必須和服務器端協商的一個隨機seesion結合,通過不可恢復的加密方式進行加密,傳送到服務器,服務器端也是按照session和passowrd進行同樣方式的加密,比較加密結果,驗證用戶的合法性。

                         就軟硬件系統本身的安全性而言,我認為盡量把系統中不需要的軟件和其它模塊去除,保留服務器系統運行需要的最小內核;同時一臺服務器應該只提供該服務器需 要提供的服務,不開多余的網絡端口,對telnet方式禁止,而使用更安全的ssh進行遠程管理。



                        二、并發服務能力

                        服務器的并發服務能力是服務器程序設計的一個重要內容。

                        1、在單臺服務器上,服務器軟件的性能設計應考慮以下問題:

                                        數據拷貝

                                        內存管理

                                        線程間的鎖控制

                        數據拷貝:

                                 通常來說,避免數據拷貝是個非常頭疼的問題。我在平時的工作中,盡量把緩沖區的指針使用范圍限定在一定的作用域內,如果需要在作用域外使用,我通常會通過 數據拷貝的方式進行,這樣可以避免令人頭疼的內存泄露問題,一塊內存一旦在多個作用域使用或者在分配該內存的作用域之外使用時,很容易搞不清楚何時該釋放 該內存。

                                一個比較好的辦法是利用在COM里使用的引用計數技術,把該內存的釋放時機交給內存自己管理;也就是說把內存封裝進一個結構體或者類里,本身對自己被使用進行管理,一旦發現自己沒有人使用了,就釋放自己。

                        內存管理:

                         內存的處理也是很需要注意的一部分,頻繁的new /delete內存會讓內存出現大量碎片,對服務器軟件的性能也是有不小的影響的;通常的做法我們可以一開始申請一個比較大的內存區域,然后自己負責管 理,把這塊內存劃分成很多小塊(64B/ 128B/ 256B),然后按照申請內存的需要,分配合適的內存區域。這樣可以不用每次都到系統申請內存,也把內存泄露的可能性限制在很小的范圍內(內存泄露應該被 解決)。

                        另外,對于一些對象,在我們使用完后,可以暫時不把它真正的從內存里釋放掉,而是把它掛到一個list上去,下次對于通用的對象,完全可以重用這快內存。這也是減少內存分配次數的一個辦法。但是這可能會導致使用很耗的加解鎖。

                        線程間的鎖控制:

                        涉及到鎖控制的,主要是因為共享問題。共享分為兩種:一是代碼共享部分;一是數據共享部分。其中做主要的還是數據共享部分。但是沒有什么好的解決辦法,唯一的辦法就是檢查這個共享是不是真正必要的,這些數據可不可以分成兩部分以形成不是共享的。


                    當然,這部分為軟老大做了什么我不清楚。


                     三、性能的可線性提高

                       這主要指服務器群組的服務能力可以通過增加服務器的方式線性提高性能。這就要求服務器的服務能力分擔是均衡的,即實現良好的負載平衡。新加入的服務器能均衡的被負載平衡服務器分配服務。

                        當然,這也設計到服務器集群、數據庫服務器的集群,我想找個時間專門研究這些問題。

                        在這方面,微軟的設計思想很好的體現了這個原則,能夠把負載均衡的交給新服務器。

                        msn 的認證服務器、聊天服務器分開的。即每次聊天時,都需要向認證服務器申請一個聊天服務器地址,然后在通過認證服務器邀請對方加入到這個聊天服務器,這就 保證了聊天的人會在同一臺服務器上,不用再到數據庫服務器查找對方的地址,也避免了頭疼的服務器數據同步問題。

                        如果新加入一個服務器,那么這太服務器只要在負載平衡服務器注冊,就可以和其他服務器不相干的為客戶端提供可靠的服務,當然群組的服務能力就線性提升了。

                        寫文專為與朋友們交流,對于內容中不妥之處,請多多指教:)
            posted on 2007-05-27 12:02 譚文政 閱讀(1048) 評論(1)  編輯 收藏 引用 所屬分類: 網絡編程

            評論

            # re: 微軟msn服務器設計思想初步理解 2010-03-31 13:58 re: 微軟msn服務器設計思想初步理解
            垃圾,浪費時間  回復  更多評論
              

            久久人做人爽一区二区三区| 99热精品久久只有精品| 日韩av无码久久精品免费| 久久青青草原综合伊人| 性做久久久久久免费观看| 久久水蜜桃亚洲av无码精品麻豆| 国产精品免费久久久久影院| 久久人人爽人人爽人人片AV麻烦| 一级做a爰片久久毛片16| 亚洲人成精品久久久久| 欧美777精品久久久久网| 久久狠狠爱亚洲综合影院| 99久久亚洲综合精品网站| 久久久久人妻一区二区三区| 四虎国产精品免费久久5151| 亚洲国产精品18久久久久久| 久久天天躁狠狠躁夜夜2020| 99久久免费国产精品热| 亚洲午夜久久久久久久久电影网| 久久青青草原亚洲av无码| 久久99精品国产麻豆| 久久无码AV中文出轨人妻| 久久精品成人| 韩国三级中文字幕hd久久精品| 久久国产亚洲高清观看| 99久久国产综合精品女同图片| 日本久久中文字幕| 亚洲AⅤ优女AV综合久久久| 国产精品日韩欧美久久综合| 久久91精品国产91久久麻豆| 亚洲va中文字幕无码久久| 99精品久久久久久久婷婷| 精品久久久无码21p发布| 狠狠色狠狠色综合久久| 欧美精品国产综合久久| 久久青青草视频| 久久人人爽人人爽人人片AV不| 久久久久久免费视频| 久久精品久久久久观看99水蜜桃| 久久久久久精品成人免费图片 | 国产成人久久久精品二区三区|