<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                > 作者 Philipp K.Janert ,譯者 梅雪松 發布于 2014年3月13日 ## 介紹 當我們部署服務應用到生產環境時,需要決定在線的服務器數量。這是個困難的決定,因為對于一個指定的流量負載,通常我們不知道需要多少服務器。因此,人們為了“安全起見”,不得不使用更多(也可能是過多)的服務器。但是服務器是有成本的,所以這樣做會讓事情變得過于昂貴。 事實上,事情比這還要糟糕。流量不會一整天都保持不變。如果我們按高峰期流量部署服務器,那么基本上大部分的服務器大多數時間都處于使用率不足的狀態。特別是在一個基于云的部署場景中,服務器實例能夠在任何時刻自由分配,我們應該能夠意識到,如果不論何時,我們都只激活處理該時刻負載所需的服務器實例,那么就能顯著地節省成本。 對于這個問題,一種可能的辦法是使用一個固定的時間表,對一天中的每個小時都指定(以某種方式)所需的服務器實例數量。這種方法的難點是固定的時間表無法處理隨機的變化:如果由于某種原因,今天的流量比昨天大10%,那么這個時間表將無法提供額外的服務器來處理這個意料之外的負載。同樣地,如果流量峰值提前了半個小時,一個基于固定時間表的系統也將無法應對。 與其使用一個固定的(基于時間的)計劃,我們也可以考慮一種基于規則的解決方案:對任何給定的流量負載,我們有一種規則來指定使用多少服務器實例。這個方案比基于時間表的方案更具有彈性,但它需要我們(提前)知道處理每種流量負載需要多少服務器。而且如果流量的性質發生變化,這是有可能發生的,例如,如果需要長時間運行的查詢的比例增加了,會發生什么呢?基于規則的方案將無法正確應對。 反饋控制是一種設計模式,它完全能夠處理所有這些挑戰。通過持續監視一些服務指標(例如響應時間),如果指標值偏離期望值,則做出適當的調整(例如增加或減少服務器)。因為反饋來源于被控制系統的實際行為,因此它能夠處理甚至不可預見的事件(例如流量超出了所有的預期)。另外,對比之前基于規則的方案,反饋控制只需要很少的被控制系統的相關信息。其原因是反饋是真正的自我修正:因為持續對服務質量指標進行著監測,一旦它偏離期望值,將被立即觀察到并立即進行修正。而且在必要時,這個過程是可以重復的。簡單地說:如果響應時間惡化,反饋控制系統只需激活額外的服務器實例,如果仍然沒有改善,它就再增加更多的服務器實例。這就是反饋控制的全部過程。 反饋控制一直是機械和電氣工程的標準方法,但在軟件架構中,它很少作為一種設計理念。它特別適用于信息不完整,并且會隨機變化的情況,它與計算機科學確定性的算法解決方案完全不同。最后,盡管反饋控制的概念很簡單,但要使其生效,在一個生產環境中部署一個真實的控制器仍然需要了解和明白一些實戰“技巧”。本文將介紹一些概念和常見的困難。 ## 反饋回路的本質 下圖顯示的是一個基本的反饋回路。在右側,我們看到控制系統。它的“輸出”是相關的服務質量指標。指標的值不停地提供給控制器,與左側輸入的期望值進行比較(系統的輸出指標的期望值被稱為“設定值”)。基于這兩個輸入(服務質量指標的實際值與期望值),控制器計算出控制系統合適的控制動作。例如,如果響應時間的實際值比期望值慢,控制動作將包括激活額外的服務器實例。 ![](https://box.kancloud.cn/2015-07-17_55a87290bc192.jpg) 該圖顯示了所有反饋回路的通用結構。它的基本組件是控制器和被控制的系統。信息從系統的輸出流經返回路徑到達控制器,與“設定值”進行比較。通過這兩個輸入,控制器決定相應的控制動作。 那么,控制器實際上做了哪些工作?它如何決定應該采取什么動作? 要回答這個問題,我們要記住使用反饋控制的主要目的是減少系統實際輸出與期望值的偏差。這個偏差可以表示為“跟蹤誤差”: > 誤差 = 實際值 – 期望值 為了減少這種誤差,控制器可以做任何它認為合適的事情。我們當然有絕對的自由來設計這個算法,但是我們要知道被控制系統的一些知識。 讓我們重新考慮數據中心這個場景。我們知道增加服務器數量可以減少平均響應時間。所以,我們可以選擇這樣一種控制策略,當實際響應時間比期望值差時,就增加在線服務器的數量(如果情況相反,則減少服務器數量)。但其實我們還能做得更好,因為這個算法只有標志,沒有將誤差的大小考慮在內。如果跟蹤誤差很大,我們就應該做更大的調整。事實上,通常的做法是將控制動作正比于跟蹤誤差。 > 動作 = k * 誤差 其中k是一個數值。選擇這種算法,大的偏差將導致大的修正動作,而小的偏差將導致相應較小的修正。這兩個方面都很重要:大動作是為了快速減少大的偏差。但同樣重要的是當誤差較小時,控制動作應該變小。我們只有做到這一點,控制循環才會趨向于一個穩定的狀態。否則,其行為將總是圍繞著期望值振蕩,通常我們希望避免這種結果。 正如我們之前所說的:可以自由地為反饋控制器選擇特定算法,但通常保持簡單是一種好的設計思想。反饋控制的“神奇”取決于信息流的回路結構,而不是那些特別復雜的控制器。為了允許更簡單的控制器,反饋控制需要更復雜的系統架構。 然而有一件事是必須確保的:控制動作必須在正常的方向上。為了保證這一點,我們應該對被控制系統的一些行為有所了解。通常這不是問題,正如我們知道更多的服務器意味著更快的響應時間,等等。但是這是一個我們必須知道的關鍵信息。 ## 具體實現面臨的問題 目前為止,我們關于反饋控制的描述大部分是概念。然而,將這些高級別的想法轉換成具體實現時,需要處理一些實現細節。最重要的是對于跟蹤誤差的大小應該產生多大的控制動作。(如果我們使用之前的公式,就是要為常量k選擇一個值。) 在控制實現中,為這個常量選擇特定值的過程,被稱為控制器“調試”。控制器調試是工程上權衡的一種表達方式:如果我們選擇相對較小的控制動作,控制器將緩慢地響應,跟蹤誤差將保持較長時間。另一方面,如果我們選擇較大的控制動作,控制器將快速響應,但是也存在“過度修正”的風險,導致相反方向的誤差。如果我們讓控制器做過大的動作,可能讓控制回路變得不穩定:當發生這種情況時,控制器嘗試用不斷增長的序列動作來補償每個偏差,所有時間都在增加動作幅度,從一個極端擺到另一個極端。這種形式的不穩定比緩慢操作更糟糕,因此必須避免。控制器調試的挑戰是在不造成回路不穩定的前提下,找到控制動作的最大值。 在選擇控制動作的大小時,通常的作法是逆向工作:給定一個某種規模的跟蹤誤差,多大的修正動作能夠完全消除這個誤差?請記住,我們不需要精確地知道這個值,反饋控制的自修正特性確保在選擇調試參數值時可以有一定的公差。但我們至少要保證量級的順序是正確的。(換句話說:要將平均查詢響應時間提高0.1秒,我們大約要增加一臺、十臺還是一百臺服務器?) 有些系統對控制動作的響應比較慢。例如,一臺新的(虛擬的)服務實例,可能要花幾分鐘的時間,才能開始接收傳入的請求。在這種情況下,我們要把這種滯后或延遲考慮在內:在增加的實例生效前,跟蹤誤差將持續存在,我們必須防止控制器增加更多的實例,否則,我們最終將有太多的服務器在線。不能快速響應的系統是一種特殊的挑戰,需要加倍小心。然而,已經有現成的方法來“調試”這類系統。(基本上,首先需要了解滯后或延遲的時間,然后使用專門的插件公式獲得調試參數值。) ## 需要特別考慮的因素 我們要始終牢記反饋控制是一種反應式控制策略:事情會先變得糟糕(至少有一點糟糕),然后才會有修正動作。如果這是不能接受的,那么反饋控制可能不適合。在實踐中,這通常不是問題:一個調試良好的反饋控制器將檢測并響應甚至非常小的偏差,通常能保證系統比基于規則的策略或人工操作更接近于它所需的行為狀態。 一個更加需要嚴重關注的情況是,沒有一種反應式控制策略能夠處理比控制動作生效更快的干擾。例如,如果增加在線服務器實例需要幾分鐘時間,那么我們無法響應幾秒甚至更短時間內的流量峰值。(與此同時,我們完全能夠處理幾分鐘或幾小時內的流量變化。)如果我們需要處理波形非常尖的負載,那么我們必須想辦法提高控制動作的速度(例如提供熱備用服務器),或者采用非反應式的機制(例如使用消息緩沖)。 另一個值得考慮的問題是如何選擇服務質量的度量方式。反饋控制器最終做的唯一事情是保持輸出值與期望值匹配,因此我們要確保我們選擇的度量方式能夠很好地表達這種行為。同時,在任何時間,這種度量方式都必須是有效且快速的。(例如,我們無法在一個有明顯延遲的度量方式上構建一個有效的控制策略。)最后要考慮的是這種度量方式不能有太多的噪音,因為噪音可能“干擾”控制器。如果這種度量方式本身會有噪音,那么通常需要先進行平滑處理之后才能用于控制信號。(例如,與最近一個請求的響應時間相比,最近數個請求的平均響應時間是一個更好的信號:取平均值能夠平滑隨機的變化。) ## 總結 雖然我們介紹了數據中心自動擴展的反饋控制,但它其實有更廣泛的應用領域:不論我們是需要維護一些期望的行為,還是面對不確定和變化,都應該考慮將反饋控制作為一個選項。它比確定性的方法更可靠,也比基于規則的解決方案更簡單。但它需要新的思考方式,并且明白一些特定的技術才能生效。 ## 延伸閱讀 本文只介紹了反饋控制的一些基本概念。更多信息請訪問[我的博客](http://programming.oreilly.com/pjanert)或者閱讀[我的書](http://shop.oreilly.com/product/0636920028970.do)(FeedbackControl for Computer Systems; O'Reilly, 2013)。 ## 關于作者 **Philipp K.Janert**提供數據分析和算法建模的咨詢服務,他之前的職業是物理學家和軟件工程師。他是最暢銷書《基于開源工具的數據分析》(O'Reilly)和《Gnuplotin Action: Understanding Data with Graphs》(ManningPublications)的作者。在他最近的著作《FeedbackControl for ComputerSystems》中,他演示了汽車巡航控制的原理也同樣適用于數據中心的管理和其它企業系統。他也為O'ReillyNetwork、IBMdeveloperWorks和IEEESoftware撰寫文章。他擁有華盛頓大學理論物理學的博士學位。您可以訪問他公司的[網站](http://www.principal-value.com/)。 **原文英文鏈接:**[ReliableAuto-Scaling using Feedback Control](http://www.infoq.com/articles/auto-scaling-feedback) 查看原文:[基于反饋控制實現可靠的自動擴展服務](http://www.infoq.com/cn/articles/auto-scaling-feedback)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看