文章很長,且持續(xù)更新,建議收藏起來,慢慢讀!瘋狂創(chuàng)客圈總目錄 博客園版為您奉上珍貴的學(xué)習(xí)資源 :
免費(fèi)贈(zèng)送 :《尼恩Java面試寶典》持續(xù)更新+ 史上最全 + 面試必備 2000頁+ 面試必備 + 大廠必備 +漲薪必備免費(fèi)贈(zèng)送 :《尼恩技術(shù)圣經(jīng)+高并發(fā)系列PDF》,幫你 實(shí)現(xiàn)技術(shù)自由,完成職業(yè)升級, 薪酬猛漲!加尼恩免費(fèi)領(lǐng)免費(fèi)贈(zèng)送 經(jīng)典圖書:《Java高并發(fā)核心編程(卷1)加強(qiáng)版》面試必備 + 大廠必備 +漲薪必備 加尼恩免費(fèi)領(lǐng)免費(fèi)贈(zèng)送 經(jīng)典圖書:《Java高并發(fā)核心編程(卷2)加強(qiáng)版》面試必備 + 大廠必備 +漲薪必備 加尼恩免費(fèi)領(lǐng)免費(fèi)贈(zèng)送 經(jīng)典圖書:《Java高并發(fā)核心編程(卷3)加強(qiáng)版》面試必備 + 大廠必備 +漲薪必備 加尼恩免費(fèi)領(lǐng)
免費(fèi)贈(zèng)送 資源寶庫: Java 必備 百度網(wǎng)盤資源大合集 價(jià)值>10000元 加尼恩領(lǐng)取
(資料圖片僅供參考)
在40歲老架構(gòu)師尼恩的讀者社群(50+)中,大量的小伙伴是架構(gòu)師、高級開發(fā),大家都有豐富的開發(fā)、架構(gòu)經(jīng)驗(yàn)。
在開發(fā)過程中,一般情況下,大家都是用現(xiàn)有的開發(fā)框架。
導(dǎo)致的一個(gè)嚴(yán)重問題是:很少有小伙伴能從0開始 搭建一套SpringCloud微服務(wù)腳手架(SpringCloud+ Dubbo + Docker + Jenkins)。然而,零基礎(chǔ) 搭建一套SpringCloud微服務(wù)腳手架(SpringCloud+ Dubbo + Docker + Jenkins),這個(gè)實(shí)操對大家來說,至關(guān)重要。
尼恩一直在找一個(gè)契機(jī),給大家梳理一個(gè)《零基礎(chǔ) 搭建一套SpringCloud微服務(wù)腳手架》 博客。提升大家的實(shí)操能力,動(dòng)手能力。
直到今天、契機(jī)終于來了。
從2020年開始,尼恩一直在寫一本 微服務(wù)架構(gòu)和開發(fā)領(lǐng)域的 至尊寶典 《SpringCloud 學(xué)習(xí)圣經(jīng)》,全量的博客加起來全網(wǎng)閱讀量在100W+。在這么大訪問量的激勵(lì)下,尼恩一直在對這本 《SpringCloud 學(xué)習(xí)圣經(jīng)》進(jìn)行迭代。
而且由于尼恩一人有精力有限,在尼恩的《技術(shù)自由圈》 高并發(fā)研究社群中,不斷吸取有志之士的加入。咱們社群中一位資深的、華中科技大學(xué)碩士、有著10年開發(fā)和架構(gòu)經(jīng)驗(yàn)、并且管理一個(gè)20人團(tuán)隊(duì)的架構(gòu)師 Andy加入了咱們技術(shù)迭代、技術(shù)研究的隊(duì)伍。
他來給大家提供了一個(gè)優(yōu)秀的微服務(wù) 基礎(chǔ)架構(gòu)實(shí)操案例,《零基礎(chǔ) 搭建一套SpringCloud微服務(wù)腳手架》。
這,就是本文。當(dāng)然,本文也收入了咱們的 10W字 至尊寶典 《SpringCloud alibaba 學(xué)習(xí)圣經(jīng)》最新升級版, 《SpringCloud alibaba 學(xué)習(xí)圣經(jīng)》寶典從此升級到了V3版本。
最新的 PDF 文檔,可以通過 公眾號 技術(shù)自由圈領(lǐng)取。
微服務(wù)架構(gòu)通過將復(fù)雜的單體應(yīng)用拆分為一組小型、自治的服務(wù),為構(gòu)建靈活、可擴(kuò)展的應(yīng)用提供了一種新的方式。
微服務(wù)框架具有以下優(yōu)勢:
在構(gòu)建微服務(wù)系統(tǒng)時(shí),選擇一個(gè)適合的框架可以加速開發(fā)過程并提高系統(tǒng)的穩(wěn)定性和可維護(hù)性。
本文旨在通過手把手教程,引導(dǎo)讀者從零開始搭建一套Java微服務(wù)框架。
我們將使用Spring Cloud作為基礎(chǔ)框架,并結(jié)合Nacos作為服務(wù)注冊中心,Spring Cloud Gateway作為API網(wǎng)關(guān),以及Feign作為服務(wù)之間的通信方式。
此外,我們還將探討如何使用Docker容器化和Jenkins進(jìn)行持續(xù)集成和部署,以構(gòu)建一個(gè)完整的微服務(wù)架構(gòu)。
通過本文的學(xué)習(xí),讀者將掌握以下技能:
在開始構(gòu)建自己的Java微服務(wù)框架之前,讓我們先了解下設(shè)計(jì)微服務(wù)框架要遵守的一些基本原則。
在設(shè)計(jì)微服務(wù)框架時(shí),我們需要遵循一些基本原則,以確保系統(tǒng)的可擴(kuò)展性、可維護(hù)性和可靠性。以下是設(shè)計(jì)微服務(wù)框架的基本原則:
微服務(wù)架構(gòu)的核心概念之一是服務(wù)的解耦和獨(dú)立性。每個(gè)微服務(wù)應(yīng)該具有清晰的邊界,它們可以獨(dú)立開發(fā)、部署和擴(kuò)展。在設(shè)計(jì)框架時(shí),要保證各個(gè)微服務(wù)之間的解耦,使其可以獨(dú)立演化而不會(huì)對其他服務(wù)產(chǎn)生過多的影響。
微服務(wù)架構(gòu)的另一個(gè)重要目標(biāo)是實(shí)現(xiàn)可伸縮性和容錯(cuò)性??蚣軕?yīng)該能夠根據(jù)負(fù)載的增加或減少,自動(dòng)擴(kuò)展或縮減服務(wù)實(shí)例的數(shù)量。同時(shí),要考慮到服務(wù)的容錯(cuò)能力,當(dāng)某個(gè)服務(wù)出現(xiàn)故障時(shí),框架應(yīng)該能夠自動(dòng)將請求路由到其他可用的服務(wù)實(shí)例上。
微服務(wù)框架應(yīng)該能夠簡化開發(fā)和部署的過程。提供一套標(biāo)準(zhǔn)化的開發(fā)模式和工具鏈,使開發(fā)人員可以快速構(gòu)建和部署微服務(wù)。自動(dòng)化的構(gòu)建、測試和部署流程能夠提高開發(fā)效率,減少人為錯(cuò)誤。
框架應(yīng)該具備良好的兼容性和可擴(kuò)展性,能夠與其他技術(shù)和組件進(jìn)行集成。例如,能夠無縫地與現(xiàn)有的數(shù)據(jù)存儲、消息隊(duì)列、認(rèn)證授權(quán)系統(tǒng)等進(jìn)行整合。此外,框架本身也應(yīng)該是可擴(kuò)展的,可以根據(jù)需求靈活地添加新的功能模塊。
設(shè)計(jì)微服務(wù)框架時(shí),需要綜合考慮這些原則,并根據(jù)實(shí)際情況進(jìn)行權(quán)衡和取舍。合理的框架設(shè)計(jì)能夠提高開發(fā)效率、降低系統(tǒng)復(fù)雜度,并為微服務(wù)架構(gòu)的可持續(xù)發(fā)展打下堅(jiān)實(shí)的基礎(chǔ)。在后續(xù)的章節(jié)中,我們將深入探討如何應(yīng)用這些原則,結(jié)合Spring Cloud、Nacos、Spring Cloud Gateway、Feign等組件,構(gòu)建一套高效可靠的Java微服務(wù)框架。
在搭建微服務(wù)框架之前,我們需要配置一些基礎(chǔ)設(shè)施,包括Java開發(fā)環(huán)境、構(gòu)建工具、版本控制和集成開發(fā)環(huán)境(IDE)。下面是一些常用的工具和配置:
首先,確保你的系統(tǒng)上已經(jīng)安裝了Java開發(fā)工具包,Java開發(fā)環(huán)境包括Java Development Kit(JDK),它是開發(fā)和運(yùn)行Java應(yīng)用程序所必需的工具包。
你可以從Oracle官方網(wǎng)站或OpenJDK項(xiàng)目中下載并安裝最新版本的JDK。
安裝完成后,設(shè)置JAVA_HOME環(huán)境變量,指向JDK的安裝目錄。
D:\program\Java\jdk1.8.0_202
)。~/.bashrc或~/.bash_profile
文件,并添加以下行:export JAVA_HOME=/path/to/jdk
。然后運(yùn)行source ~/.bashrc
或source ~/.bash_profile
命令使配置生效。java -version
Apache Maven是一款流行的構(gòu)建工具,用于管理Java項(xiàng)目的依賴和構(gòu)建過程。你可以從Apache Maven官方網(wǎng)站下載Maven,并按照官方文檔的指引進(jìn)行安裝和配置。配置完成后,確保你可以在命令行中使用mvn命令。
Maven官方網(wǎng)站:https://maven.apache.org/download.cgi
C:\apache-maven-3.8.3
)。~/.bashrc或~/.bash_profile
文件,并添加以下行:export MAVEN_HOME=/path/to/maven
。然后運(yùn)行source ~/.bashrc
或source ~/.bash_profile
命令使配置生效。mvn -v
Git是一款分布式版本控制系統(tǒng),常用于協(xié)作開發(fā)和代碼管理。你可以從Git官方網(wǎng)站下載并安裝Git客戶端。安裝完成后,通過命令行驗(yàn)證Git是否正確安裝,并設(shè)置你的用戶名和郵箱。
Git官方網(wǎng)站:https://git-scm.com/downloads
git config --global user.name "Your Name"git config --global user.email "your.email@example.com"
git --version
推薦使用IntelliJ IDEA作為開發(fā)微服務(wù)的集成開發(fā)環(huán)境,IntelliJ IDEA是一款強(qiáng)大的Java集成開發(fā)環(huán)境,提供了豐富的功能和工具來開發(fā)Java應(yīng)用程序。你可以從JetBrains官方網(wǎng)站下載并安裝IntelliJ IDEA的社區(qū)版或旗艦版,一般社區(qū)版能滿足基本的開發(fā)需要。安裝完成后,打開IntelliJ IDEA,并根據(jù)需要進(jìn)行相應(yīng)的配置,例如選擇主題、安裝必要的插件等。
IntelliJ IDEA官方網(wǎng)站:https://www.jetbrains.com/idea/download/
打開IntelliJ IDEA。
在歡迎界面中選擇"Create New Project"或點(diǎn)擊菜單欄的"File" -> "New" -> "Project"。
使用 Spring Initializr 快速生成項(xiàng)目結(jié)構(gòu),
輸入名稱,存儲位置,jdk等信息,點(diǎn)擊下一步
選擇spring boot版本,選擇所需依賴,點(diǎn)擊創(chuàng)建
項(xiàng)目創(chuàng)建后,可以在pom.xml文件里繼續(xù)配置依賴和構(gòu)件項(xiàng)。
pom.xml示例如下:
org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web 2.7.11 com.h2database h2 runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import com.alibaba.cloud spring-cloud-alibaba-dependencies 2021.1 pom import ${project.artifactId} org.apache.maven.plugins maven-resources-plugin 3.0.1 UTF-8 attach-sources org.apache.maven.plugins maven-surefire-plugin 3.0.0-M5 methods 10 -Dfile.encoding=UTF-8 true org.apache.maven.plugins maven-assembly-plugin 3.3.0 jar-with-dependencies make-assembly package single org.springframework.boot spring-boot-maven-plugin repackage true -Dfile.encoding=UTF-8 true exec
以上是安裝和配置Java、Maven、Git和IntelliJ IDEA的詳細(xì)步驟。
請按照這些步驟進(jìn)行操作,確保這些工具在你的開發(fā)環(huán)境中正確安裝和配置。
接下來我們就可以繼續(xù)進(jìn)行下一步,開始搭建Java微服務(wù)框架。
在設(shè)計(jì)微服務(wù)框架時(shí),定義微服務(wù)接口和協(xié)議是非常重要的一步。
接下來以學(xué)生信息為例,結(jié)合JPA(Java Persistence API),提供相關(guān)的增刪改查的代碼示例。
JPA(Java Persistence API)是Java EE的一部分,是一種用于對象持久化的規(guī)范。
它提供了一種以面向?qū)ο蟮姆绞竭M(jìn)行數(shù)據(jù)庫操作的方式,通過簡化數(shù)據(jù)庫訪問和數(shù)據(jù)對象之間的映射,提高了開發(fā)效率。
JPA使用注解來描述實(shí)體類和數(shù)據(jù)庫表之間的映射關(guān)系,可以輕松地進(jìn)行增刪改查等常見數(shù)據(jù)庫操作。它支持各種關(guān)系型數(shù)據(jù)庫,并提供了事務(wù)管理、緩存等功能。
在我們的示例中,我們使用JPA來定義學(xué)生實(shí)體類,并通過注解來映射學(xué)生信息表的結(jié)構(gòu)。這樣,我們可以通過簡單的代碼操作來實(shí)現(xiàn)對學(xué)生信息的持久化和查詢。
在開始之前,我們需要在項(xiàng)目的pom.xml文件中添加JPA的依賴。JPA是Java Persistence API的縮寫,它是Java EE中持久化操作的標(biāo)準(zhǔn)規(guī)范,用于簡化數(shù)據(jù)庫操作和實(shí)體對象的映射關(guān)系。
請?jiān)陧?xiàng)目的pom.xml文件中添加以下依賴:
javax.persistence javax.persistence-api 2.2 org.hibernate hibernate-core 5.6.0.Final com.h2database h2 1.4.200 org.springframework.boot spring-boot-starter-data-jpa
這些依賴將啟用JPA和Hibernate作為我們的持久化框架,并使用H2數(shù)據(jù)庫作為示例數(shù)據(jù)庫。你可以根據(jù)自己的需求替換為其他數(shù)據(jù)庫。
在我們的示例中,我們將使用一個(gè)名為"student"的表來存儲學(xué)生信息。該表包含三個(gè)列:id(主鍵),name和age。
請確保在你的數(shù)據(jù)庫中創(chuàng)建了名為"student"的表,以及相應(yīng)的列。以下是表的DDL示例:
CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(50), age INT);
在項(xiàng)目中,我們需要配置application.yml文件來連接數(shù)據(jù)庫和配置JPA。
請?jiān)趕rc/main/resources目錄下創(chuàng)建一個(gè)名為application.yml的文件,并添加以下內(nèi)容:
server: port: 8180 servlet: context-path: /spring: application: name: students-service datasource: url: jdbc:h2:mem:test username: sa password: password driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create show-sql: true
以上配置使用了H2內(nèi)存數(shù)據(jù)庫,并使用了默認(rèn)的sa用戶和password密碼進(jìn)行連接。同時(shí),我們啟用了Hibernate的DDL自動(dòng)更新功能,并配置JPA顯示SQL語句。
首先,定義一個(gè)學(xué)生實(shí)體類,用于表示學(xué)生的信息。可以包含學(xué)生的ID、姓名、年齡等屬性。
import lombok.Data;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entity@Datapublic class Student { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; private int age;}
使用JPA來管理學(xué)生信息的持久化操作。定義一個(gè)學(xué)生信息的持久化接口,提供增刪改查等方法。
import org.springframework.data.jpa.repository.JpaRepository;public interface StudentRepository extends JpaRepository { // 可以添加自定義的查詢方法,如根據(jù)姓名查詢學(xué)生信息等}
在微服務(wù)框架中,通過HTTP協(xié)議暴露學(xué)生信息的API接口供外部調(diào)用。定義一個(gè)學(xué)生信息的控制器接口,提供增刪改查等API方法。
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;@RestController@RequestMapping("/students")public class StudentController { @Autowired private StudentRepository studentRepository; @GetMapping public List getAllStudents() { return studentRepository.findAll(); } @PostMapping public Student createStudent(@RequestBody Student student) { return studentRepository.save(student); } @GetMapping("/{id}") public Student getStudentById(@PathVariable("id") Long id) { return studentRepository.findById(id).orElse(null); } @PutMapping("/{id}") public Student updateStudent(@PathVariable("id") Long id, @RequestBody Student updatedStudent) { Student existingStudent = studentRepository.findById(id).orElse(null); if (existingStudent != null) { existingStudent.setName(updatedStudent.getName()); existingStudent.setAge(updatedStudent.getAge()); return studentRepository.save(existingStudent); } return null; } @DeleteMapping("/{id}") public void deleteStudent(@PathVariable("id") Long id) { studentRepository.deleteById(id); }}
通過以上代碼示例,我們定義了一個(gè)學(xué)生信息的實(shí)體類、學(xué)生信息的持久化接口和學(xué)生信息的控制器接口。
這樣就可以通過API來進(jìn)行學(xué)生信息的增刪改查操作。
在接下來的步驟中,我們將結(jié)合Spring Cloud、Nacos、Spring Cloud Gateway、Feign、Docker和Jenkins等組件,搭建一個(gè)完整的Java微服務(wù)框架。
服務(wù)注冊與發(fā)現(xiàn)是微服務(wù)架構(gòu)中非常重要的一部分,它允許我們動(dòng)態(tài)地注冊和發(fā)現(xiàn)微服務(wù)實(shí)例,從而實(shí)現(xiàn)微服務(wù)之間的通信。在這一節(jié)中,我們將詳細(xì)介紹服務(wù)注冊與發(fā)現(xiàn)的工作原理和實(shí)現(xiàn)方式。
服務(wù)注冊是指將微服務(wù)實(shí)例的信息(例如主機(jī)名、端口號、服務(wù)名稱等)注冊到服務(wù)注冊中心,使得其他服務(wù)可以發(fā)現(xiàn)和調(diào)用它。下面是服務(wù)注冊的步驟:
服務(wù)發(fā)現(xiàn)是指在需要調(diào)用其他微服務(wù)時(shí),通過服務(wù)注冊中心來獲取可用的微服務(wù)實(shí)例信息。下面是服務(wù)發(fā)現(xiàn)的步驟:
服務(wù)注冊與發(fā)現(xiàn)可以采用不同的實(shí)現(xiàn)方式,常見的有以下幾種:
在實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)時(shí),我們通常會(huì)使用專門的框架和工具來簡化開發(fā)和管理。例如,結(jié)合Spring Cloud框架和Nacos注冊中心,我們可以通過使用@EnableDiscoveryClient
注解啟用服務(wù)注冊與發(fā)現(xiàn)功能,并通過配置中心來配置服務(wù)注冊中心的地址。然后,我們可以通過注入DiscoveryClient
來獲取已注冊的微服務(wù)實(shí)例列表,并根據(jù)需要進(jìn)行調(diào)用。
通過服務(wù)注冊與發(fā)現(xiàn),我們可以實(shí)現(xiàn)微服務(wù)架構(gòu)的彈性、可擴(kuò)展和高可用性,使得微服務(wù)之間的通信更加靈活和可靠。
接下來,我們將使用Nacos作為服務(wù)注冊與發(fā)現(xiàn)的中間件,并進(jìn)行安裝和配置。
Nacos(Naming and Configuration Service)是一個(gè)開源的服務(wù)注冊與發(fā)現(xiàn)中間件,由阿里巴巴集團(tuán)開發(fā)和維護(hù)。它提供了服務(wù)注冊、發(fā)現(xiàn)、配置管理和動(dòng)態(tài)配置更新的功能,可以幫助我們構(gòu)建彈性可伸縮的微服務(wù)架構(gòu)。
Nacos支持主流的服務(wù)注冊和發(fā)現(xiàn)協(xié)議,如Eureka、Consul和Nacos自身的服務(wù)注冊協(xié)議。它還提供了靈活的配置管理功能,支持動(dòng)態(tài)配置刷新,可以幫助我們實(shí)現(xiàn)微服務(wù)的配置中心。
首先,我們需要安裝Nacos Server。請按照以下步驟進(jìn)行操作:
步驟 1:下載Nacos Server
你可以從Nacos的官方GitHub倉庫下載最新版本的Nacos Server。
下載地址:https://github.com/alibaba/nacos/releases
步驟 2:解壓Nacos Server
將下載的Nacos壓縮文件解壓到你選擇的目錄中。
步驟 3:啟動(dòng)Nacos Server
進(jìn)入解壓后的Nacos目錄,執(zhí)行以下命令啟動(dòng)Nacos Server:
PS D:\program\nacos\bin> .\startup.cmd -m standalone"nacos is starting with standalone" ,--. ,--."| ,--,: : | Nacos 2.2.2,`--."`| " : ,---. Running in stand alone mode, All function modules| : : | | " ,"\ .--.--. Port: 8848: | \ | : ,--.--. ,---. / / | / / " Pid: 16948| : " "; | / \ / \. ; ,. :| : /`./ Console: http://10.23.48.43:8848/nacos/index.html" " ;. ;.--. .-. | / / "" | |: :| : ;_| | | \ | \__\/: . .. " / " | .; : \ \ `. https://nacos.io" : | ; ." ," .--.; |" ; :__| : | `----. \| | "`--" / / ,. |" | "."|\ \ / / /`--" /" : | ; : ." \ : : `----" "--". /; |." | , .-./\ \ / `--"---""---" `--`---" `----"2023-05-17 11:20:55,045 INFO Tomcat initialized with port(s): 8848 (http)
Nacos Server將在默認(rèn)端口(8848)啟動(dòng),并以單機(jī)模式運(yùn)行。
步驟 4:訪問Nacos控制臺
在瀏覽器中訪問以下地址,進(jìn)入Nacos控制臺:
http://10.23.48.43:8848/nacos
在開始之前,我們需要在項(xiàng)目的pom.xml文件中添加Nacos相關(guān)依賴。請?zhí)砑右韵乱蕾嚕?/p>
xmlCopy code com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery 2021.1 org.springframework.cloud spring-cloud-starter-bootstrap
以上依賴將引入Nacos服務(wù)注冊與發(fā)現(xiàn)的功能。
現(xiàn)在,我們需要進(jìn)行一些系統(tǒng)配置變更,以便我們的微服務(wù)可以與Nacos進(jìn)行交互。請?jiān)赽ootstrap.yml文件中添加以下配置:
spring: cloud: nacos: discovery: server-addr: 10.23.48.43:8848
以上配置指定了Nacos Server的地址和端口。
接下來,我們將編寫示例代碼,實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)的功能。請?zhí)砑右韵麓a到Spring Boot應(yīng)用程序中的啟動(dòng)類上方:
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient@SpringBootApplicationpublic class StudentsServiceApplication { public static void main(String[] args) { SpringApplication.run(StudentsServiceApplication.class, args); }}
在以上代碼中,我們使用了@EnableDiscoveryClient注解來啟用服務(wù)注冊與發(fā)現(xiàn)功能。
現(xiàn)在,你的微服務(wù)將能夠與Nacos進(jìn)行通信,實(shí)現(xiàn)服務(wù)的注冊和發(fā)現(xiàn)。
在接下來的步驟中,我們將繼續(xù)編寫代碼來實(shí)現(xiàn)其他功能,如服務(wù)網(wǎng)關(guān)、服務(wù)間通信等。
在微服務(wù)架構(gòu)中,服務(wù)之間的調(diào)用是非常常見的場景。為了簡化服務(wù)調(diào)用的過程并實(shí)現(xiàn)負(fù)載均衡,我們可以使用Feign與Nacos結(jié)合來實(shí)現(xiàn)。本節(jié)將詳細(xì)介紹服務(wù)調(diào)用的概念以及如何使用Feign與Nacos來實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡。
服務(wù)調(diào)用是指一個(gè)微服務(wù)向另一個(gè)微服務(wù)發(fā)起請求,獲取所需的數(shù)據(jù)或執(zhí)行特定的操作。在微服務(wù)架構(gòu)中,服務(wù)調(diào)用可以跨越多個(gè)微服務(wù)實(shí)例,因此需要一種機(jī)制來管理和處理服務(wù)之間的通信。
Feign是一個(gè)聲明式的Web服務(wù)客戶端,它可以與多種服務(wù)注冊中心集成,包括Nacos。通過使用Feign,我們可以通過簡單的接口定義來調(diào)用其他微服務(wù),并且不需要手動(dòng)編寫具體的HTTP請求代碼。
Nacos作為服務(wù)注冊中心,提供了服務(wù)發(fā)現(xiàn)和負(fù)載均衡的功能。它可以自動(dòng)維護(hù)微服務(wù)實(shí)例列表,并根據(jù)負(fù)載均衡策略選擇合適的實(shí)例進(jìn)行調(diào)用。
下面是使用Feign與Nacos結(jié)合實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡的步驟:
在項(xiàng)目的pom.xml文件中添加Feign相關(guān)的依賴:
org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud spring-cloud-starter-loadbalancer
在啟動(dòng)類上添加@EnableFeignClients
注解,啟用Feign客戶端:
import org.springframework.cloud.openfeign.EnableFeignClients;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDiscoveryClient@EnableFeignClients@SpringBootApplicationpublic class StudentsServiceApplication { public static void main(String[] args) { SpringApplication.run(StudentsServiceApplication.class, args); }}
創(chuàng)建一個(gè)Feign客戶端接口,使用@FeignClient
注解指定要調(diào)用的微服務(wù)名稱和相關(guān)配置:
import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;@FeignClient(name = "students-service")public interface StudentFeignClient { @GetMapping("/students/{id}") Student getStudentById(@PathVariable("id") Long id);}
通過注入Feign客戶端接口,并調(diào)用相應(yīng)的方法來進(jìn)行服務(wù)調(diào)用:
import com.crazymaker.students.entity.Student;import com.crazymaker.students.feign.StudentFeignClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class StudentService { private StudentFeignClient feignClient; @Autowired public StudentService(StudentFeignClient feignClient) { this.feignClient = feignClient; } public Student getStudentById(Long id) { return feignClient.getStudentById(id); }}
在上面的示例中,通過serviceClient.getStudentById()
來調(diào)用目標(biāo)微服務(wù)的接口。
通過以上步驟,我們可以使用Feign與Nacos結(jié)合來實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡。Feign將負(fù)責(zé)處理底層的HTTP通信細(xì)節(jié),而Nacos將負(fù)責(zé)維護(hù)微服務(wù)實(shí)例列表和選擇合適的實(shí)例進(jìn)行調(diào)用,從而實(shí)現(xiàn)了服務(wù)調(diào)用和負(fù)載均衡的功能。
服務(wù)監(jiān)控是指對微服務(wù)架構(gòu)中的各個(gè)服務(wù)進(jìn)行實(shí)時(shí)監(jiān)控和管理,以確保系統(tǒng)的穩(wěn)定性和可靠性。通過監(jiān)控服務(wù)的運(yùn)行狀態(tài)、性能指標(biāo)和異常情況,可以及時(shí)發(fā)現(xiàn)問題并采取相應(yīng)措施,以提高系統(tǒng)的可用性和響應(yīng)能力。
日志管理是指對微服務(wù)架構(gòu)中生成的日志進(jìn)行收集、存儲、分析和展示的過程。日志是系統(tǒng)運(yùn)行的重要記錄,通過對日志進(jìn)行管理和分析,可以了解系統(tǒng)的運(yùn)行狀況、故障信息和異常情況,以便于問題排查和系統(tǒng)優(yōu)化。
服務(wù)監(jiān)控和日志管理對于微服務(wù)架構(gòu)具有重要的必要性和優(yōu)勢:
下面我們通過分別搭建和配置Spring Boot Admin 和 ELK 服務(wù)來實(shí)現(xiàn)性能監(jiān)控和日志管理:
Spring Boot Admin是一個(gè)開源的服務(wù)監(jiān)控和管理工具,它提供了一個(gè)Web界面,用于監(jiān)控和管理基于Spring Boot的應(yīng)用程序。通過Spring Boot Admin,可以實(shí)時(shí)監(jiān)控和管理應(yīng)用程序的運(yùn)行狀態(tài)、健康狀況、性能指標(biāo)等,并提供了強(qiáng)大的可視化和告警功能。
安裝和配置Spring Boot Admin的步驟如下:
按上文步驟新建一個(gè)Spring Boot項(xiàng)目, 添加Spring Boot Admin的依賴
de.codecentric spring-boot-admin-starter-server 3.0.3
bootstrap.yml
和application.yml
文件spring: cloud: nacos: discovery: server-addr: 10.23.48.43:8848
server: port: 8181 servlet: context-path: /spring: application: name: admin-service
@EnableDiscoveryClient@SpringBootApplication@EnableAdminServerpublic class AdminServiceApplication { public static void main(String[] args) { SpringApplication.run(AdminServiceApplication.class, args); }}
啟動(dòng)應(yīng)用程序, 點(diǎn)擊 http://10.23.48.43:8181/applications 訪問監(jiān)控頁面
1)pom.xml 里添加admin依賴
de.codecentric spring-boot-admin-starter-server 3.0.3 org.springframework.boot spring-boot-starter-actuator
2)在Spring Boot應(yīng)用程序的配置文件(如application.yml)中,配置Spring Boot Admin Server的相關(guān)信息:
spring: boot: admin: client: url: http://10.23.48.43:8181 # Spring Boot Admin Server的地址 management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS
重新啟動(dòng)應(yīng)用程序, 它將自動(dòng)注冊到Spring Boot Admin Server。
通過以上配置,我們可以實(shí)現(xiàn)Spring Boot Admin與Nacos的結(jié)合,使得應(yīng)用程序能夠通過Spring Boot Admin進(jìn)行監(jiān)控和管理。
ELK是一個(gè)流行的日志管理和分析解決方案,由Elasticsearch、Logstash和Kibana三個(gè)項(xiàng)目組成,常用于日志收集和分析。
日志主要包括系統(tǒng)日志、應(yīng)用程序日志和安全日志。運(yùn)維和開發(fā)人員可以通過日志了解服務(wù)器運(yùn)行過程中發(fā)生的錯(cuò)誤及錯(cuò)誤產(chǎn)生的原因。定期分析日志可以了解服務(wù)器的運(yùn)行情況、性能、安全性等。
每臺服務(wù)器或應(yīng)用程序都會(huì)產(chǎn)生日志,如果每次都登錄這些服務(wù)器查看日志并分析會(huì)耗費(fèi)大量時(shí)間,而且效率低下,這時(shí)我們就需要思考如何將日志匯總起來統(tǒng)一查看。日志集中管理之后又會(huì)產(chǎn)生新的問題,日志量太大,日志統(tǒng)計(jì)和檢索又成為新的問題,如何能實(shí)現(xiàn)高性能的檢索統(tǒng)計(jì)呢?ELK能完美解決我們的問題。
關(guān)于ELK的原理和實(shí)操,強(qiáng)烈推薦:
ELK日志平臺(elasticsearch +logstash+kibana)原理和實(shí)操(史上最全):
https://www.cnblogs.com/crazymakercircle/p/16732034.html
本文這里為了方便演示,僅演示利用docker容器在本機(jī)部署ELK,在實(shí)際生產(chǎn)環(huán)境下,推薦使用多臺linux服務(wù)器,安裝ELK集群。
首先新建elk目錄,在目錄下新建相關(guān)文件夾:
docker-compose.yml內(nèi)容如下:
version: "3.2"services: elasticsearch: image: elasticsearch:7.17.4 volumes: - ./es/plugins:/usr/share/elasticsearch/plugins #插件文件掛載 - ./es/data:/usr/share/elasticsearch/data #數(shù)據(jù)文件掛載 - ./es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml #配置 ports: - "9200:9200" - "9300:9300" container_name: elasticsearch environment: - "cluster.name=elasticsearch" #設(shè)置集群名稱為elasticsearch - "discovery.type=single-node" #以單一節(jié)點(diǎn)模式啟動(dòng) - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" #設(shè)置使用jvm內(nèi)存大小 networks: - elk logstash: image: logstash:7.17.4 container_name: logstash volumes: - "./logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf" ports: - "5044:5044" - "50000:50000/tcp" - "50000:5000/udp" - "9600:9600" environment: LS_JAVA_OPTS: -Xms1024m -Xmx1024m TZ: Asia/Shanghai MONITORING_ENABLED: false links: - elasticsearch:es #可以用es這個(gè)域名訪問elasticsearch服務(wù) networks: - elk depends_on: - elasticsearch kibana: image: kibana:7.17.4 container_name: kibana volumes: - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml ports: - "5601:5601" links: - elasticsearch:es #可以用es這個(gè)域名訪問elasticsearch服務(wù) environment: - ELASTICSEARCH_URL=http://elasticsearch:9200 #設(shè)置訪問elasticsearch的地址 - "elasticsearch.hosts=http://es:9200" #設(shè)置訪問elasticsearch的地址 - I18N_LOCALE=zh-CN networks: - elk depends_on: - elasticsearchnetworks: elk: name: elk driver: bridge
在es目錄下新建 data、plugins 文件夾, 以及elasticsearch.yml文件,內(nèi)容如下:
cluster.name: elasticsearch # 集群名稱node.name: node-1 # 節(jié)點(diǎn)名稱network.host: 0.0.0.0 # 監(jiān)聽地址http.port: 9200 # 監(jiān)聽端口http.cors.enabled: truehttp.cors.allow-origin: "*"
在logstash目錄下新建logstash.conf文件, 內(nèi)容如下:
input { tcp { port => 5000 codec => json }}filter { # 進(jìn)行過濾和轉(zhuǎn)換規(guī)則的配置}output { elasticsearch { hosts => ["es:9200"] # Elasticsearch的地址 index => "my-application-%{+YYYY.MM.dd}" # 索引名稱,可按日期劃分 }}
在kibana目錄下,創(chuàng)建config文件夾,并新建kibana.yml文件,內(nèi)容如下:
# Default Kibana configuration for docker targetserver.host: "0.0.0.0"server.shutdownTimeout: "5s"elasticsearch.hosts: ["http://elasticsearch:9200"]monitoring.ui.container.elasticsearch.enabled: trueserver.port: 5601 # 監(jiān)聽端口
啟動(dòng):
docker-compose -f docker-compose.yml up -d
logback-spring.xml
: 10.23.48.43:5000
net.logstash.logback logstash-logback-encoder 7.2
通過以上步驟,我們可以搭建起ELK Stack,并將應(yīng)用系統(tǒng)接入到ELK Stack中進(jìn)行日志的收集、存儲、分析和可視化展示。這樣,我們可以方便地對日志進(jìn)行搜索、過濾、聚合和可視化,幫助我們快速定位問題、監(jiān)控系統(tǒng)的運(yùn)行狀況,并提供數(shù)據(jù)支持進(jìn)行性能優(yōu)化和故障排查。
通過結(jié)合這些開源中間件,我們可以實(shí)現(xiàn)對微服務(wù)的全面監(jiān)控和日志管理,幫助我們及時(shí)發(fā)現(xiàn)問題、優(yōu)化性能,并提供可視化的展示和分析工具,從而提升微服務(wù)架構(gòu)的可靠性和穩(wěn)定性。
在微服務(wù)架構(gòu)中,服務(wù)安全保護(hù)是至關(guān)重要的,它們可以保護(hù)微服務(wù)免受未經(jīng)授權(quán)的訪問,并確保只有經(jīng)過身份驗(yàn)證和授權(quán)的用戶才能訪問受保護(hù)的資源。
Spring Cloud Gateway是一個(gè)基于Spring Framework 5、Project Reactor和Spring Boot 2構(gòu)建的輕量級網(wǎng)關(guān)服務(wù),用于構(gòu)建和管理微服務(wù)架構(gòu)中的API網(wǎng)關(guān)。
API網(wǎng)關(guān)在微服務(wù)架構(gòu)中安全方面扮演著重要的角色,它作為系統(tǒng)的入口,它可以提供以下安全功能:
訪問控制:API網(wǎng)關(guān)可以對傳入的請求進(jìn)行訪問控制,確保只有經(jīng)過身份驗(yàn)證和授權(quán)的用戶能夠訪問受保護(hù)的資源。它可以驗(yàn)證請求中的身份驗(yàn)證令牌或證書,并根據(jù)配置的權(quán)限規(guī)則進(jìn)行訪問控制。
安全認(rèn)證和授權(quán):API網(wǎng)關(guān)可以與認(rèn)證和授權(quán)中間件(如OAuth2)集成,實(shí)現(xiàn)對微服務(wù)的安全認(rèn)證和授權(quán)。它可以驗(yàn)證請求中的訪問令牌,并將認(rèn)證和授權(quán)信息傳遞給后端的微服務(wù),以確保只有具有足夠權(quán)限的用戶能夠訪問特定的資源。
保護(hù)后端服務(wù):API網(wǎng)關(guān)可以隱藏后端的微服務(wù)架構(gòu),只暴露必要的接口給外部客戶端,從而降低了被惡意攻擊的風(fēng)險(xiǎn)。它可以阻止未經(jīng)授權(quán)的請求直接訪問后端服務(wù),并提供請求的限流和緩沖功能,以保護(hù)后端服務(wù)免受過載或惡意攻擊。
安全審計(jì)和日志記錄:API網(wǎng)關(guān)可以記錄請求和響應(yīng)的詳細(xì)信息,包括訪問時(shí)間、來源IP、請求內(nèi)容等,以便進(jìn)行安全審計(jì)和故障排查。它可以將日志記錄到集中的日志管理系統(tǒng)中,方便監(jiān)控和分析。
攻擊防護(hù):API網(wǎng)關(guān)可以實(shí)施一些安全防護(hù)措施,如防止跨站腳本攻擊(XSS)、跨站請求偽造(CSRF)和注入攻擊等。它可以對傳入的請求進(jìn)行驗(yàn)證和過濾,以識別和阻止?jié)撛诘膼阂庑袨椤?/p>
綜上所述,API網(wǎng)關(guān)在安全方面具有重要的作用。它可以提供訪問控制、安全認(rèn)證和授權(quán)、保護(hù)后端服務(wù)、安全審計(jì)和日志記錄以及攻擊防護(hù)等功能,幫助確保微服務(wù)架構(gòu)的安全性和可靠性。
通過合理配置和使用適當(dāng)?shù)陌踩珯C(jī)制,API網(wǎng)關(guān)可以成為微服務(wù)架構(gòu)中的首道防線,保護(hù)系統(tǒng)免受潛在的安全威脅。
下面是搭建和配置Spring Cloud Gateway的步驟示例:
首先創(chuàng)建一個(gè)Spring Boot應(yīng)用, 在項(xiàng)目的pom.xml
文件中添加相應(yīng)的依賴配置。
org.springframework.cloud spring-cloud-starter-gateway org.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery
接下來,在application.yml
文件中配置Spring Cloud Gateway和Nacos的相關(guān)信息。
# Spring Cloud Gateway配置server: port: 8182spring: cloud: gateway: discovery: locator: enabled: true lower-case-service-id: true# Nacos配置spring: cloud: nacos: discovery: server-addr: ${nacos.server-addr} # Nacos Server地址# 網(wǎng)關(guān)路由配置spring: cloud: gateway: routes: - id: sample-service # 路由ID uri: lb://student-service # 后端服務(wù)名 predicates: - Path=/student/** # 匹配的路徑 filters: - StripPrefix=1 # 去除前綴
以上配置中,需要將nacos.server-addr
替換為實(shí)際的Nacos Server地址。
然后,創(chuàng)建一個(gè)啟動(dòng)類并添加@EnableDiscoveryClient
注解,啟用服務(wù)發(fā)現(xiàn)功能。
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClientpublic class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); }}
最后,通過配置路由規(guī)則,將請求轉(zhuǎn)發(fā)到后端的微服務(wù)??梢允褂?code>@Bean注解在配置類中定義路由規(guī)則,或者使用配置文件中的spring.cloud.gateway.routes
屬性進(jìn)行配置。
import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class GatewayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("student-service", r -> r.path("/student/**") .uri("lb://student-service")) .build(); }}
通過以上配置,Spring Cloud Gateway將根據(jù)路由規(guī)則將/sample/**
路徑的請求轉(zhuǎn)發(fā)到名為sample-service
的后端微服務(wù)。
請注意,示例中的sample-service
是一個(gè)示意的后端微服務(wù)名稱,需要根據(jù)實(shí)際情況替換為真實(shí)的微服務(wù)名稱。
這樣,結(jié)合Spring Cloud Gateway和Nacos的示例就完成了。啟動(dòng)應(yīng)用后,它將根據(jù)配置的路由規(guī)則將請求轉(zhuǎn)發(fā)到相應(yīng)的后端微服務(wù),并通過Nacos進(jìn)行服務(wù)的注冊和發(fā)現(xiàn)。
Spring Cloud Gateway作為微服務(wù)架構(gòu)的入口,除了提供了路由轉(zhuǎn)發(fā),還提供了負(fù)載均衡、過濾器、安全認(rèn)證、請求限流和監(jiān)控等功能,
關(guān)于服務(wù)保護(hù),本圣經(jīng)后面有專欄介紹。當(dāng)然,有興趣的小伙伴可以閱讀
SpringCloud gateway (史上最全) - 瘋狂創(chuàng)客圈:https://www.cnblogs.com/crazymakercircle/p/11704077.html
進(jìn)一步學(xué)習(xí)和掌握相關(guān)知識。
持續(xù)集成(Continuous Integration)是一種軟件開發(fā)實(shí)踐,旨在頻繁地將代碼集成到主干版本控制系統(tǒng)中。持續(xù)部署(Continuous Deployment)是持續(xù)集成的延伸,自動(dòng)將通過持續(xù)集成構(gòu)建的可部署軟件包發(fā)布到生產(chǎn)環(huán)境。
以下是一種基本的實(shí)現(xiàn)方式:
版本控制:使用版本控制系統(tǒng)(如Git)管理代碼,確保團(tuán)隊(duì)成員可以協(xié)同開發(fā),并且每個(gè)更改都有明確的記錄。
自動(dòng)化構(gòu)建:使用構(gòu)建工具(如Maven)配置構(gòu)建腳本,定義項(xiàng)目的編譯、打包、測試等步驟。
持續(xù)集成服務(wù)器:使用持續(xù)集成服務(wù)器(如Jenkins)來觸發(fā)構(gòu)建,并執(zhí)行自動(dòng)化構(gòu)建過程。
自動(dòng)化測試:編寫并執(zhí)行自動(dòng)化測試腳本,包括單元測試、集成測試和端到端測試等,以確保代碼質(zhì)量和功能穩(wěn)定性。
自動(dòng)化部署:使用容器化技術(shù)(如Docker)打包應(yīng)用程序,并將其部署到預(yù)先定義的環(huán)境中,如開發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境。
接下來,我們將分別介紹Jenkins和Docker,然后提供詳細(xì)的配置步驟來實(shí)現(xiàn)持續(xù)集成和部署。
Jenkins是一個(gè)開源的持續(xù)集成工具,它提供了一系列功能和插件,用于自動(dòng)化構(gòu)建、測試和部署軟件。以下是Jenkins的基本概念和特點(diǎn):
Docker是一個(gè)開源的容器化平臺,它可以將應(yīng)用程序及其依賴項(xiàng)打包到容器中,提供了一致、可重復(fù)和可移植的部署環(huán)境。以下是Docker的基本概念和特點(diǎn):
隔離的,擁有自己的文件系統(tǒng)、進(jìn)程空間和網(wǎng)絡(luò)接口。
FROM openjdk:8-jreRUN mkdir /appCOPY students-service-exec.jar /app/app.jarENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]EXPOSE 8180
下載Jenkins:訪問Jenkins官方網(wǎng)站(Jenkins download and deployment)下載適合您操作系統(tǒng)的Jenkins安裝包。
安裝Jenkins:按照官方文檔提供的步驟,安裝Jenkins并完成初始化配置。
安裝插件:通過Jenkins的插件管理界面,安裝必要的插件,如Git插件、Maven插件、docker插件等。
安裝過程可參考 https://zhuanlan.zhihu.com/p/566398364
構(gòu)建成功后,我們可以在docker桌面端看到students-service
服務(wù)已啟動(dòng),
通過以上步驟,您可以使用Jenkins和Docker實(shí)現(xiàn)持續(xù)集成和部署。
Jenkins將根據(jù)配置的觸發(fā)器自動(dòng)執(zhí)行構(gòu)建任務(wù),通過Docker構(gòu)建和發(fā)布鏡像,實(shí)現(xiàn)持續(xù)集成和部署的流程。
您可以根據(jù)具體的項(xiàng)目需求和環(huán)境配置Jenkins任務(wù)和Docker構(gòu)建腳本,以實(shí)現(xiàn)自動(dòng)化的軟件交付流程。
在本文中,我們首先討論了微服務(wù)框架的基本原則,然后通過安裝和配置Java、Maven、Git和IDEA等工具,為搭建基礎(chǔ)設(shè)施做好準(zhǔn)備。接著,我們定義了微服務(wù)接口和協(xié)議,并使用JPA提供了增刪改查的代碼示例。通過集成Nacos,我們實(shí)現(xiàn)了服務(wù)注冊與發(fā)現(xiàn),以及使用Feign實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡。
我們還介紹了Spring Boot Admin和Elasticsearch,用于實(shí)現(xiàn)服務(wù)監(jiān)控和日志管理。最后,我們使用Spring Cloud Gateway實(shí)現(xiàn)了服務(wù)安全保護(hù),并通過Jenkins和Docker實(shí)現(xiàn)了持續(xù)集成和部署。
通過這個(gè)搭建過程,我們達(dá)到了構(gòu)建一個(gè)完整的Java微服務(wù)框架的目標(biāo)。
我們建立了基礎(chǔ)設(shè)施,定義了接口和協(xié)議,實(shí)現(xiàn)了服務(wù)注冊與發(fā)現(xiàn)、服務(wù)調(diào)用和負(fù)載均衡、服務(wù)監(jiān)控和日志管理、服務(wù)安全和認(rèn)證授權(quán),并實(shí)現(xiàn)了持續(xù)集成和部署。
搭建過程存在的不足和改進(jìn)的方向如下:
性能監(jiān)控和報(bào)警:在服務(wù)監(jiān)控和日志管理部分,我們可以進(jìn)一步改進(jìn),引入Prometheus和Grafana來實(shí)現(xiàn)更全面的性能監(jiān)控和報(bào)警功能。Prometheus是一個(gè)開源的監(jiān)控系統(tǒng),可以收集和存儲各種指標(biāo)數(shù)據(jù),并提供強(qiáng)大的查詢和報(bào)警功能。Grafana是一個(gè)數(shù)據(jù)可視化工具,可以將Prometheus收集的數(shù)據(jù)以圖表的形式展示出來,幫助我們更直觀地了解系統(tǒng)的性能狀況。通過使用Prometheus和Grafana,我們可以實(shí)時(shí)監(jiān)控系統(tǒng)的指標(biāo),并設(shè)置報(bào)警規(guī)則,及時(shí)發(fā)現(xiàn)并解決潛在的性能問題。
為了保障微服務(wù)系統(tǒng)的穩(wěn)定性和可靠性,你還需要考慮服務(wù)的熔斷、限流、降級等策略??梢允褂?Hystrix 或者 Resilience4j 等庫來實(shí)現(xiàn)這些功能。
容器化部署:在持續(xù)集成和部署部分,我們可以進(jìn)一步改進(jìn),引入Kubernetes(K8s)來實(shí)現(xiàn)容器化部署。Kubernetes是一個(gè)開源的容器編排平臺,可以簡化和自動(dòng)化應(yīng)用程序的部署、擴(kuò)展和管理。通過使用Kubernetes,我們可以將微服務(wù)框架中的各個(gè)服務(wù)容器化,并通過K8s進(jìn)行部署、伸縮和管理,提供更高效、可靠和彈性的部署方案。
自動(dòng)化和流程改進(jìn):在持續(xù)集成和部署部分,我們可以進(jìn)一步改進(jìn)和優(yōu)化自動(dòng)化流程。通過使用更先進(jìn)的CI/CD工具和技術(shù),如Jenkins Pipeline、GitOps等,可以實(shí)現(xiàn)更高度的自動(dòng)化和流程改進(jìn)。例如,可以通過編寫自動(dòng)化的流水線腳本,實(shí)現(xiàn)代碼的構(gòu)建、測試、打包和部署的自動(dòng)化,并與版本控制系統(tǒng)(如Git)進(jìn)行集成,實(shí)現(xiàn)代碼的自動(dòng)觸發(fā)和持續(xù)交付。
通過上述改進(jìn),我們可以進(jìn)一步提升微服務(wù)框架的性能監(jiān)控、報(bào)警能力,以及部署和管理的效率和可靠性。這將有助于更好地滿足不斷變化的業(yè)務(wù)需求,并提升系統(tǒng)的可靠性和穩(wěn)定性。
《吃透8圖1模板,人人可以做架構(gòu)》
《10Wqps評論中臺,如何架構(gòu)?B站是這么做的?。。 ?/p>
《阿里二面:千萬級、億級數(shù)據(jù),如何性能優(yōu)化? 教科書級 答案來了》
《峰值21WQps、億級DAU,小游戲《羊了個(gè)羊》是怎么架構(gòu)的?》
《100億級訂單怎么調(diào)度,來一個(gè)大廠的極品方案》
《2個(gè)大廠 100億級 超大流量 紅包 架構(gòu)方案》
… 更多架構(gòu)文章,正在添加中
《響應(yīng)式圣經(jīng):10W字,實(shí)現(xiàn)Spring響應(yīng)式編程自由》
這是老版本 《Flux、Mono、Reactor 實(shí)戰(zhàn)(史上最全)》
《Spring cloud Alibaba 學(xué)習(xí)圣經(jīng)》 PDF
《分庫分表 Sharding-JDBC 底層原理、核心實(shí)戰(zhàn)(史上最全)》
《一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之間混亂關(guān)系(史上最全)》
《Linux命令大全:2W多字,一次實(shí)現(xiàn)Linux自由》
《TCP協(xié)議詳解 (史上最全)》
《網(wǎng)絡(luò)三張表:ARP表, MAC表, 路由表,實(shí)現(xiàn)你的網(wǎng)絡(luò)自由!!》
《Redis分布式鎖(圖解 - 秒懂 - 史上最全)》
《Zookeeper 分布式鎖 - 圖解 - 秒懂》
《隊(duì)列之王: Disruptor 原理、架構(gòu)、源碼 一文穿透》
《緩存之王:Caffeine 源碼、架構(gòu)、原理(史上最全,10W字 超級長文)》
《緩存之王:Caffeine 的使用(史上最全)》
《Java Agent 探針、字節(jié)碼增強(qiáng) ByteBuddy(史上最全)》
4000頁《尼恩Java面試寶典 》 40個(gè)專題
關(guān)鍵詞:
最新推薦
今日凌晨,據(jù)《隊(duì)報(bào)》、天空體育、《電訊報(bào)》等多家媒體的消息,姆巴佩
這九人評選最強(qiáng)中單和TOP3,為此觀眾們進(jìn)行了一系列的討論,不同人有不
今天凌晨,來自隊(duì)報(bào)的消息,姆巴佩團(tuán)隊(duì)已經(jīng)通過書面的形式正式通知大巴
德班世乒賽結(jié)束后,乒乓球世界排名迎來了新的變化,中國隊(duì)重新奪回五大
本報(bào)訊為切實(shí)加強(qiáng)緝槍治爆工作,近日,鐵嶺市公安局工人分局組織民警在
本報(bào)訊為切實(shí)維護(hù)營口市伏季休漁秩序,確保增殖放流取得實(shí)效,保障廣大
統(tǒng)計(jì)數(shù)據(jù)顯示,海南旅游市場旅游收入高于疫情前2019年同期水平,游客消
端午文案1)粽子飄香,佳人安康。(粽子 祝福)2)粽子是端午限定,你我是命中注定。(愛情 結(jié)婚)3)粽子之...
冬至佳句七絕·冬至一,楓葉紅時(shí)信已傳,梅心雪意亦如前。陽生莫問春何處,夜永應(yīng)知又一年。二,夜闌風(fēng)...
課文匆匆原文燕子去了,有再來的時(shí)候;楊柳枯了,有再青的時(shí)候;桃花謝了,有再開的時(shí)候。但是,聰明的,...
本網(wǎng)訊近日,經(jīng)寧夏回族自治區(qū)固原市農(nóng)業(yè)系列職稱評審委員會(huì)評審、市人
lucky的反義詞是什么lucky的反義詞是unlucky。lucky的意思以及用法:一、作為形容詞1、幸運(yùn)的,好運(yùn)的一...
祝??忌既肜硐氪髮W(xué),學(xué)上喜歡的專業(yè)!
在夏季,氣溫過高、濕度大、風(fēng)速小等條件下,非常容易引發(fā)中暑。“熱死
“迎接學(xué)青會(huì)健康新廣西”廣西新時(shí)代文明實(shí)踐活動(dòng)暨全民健身志愿服務(wù)活
日前,教育部公布第二批國家級一流本科課程名單,共有5750門課程獲認(rèn)定
近日,廣西海洋環(huán)境監(jiān)測中心站對平陸運(yùn)河入??冢ㄎ挥跉J州茅尾海一帶)
1、具體要看什么種類的車,不同種類的車報(bào)廢年限不同。2、各類機(jī)動(dòng)車使
近年來,隨著人們健康意識的提高,各種膏藥產(chǎn)品市場需求不斷增長。在這樣的市場背景下,仙佑醫(yī)藥膏藥代...
時(shí)至今日,我覺得中國可以考慮對日本和韓國提出簽訂互不侵犯條約。其主
直播吧6月13日訊貝盧斯科尼因病離世,小羅社媒曬合照緬懷。小羅寫道:
在《法蘭克福匯報(bào)》的采訪中,埃姆雷-詹對于錯(cuò)失冠軍表示:“我依然還
直播吧6月13日訊此前哈維曾公開稱贊基米希,對此球員進(jìn)行了回應(yīng)。在被
只是雙打的大滿貫冠軍,但王欣瑜能夠奪冠,同樣是非常了不起的,這個(gè)小
今后的努力方向和改進(jìn)措施1、針對員工提出的推薦,我采取的措施是:①合理安排工作,要放得下一些追求,...
依依惜別的詩句1、黃鶴樓送孟浩然之廣陵 唐 李白故人西辭黃鶴樓,煙花三月下?lián)P州。孤帆遠(yuǎn)影碧空盡,唯...
蘭波的詩句1、唯一無法忍受即事事可忍受。——蘭波2、你隱沒在夢中,宛如雪化在火中。——蘭波3、天才就...
岑參的邊塞詩1、最動(dòng)人的想家詩:《逢入京使》《逢入京使》故園東望路漫漫,雙袖龍鐘淚不干。馬上相逢無...
近日,商務(wù)部發(fā)布《中國電子商務(wù)報(bào)告(2022)》,多彩貴州網(wǎng)旗下貴州電子
經(jīng)商名言警句1、越是巨大的冒險(xiǎn),越是需要巨大的謹(jǐn)慎。2、如果注定要做一個(gè)商人,那么就要隨時(shí)準(zhǔn)備接受...
關(guān)于成長的詩歌《成長的方向》所有的河流都朝著東方不拒細(xì)流浩浩湯湯只是為了匯入大海汪洋所有的禾苗破...
哈姆雷特讀書筆記一杯毒酒,一把毒劍。結(jié)局被鮮血浸染。哈姆雷特最終被眾人抬放于高臺,在沉重的葬禮進(jìn)...
本報(bào)訊5月25日,甘肅省蘭州市非公有制企業(yè)黨委在蘭州奔馬集團(tuán)舉辦針對
很多玩游戲的人都知道全民TV。我們看到上面很多直播,各種各樣的都有。
我們知道支付寶有個(gè)天天領(lǐng)紅包,微信從1月1日起到1月31日,每天在門店
火山直播是一款手機(jī)直播平臺,主打網(wǎng)紅娛樂生活直播。當(dāng)然,我們在火山
京東上面怎么查看自己的年度賬單呢,下面小編介紹一下。具體如下:1 打
當(dāng)我們需要對圖片進(jìn)行一些調(diào)整時(shí),可以使用ps工具。在ps中是否可以繪制
6月13日,生意社糠醛基準(zhǔn)價(jià)為11425 00元 噸,與本月初持平。生意社基準(zhǔn)
1、黝黑讀:yǒuhēi意思:皮膚暴露在太陽光下而曬成的青黑色。2、2、
這無疑是足壇的又一個(gè)重磅炸彈:姆巴佩向巴黎圣日耳曼攤牌了,他不會(huì)行
目前,曼城已經(jīng)找到了一個(gè)非常心儀的引援目標(biāo),他就是意甲豪門國際米蘭
這無疑是足壇的又一個(gè)重磅炸彈:姆巴佩向巴黎圣日耳曼攤牌了,他不會(huì)行
2022年3月23日,現(xiàn)女子世界排名第一的澳大利亞球員巴蒂宣布退出網(wǎng)壇,
一、是否存在有注冊資本的分公司?不存在,任何分公司都沒有注冊資本的
每個(gè)公司在設(shè)立成功后都有其獨(dú)特的名稱,商品在生產(chǎn)后也有唯一的logo。
奧海科技(SZ002993,收盤價(jià):33 92元)發(fā)布公告稱,2023年6月12日,奧
個(gè)股亮點(diǎn):旗下廈門燕來福醫(yī)院為一級醫(yī)療機(jī)構(gòu),開設(shè)了口腔科,目前開展
賽博朋克2077“波蘭蠢驢”的又一力作,那么這款游戲到底會(huì)在什么時(shí)候發(fā)
北京時(shí)間昨日凌晨,2023年法網(wǎng)男單決賽,36歲的塞爾維亞名將德約科維奇
環(huán)球訊息:15億收入不要了,再見巴黎!3大線索指向加盟曼聯(lián),英超爭冠變天
LPL飯?zhí)渺`魂提問,近五年最強(qiáng)中單,F(xiàn)aker難進(jìn)前十,JDG有望絕殺_焦點(diǎn)熱文
世界要聞:坐不住了!催化劑正式發(fā)揮作用,姆巴佩被迫決定,皇馬或成大贏家
天天熱頭條丨最新世界排名公布!國乒蟬聯(lián)5項(xiàng)第一,樊振東、孫穎莎面臨挑戰(zhàn)
小羅緬懷貝盧斯科尼:你的名字將永遠(yuǎn)鐫刻在AC米蘭|世界實(shí)時(shí)
中網(wǎng)總獎(jiǎng)金公布:1175萬美元 ,同級別賽事獎(jiǎng)金第一,其中WTA賽事803.97萬美元 世界今熱點(diǎn)
世界觀點(diǎn):中國金花奪冠+豪奪335萬,德約科維奇收獲1768萬巨獎(jiǎng),23冠超納達(dá)爾
短訊!孫穎莎惹爭議!參加低級賽事,球迷質(zhì)疑國乒吃相難看,幫忙搶積分
【新視野】多家上市公司進(jìn)軍新能源產(chǎn)業(yè) 跨界“奔赴”合理性引監(jiān)管層關(guān)注
國內(nèi)單機(jī)容量最大的沖擊式水電機(jī)組完成國產(chǎn)化改造 成功并網(wǎng)發(fā)電 環(huán)球即時(shí)看
環(huán)球熱消息:奧運(yùn)積分排名更新!梁王暫居男雙榜首,何冰嬌高居女單第3
得加錢?記者:除皇馬外,巴黎愿今夏將姆巴佩出售給任何球隊(duì)
德約科維奇與穆雷同一日雙雙奪冠,球迷夢回四巨頭時(shí)代,不見費(fèi)納!-全球最資訊
【環(huán)球熱聞】海峽組合法網(wǎng)逆襲奪冠 小將王欣瑜未來可期
世界速讀:沙特能源大臣:沙特想與中國合作,不會(huì)理會(huì)西方的“擔(dān)憂”
海南發(fā)展(002163):6月12日北向資金增持25.24萬股|環(huán)球要聞
熱點(diǎn)聚焦:演員張齡心:不結(jié)婚不生子,老了就去養(yǎng)老院,如今她打了自己的臉_天天動(dòng)態(tài)
中超之光!巴薩4000萬清洗曼城天才,1600萬簽大連神鋒,1年10球
【環(huán)球時(shí)快訊】記者:迪亞斯新賽季將身穿皇馬21號球衣
即時(shí):納喬:如果我能決定,我會(huì)在今夏把姆巴佩帶到皇馬
世界時(shí)訊:皇馬拒絕哈弗茨,迪巴拉拒絕沙特億元高薪,穆里尼奧再收頂薪報(bào)價(jià)
天天熱點(diǎn)評!對話|續(xù)寫茶香傳奇,90后非遺新人有一套
皇馬新7號確認(rèn)!億元先生接班阿扎爾挑戰(zhàn)C羅,10號留給姆巴佩?|環(huán)球即時(shí)看
饒明受傷,德約魯?shù)略賾?zhàn)法網(wǎng)火槍手杯!
馬琳難再指導(dǎo)陳夢,劉國梁布局,主教練放權(quán),主管教練負(fù)責(zé)場邊-世界速訊
【世界時(shí)快訊】陳夢丟大滿貫有原因!官方雜志透露世乒賽前情況,一姐身體出問題
全球連線|紅酒為媒推動(dòng)中外交流_環(huán)球百事通
每日消息!事關(guān)買菜! 2023年7月1日,柳州這一新規(guī)實(shí)施
每日報(bào)道:降雨范圍更大!13日起,廣西將進(jìn)入“龍舟水”集中期
天天微資訊!硅藻泥優(yōu)缺點(diǎn)大揭秘_硅藻泥優(yōu)缺點(diǎn)
恭喜內(nèi)馬爾!利雅得新月為內(nèi)馬爾提出報(bào)價(jià),年薪2.5億歐元
體壇3大GOAT齊聚!梅西德約卻只能在兩邊,詹姆斯丟冠卻是居中C位
德天空記者:于帕梅卡諾在拜仁過得不開心,但無意在今夏離隊(duì)_焦點(diǎn)快看
江瀚新材: 第一屆董事會(huì)第十四次會(huì)議決議公告 今日快訊
“蔚小理”一季度交卷:理想連續(xù)盈利 蔚來小鵬各有“焦慮”
【天天播資訊】好聽的閩南語歌曲排行2019_好聽的閩南語歌曲有哪些
人數(shù)破500萬!梅西現(xiàn)身直播間,平臺遭瘋狂吐槽:吃相太難看
助攻絕殺升意甲!國米300萬賣小麥孔虧了,7+9飛翼想重回藍(lán)黑軍團(tuán)
環(huán)球百事通!hang發(fā)揮不佳淚灑現(xiàn)場,LNG2:1險(xiǎn)勝FPX狀態(tài)堪憂,打野tarzan難頂大梁
中國金花單打9連敗,吞下一根油條,張帥狀態(tài)低迷已無任何競爭力
歷史上陳軫是一個(gè)怎樣的人(春秋戰(zhàn)國陳軫的人物形象分析)
美贊臣中國牽手微生態(tài)領(lǐng)軍企業(yè)未知君加速布局精準(zhǔn)營養(yǎng)健康管理
像蛇但不是蛇,廣西大明山保護(hù)區(qū)發(fā)現(xiàn)新記錄物種
滾動(dòng):廣西積極參與全國碳排放權(quán)交易市場,交易額逐年上升
hang發(fā)揮不佳淚灑現(xiàn)場,LNG2:1險(xiǎn)勝FPX狀態(tài)堪憂,打野tarzan難頂大梁
聯(lián)系我們:55 16 53 8@qq.com
關(guān)于我們| 聯(lián)系方式| 版權(quán)聲明| 供稿服務(wù)| 友情鏈接
塞北網(wǎng) 版權(quán)所有,未經(jīng)書面授權(quán)禁止使用
京ICP備2021034106號-10 營業(yè)執(zhí)照公示信息
Copyright©2008-2020 By www.twwot.com All Rights Reserved