日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java從單體架構升級到微服務要注意的一些問題

瀏覽:28日期:2022-08-14 08:03:45
前言

由于近年來的移動端的發展和 2C模式 的紅利,一些在風口的企業的業務得到爆發式增長。從架構層面來說,業務驅動技術的變革,所以微服務架構的概念得到很多企業的青睞,因為可以解決服務的大流量和高并發以及穩定性的要求。

但是任何架構設計不是一蹴而就的,不能從起步就開始使用微服務,一般都是先通過單體架構來快速實現需求和搶占市場,然后再迭代式擴展。不能一口氣吃個胖子。

這幾年自己有經歷從單體到微服務的架構演變,也有直接參與到已經落地的微服務架構的項目中。見過好的架構設計,也見過一些孬的設計。好的架構設計,代碼結構優雅,分層清晰,業務邊界劃分明朗,業務開發人員職責清晰。不好的設計就會導致代碼混亂難以維護,對新需求無法快速應變,開發人員容易在補丁上打補丁,最后造成積重難返不得不重構。

架構師需要從業務層面和未來業務發展有個全面的規劃,讓架構高可用,易擴展,靈活易使用,隱藏其復雜性。好的架構會讓下面的業務開發人員按照既定的模式“傻瓜式”編程。

既然第一步是單體架構,那么好的單體架構設計,為我們后期的微服務拆分會有事半功倍的效果。避免重復勞動和過多的重寫。我們可以從這些方面進行一些有效的設計。

劃清業務邊界

如果對未來的架構有微服務的考慮,那么在單體架構的時候就需要理清業務邊界的問題,常見的簡單劃分就是以業務區分,例如:用戶,商品,訂單,支付,權限等等,具體的拆分程度可根據自身業務量和需要做劃分。

當前流行的 DDD(領域驅動設計)可以作為一個指導原則,但是 DDD 比較偏向于理論,需要執行人員有良好的專業能力才能實施的比較好。

代碼層次結構

業務區分好之后,就是項目代碼模塊的設計。在代碼層我們需要根據MVC的模式,建議的代碼設計層次如下:

├─demo-common│ │ demo-common.iml│ │ pom.xml│ │ │ └─src│ ├─main│ │ ├─java│ │ └─resources│ └─test│ └─java├─demo-dao│ │ demo-dao.iml│ │ pom.xml│ │ │ └─src│ ├─main│ │ ├─java│ │ └─resources│ └─test│ └─java├─demo-service│ │ demo-service.iml│ │ pom.xml│ │ │ └─src│ ├─main│ │ ├─java│ │ └─resources│ └─test│ └─java└─demo-web │ demo-web.iml │ pom.xml │ └─src├─main│ ├─java│ └─resources└─test └─java

主要包含4個 module 模塊

demo-common:基礎模塊,枚舉,常亮類,工具類,配置類。 demo-dao:Dao層,mapper接口,mapper.xml。 demo-service:服務接口提供層,業務service接口。 demo-web:web層,Controller類,服務接口,與外部進行交互。

各模塊之間的依賴關系為:

Java從單體架構升級到微服務要注意的一些問題

項目 Module 模塊設計完成之后,每個模塊的內部 package 包如何設計呢?通常有兩種劃分模式:根據業務模塊然后內部按MVC劃分,根據MVC模式然后內部按業務劃分。

1、根據業務模塊劃分,就是將每個業務模塊作為一個 package,然后每個package里面有自己的 MVC,這樣就做到業務模塊的隔離。

Java從單體架構升級到微服務要注意的一些問題

2、根據 MVC 模式劃分,先根據 MVC模式劃分不同的包,service,serviceImpl,dto等,然后再是各個業務自己的模型和服務接口。

Java從單體架構升級到微服務要注意的一些問題

針對上述的兩個劃分模式,個人的選擇是根據業務模式劃分,這樣的包設計與后期微服務拆分有良好的匹配度,拆分的時候只需要將每個業務包下的代碼 Copy 到新的微服務中就行了,易遷移變動小。每個模塊中對不同的業務通過 package 包名進行劃分,例如:com.example.jajian.service.order、com.example.jajian.service.user等。

└─src ├─main │ ├─java │ │ └─com │ │ └─example │ │ └─jajian │ │ ├─common │ │ │ BaserService.java │ │ │ │ │ └─service │ │ ├─order │ │ │ ├─dto │ │ │ │ OrderDto.java │ │ │ │ │ │ │ └─service │ │ │ │ OrderService.java │ │ │ │ │ │ │ └─impl │ │ │ OrderServiceImpl.java │ │ │ │ │ ├─pay │ │ │ ├─dto │ │ │ │ PayDto.java │ │ │ │ │ │ │ └─service │ │ │ │ PayService.java │ │ │ │ │ │ │ └─impl │ │ │ PayServiceImpl.java │ │ │ │ │ └─user │ │ ├─dto │ │ │ UserDto.java │ │ │ │ │ └─service │ │ │ UserService.java │ │ │ │ │ └─impl │ │ UserServiceImpl.java │ │ │ └─resources └─test└─java

這樣劃分有什么好處?我們單體架構的時候這樣開發,當需要拆分成微服務的時候就可以直接將業務包拆分出去,因為每個業務包里面就已經包含了所有的當前業務的關聯業務類。

避免多邊界業務的關聯查詢

單表關聯由于業務需要而且簡單方便易使用,所以多表關聯查詢在單體服務中是普遍存在的,如果我們后期不需要做服務拆分則可以不需要考慮這方面的限制。

但是如果后期有微服務的規劃,那么單體服務的時候如果沒有做這個方面的限制,mybatis 的 mapper.xml中有過多的多表關聯查詢,這些關聯查詢會嚴重影響服務拆分的進度和復雜度。

如果同屬于一個業務領域則可以使用關聯查詢,而那些微服務拆分后屬于不同領域的業務則應避免使用多表關聯查詢,因為不同的業務領域后期會被隔離拆分到不同的服務當中,即數據庫表都是分布在不同的服務器上,所有服務之間都是通過RPC方式進行通信,關聯查詢這時是無法處理的。

Controller層盡量不做業務邏輯處理

常看到很多 coder 會在Controller 層做一些業務處理,個人認為這是很不規范的。Controller層是控制層,是和前端進行數據轉換的,這里我們應該只做請求的接受和返回,也無需做一些異常的try...catch...的捕獲,異常可以通過全局通用攔截器統一進行攔截然后返回給前端異常提示語,提升代碼的簡潔性。

所有的參數校驗也放到 service層,因為如果服務內部調用也可以使用提高代碼的共用度。當然分層領域模型最好也能區分開,

DO(Data Object):此對象與數據庫表結構--對應,通過DAO層向上傳輸數據源對象。 DTO(Date Transfer Object):數據傳輸對象,service或Manager向外傳輸的對象。 VO(View Object):顯示層的對象,通常是Web向模板渲染引擎層傳輸的對象。

這樣區分開的好處是,當你需要對展示層數據進行特殊定制化的時候可以靈活變通,例如針對用戶隱私信息身份證號,手機號碼脫敏處理,或者用戶ID加密顯示等。

最后就是統一通用返回類了,通過這種格式的封裝我們將數據格式進行全局格式化,這里的狀態碼可以自己設計的更詳細一點。

public class CommonResult<T> { public static final String CODE_SUCCESS = '0'; public static final String CODE_FAILED = '9999'; private String code; private T data; private String msg; private CommonResult(String code, T data, String msg) {this.code = code;this.data = data;this.msg = msg; } public boolean isSuccess() {return CODE_SUCCESS.equals(code); } public static <T> CommonResult<T> success() {return new CommonResult<>(CODE_SUCCESS, null, null); } public static <T> CommonResult<T> success(T data) {return new CommonResult<>(CODE_SUCCESS, data, null); } public static <T> CommonResult<T> success(T data, String msg) {return new CommonResult<>(CODE_SUCCESS, data, msg); } public static <T> CommonResult<T> failed() {return new CommonResult<>(CODE_FAILED, null, null); } public static <T> CommonResult<T> failed(String errorCode, String msg) {return new CommonResult<>(errorCode, null, msg); } public static <T> CommonResult<T> failed(String msg) {return new CommonResult<>(CODE_FAILED, null, msg); } public static <T> CommonResult<T> failed(T data, String msg) {return new CommonResult<>(CODE_FAILED, data, msg); } public static <T> CommonResult<T> failed(String errorCode, T data, String msg) {return new CommonResult<>(errorCode, data, msg); } // 省略 setter、getter}后記

以上只是列舉了單體服務未來規劃做微服務時需要注意的一部分簡單內容,每個人在做單體架構拆分成微服務的時候都會踩到各種各樣的坑,這些坑成了我們的開發經驗,有了這些坑就會形成注意點,在我們下次開發時就會具有指導意義。也許我們程序員就是在踩坑和填坑的過程中成長壯大起來的。

以上就是Java從單體架構升級到微服務要注意的一些問題的詳細內容,更多關于Java的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩欧美一区二区三区免费看| 精品国产亚洲一区二区三区大结局 | 中文一区在线| 亚洲五月婷婷| 亚洲激情二区| 亚洲精品在线国产| 国产精品香蕉| 国产精品porn| 日韩国产网站| 国产免费成人| 国产午夜久久av| 丝袜诱惑一区二区| 亚洲午夜精品久久久久久app| 欧美日韩视频| 亚洲另类黄色| 欧美黑人巨大videos精品| 天堂√中文最新版在线| 最新亚洲一区| 久久国产三级精品| 91视频一区| 红桃视频国产精品| 欧美一级网站| 国产一区二区三区视频在线| 五月婷婷六月综合| 91九色综合| 中文一区一区三区高中清不卡免费| 波多野结衣一区| 日韩精品一区二区三区中文字幕| 麻豆一区二区三| 亚洲视频综合| 国产欧美日韩在线观看视频 | 69堂免费精品视频在线播放| 久久精品日韩欧美| 亚洲成人精品| 日韩精品第一| 久久久国产精品一区二区中文| 视频一区二区中文字幕| 久久久91麻豆精品国产一区| 欧美日韩精品一本二本三本| 国产美女亚洲精品7777| 亚洲韩日在线| 国产精品地址| 韩国一区二区三区视频| 视频一区中文字幕国产| 日产精品一区二区| 蜜臀a∨国产成人精品| 四虎8848精品成人免费网站| 三级欧美韩日大片在线看| 欧美黑人做爰爽爽爽| 亚洲欧洲午夜| 美女国产一区二区三区| 日韩视频精品在线观看| 久久精品五月| 一区二区三区四区在线观看国产日韩| 精品不卡一区| 日韩精品91亚洲二区在线观看| 欧美成人基地 | 97精品资源在线观看| 伊人久久大香线蕉av不卡| 久久不见久久见中文字幕免费| 国产女优一区| 日韩精品免费一区二区在线观看| 国产精品观看| 亚洲精品字幕| 免费精品国产的网站免费观看| 你懂的国产精品| 日本久久一区| 亚洲专区视频| 伊人久久大香线蕉av超碰演员| 欧美成人a交片免费看| 久久免费精品| 国产伦乱精品| 国产欧美另类| 日韩高清不卡在线| 视频一区二区三区中文字幕| 亚洲美洲欧洲综合国产一区 | 久久精品国产网站| 国产一区 二区| 日韩国产在线观看| 天堂av一区| 亚洲18在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久一区二区三区喷水| 欧美成人基地| 日韩一区二区三区免费播放| 麻豆网站免费在线观看| 日本一区二区高清不卡| 欧美xxxx中国| 日韩大片在线| 91精品国产91久久久久久黑人| 成人一二三区| 天堂√中文最新版在线| av高清不卡| 久久久久国产精品一区二区| 999久久久精品国产| 91精品蜜臀一区二区三区在线| 免费污视频在线一区| 色爱av综合网| 欧美另类综合| 欧美日韩免费观看一区=区三区| 尤物精品在线| 91精品精品| 欧美亚洲福利| 蜜桃tv一区二区三区| 国产激情综合| 欧美女激情福利| 国产精品啊v在线| 伊人成人在线视频| 国产一区丝袜| 国产美女撒尿一区二区| 欧美国产先锋| 精品久久国产一区| 久久久成人网| 在线精品视频一区| 国产人成精品一区二区三| 麻豆国产精品| 99热国内精品| 日本大胆欧美人术艺术动态| 午夜电影一区| 久久精品女人| 亚洲精品88| 亚洲欧美日韩在线观看a三区| 日本aⅴ精品一区二区三区| 国产一区二区三区久久 | 久久久久美女| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产日本精品| 日韩精品欧美| 日韩精品一级| 久久久男人天堂| 石原莉奈一区二区三区在线观看| 欧美日韩a区| 黑人精品一区| 亚洲色图国产| 日韩理论视频| 久久xxxx精品视频| 国产精品麻豆成人av电影艾秋| 美女网站视频一区| 免费在线观看日韩欧美| 国产精品magnet| 亚洲二区三区不卡| 国产精品亚洲欧美一级在线| 久久中文视频| 国产欧美一区二区三区国产幕精品| 色爱综合av| 久久国产麻豆精品| 伊人久久大香线蕉av不卡| 亚洲精品在线a| 国产美女高潮在线| 日本一区二区中文字幕| 国产在线观看www| 亚洲精品观看| 亚洲一级二级| 国产精品s色| 蜜臀久久久99精品久久久久久| 福利一区在线| 欧美亚洲免费| 久久亚洲风情| 四虎884aa成人精品最新| 国产香蕉精品| 视频一区国产视频| 日韩一区二区三区在线免费观看| 亚洲va久久久噜噜噜久久| 久久黄色影院| 荡女精品导航| 国产精品视频一区二区三区四蜜臂| 99亚洲视频| 四虎4545www国产精品 | 亚洲精品极品| 欧美亚洲国产一区| 在线人成日本视频| 国产精品nxnn| 日本视频一区二区| 久久午夜精品| 日韩中文在线播放| 麻豆视频观看网址久久| 午夜精品影视国产一区在线麻豆| 婷婷六月综合| 色88888久久久久久影院| 精品99在线| 国产精品va视频| 欧美在线首页| 亚洲aa在线| 久久亚洲色图| 欧美在线亚洲| 婷婷综合网站| 欧美二区视频| 伊人精品一区| 激情综合自拍| 99热精品久久| 999久久久国产精品| 快播电影网址老女人久久| 国产成人精品三级高清久久91| 嫩草伊人久久精品少妇av杨幂| 国产精品一在线观看| 国产日韩欧美一区在线| 国产伦一区二区三区| 国产欧美三级| 麻豆中文一区二区| 嫩草伊人久久精品少妇av杨幂|