《靜兒的服務治理私房菜》服務治理和架構

来源:http://www.cnblogs.com/xiexj/archive/2017/09/29/7604057.html
-Advertisement-
Play Games

1.2 服務治理和架構 我在矽谷那段時間,每天早上都單獨要一份omelet,就是美式煎蛋。2個雞蛋和黃油是必選的,另外需要自己在需要放的材料上打鉤,有多種芝士可選,另外還可以勾選洋蔥,蘑菇,培根,西蘭花等。 回國之後,經常也會自己這樣做早餐,只是總會在擺盤時,用圓火腿斜切兩片,然後將這這個片再四六分 ...


1.2 服務治理和架構

  我在矽谷那段時間,每天早上都單獨要一份omelet,就是美式煎蛋。2個雞蛋和黃油是必選的,另外需要自己在需要放的材料上打鉤,有多種芝士可選,另外還可以勾選洋蔥,蘑菇,培根,西蘭花等。

  回國之後,經常也會自己這樣做早餐,只是總會在擺盤時,用圓火腿斜切兩片,然後將這這個片再四六分的切一刀,大的兩個半片拼起來拼成一個心形擺到盤子的一邊。在高腳杯中倒入熱牛奶。這就是簡單而精緻一天的開始。

  做omelet的原則是——雞蛋和黃油必選,其他可選。架構也有自己的設計原則。這些原則中很多都是在架構一開始的設計中就要考慮進去的,這樣在出現任何問題時,我們都能夠及時的處理,和把問題影響範圍縮到最小。

  總的來說,有以下原則。

  1.N+1設計

  要確保任何你所開發的系統在發生故障時,至少有一個冗餘的實例。

  一般初創的項目,考慮到剛開始沒有什麼量,都是以最小單元上線。平常所說的最小單元就是一主一備兩個服務,來保證高可用。

  2.回滾設計

  確保系統可以回滾到以前發佈過的任何版本。

  現在大家都在使用一些持續集成和自動化部署工具,上面大家會感覺理所當然的看到回滾按鈕,點擊進入可以選擇回滾到上次版本或者回滾到某一個特定版本。

  實現原理也很簡單:最近的幾個版本,在新版發佈時舊版本會被重命名,命名時尾碼上時間等版本信息。點擊回滾時直接將被重命名的版本改回來即可。但是將所有歷史版本都保留會很占用資源。所以較舊的版本還是會從SVN、GIT等版本控制管理工具上重新編譯發佈。

  3.禁用設計  

  關閉任何發佈的功能。

  當一個功能出現嚴重問題不得不關閉時,如果關閉整個系統代價就有點大了。所以要有單個功能的開關。比如在交易系統中,可能會遇到某些銀行或者其他支付渠道故障,需要暫時關閉某些支付渠道。如果遇到鏈路積壓,則需要關閉整個支付功能,讓用戶採用現金或者其他支付手段。這樣的代價要比多次發起退款和支付,用戶和商家都無法分辨是否實際支付成功代價要小很多。

  4.監控設計

  在設計階段就必須要考慮監控,而不是在實施完成之後補充。

  因為設計階段設計人員需要比較清醒,自己想要達到什麼效果,關心的指標是什麼。將監控放到設計階段,開發階段就可以做合理的埋點。這要比實施完成後再加監控對系統的影響要小,代價要低。

  5.設計多活數據中心

  不要被一個數據中心的解決方法把自己限制住。

  隨著企業數據和IT資源不斷集中,風險也相應集中,為減少或消除停機對業務可用性造成的影響。金融企業一般會按照“兩地三中心”的模式建設數據中心。所以跨機房之間的通信成了企業不得不解決的問題。這個在後面的文章中會相信講到。

  6.只用成熟的技術

  成熟的技術代價低,避免了軟體本身的問題造成排查和解決困難。

  筆者之前有次面試失利,自覺技術不錯,心裡想不明白,所以找來朋友幫我分析。朋友看了我的簡歷,給出中肯的評語:“碼農思維”。裡面寫到自己正在自己研發一個搜索引擎框架。朋友就說:“現有框架不能滿足需求嗎?你這種思維,大家跟著你乾會很累,還不出業績。”

  成熟的技術通常開發成本低,開發效率高,可擴展能力強,文檔豐富,還有很多社區,人員變動的替換成本較低,是業務部分的優先選擇。

  7.非同步設計

  一個系統各個模塊很可能處理能力,相應能力不同。如果採用同步設計,遇到其中一個環節因為什麼原因造成大量的連接超時和讀寫超時,可能會導致整個系統無法運作。在這個互聯網講究高併發的時代,同步設計難以發揮作用。

  8.無狀態設計

  無狀態設計利於橫向擴展和負載均衡,大大提高了可伸縮性。

  有狀態就是有數據存儲功能,線程不安全。無狀態則天生就是數據安全的。J2EE的session就是有狀態的,通常被認為是不好的設計,大部分J2EE中間件在集群時都需要進行session同步。

  9.小步快跑設計

  小構件,小發佈,快試錯 就算是在進行重構的時候,永遠都不建議把所有代碼都調整完成之後在進行測試。小步快跑的研發方式不是敏捷開發的專利,而是適用於各類軟體開發應用中的一個基礎準則。小步快跑的設計思想體現了簡單,快速反饋的特點。

  10.水平擴展非垂直升級

  必要時把需求分為多個系統,而不是升級原有的系統。

  在垂直擴展模型中,想要增加系統負荷就意味著要在系統現有的部件上下工夫,即聽過提高系統部件的能力來實現。而水平擴展模型中,我們不是通過增加單個系統成員的負荷而是簡單的通過增加更多的系統成員來實現。微服務是水平擴展的一個例子。不要把所有的功能都集中在一個系統裡面。

  11.設計至少有兩個步驟的前瞻性

  想的更遠一點,減少重構的次數。

  重構代碼是危險的,代碼的變化會導致測試的壓力很大。除非有必要的理由,否則不要輕易重構。

  12.故障隔離設計

  實現隔離故障設計,通過斷路避免故障傳播和交叉影響。

  非同步設計本身也是遵循故障隔離原則的。非同步I/O編程,非同步HTTP,非同步SOAP,非同步SMPP。基於Reactor模型統一調度的長連接和短連接協議棧,無論性能,可靠性還是可維護性,都可以秒殺傳統基於BIO開發的應用伺服器和各種協議棧。

  13.自動化

  手工操作時效性無法保證,而且“常在河邊走,哪有不失鞋。“看起來簡單的東西也有可能出錯。

  忙中出錯是經常會發生的事情。特別的是針對資料庫操作,如果更新時少加了一個條件,可能會對大批數據產生影響。所以,大公司會使用一種DBA平臺的內部網站頁面來操作線上資料庫。這個平臺會對查詢時間、執行時間,對數據的影響來做判斷,如果判斷影響大,會要求用戶確認,還會根據影響程式做出上級審批,阻止運行等。

  架構設計的這些原則建議讀者也像筆者這樣在紙上畫一下,做一個梳理。

 

  架構設計很多需要考慮的問題可以通過服務治理來解決和簡化。所以服務治理也是在架構設計開始就需要考慮的問題。

  靜兒心語:

  坐在窗邊,邊吃早餐邊看著來往的行人,看到一個背影貌似你的人,心會猛地的一緊,然後就意識到你根本不會出現在這附近,就對自己笑了。心偶爾還是會痛,偶爾會睡不著,但是我會好好吃早餐,好好讓自己不胖也不瘦,讓自己有平靜陽光的面容和安靜的內心。看來我還是沒有那麼愛你,我更愛我自己。

 

乾貨時間:

  我有時候也會做一些如下麵的工具繪圖,很多人問我作圖工具的問題,一般我用processon。https://www.processon.com/i/594d313ae4b08b003f2ec84a 。這是註冊鏈接。這個大家還是比較認可的。

 

問題時間:

編輯說關於作者這塊,說就不要說自己是科班出身了,來這邊的都是。但是我覺得我自己能是科班出身很驕傲的,畢竟是一點天賦都沒有的。大家給評判一下,關於作者我應該寫點啥。

文藝女青年。雖然20歲的時候從東北大學電腦系本科畢業,研究生讀的卻是中科院的心理學。第一家公司在沈陽東軟,1年的時間從零學日語過了國際日語一級,基本上在公司做的是日語翻譯。去日本出差期間倒是寫過幾行代碼。後來到北京進了人人網參加過很多從零開始的內部創業項目。後因為作者要完成作為一個厲害的技術人員去外國出差的心愿,去了樂視。在此期間多次赴美國矽谷進行技術支持。目前在美團.點評的金融部門負責核心交易部分。業餘時間接過私活,創過業。有一百多項技術發明專利。有自己的技術博客和開源項目。Github地址:https://github.com/xiexiaojing


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 歷經千辛萬苦,整理了軟體開發過程中必備英文單詞,助你走向編程巔峰 !!! 連最難的英文單詞你都征服了,你還怕什麼? (拒絕死記硬背,平時多看看,多用於代碼中,) 【不求全部都會,但求蒙的都對!】 第一天 application [ˌæplɪ'keɪʃ(ə)n]應用程式 應用、應用程式 applica ...
  • 當前環境 代碼地址 git 地址:https://github.com/jasonGeng88/java-network-programming 背景 前不久,上線了一個新項目,這個項目是一個壓測系統,可以簡單的看做通過回放詞表(http請求數據),不斷地向服務發送請求,以達到壓測服務的目的。在測試 ...
  • 【卻說那妖精與大聖鬥經半日,不分勝敗。行者把棒丟起,叫一聲“變!”就以一變十,以十變百,以百變千,半天里,好似蛇游蟒攪,亂打妖邪。妖邪慌了手腳,將身一閃,化道清風,即奔碧空之上逃走。行者念聲咒語,將鐵棒收做一根,縱祥光一直趕來。】 在西游記第九十五回【假合真形擒玉兔 真陰歸正會靈元】中,孫行者“毆打 ...
  • 1.3 網路編程模型與服務治理 服務治理和服務劃分密不可分。服務之間既然進行了劃分,那麼服務之間就要進行通信。當今服務整個鏈路中最耗時的不是鏈路節點本身,而是節點間的通信。理解網路編程模型可以更好的進行服務治理。 網路編程模型的選擇與服務治理關心的性能指標,各種參數的配置,維護的上下游之間是怎樣的關 ...
  • 1.uml活動圖 活動圖是uml用來對系統動態行為建模的另一種建模方法。描述活動的順序,展現活動從一個活動到另一個活動的流程。活動圖的本質是流程圖。 2.活動圖的繪製 2.1 活動圖的基本模型 活動圖的組成元素:活動,轉換,分支,合併,分叉,匯合,泳道。 如圖:一個簡單的活動圖。 2.2活動的表示 ...
  • 前臺: 支持三套模版, 可以在後臺切換 系統介紹: 1.網站後臺採用主流的 SSM 框架 jsp JSTL,網站後臺採用freemaker靜態化模版引擎生成html 2.因為是生成的html,所以訪問速度快,輕便,對伺服器負擔小 3.網站前端採用主流的響應式佈局,同一頁面同時支持PC、平板、手機(三 ...
  • 最近重看java編程思想,感覺收穫頗多。 看到在繼承處提到的策略模式不禁想到之前的一個乒乓球機器人的項目中的一個環節,感覺策略模式能很好的解決,所以在這裡寫一個小demo 情景: 由機器人視覺採集到一些點後,對乒乓求得軌跡進行預測,併在這條軌跡中取一個最佳擊球點。 之前我是直接在一個類中通過對不同方 ...
  • 定義: 表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。 UML類圖: 具體代碼: 模塊說明:Visitor:抽象類或者介面,聲明visit方法中的參數定義哪些對象是可以被訪問的。ConcreteVisitor:具體訪問者實現的對象,實現被添加 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...