日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java后端架构开荒实战(一)——基础设施

發布時間:2025/3/19 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java后端架构开荒实战(一)——基础设施 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java后端架構開荒實戰(一)——基礎設施

一、前言
之前的文章有講過后端架構演進系列,這個系列文章還是以一個經典的電商系統為例子,來講講Robben是如何在實際開發中一步一步打造出一個大型的后端架構的。本系列文章更多的一些實踐操作方面的操作和選型。

工欲善其事,必先利其器。在業務代碼開發前,讓我們先做好相關的基礎設置建設。

二、云平臺
云服務的選擇有阿里云、騰訊云、華為云等等。阿里云是老牌云服務商了,產品配套齊全,文檔豐富,價格也是相應的貴一點。騰訊云算是后起之秀,有騰訊背書,價格比阿里云便宜點。華為云沒用過就不評價。

運行環境可以選擇jar包直接運行在Linux環境上,也可以選擇使用Kubernets進行部署。

我們這里云服務商選擇騰訊云,然后平臺選擇Kubernetes去管理我們整個后端應用周期。

三、代碼管理
關于Git和Svn現在基本都是選擇Git了吧。可以使用私有的GitLab,或者使用云服務的Git倉庫也是一個不錯的選擇。大部分公司為了代碼安全考慮會選擇自建倉庫。

自建GitLab參考: TKE容器集群中部署GitLab服務器
云服務騰訊云coding:

本系列文章使用coding的代碼倉庫來管理。

四、文件服務
這里把文件服務單獨拎出來,因為文件存儲的安全和維護是比較重要和獨立的。

自建分布式文件服務fastdfs
fastdfs是開源的分布式文件系統,充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等指標。一般用在圖片和音頻這種中小文件存儲,有自建需求的團隊可以考慮。

使用云服務商提供的文件服務
這種就沒什么好說的,像阿里云OSS,七牛云等等都可以。

綜合成本使用考慮本系列文章使用七牛云的文件服務。

五、統一依賴管理Maven
隨著依賴的不斷增多,內部服務的不斷產生。統一的版本管理就顯得十分重要。

Maven私服
用來統一管理依賴和內部二方庫。可以選擇自建,也可以用云服務的。

自建Nexus: 省略了,網上一搜以大把。

云服務:Coding的制品庫管理。

maven setting中指定

<profile><id>robbendev-robbendev-robbendev</id><activation><activeByDefault>true</activeByDefault></activation><repositories><repository><id>robbendev-robbendev-robbendev</id><name>robbendev</name><url>https://robbendev-maven.pkg.coding.net/repository/robbendev/robbendev/</url><releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories> </profile>

統一依賴項目
統一依賴項目結構

robbendev-maven ├── pom.xml ├── robbendev-bom │ ├── pom.xml ├── robbendev-dependencies │ ├── pom.xml └── robbendev-parent├── pom.xml

看下具體代碼

robbendev.maven/pom.xml主要是配置私服的地址

<groupId>com.robbendev</groupId> <artifactId>robbendev-maven</artifactId> <version>1.0-SNAPSHOT</version><modules><module>robbendev-bom</module><module>robbendev-dependencies</module><module>robbendev-parent</module> </modules><packaging>pom</packaging><name>robbendev-maven</name> <description>robbendev maven nexus 基礎配置</description><!-- omitted xml --> <distributionManagement><repository><!--必須與 settings.xml 的 id 一致--><id>robbendev-robbendev-robbendev</id><name>robbendev</name><url>https://robbendev-maven.pkg.coding.net/repository/robbendev/robbendev/</url></repository> </distributionManagement>

robbendev-maven/robbendev-bom/pom.xml主要是統一內部二方庫的依賴版本

<parent><artifactId>robbendev-maven</artifactId><groupId>com.robbendev</groupId><version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion><artifactId>robbendev-bom</artifactId> <name>robbendev-bom</name> <description>robbendev二方庫依賴配置</description> <packaging>pom</packaging><properties><robbendev-common.version>1.0-SNAPSHOT</robbendev-common.version> </properties><dependencyManagement><dependencies><dependency><groupId>com.robbendev</groupId><artifactId>robbdendev-common</artifactId><version>${robbendev-common.version}</version></dependency></dependencies> </dependencyManagement>

robbendev-maven/robbendev-dependencies/pom.xml主要是統一外部三方庫的依賴版本

<parent><artifactId>robbendev-maven</artifactId><groupId>com.robbendev</groupId><version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion><artifactId>robbendev-dependencies</artifactId> <name>robbendev-dependencies</name> <description>robbendev三方庫依賴配置</description> <packaging>pom</packaging><properties><spring-cloud.version>Hoxton.SR7</spring-cloud.version><spring-boot.version>2.3.3.RELEASE</spring-boot.version>... </properties><dependencyManagement><dependencies><!--spring cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--spring boot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency>...</dependencies></dependencyManagement>

robbendev-maven/robbendev-parent/pom.xml聚合二方庫和三方庫依賴配置的pom作為所有項目的父pom文件

<properties><robbendev-bom.version>1.0-SNAPSHOT</robbendev-bom.version><robbendev-dependencies.version>1.0-SNAPSHOT</robbendev-dependencies.version></properties><dependencyManagement><dependencies><!--二方庫依賴管理--><dependency><groupId>com.robbendev</groupId><artifactId>robbendev-bom</artifactId><version>${robbendev-bom.version}</version><scope>import</scope><type>pom</type></dependency><!--一方庫依賴管理--><dependency><groupId>com.robbendev</groupId><artifactId>robbendev-dependencies</artifactId><version>${robbendev-dependencies.version}</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement>

這樣我們的依賴管理就完成了,新的項目只用繼承

<parent><groupId>com.robbendev</groupId><artifactId>robbendev-parent</artifactId><version>1.0-SNAPSHOT</version> </parent>

六、自動集成CI/CD

自定集成將開發人員從繁雜的打包發布過程解脫出來,能專注于業務代碼的開發。是團隊提效的有效方法。

二方庫的發布
以robbendev-maven項目為例子,我們在每次依賴版本有變更的時候,如何快速推送Maven私服呢? 以本項目為例業內有一下常見方案

gitlab-ci 如果使用的gitlab倉庫的話可以考慮這個方案。
自建jenkins 如果有自己的運維團隊,可以考慮使用自建的運維平臺。
使用云服務
這里簡單介紹下筆者使用的coding持續繼承,這個也是完全兼容jenkins的。 基本上也是在控制臺配置好:

可以使用流程配置,也可以使用倉庫中的Jenkinsfile

... stage('編譯') {steps {sh 'mvn clean package'} } stage('推送到 CODING Maven 制品庫') {steps {echo '發布中...'sh 'mvn deploy -DskipTests'echo '發布完成.'} } }

打包機器由于要配置maven的setting文件,所以選擇自定義節點構建。

選擇適合自己的觸發方式,現在提交代碼就可以看到觸發了自動集成和部署:

服務的發布
以一個最基礎的SpringBoot的程序為例子 在騰訊云鏡像倉庫獲取賬號密碼后 在maven setting中配置

<server><id>robbendev-docker</id><username>100000000000</username><password>xxxxxxxxxx</password><configuration><email>xxxxxxx</email></configuration> </server>

應用代碼結構

├── pom.xml ├── src │ ├── main │ │ ├── docker │ │ │ └── Dockerfile │ │ ├── java │ └── test

pom.xml使用docker插件,注意這里的serveId對應setting.xml中的配置,maven.build.timestamp.format屬性一定要指定。imageName的含義是使用時間戳作為版本號。

<properties><maven.build.timestamp.format>yyyyMMddHHmm</maven.build.timestamp.format>... </properties><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><skipDockerBuild>false</skipDockerBuild><imageName>ccr.ccs.tencentyun.com/robbendev.hello-docker/robbendev-hello-docker:${maven.build.timestamp}</imageName><dockerDirectory>src/main/docker</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources><serverId>my-docker</serverId></configuration> </plugin>

看一下jenkins關鍵代碼

stage('編譯打包部署') {steps {sh '''git checkout mastergit pullmvn clean package docker:build -DpushImage'''} }

這樣在提交代碼的時候就可以自動打包鏡像推送到騰訊云鏡像倉庫,然后通過鏡像觸發器可以實現自動發布。

七、小結
這樣一套組合拳下來,Robben終于可以開始好好開發了。接下來會介紹Robben是如何從單體應用到集群再到微服務進行開發的。

繼續支持Remi醬哦~

文章來源:https://www.tuicool.com/articles/QZJzamF

總結

以上是生活随笔為你收集整理的Java后端架构开荒实战(一)——基础设施的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。