您好,登錄后才能下訂單哦!
這篇文章主要介紹“讓生產環境微服務更流暢的方式有哪些”,在日常操作中,相信很多人在讓生產環境微服務更流暢的方式有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”讓生產環境微服務更流暢的方式有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
關注點分離并不是什么新概念,分布式計算也不是。優勢很明顯,但是它們的代價通常是時間和金錢上更高的運維成本。將這兩者混合在一起,就會遇到所有類型的問題。將其上生產環境,問題會變成四倍。調試修復,但是等一下——
調試并不能讓問題消失。
就像Bryan Cantrill在其QCon演講里所指出的,“調試已經退化成了口頭傳說,期望問題能夠神話般消失。”事實上,調試更像一門科學,要理解系統是如何工作的,而不是我們認為它是如何工作的。
調試不僅僅是微不足道的邊緣任務,而是個根本性問題。Sir Maurice Wilkes,創造出首批程序之一的調試者,那時候就已經認識到調試會成為開發人員需要承擔的主要職責。
“在開始編程的1949年,我們驚訝地發現讓程序像我們認為地那樣工作并不容易。必須找到調試方法。我還能記得那一刻,我意識到從今之后我生命的很大一部分會花在尋找自己編寫的程序的錯誤上。”
我們曾經認為這是為了解決問題。但是實際挑戰是要理解系統到底是如何工作的。
無論你是逐步將單體應用分解成微服務,還是從頭構建一個新系統,現在你都有更多的服務需要監控。每個都很有可能:
使用不同的技術/語言
在不同機器/容器里
有自己的版本
要點是智慧地監控,系統是高度碎片化的,迫切需要中央化監控和日志,才能夠理解到底發生了什么事情。
比如,在最近持續討論播客描述的一個場景里是需要回滾的差版本。這是單體應用最直接的方式。但是——現在我們有微服務了。因此需要確定哪個服務需要回滾,這樣的回滾對其他服務會有什么影響,或者可能只是需要添加一些功能,但是也可能就直接將問題推到另一個服務里。
要點#1:如果你認為監控單體架構很難,那么微服務會更難10倍,并且需要預先計劃更多的投資。
日志 日志 日志。服務器每天都會產生數GB的非結構化文本。IT界和二氧化碳排放等價的東西,是溢出的硬盤和瘋狂的Splunk賬單/ELK存儲費用。另外,如果想學習Splunk或者ELK,可以看看我們最新的電子書:《Splunk vs ELK:日志管理工具決策指導》。
在單體架構下,日志很可能已經分散在不同的地方,單體思維里就得使用日志記錄在不同地方的幾層設計。在微服務里 - 日志更加分散。現在當研究一些用戶事務相關的場景時,不得不從所有可能使用到的服務那里將所有的不同日志收集到一起,才能理解什么地方出錯了。
在Takipi里,我們的團隊通過使用Takipi解決這樣的問題。對于來自生產JVM里的所有日志錯誤或者報警,我們在日志里注入了可以指引事件分析的鏈接。包括每一幀完整的stack trace和變量狀態,即使它們分布在一定數量的服務/機器上。
要點#2:微服務是指將東西分解成單個組件。這么做的副作用是,運維和監控也隨之分解到每個服務里,并且失去了作為整體的系統的力量。這里的挑戰是使用合適的工具重新將這些中央化。
如果跟蹤某個特定服務的故障事務,你無法保證正在查看的服務就是出問題的地方。假定服務間有一些消息傳遞機制,比如RabbitMQ、ActiveMQ或者可能使用的是Akka。
即使服務行為正常,沒有找到什么問題,也可能會發生如下場景:
它接收到的輸入是錯的,那么你需要理解是什么導致前一個服務的異常行為
其結果的接收方返回了一些異常響應,那么你需要理解下一個服務是如何工作的
如果這些依賴條件比1:1更加復雜會如何?或者多個服務受益于該問題呢?
無論問題是什么,微服務下的第一步都是要知道從哪里開始尋找答案。數據完全分散,很有可能完全不在日志和儀表盤里。
要點#3:單體應用里,你通常能夠知道檢查的方向是正確的,微服務讓理解問題的來源在哪里,以及應該到哪里得到數據變得更加困難。
好的,讓我們繼續調查。現在的出發點是我們已經找到了有問題的服務,拿到了需要的數據,從日志里找到了stack trace和一些變量值。如果使用的是APM(就像New Relic、AppDynamics或者Dynatrace,我們也有文章介紹,在這里和這里),你可能還得到其他一些數據,有關一些方法的高速處理時間/對問題的嚴重性做了一些基本的評估。
但是——實際問題是什么呢?真正的根本原因?要找到實際出錯的代碼。
大多數情況下,從日志里首先得到的變量數據并不是真正需要的數據。它們通常指到下一個線索,要求你發現更多的真相,并且添加更多的日志聲明。部署變更,期望問題能夠重現,或者不重現,因為——有時候僅僅添加一條日志聲明似乎就能解決問題。
要點#4:當某個微服務的根本原因影響多個服務時,有可用的中央化根本原因檢測工具至關重要。如果你使用Java/其他JVM語言,一定要來看看我們Takipi是怎么做的。
Takipi的錯誤分析儀表盤——每一幀的變量值放在實際代碼之上
持續討論博客里提到的另一個問題是從典型單體架構的單層模型到微服務的圖模型。
這里可能發生的兩個問題和依賴有關。
如果在服務間存在循環依賴,當某個事務可能死鎖在循環里時,就會出現溢出錯誤。
如果兩個服務共享某個依賴,并且你以會影響它們的方式更新了其他服務的API,那么就需要一次更新所有這三個服務。這會帶來這樣的問題,你應該先更新哪個?怎么才能讓這樣的更新平穩過渡?
更多的服務意味著每個服務都有不同的發布周期,大大增加了這里的復雜度。當問題在一個版本消失,在新版本又出現時,重現問題就會很復雜。
要點#5:在微服務架構里,你更容易遇到依賴相關的問題。
到此,關于“讓生產環境微服務更流暢的方式有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。