深解微服務架構:從過去,到未來

http://www.uml.org.cn/zjjs/im...
clipboard.png

微服務的誕生

微服務架構(MicroserviceArchitect)是一種架構模式,它提倡將單塊架構的應用劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間采用輕量級的通信機制互相溝通。每個服務都圍繞著具體業務進行構建,并且能夠被獨立的部署到生產環境、類生產環境等。

微服務架構雖然誕生的時間并不長,但其在各種演講、文章、書籍上所出現的頻率已經讓很多人意識到它對軟件架構領域所帶來的影響。

其實,微服務的誕生并非偶然。它是互聯網高速發展,敏捷、精益、持續交付方法論的深入人心,虛擬化技術與DevOps文化的快速發展以及傳統單塊架構無法適應快速變化等多重因素的推動下所誕生的產物:

http://www.uml.org.cn/zjjs/im...
clipboard.png

背景1 :互聯網行業的快速發展

過去的十年中,互聯網對我們的生活產生了翻天覆地的變化。購物、打車、訂餐、支付,甚至美甲、洗車等,想到的,想不到的活動都可以通過互聯網完成,越來越多的傳統行業公司也開始依賴互聯網技術打造其核心競爭優勢。互聯網時代的產品通常有兩類特點:需求變化快和用戶群體龐大。在這種情況下,如何從系統架構的角度出發,構建靈活、易擴展的系統,快速應對需求的變化;同時,隨著用戶量的增加,如何保證系統的可伸縮性、高可用性,成為系統架構面臨的挑戰。

背景2 : 敏捷、精益方法論的深入人心

縱觀IT行業過去的十年,敏捷、精益、持續交付等價值觀、方法論的提出以及實踐,讓很多組織意識到應變市場變化、提高響應力的重要性。精益創業(Lean Startup)幫助組織分析并建立最小可實行產品(Minimum Viable Product),通過迭代持續改進;敏捷方法幫助組織消除浪費,通過反饋不斷找到正確的方向;持續交付幫助組織構建更快、更可靠、可頻繁發布的交付機制。經過這些方法論以及實踐的推行和嘗試后,從宏觀上而言,大部分組織已經基本上形成了一套可遵循、可參考、可實施的交付體系。這時候,逐漸完善并改進各個細節的需求就會更加強烈。所謂細節,就是類似如何找到靈活性高、擴展性好的架構方式、如何用更有效的技術、工具解決業務問題等。

背景3 : 虛擬化技術與DevOps文化的快速發展

虛擬化技術和基礎設施自動化(Infrastructure As Code)的快速發展極大的簡化了基礎設施的創建、配置以及系統的安裝和部署。譬如云平臺的成熟以及像Chef、Puppet、Ansible等工具的使用,讓更多的基礎設施能夠通過自動化的方式動態創建。同時,容器化技術的發展以及Docker的出現,更是將虛擬化技術推向了一個史無前例的高潮。另外,DevOps文化的推行打破了傳統開發與運維之間的壁壘,幫助組織形成更高效的、開發與運維高度協作的交付團隊。這些技術與文化的快速發展,極大程度上解決了傳統環境創建難、配置難以及‘最后一公里’的部署難、交付難等問題,成為推動微服務誕生、發展的重要因素之一。

背景4 : 單塊架構系統面臨的挑戰

幾年前我們熟悉的傳統IT系統,也可以稱之為單塊架構系統,是以技術分層,譬如邏輯層、數據層等。但隨著用戶需求個性化、產品生命周期變短、市場需求不穩定等因素的出現,單塊架構系統面臨著越來越多的挑戰。因此,如何找到一種更有效的、更靈活、更適應當前互聯網時代需求的系統架構方式,成為大家關注的焦點。

所以說,微服務的誕生決不是偶然,是多重因素推動下的必然產物。

微服務與SOA

SOA簡述

早在1996年,Gartner就提出面向服務架構(SOA)。SOA闡述了“對于復雜的企業IT系統,應按照不同的、可重用的粒度劃分,將功能相關的一組功能提供者組織在一起為消費者提供服務”,其目的是為了解決企業內部不同IT資源之間無法互聯而導致的信息孤島問題。

2002年,SOA被稱作"現代應用開發領域最重要的課題之一",其正在幫助企業從資源利用的角度出發,將IT資源整合成可操作的、基于標準的服務,使其能被重新組合和應用。

但是,由于SOA本身的廣義性以及抽象性,在其誕生的相當長一段時間內,人們對SOA存在著不同的認知和理解。
http://www.uml.org.cn/zjjs/im...
clipboard.png

直到2000年左右,ESB(Enterprise Service Bus)、WebService、SOAP等這類技術的出現,才使得SOA漸漸落地。同時,更多的廠商像IBM、Oracle等也分別提出基于SOA的解決方案或者產品。

微服務與SOA

實際上,微服務架構并不是一個全新的概念。仔細分析SOA的概念,就會發現,其和我們今天所談到的微服務思想幾乎一致。那在SOA誕生這么多年后,為什么又提出了微服務架構呢?

鑒于過去十幾年互聯網行業的高速發展,以及敏捷、持續集成、持續交付、DevOps,云技術等的深入人心,服務架構的開發、測試、部署以及監控等,相比我們提到的傳統的SOA實現,已經大相徑庭,主要區別如下表所示:

http://www.uml.org.cn/zjjs/im...
clipboard.png

相比傳統SOA的服務實現方式,微服務更具有靈活性、可實施性以及可擴展性,其強調的是一種獨立測試、獨立部署、獨立運行的軟件架構模式。

http://www.uml.org.cn/zjjs/im...
clipboard.png

微服務架構的定義
其實,即便了解了上面的介紹,也很難對微服務下一個準確的定義。就像NoSQL,我們談論了好幾年的NoSQL,知道NoSQL代表著什么樣的含義,也可以根據不同的應用場景選擇不同的NoSQL數據庫,但是我們還是很難對它下一個準確的定義。類似的,關于什么是‘函數式編程’,也或多或少存在同樣的窘境。我們可以輕松的選擇不同的函數式編程語言,可以輕松的寫出函數式編程風格的代碼,但很難對什么是函數式編程下一個準確的定義。

實際上,從業界的討論來看,微服務本身并沒有一個嚴格的定義。不過,ThoughtWorks的首席科學家,馬丁 -福勒先生對微服務的這段描述,似乎更加具體、貼切,通俗易懂:

微服務架構:

微服務架構是一種架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間采用輕量級的通信機制互相溝通(通常是基于HTTP協議的RESTful API)。每個服務都圍繞著具體業務進行構建,并且能夠被獨立的部署到生產環境、類生產環境等。另外,應當盡量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建。

總結下來,微服務架構中的核心部分包括以下幾點:

小, 且專注于做一件事情;
獨立的進程中;
輕量級的通信機制;
松耦合、獨立部署。

clipboard.png
Java架構群:897889510群內提供

總結

隨著市場的快速發展,業務的不斷擴大,單塊架構應用面臨著越來越多的挑戰,其改造與重構勢在必行。而微服務架構的誕生,是互聯網高速發展,虛擬化技術應用以及持續交付、DevOps深入人心的綜合產物。隨著用戶需求個性化、產品生命周期變短,微服務架構是未來軟件軟件架構朝著靈活性、擴展性、伸縮性以及高可用性發展的必然方向。同時,以Docker為代表的容器虛擬化技術的盛行,將大大降低微服務實施的成本,為微服務落地以及大規模使用提供了堅實的基礎和保障。
歡迎工作一到五年的Java工程師朋友們加入Java架構群:897889510群內提供免費的Java架構學習資料(里面有高可用、高并發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450219.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決IntelliJ Idea中文亂碼問題、修改IDEA編碼

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 有兩種辦法可以修改 IntelliJ IDEA 的文件編碼(IDE 版本為 14.1.4) File->Settings->Editor->File En…

前端框架開始學習Vue(一)

MVVM開發思想圖(圖片可能會被縮小&#xff0c;請右鍵另存查看&#xff0c;圖片來源于網絡)定義基本Vue代碼結構1 v-text,v-cloak,v-html命令默認 v-text沒有閃爍問題&#xff0c;但是會覆蓋元素中原本的內容&#xff0c;插值表達式只會替換自己的占位符,<!DOCTYPE html> …

Android App圖片輪播效果的組件化

簡介 一個通用的圖片輪播效果的通用組件&#xff0c;方便開發者快速集成。 初學者&#xff0c;其實應該實現一個自定義控件的&#xff0c;改天有空&#xff0c;在學習下吧&#xff0c;學習能力一般&#xff0c;以前也沒寫過java&#xff0c;這個組件都寫了好久&#xff0c;慚愧…

天下IT:程序員能掙哪些外快?

各位朋友&#xff0c;大家好&#xff01;歡迎收看《天下IT》。 今天我們給您講講程序員&#xff0c;坦率的說世界上的程序員基本跟我手里的帽子一樣遍地都是&#xff0c;各種各樣的程序員&#xff0c;因為程序員已經成為社會的主流打工群體。但是程序員實際在公司里往往是最不受…

P1616 瘋狂的采藥(洛谷,動態規劃遞推,完全背包)

先上題目鏈接:P1616 瘋狂的采藥 然后放AC代碼: #include<bits/stdc.h> #define ll long long using namespace std; ll f[100010]; ll timee[10010]; ll w[10010]; int main() {ll t,m;cin>>t>>m;//t總時間,m總草藥//time時間,w價值for(ll i1;i<m;i){scan…

MySQL通過source命令執行sql文件

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 IT人員經常會和MySQL打交道&#xff0c;備份和恢復應該是最常用的操作了&#xff0c;那么通過直接執行sql文件無疑是最快捷的方式&#x…

Android系統中通過shell命令實現wifi的連接控制

簡介 工作中遇到一個“變態”的需求&#xff0c;在android系統中不通過java層控制wifi的連接&#xff08;主要是修改ap的essid和password&#xff09;&#xff0c;而是需要通過native層實現對wifi的控制。 How 接到這個需求時&#xff0c;第一個想法是如何找到Android nativ…

程序員賺大錢

本文共分三部分&#xff0c;現在打開的是《第一部分》&#xff0c;歡迎繼續閱讀《第二部分》和《第三部分》1 引子 都說海闊憑魚躍&#xff0c;又有多少魚能躍出大海&#xff1f;都說天高任鳥飛&#xff0c;但真正能一飛沖天的&#xff0c;也不過是寥寥數鷹而已&#xff1b;在…

MySQL索引底層實現原理

索引的本質 MySQL官方對索引的定義為&#xff1a;索引&#xff08;Index&#xff09;是幫助MySQL高效獲取數據的數據結構。提取句子主干&#xff0c;就可以得到索引的本質&#xff1a;索引是數據結構。 我們知道&#xff0c;數據庫查詢是數據庫的最主要功能之一。我們都希望查詢…

解決 A component required a bean of ‘XXX.RoleService‘ that could not be found.

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 springboot工程啟動報錯&#xff0c;無法啟動成功。 dubbo訂閱服務失敗&#xff0c;提示如下&#xff1a; 出錯原因&#xff1a;唉&…

開源個小工具simple-repo

背景 了解android系統的都應該熟悉repo這個工具&#xff0c;google為了方便管理數百個git倉庫&#xff0c;開發了repo這個批量管理工具。不過google repo project配置比較麻煩&#xff0c;而通過gitbucket搭建git server則比較傻瓜&#xff0c;所以此處開發了simple-repo這么一…

配合OAuth2進行單設備登錄攔截

2019獨角獸企業重金招聘Python工程師標準>>> 要進行單設備登錄&#xff0c;在其他地點登錄后&#xff0c;本地的其他操作會被攔截返回登錄界面。 原理就在于要在登錄時在redis中存儲Session,進行操作時要進行Session的比對。 具體實現&#xff0c;假設我們的OAuth 2…

朱大鳴:中國金融危機到底有多嚴重

我們到底該不該救助金融機構&#xff0c;中國鈔票到底有沒有超發&#xff0c;對于這個問題&#xff0c;央行行長周小川日前撰文全面為之辯護&#xff1a;對于第一個問題&#xff0c;他的觀點是金融業出現了問題就必須救&#xff0c;否則意味著集體的失靈甚至死亡&#xff1b;中…

C++知識點(六)數組、指針與字符串導學

1.數組 地址連續存放初始化&#xff1a;列出全部初始值后&#xff0c;第1維下標個數可以省略不做初始化&#xff0c;局部變量中為垃圾數據&#xff0c;static變量為0只對一部分進行初始化&#xff0c;其余數值初始化為02.動態內存分配&#xff1a; new delete 3.動態創建數組 n…

Android應用開發—知識點匯總

獲取Fragment的context&#xff1a; getActivity().getApplicationContext()或者getActivity()You can use getActivity(), which returns the activity associated with a fragment.The activity is a context (since Activity extends Context).設置TextView的顏色setTextCol…

條件渲染vue

v-if:只渲染一次的情況下&#xff0c;性能更好v-show:頻繁切換性能更好 vue虛擬DOM技術 瀏覽器&#xff1a;渲染引擎&#xff08;慢&#xff09;JS引擎&#xff08;快&#xff09; 用1個JS對象來充當DOM對象&#xff0c;因為JS對象性能比較快&#xff0c;所以用虛擬DOM對象進行…

錢線觀察:貨幣基金T+0駕到 活期存款將死?

導語&#xff1a;即使沒有任何投資風險&#xff0c;通脹也在侵蝕居民的財富&#xff0c;現金是不安全的。最近出現的一項業務&#xff0c;貨幣基金"T0"贖回&#xff0c;意味著貨幣基金可以像活期存款一樣即時取現&#xff0c;而其收益率普遍高于活期存款。因此有人認…

git stash和git stash pop

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 git stash 可用來暫存當前正在進行的工作&#xff0c; 比如想pull 最新代碼&#xff0c; 又不想加新commit&#xff0c; 或者另外一種情…

CentOS 7.0 上安裝和配置 VNC 服務器

作為一個系統管理員&#xff0c;大多數時間是通過網絡管理服務器的。在管理服務器的過程中很少會用到圖形界面&#xff0c;多數情況下我們只是用 SSH 來完成我們的管理任務。在這篇文章里&#xff0c;我們將配置 VNC 來提供一個連接我們 CentOS 7 服務器的方法。VNC 允許我們開…

Android應用開發—TextView的動態創建

動態創建TextView的兩種方式&#xff1a; 下面介紹兩種創建方式&#xff1a; 在drawable里面創建共同依賴的background.xml文件&#xff0c;里面設置shape來設置文本框的一些特殊效果&#xff1a; eg&#xff1a; <?xml version"1.0" encoding"utf-8"…