微服務,Java目前很火熱的系統架構

2020-11-24 51CTO

 

學習內容安排如下:

  • 系統架構的演化:集中式架構、分布式架構。
  • 服務之間的調用方式:HTTP和RPC。
  • Spring提供的RestTmeplate模板的使用。

當然系統架構肯定不是說我一篇文章就能學好的,只能說我作為一名初學者,是如何去理解這些概念的。

至於想要真正地去弄懂這些,需要自己長期性地不斷學習,非一朝一夕就能學完的。

一、系統架構概述

技術更新是非常快的,從單一應用到垂直細分,到分布式,到SOA,以及微服務架構。

還有在Google帶領下的Service Mesh,只有不斷地學習才能在IT行業前行下去。

1集中式架構

當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。

但是流量一旦增加就會出現各種的問題:

  • 代碼耦合,開發維護困難。
  • 無法針對不同模塊進行針對性優化以及擴展。
  • 單點容錯率低,並發能力差。

當然為了解決這些問題,後續也做了優化,根據業務功能對系統進行拆分。

雖然解決了代碼耦合問題,但是系統間相互獨立,會有很多重複開發工作,影響開發效率。

舉一個例子來理解,比如說一個電商項目,根據業務功能拆分成兩套系統:

  • 前端門戶系統:就是用戶看到的界面。
  • 後臺管理系統:內部人員的管理界面。

那麼現在問題來了:

根據id去資料庫查詢商品,Service層和Dao層的代碼要寫兩遍,造成了代碼的極度冗餘。

2分布式服務

為了解決代碼冗餘問題,可以將核心業務作為獨立的服務抽取出來,形成服務中心。

多個子系統只需要訪問服務中心就好了。

優點:將基礎服務進行了抽取,系統間相互調用,提高了代碼復用和開發效率。

缺點:一旦服務變多,調用關係錯綜複雜,開發者自己都搞不清楚誰調用誰,難以維護。

3流動計算架構SOA

它將普通的分布式系統集中管理起來了,更便於維護,同時也提高資源利用率。

其典型的架構就是阿里巴巴的Dubbo,這個架構圖就比較複雜了,我就不自己畫了。

不要看好像挺複雜的,本質上都是為了管理服務,我以打車的例子大致說明下:

  • 在以前,我們若是要乘車,需要去找車,而對於車主來說也需要找乘客。
  • 而現在,有打車服務了,我們若是要乘車直接叫滴滴就好了,而司機也方便找乘客。

對於服務也是一樣的,以前有什麼問題?

  • 服務越來越多,要管理每個服務的地址。
  • 服務之間調用關係錯綜複雜,難以理清。
  • 服務過多,服務狀態難以管理。

為了解決上述問題,服務治理做了哪些?

  • 服務註冊中心,實現服務自動註冊,無需人為記錄服務地址。
  • 服務自動訂閱,服務列表自動推送,服務調用透明化,無需關心依賴關係。
  • 動態監控服務狀態,人為控制服務狀態即可。

對於我個人來說,我就會用滴滴和司機之間的關係作為對比,來理解服務管理和服務之間的關係,不然專業術語太多了,也很難理解。

4微服務

微服務和SOA比較像,但也有一些差別。

①微:微服務的核心

也就是小的意思,服務拆分粒度很小。例如一個用戶管理就可以作為一個服務。

②面向服務

每個服務都要對外暴露Rest風格服務接口API,並不關心服務的技術實現。

你是用Java實現的也好,還是用Python實現的也罷,都可以,只要提供Rest的接口即可。

③單一職責

微服務中每一個服務都對應唯一的業務能力,做到單一職責。

④獨立

  • 團隊獨立:每個服務對應獨立的開發團隊。
  • 技術獨立:因為是面向服務,提供Rest接口,使用什麼技術沒有別人幹涉。
  • 自治:自治是說服務間互相獨立,互不幹擾。
  • 前後端獨立:以前後端要為電腦端、手機端提供不同接口,現在只需要提供Rest接口。
  • 資料庫分離:每個服務都使用自己的數據源。
  • 服務獨立:服務間雖然有調用,但要做到服務重啟不影響其它服務。

二、服務調用方式

我們以前寫的代碼本質上都是在一個服務中,屬於服務內部:類與類之間的調用。

那如何實現服務之間的調用呢?有兩種方式:RPC調用和Http調用。

1RPC調用

基於原生TCP通信,速度快,效率高,現在熱門的dubbo,都是RPC的典型代表。

2Http調用

這個就太常見了,我們以前一直在用的Ajax請求,就屬於http調用。

它的特點在於靈活,實現了不同程式語言之間的調用,Ajax就是在使用js調用Java。

現在使用Java代碼調用Java,做個演示:

我在電腦上創建了兩個不同的工程,工程①也就是我們這幾天用SpringBoot搭建的項目。

在工程①中實現了通過id去資料庫查詢用戶數據的功能,也可以通過瀏覽器訪問。

那在工程②中調用工程①中的業務,也就是服務之間的調用。

注意:這和以前已經有本質上的區別了,以前都是內部的調用,現在不一樣了。

當然因為我這邊只有一臺電腦,所以我不太確定能否實現跨電腦的調用。

那它具體是如何實現的呢?

3RestTemplate

它是Spring提供的一個模板工具類,也是上述我使用到的工具:

①SpringBoot測試

在SpringBoot中測試和在Spring中測試有些許不同之處需要注意。

是使用註解@SpringBootTest說明,參數為啟動類的字節碼。

②restTemplate

這也就是spring提供的模板工具類,使用spring注入後,即可以直接使用

③getForObject()

這是發送一次get請求,postForObject對應著post請求,發送到哪兒呢?

  • 參數一:指定訪問電腦的IP位址。
  • 參數二:返回數據的Class對象。

最後

學習完了Http客戶端工具,就可以正式學習微服務了,明天開始學SpringCloud。

謝謝你的觀看。

【編輯推薦】

【責任編輯:

華軒

TEL:(010)68476606】

點讚 0

相關焦點

  • 架構大遷移:從Java Spring到ReactJS +API微服務架構
    大家可能手頭都維護著一定數量舊系統,系統可能還能跑,但是跑的怎麼樣,可能沒有人能說清楚,還時常需要維護:重啟、應對安全檢查啥的,它代碼可以追溯到張山、李四到王二麻子好多代禿頂的碼農。面對著這樣的窘境,你能做的,而且唯一需要做的就是對其重構,重新開發一個全新架構的,高性能的,流行的系統。
  • 微服務架構技術棧
    一、前言2014 年可以認為是微服務 1.0 的元年,當年有幾個標誌性事件:一是 Martin Fowler 在其博客上發表了」Microservices」一文,正式提出微服務架構風格;二是 Netflix 微服務架構經過多年大規模生產驗證,最終抽象落地形成一整套開源的微服務基礎組件,統稱 NetflixOSS,Netflix 的成功經驗開始被業界認可並推崇
  • 微服務這麼流行,你理解嘛?
    2、微服務和微服務架構的區別是什麼?3、微服務技術有什麼?4、微服務的優缺點是什麼?5、為什麼選擇Springcloud作為微服務架構?微服務的技術還是很多的,python、c++等等都有,不過因為是專注於java,所以還是主要聊聊java中的微服務技術。Dubbo被重啟之後又煥發出了新的光彩,但是跨語言支持不足是它的一個弱項,另外功能比較少,之後服務治理相關的技術,完全用好這個框架的門檻比較高。這對於初學者來說開發難度還是比較大的。
  • DDD到底適不適合微服務架構?
    從初期的單體架構,到豎井式架構、RPC架構,再到大放異彩的微服務架構,可以說架構演進,本質上就是基於業務,對現有架構的抽象過程。一名架構師,最怕缺少全局意識和長線思維。如果架構師設計架構的出發點,只是緩解燃眉之急,那麼在未來,這套系統的迭代會越來越困難,很可能陷入推翻、重建,再推翻、再重建的「鬼打牆」。
  • 「首席架構師看微服務架構」介紹NGINX的微服務參考架構
    我們還認識到,實現微服務有許多不同的方法,其中許多方法都是新穎的,並且特定於各個開發團隊的需求。我們認為需要使用模型來使公司更容易開發和交付自己的基於微服務的應用程式。考慮到這一切,NGINX專業服務部門正在開發NGINX微服務參考架構(MRA) - 一組可用於創建自己的微服務應用程式的模型。
  • 基於容器雲的微服務架構實踐
    【編者按】微服務架構的誕生和容器技術的流行,幾乎是同時發生的,這並非偶然,而是網際網路時代倒逼傳統技術和架構而產生的變革,而以Docker為代表的容器技術則為微服務理念提供了匹配的實現機制,本文作者從什麼是微服務切入,詳細的介紹了微服務架構的優勢,最後從自身實踐出發,給出了微服務架構的雲端實踐。
  • SpringCloud微服務架構篇3:Spring Cloud簡介
    5、微服務的統一配置對微服務架構中,數十個、上百個實例,統一對配置進行管理和發布更新。Spring Cloud技術SpringCloud使用Spring Boot風格將比較成熟的微服務框架組合起來,屏蔽掉了複雜的配置和實現原理,為快速構建微服務架構的應用提供了一套設施工具和開發支持。
  • 覆蓋全網的阿里微服務架構有多牛:K8S+實戰+筆記+項目教程
    前言目前,平臺化、智能化、泛在化和易用化正在成為新一輪信息技術發展及信息化應用的全球趨勢。在這 趨勢中,平臺化尤其具有 礎性及戰略性意義,而以 Spring Cloud技術為代表的微服務 是平臺化的代表性技術。
  • Java微服務可以和Go一樣快嗎?
    我們想進行實驗,看看Java微服務是否可以像Go微服務一樣快速運行。 業界普遍認為Java是"老的","慢的"和"無聊的"。 Go是"快速","新"和"酷"。 但是我們想知道這些特性是否得到實際性能數據的保證或支持。
  • 無服務和微服務架構,誰是業務計算的未來?
    總的說來,這兩種架構的相似之處在於:它們都能夠最大程度地降低運營的成本,縮短應用部署的周期,滿足不斷變化的開發需求,以及優化那些對於時間和資源敏感的日常任務。那麼,微服務和無伺服器模型之間的不同之處在哪裡呢?首先,微服務屬於一種小型的SOA(面向服務的體系架構)技術解決方案。
  • 微服務RPC框架選美
    原標題:微服務RPC框架選美 轉載本文需註明出處:EAII企業架構創新研究院(微信號:eaworld),違者必究。如需加入微信群參與微課堂、架構設計與討論直播請直接回復此公眾號:「加群 姓名 公司 職位 微信號」。
  • 2021升級版微服務教程—為什麼會有微服務?什麼是SpringCloud?
    2.負載均衡分布式:一個系統 通過多臺伺服器 協同完成系統功能集群:同一個系統放在了多臺伺服器上 且每個伺服器上內容相同 複製了多份image-20200317145056653 負載均衡的問題 成本 Session 增加負載均衡之後,應用伺服器不再是系統的瓶頸了,可以靈活的隨著訪問量增大的同時增加應用伺服器集群的數量
  • Quarkus 1.0 發布,Java 雲原生、容器優先框架
    Quarkus 代表了現代應用開發人員的根本性轉變,旨在解決 Java 在雲原生應用架構(如容器、微服務和 Serverless)方面面臨的一些缺陷。Java 開發人員能夠使用 Quarkus 構建具有比傳統的基於 Java 的微服務框架更快的啟動時間並佔用更少內存的應用。
  • 服務網格和API網關在微服務架構中的作用
    服務網格和API網關在微服務架構中的作用 如果您從事微服務,那麼您可能已經多次聽說過這兩個術語。 人們常常在兩者之間感到困惑。 在本文中,我將詳細討論服務網格和API網關,並討論何時使用。
  • 2018年阿里巴巴關於Java重要開源項目匯總
    JStorm 可以看作是 storm 的 java 增強版本,除了內核用純java實現外,還包括了thrift、python、facet ui。從架構上看,其本質是一個基於 zk 的分布式調度系統。目前已經在淘寶、天貓上線,全部替換了Oracle官方JVM版本,在性能,功能上都初步體現了它的價值。地址:http://jvm.taobao.org10. Java 圖片處理類庫 SimpleImageSimpleImage是阿里巴巴的一個Java圖片處理的類庫,可以實現圖片縮略、水印等處理。
  • 放棄微服務,改用宏服務,Uber 這波什麼操作?
    以「簡單」著稱的微服務為什麼又變得難以維護了呢? 1 Uber 支付團隊放棄微服務,轉用宏服務 4 月 6 日,Uber 支付體驗平臺的工程經理 Gergely Orosz 發布推文表示其團隊的架構方向已經發生了變化,放棄微服務,轉而使用宏服務。
  • 基於Prometheus來做微服務監控,有多吃香?
    微服務架構是目前各大網際網路公司普遍採用的軟體架構方式。在微服務架構中,系統被拆分為多個小的、相互獨立的服務,這些服務運行在自己的進程中,可以獨立的開發和部署。
  • 微服務拆分到什麼粒度合適——康威定律
    大致的意思是:系統設計(產品結構)等同組織形式,每個設計系統的組織,其產生的設計等同於組織之間的溝通結構(簡單點說就是,系統的設計受限於設計系統的組織的人員架構形式。四、康威定律如何解釋微服務的合理性了解了康威定律是什麼,再來看看他如何在半個世紀前就奠定了微服務架構的理論基礎。
  • restful微服務風格_restful 風格的微服務架構 - CSDN
    本文整理了 spring boot + jpa+mysql+redis +swagger+yml等技術,實現了微服務restFul 風格的demo,下載即運行[http://localhost:8080/
  • 什麼是微內核架構設計?
    阿里妹導讀:作為一名Java程式設計師,相信同學們都聽說過微內核架構設計,也有自己的理解。那麼微內核是如何被提出來的?微內核在作業系統內核的設計中又有什麼作用?本文從插件化(Plug-in)架構的角度來詮釋微內核架構設計,通過微內核架構和微服務架構的對比,分享其對微服務設計的參考意義。