java生成json字符串,威力加強版

策略 1——停止挖掘

Law of Holes 是說當自己進洞就應該停止挖掘。對于單體式應用不可管理時這是最佳建議。換句話說,應該停止讓單體式應用繼續變大,也就是說當開發新功能時不應該為舊單體應用添加新代碼,最佳方法應該是將新功能開發成獨立微服務。如下圖所示:

除了新服務和傳統應用,還有兩個模塊,其一是請求路由器,負責處理入口(http)請求,有點像之前提到的 API 網關。路由器將新功能請求發送給新開發的服務,而將傳統請求還發給單體式應用。

另外一個是膠水代碼(glue code),將微服務和單體應用集成起來,微服務很少能獨立存在,經常會訪問單體應用的數據。膠水代碼,可能在單體應用或者為服務或者二者兼而有之,負責數據整合。微服務通過膠水代碼從單體應用中讀寫數據。

微服務有三種方式訪問單體應用數據:

  • 換氣單體應用提供的遠程 API
  • 直接訪問單體應用數據庫
  • 自己維護一份從單體應用中同步的數據

膠水代碼也被稱為容災層(anti-corruption layer),這是因為膠水代碼保護微服務全新域模型免受傳統單體應用域模型污染。膠水代碼在這兩種模型間提供翻譯功能。術語 anti-corruption layer 第一次出現在 Eric Evans 撰寫的必讀書 Domain Driven Design,隨后就被提煉為一篇白皮書。開發容災層可能有點不是很重要,但卻是避免單體式泥潭的必要部分。

將新功能以輕量級微服務方式實現由很多優點,例如可以阻止單體應用變的更加無法管理。微服務本身可以開發、部署和獨立擴展。采用微服務架構會給開發者帶來不同的切身感受。

然而,這方法并不解決任何單體式本身問題,為了解決單體式本身問題必須深入單體應用做出改變。我們來看看這么做的策略。

策略 2——將前端和后端分離

減小單體式應用復雜度的策略是講表現層和業務邏輯、數據訪問層分開。典型的企業應用至少有三個不同元素構成:

  1. 表現層——處理 HTTP 請求,要么響應一個 RESTAPI 請求,要么是提供一個基于 HTML 的圖形接口。對于一個復雜用戶接口應用,表現層經常是代碼重要的部分。

  2. 業務邏輯層——完成業務邏輯的應用核心。

  3. 數據訪問層——訪問基礎元素,例如數據庫和消息代理。

在表現層與業務數據訪問層之間有清晰的隔離。業務層有由若干方面組成的粗粒度(coarse-grained)的 API,內部包含了業務邏輯元素。API 是可以將單體業務分割成兩個更小應用的天然邊界,其中一個應用是表現層,另外一個是業務和數據訪問邏輯。分割后,表現邏輯應用遠程調用業務邏輯應用,下圖表示遷移前后架構不同:

單體應用這么分割有兩個好處,其一使得應用兩部分開發、部署和擴展各自獨立,特別地,允許表現層開發者在用戶界面上快速選擇,進行 A/B 測試;其二,使得一些遠程 API 可以被微服務調用。

然而,這種策略只是部分的解決方案。很可能應用的兩部分之一或者全部都是不可管理的,因此需要使用第三種策略來消除剩余的單體架構。

策略 3——抽出服務

第三種遷移策略就是從單體應用中抽取出某些模塊成為獨立微服務。每當抽取一個模塊變成微服務,單體應用就變簡單一些;一旦轉換足夠多的模塊,單體應用本身已經不成為問題了,要么消失了,要么簡單到成為一個服務。

排序那個模塊應該被轉成微服務

一個巨大的復雜單體應用由成十上百個模塊構成,每個都是被抽取對象。決定第一個被抽取模塊一般都是挑戰,一般最好是從最容易抽取的模塊開始,這會讓開發者積累足夠經驗,這些經驗可以為后續模塊化工作帶來巨大好處。

轉換模塊成為微服務一般很耗費時間,一般可以根據獲益程度來排序,一般從經常變化模塊開始會獲益最大。一旦轉換一個模塊為微服務,就可以將其開發部署成獨立模塊,從而加速開發進程。

將資源消耗大戶先抽取出來也是排序標準之一。例如,將內存數據庫抽取出來成為一個微服務會非常有用,可以將其部署在大內存主機上。同樣的,將對計算資源很敏感的算法應用抽取出來也是非常有益的,這種服務可以被部署在有很多 CPU 的主機上。通過將資源消耗模塊轉換成微服務,可以使得應用易于擴展。

查找現有粗粒度邊界來決定哪個模塊應該被抽取,也是很有益的,這使得移植工作更容易和簡單。例如,只與其他應用異步同步消息的模塊就是一個明顯邊界,可以很簡單容易地將其轉換為微服務。

如何抽取模塊

抽取模塊第一步就是定義好模塊和單體應用之間粗粒度接口,由于單體應用需要微服務的數據,反之亦然,因此更像是一個雙向 API。因為必須在負責依賴關系和細粒度接口模式之間做好平衡,因此開發這種 API 很有挑戰性,尤其對使用域模型模式的業務邏輯層來說更具有挑戰,因此經常需要改變代碼來解決依賴性問題,如圖所示:

一旦完成粗粒度接口,也就將此模塊轉換成獨立微服務。為了實現,必須寫代碼使得單體應用和微服務之間通過使用進程間通信(IPC)機制的 API 來交換信息。如圖所示遷移前后對比:

此例中,正在使用 Y 模塊的 Z 模塊是備選抽取模塊,其元素正在被 X 模塊使用,遷移第一步就是定義一套粗粒度 APIs,第一個接口應該是被 X 模塊使用的內部接口,用于激活 Z 模塊;第二個接口是被 Z 模塊使用的外部接口,用于激活 Y 模塊。

遷移第二步就是將模塊轉換成獨立服務。內部和外部接口都使用基于 IPC 機制的代碼,一般都會將 Z 模塊整合成一個微服務基礎框架,來出來割接過程中的問題,例如服務發現。

抽取完模塊,也就可以開發、部署和擴展另外一個服務,此服務獨立于單體應用和其它服務。可以從頭寫代碼實現服務;這種情況下,將服務和單體應用整合的 API 代碼成為容災層,在兩種域模型之間進行翻譯工作。每抽取一個服務,就朝著微服務方向前進一步。隨著時間推移,單體應用將會越來越簡單,用戶就可以增加更多獨立的微服務。 將現有應用遷移成微服務架構的現代化應用,不應該通過從頭重寫代碼方式實現,相反,應該通過逐步遷移的方式。有三種策略可以考慮:將新功能以微服務方式實現;將表現層與業務數據訪問層分離;將現存模塊抽取變成微服務。隨著時間推移,微服務數量會增加,開發團隊的彈性和效率將會大大增加。

最后

需要的朋友可以點擊:戳這里免費領取

還有Java核心知識點+全套架構師學習資料和視頻+一線大廠面試寶典+面試簡歷模板可以領取+阿里美團網易騰訊小米愛奇藝快手嗶哩嗶哩面試題+Spring源碼合集+Java架構實戰電子書+2021年最新大廠面試題。
試寶典+面試簡歷模板可以領取+阿里美團網易騰訊小米愛奇藝快手嗶哩嗶哩面試題+Spring源碼合集+Java架構實戰電子書+2021年最新大廠面試題。
在這里插入圖片描述

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

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

相關文章

MATLAB小波軟硬閾值去噪代碼,matlab編程小波變換進行圖像去噪處理,包括各種軟硬閾值的選取函數...

內容:matlab編程小波變換進行圖像去噪處理,包括各種軟硬閾值的選取函數,%小波閾值去噪clear allclc;fimread(graylena.bmp);fdouble(f);ssize(f);rimnoise2(gaussian,s(1),s(2),0,20);%填加高斯白噪聲fnoisyfr;%對圖像進行三層小波分解[c,s]w…

java生成二維碼讀取二維碼,面試真題解析

拼多多一面 首先自我介紹 參加過哪些項目 并發編程三要素? 實現可見性的方法有哪些? 多線程的價值? 創建線程的三種方式的對比? 畫出線程的狀態流轉圖 常用的并發工具類有哪些? CyclicBarrier 和 CountDownLatch 的區…

iis 7.5 php 防止跨站,iis安全---防范XSS跨站式腳本攻擊

iis安全---防范XSS跨站式腳本攻擊網站要怎么防范常見的XSS跨站式腳本攻擊呢,我們先從XSS跨站式腳本攻擊的原理來說起。網站遭受XSS跨站式腳本攻擊的基本原理1.本地利用漏洞,這種漏洞存在于頁面中客戶端腳本自身。其攻擊過程如下所示:A給B發送…

Java春招實習面試經驗匯總,面試篇

Part1 SpringIOC 學習Spring最重要的無非是Spring IOC以及Spring AOP,首先咱們把Spring IOC吃透,以下內容將截圖展示。 Spring IOC主要學習內容分為以下7點: ①Spring框架 ②Spring lOC容器Bean對象實例化模擬實現 ③Spring IOC容器Bean對象…

Java最新大廠面試真題總結,瞬間高大上了!

什么是分布式鎖?在回答這個問題之前,我們先回答一下什么是鎖。 普通的鎖,即在單機多線程環境下,當多個線程需要訪問同一個變量或代碼片段時,被訪問的變量或代碼片段叫做臨界區域,我們需要控制線程一個一個…

php列表框怎么用,PHP+Mysql+jQuery查詢和列表框選擇操作實例講解

這篇文章主要介紹了PHPMysqljQuery查詢和列表框選擇操作實現過程,需要的朋友可以參考下本文講解如何通過ajax查詢mysql數據,并將返回的數據顯示在待選列表中,再通過選擇最終將選項加入到已選區,可以用在許多后臺管理系統中。本文列…

Java未來路在何方?圖文詳解!

Spring Security觀后感——手繪思維腦(供參考) Spring Security手繪思維腦圖 手繪的思維導圖,是我自己根據自身的情況讀完這套阿里出品的Spring Security王者晉級文檔之后所繪的,相當于是一個知識的總結與梳理,我將其分為***“核心組件”與“…

matlab怎讓3d旋轉,如何在MATLAB中平滑旋轉3D繪圖?

我會說這是你正在繪制的大量積分導致經濟放緩.一個選項是縮減采樣..也可以使用較低級別的功能進行繪制(檢查this related post以獲得plot3 / scatter3 / line性能的比較).考慮以下針對速度優化的動畫:[X Y Z] sphere(64);X X(:); Y Y(:); Z Z(:);%# set-up figu…

Java未來路在何方?挑戰大廠重燃激情!

字節跳動一面: 自我介紹,主要講講做了什么和擅長什么看你項目做Spring比較多, 問一下Spring相關的東西, IoC是什么概念?Bean的默認作用范圍是什么?其他的作用范圍?索引是什么概念有什么作用? MySQL里主要有哪些索弓|結構?哈希索弓和B樹索引比較?平常用線程主…

php如何修改文件名,php修改文件名的實現方法_后端開發

c是什么意思_后端開發C是C語言的繼承,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型為特點的基于對象的程序設計,還可以進行以繼承和多態為特點的面向對象的程序設計。php修改文件名的實現方法在php中可以使用rename函數修改文…

Java架構師必備框架技能核心筆記,工作感悟

01 kafka入門 1.1 什么是kafka 1.2 kafka中的基本概念 1.2.1 消息和批次 1.2.2 主題和分區 1.2.3 生產者和消費者、偏移量、消費者群組 1.2.4 Broker和集群 1.2.5 保留消息 02 為什么選擇kafka 2.1 優點 2.2 常見場景 2.2.1 活動跟蹤 2.2.2 傳遞消息 2.2.3 收集指標和日志 2.2.…

java將某個數按比例分配應用題,按比例分配應用題

按比例分配(一)1、甲乙兩數的和是72,甲乙兩數的比是4:5,甲、乙兩數各是多少?。2、一個等腰三角形,頂角和一個底角的比是1:4,這個三角形兩個底角各是多少。3、六(1)班有女生24人,女生和男生人數的比是4:5&am…

Java架構師必備框架技能核心筆記,附相關架構及資料

技術焦慮 現在的技術圈子很火熱,任何技術點,任何知識,只要你肯搜索,都能找到資料。但是現在技術圈確實有一個不好的地方,就是販賣焦慮。這種販賣焦慮的點并不在于形式,而是一種普遍的心態。特別是對于那種…

php智能裁剪黑邊,圖片裁剪去除黑邊

前言從瀏覽器保存的圖片有透明度,但是python打開其透明通道是黑色的,因此我利用python的OpenCV模塊去除了其上下左右的黑邊。效果展示計算機中效果python打開效果python裁剪后效果代碼import cv2def change_size(read_file):image cv2.imread(read_file…

Java架構師教你如何突破瓶頸,持續更新中

1、上下文切換 上下文定義 cpu發生進程或者線程切換時,所依賴的數據集合,比如一個函數有外部變量,函數運行時,必須獲取外部變量,這些變量值的集合就是上下文。 引發問題 對于CPU密集型任務,多線程處理會…

matlab dwt 多層分解,利用matlab對圖片進行多層小波分解 會的加QQ511607771 加過作圖之后積分加倍送...

利用matlab對圖片進行多層小波分解 會的加QQ511607771 加過作圖之后積分加倍送mip版 關注:96 答案:2 懸賞:0解決時間 2021-01-23 13:02已解決2021-01-23 04:23(Haar小波、Daubechies小波、Coiflets小波和Symlets小波) 三層分解下的去噪圖可以直接發信息15836900853 立馬上線…

Java校招面試經驗匯總,最終入職阿里

一面 自我介紹項目中的監控:那個監控指標常見的有哪些?微服務涉及到的技術以及需要注意的問題有哪些?注冊中心你了解了哪些?consul 的可靠性你了解嗎?consul 的機制你有沒有具體深入過?有沒有和其他的注冊…

matlab確定位置,Hurlin 的PSTR模型包,怎樣確定位置參數個數

http://www.runmycode.org/companion/view/2564我用的是這個包1.怎樣確定位置參數個數?2. 門限變量也是解釋變量時,結果中(結果如下)的warning 是什么意思?3. 這個包中是否能夠把門限變量也作為解釋變量?我跑出的結果是這樣的&…

Java校招面試經驗匯總,看完直接跪服

美團技術一面20分鐘 晚7點,因為想到下周一才面試,我剛準備出去打個羽毛球,北京的電話就來了。面試官各種抱歉,說開會拖延了。 1、自我介紹 說了很多遍了,很流暢撿重點介紹完。 2、問我數據結構算法好不好 挺好的&…

nginx alias php 404,Nginx配置靜態服務器以及404問題解決,root和alias的區別

最近在使用Nginx配置一個圖片靜態服務器來通過http請求訪問圖片,在配置的時候,發現遇到訪問有404的問題,結果發現是在配置路徑的時候,和路徑屬性是root還是alias的有關。nginx配置文件server {listen 88;server_name localhost;#c…