系統運維秘訣:變化,監控,擴展(技術篇)(3) |
發布時間: 2012/5/28 10:19:31 |
多一些橫向擴展,少一些縱向擴展 ◆橫向擴展是我們應該走的路。應該使用常規的(即:可用的,價格適中的,標準的。而不是特便宜的。┯布,然后和大家一起努力,確保各方面都可以進行橫向擴展。 ◆橫向擴展從兩臺機子開始。另外,進行冗余的時候也會涉及到橫向擴展。 ◆盡可能的橫向擴展,但是不要傻乎乎的擴展。在MySQL復制中有一個經典的白癡擴展的例子:使用一個master對很多個slave。所有的 slave必須完成全部的寫入,而寫入次數是與讀取次數成比例增加的(大多數應用都是這樣)。也就是說,你添加的slave越多,通過添加slave擴展的資源就越少。 ◆留意一下替代的解決方案。按照用戶或區域對多個數據庫進行劃分,同時避免增加過多的slave。實際上,有許多種方法可以達到這個目的。 ◆一切都可能擴展!路由器,交換機,負載均衡器,Web服務器,數據庫,等等。 ◆記得縱向擴展嗎?以前那些邪惡的大型機們有很多核,很多IO板,配備了非常昂貴的存儲設備。而現在,多核這個概念開始蔓延了。 ◆RAM是廉價的。 ◆將以上兩點合并起來,這意味著你只需要再次合并服務就可以了。這兒有一個負載均衡器,那兒有一個Web服務器……如果一個應用程序可以使用許多個 CPU(比如apache),那么這是完美的。如果它不能(比如memcached),那么你最終可能會由于離散的服務太多而浪費掉大量的可用資源。 ◆作業系統(job systems)也許可以填補這個鴻溝。哪里的核心的越多,哪里的工作線程就越多。 緩存 ◆對于開發者和系統運維人員來說,緩存可是個好東西,值得大力發展!的確,它是不可思議的。它是與眾不同的。有時你可能必須要為它做一個權衡。有效地使用緩存可以讓系統的整體性能提升10倍之多。對于你當前的系統來說,這是一個巨大的“放大鏡”,并且,它的成本在總成本中只占很小的一部分。 ◆Memcached。它可以為服務提供緩存,讓數據庫結構非標準化(這可以提升性能。,對squid緩存進行優化,甚至可以提高操作系統緩存的利用率。 ◆測試它,玩弄它,并打破它。使用緩存會帶來新的問題。要做好準備。 讓工作異步化 ◆可以使用Starling, Gearman, The Schwartz等工具。作業系統可以給應用程序提供更多的靈活性。工作線程可以一次性地產生出來,也可以是持久的(載入緩存數據,準備數據等)。它們可以在不同的硬件上,它們的地理位置也可以不同。它們既可以是同步的,也可以是異步的。 ◆維護這些東西是一個運維人員的問題。使用它們既是開發者的問題也是運維人員的問題。 ◆當用戶點擊“給我所有的朋友發送郵件”的時候,把這個工作列入計劃,然后馬上說:“OK,已經完成了!你的朋友馬上會收到你的郵件!”——通過異步化的方式來處理這個工作。 ◆作業系統是銜接各個服務的一個場所。博客投遞-〉IM通知,定期計費-〉收費服務,網關認證等。 ◆容易擴展。在請求進入的地方會有一些瓶頸,所有的工作線程必須要做的事情就是“拉”。這個是相對于HTTP中大量推/拉的狀態而言的。 安全和巡查 ◆一定要安裝安全更新!這十分重要!有很多瘋狂的網絡專家致力于在盡可能短的時間內給你提供這些更新。不要因為你害怕改變而讓他們白白地付出勞動。 ◆安全性也是分層的。明白你能確保什么,以及不能做什么。MySQL有密碼訪問機制,并不意味著可以允許直接通過互聯網來訪問它。 ◆在SSH上禁用密碼。使用經過加密的passphrase密鑰來進行身份驗證。遠程的用戶無法猜出你的私有密鑰。他們必須從你這里才能得到它。把它保管好。做好這點,就沒必要在防火墻中關閉你的SSH端口了。 ◆搞清楚你的應用程序是如何工作的,它具體需要做些什么,并相應的進行調整。比如說,如果你的應用當中,只有付費頁面和Twitter投遞服務是需要連接外部互聯網的,那么就把它們做成工作線程。將這部分工作線程放在特定的設備中,讓它們只能訪問特定的主機。這可以神不知鬼不覺地把你的網絡的其余部分保護起來。 ◆對于PHP站點來說,以上這些建議尤其重要,但是在其他地方,它們也可以發揮作用。如果有人要入侵,那么多半是通過你的應用。即使有人從前門入侵了系統,也要讓他們花費很大精力才能進入保險箱。你需要確保的是他們無法將數據帶走或上傳至別的什么服務器上。 ◆除了這些具體的建議之外,你還應該多讀一些資料。自己判斷,自己動手測試。如果你不知道一個安全模型是如何工作的,一時半會兒可能問題不大,但是這就會導致你不知道它的限制在哪里,甚至于無法判斷它是否在工作。 ◆基于測試,理論,攻擊樹的安全機制是不會在背后給你一刀的。當人們構想出模糊的安全模型的時候我也很喜歡它,但是像我這樣的普通人都可以把它弄的支離破碎。 ◆盡可能地進行巡查!登錄,退出,以及使用的命令都要進行審查。對面向外部服務的所有訪問,包括所有在請求中指定的參數,都要進行審查。對于你的應用程序來說,找出極值,然后徹底禁止輸入超出范圍的值。做你能做的所有事情,讓數據以可追溯的方式工作。 ◆如果你懷疑某些東西可能會被破壞,應該采取適當的預防措施,最好懂得一點計算機取證方面的知識(或者聘請一個專門從事這項業務的公司)。通過移除可疑的網絡訪問來做出響應,通過一系列的控制臺或直接通過終端來檢查整個系統。在已經被破壞的機器上,避免使用任何的服務,配置文件,或數據。很多人都是 “清除了一個木馬”,但是不知道它是怎么進來的——這樣并不算真正地清除了這個木馬。 ◆如果你有安全團隊,取證專家,或其他人手,那么你盡量不要接觸那臺機器,把它隔離起來。這意味著不要重新啟動它來“清除一些奇怪的進程”。他們需要這些證據。如果你必須這么做,就去做吧,但是要記得把系統徹底地清理干凈,打上所有的安全更新,盡量搞清楚他們是否已經破壞了重要的數據。做你能做的所有事情。 ◆安全實際上是一種權衡。如果你做錯了,開發者和用戶們都會“揭竿而起”:他們會找到一些方法來繞過安全機制。如果他們可以繞過它,那說明你的工作并沒有做好。如果他們不能繞過它,那么他們也許會放棄,然后離開。 ◆緊抓訪問控制。這意味著運維人員必須要為已經鎖上門的“房間”提供一些窗戶。不讓開發人員進入生產環境,意味著他們必須抹黑解決難題。你的確不能讓開發者們直接對服務進行修改,但是你可以提供日志工具和調試工具等等。對于各種產品來說,這些都是成功的秘訣。 本文出自:億恩科技【www.endtimedelusion.com】 |