主頁 >  其他 > 9.4. 分布式與微服務架構

9.4. 分布式與微服務架構

2023-06-07 07:42:56 其他

在本章節中,我們將介紹分布式系統和微服務架構的基本概念,分布式系統解決了單體應用面臨的可擴展性、高可用性等問題,而微服務架構進一步提升了系統的可維護性和靈活性,

9.4.1. 分布式系統基本概念

分布式系統是由多個獨立的計算節點組成的系統,這些節點通過網路進行通信和協作, 分布式系統的主要特點是可擴展性、高可用性和容錯性,

  1. 可擴展性(Scalability):分布式系統可以通過添加更多的計算節點來提升處理能力,以應對不斷增長的業務需求,
  2. 高可用性(High availability):分布式系統可以在某個節點發生故障時,自動將任務轉移到其他正常節點上,從而保證系統的正常運行,
  3. 容錯性(Fault tolerance):分布式系統可以在部分節點發生故障時,依然能夠正常提供服務,

9.4.2. 微服務架構基本概念

微服務架構是一種軟體架構風格,它將一個大型應用劃分為多個獨立的、可獨立部署的小型服務,這些小型服務可以使用不同的編程語言和技術堆疊進行開發,它們通過輕量級的通信協議(如HTTP/REST)進行互相呼叫,

微服務架構的主要優勢在于:

  1. 可維護性(Maintainability):將一個復雜的大型應用劃分為多個小型服務,可以降低每個服務的復雜度,提高代碼的可讀性和可維護性,
  2. 靈活性(Flexibility):微服務可以獨立進行更新和部署,這意味著我們可以更快地回應業務需求的變化,以及嘗試新的技術和架構,
  3. 可擴展性(Scalability):我們可以根據每個微服務的需求,獨立地進行橫向擴展,從而提高整個系統的處理能力,

9.4.3. Spring Cloud

Spring Cloud是一個基于Spring Boot的開發工具集,它提供了一系列用于構建分布式系統和微服務架構的解決方案,在本節中,我們將簡要介紹Spring Cloud的主要組件,

  1. Spring Cloud Config:提供了一個集中式配置管理服務,可以讓所有的微服務從一個中心位置獲取配置資訊,
  2. Spring Cloud Eureka:提供了一個服務注冊與發現的解決方案,微服務可以向Eureka注冊,然后通過Eureka獲取其他微服務的實體資訊,
  3. Spring Cloud Ribbon:提供了客戶端負載均衡的功能,通過Ribbon,我們可以將請求自動分發到多個服務實體,從而提高系統的可用性和容錯性,
  4. Spring Cloud Feign:提供了一個宣告式的HTTP客戶端,通過Feign,我們可以更加簡潔地撰寫服務間的呼叫代碼,
  5. Spring Cloud Hystrix:提供了熔斷器和執行緒隔離的功能,當某個服務出現故障時,Hystrix可以自動降級服務,從而保證整個系統的穩定性,
  6. Spring Cloud Zuul:提供了一個API網關服務,通過Zuul,我們可以實作請求路由、負載均衡、認證授權等功能,

9.4.4. 示例:創建一個簡單的微服務應用

在這個示例中,我們將使用Spring Boot和Spring Cloud創建一個簡單的微服務應用,該應用包含兩個服務:一個是用戶服務,另一個是訂單服務,用戶服務負責管理用戶資訊,訂單服務負責管理訂單資訊,訂單服務需要呼叫用戶服務來獲取用戶資訊,

1. 創建Eureka服務注冊中心

首先,我們需要創建一個Eureka服務注冊中心,使用Spring Boot創建一個新專案,并添加以下依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

application.yml檔案中,配置Eureka服務:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

在啟動類上添加@EnableEurekaServer注解:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

2. 創建用戶服務

創建一個新的Spring Boot專案,并添加以下依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml檔案中,配置服務名和Eureka服務地址:

spring:
  application:
    name: user-service

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

創建一個簡單的用戶物體類和控制器:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    // 省略getter和setter方法
}

@RestController
@RequestMapping("/users")
public class UserController {
    // 這里僅用一個Map模擬資料庫
    private final Map<Long, User> userMap = new ConcurrentHashMap<>();

    @PostMapping
    public User createUser(@RequestBody User user) {
        user.setId(userMap.size() + 1L);
        userMap.put(user.getId(), user);
        return user;
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable("id") Long id) {
        return userMap.get(id);
    }
}

在啟動類上添加@EnableDiscoveryClient注解:

@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

3. 創建訂單服務

創建一個新的Spring Boot專案,并添加以下依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

application.yml檔案中,配置服務名和Eureka服務地址:

spring:
  application:
    name: order-service

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

創建一個簡單的訂單物體類和控制器:

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long userId;
    // 省略getter和setter方法
}

@RestController
@RequestMapping("/orders")
public class OrderController {
    // 這里僅用一個Map模擬資料庫
    private final Map<Long, Order> orderMap = new ConcurrentHashMap<>();

    @Autowired
    private UserServiceClient userServiceClient;

    @PostMapping
    public Order createOrder(@RequestBody Order order) {
        order.setId(orderMap.size() + 1L);
        orderMap.put(order.getId(), order);
        return order;
    }

    @GetMapping("/{id}")
    public Order getOrder(@PathVariable("id") Long id) {
        Order order = orderMap.get(id);
        User user = userServiceClient.getUser(order.getUserId());
        order.setUser(user);
        return order;
    }
}

創建一個Feign客戶端來呼叫用戶服務:

@FeignClient("user-service")
public interface UserServiceClient {
    @GetMapping("/users/{id}")
    User getUser(@PathVariable("id") Long id);
}

在啟動類上添加@EnableDiscoveryClient@EnableFeignClients注解:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OrderServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }
}

至此,我們已經創建了一個簡單的微服務應用,用戶服務和訂單服務都向Eureka服務注冊中心注冊了自己,訂單服務可以通過Feign客戶端呼叫用戶服務獲取用戶資訊,

9.4.5. 示例總結

在本示例中,我們使用了Spring Cloud的主要組件來構建一個簡單的微服務應用,Eureka服務注冊中心負責管理服務實體資訊,Feign客戶端簡化了服務間呼叫的代碼,微服務架構使得我們可以獨立地開發、部署和擴展每個服務,

這個示例僅僅涉及到了微服務架構的一些基本概念,在實際專案中,我們還需要考慮其他諸如資料一致性、服務降級、API網關等問題,通過不斷學習和實踐,你會對分布式系統和微服務架構有更加深入的理解,
推薦閱讀:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

file

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/554489.html

標籤:其他

上一篇:SCM Manager XSS漏洞復現(CVE-2023-33829)

下一篇:返回列表

標籤雲
其他(160490) Python(38206) JavaScript(25478) Java(18205) C(15237) 區塊鏈(8270) C#(7972) AI(7469) 爪哇(7425) MySQL(7234) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4585) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1983) 功能(1967) HtmlCss(1952) Web開發(1951) C++(1932) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1879) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 9.4. 分布式與微服務架構

    在本章節中,我們將介紹分布式系統和微服務架構的基本概念。分布式系統解決了單體應用面臨的可擴展性、高可用性等問題,而微服務架構進一步提升了系統的可維護性和靈活性。 #### 9.4.1. 分布式系統基本概念 分布式系統是由多個獨立的計算節點組成的系統,這些節點通過網路進行通信和協作。 分布式系統的主要 ......

    uj5u.com 2023-06-07 07:42:56 more
  • SCM Manager XSS漏洞復現(CVE-2023-33829)

    SCM-Manager 是一款開源的版本庫管理軟體,同時支持 subversion、mercurial、git 的版本庫管理。該漏洞主要為攻擊者利用其多個功能的描述欄位的代碼缺陷,構造payload進行XSS攻擊。 ......

    uj5u.com 2023-06-06 18:41:28 more
  • 前端八股文everybody準備好了沒

    前端八股文可以幫助everybody更好地準備前端的一些面試,了解面試官可能會問到的問題,并且提前準備好答案。當然這不是唯一的也不是肯定的,還是需要大家自身好好理解所學的知識。 ......

    uj5u.com 2023-06-06 18:40:17 more
  • 9.4. 分布式與微服務架構

    在本章節中,我們將介紹分布式系統和微服務架構的基本概念。分布式系統解決了單體應用面臨的可擴展性、高可用性等問題,而微服務架構進一步提升了系統的可維護性和靈活性。 #### 9.4.1. 分布式系統基本概念 分布式系統是由多個獨立的計算節點組成的系統,這些節點通過網路進行通信和協作。 分布式系統的主要 ......

    uj5u.com 2023-06-06 18:39:05 more
  • 昇騰實戰丨DVPP媒體資料處理圖片解碼問題案例

    摘要:本期就分享幾個關于DVPP圖片解碼問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《DVPP媒體資料處理圖片解碼問題案例》,作者:昇騰CANN 。 DVPP(Digital Vision Pre-Processing)是昇騰AI處理器內置的影像處理單元,通過AscendCL媒體 ......

    uj5u.com 2023-06-06 18:25:45 more
  • Ascend C sqrt算子實戰

    摘要:撰寫一個Ascend C的sqrt算子,并通過內核呼叫方式在cpu和npu模式下進行驗證。 本文分享自華為云社區《【2023 · CANN訓練營第一季】——Ascend C sqrt算子實戰》,作者:dayao。 前言 撰寫一個Ascend C的sqrt算子,并通過內核呼叫方式在cpu和npu ......

    uj5u.com 2023-06-06 18:08:01 more
  • AI電詐—10分鐘被騙430萬

    ## 前言 最近比較熱門的AI電信詐騙應該是“福州市某科技公司法人代表郭先生10分鐘內被騙430萬元”,詐騙程序如下: 4月20日中午,郭先生的好友突然通過微信視頻聯系他,自己的朋友在外地競標,需要430萬保證金,且需要公對公賬戶過賬,想要借郭先生公司的賬戶走賬。基于對好友的信任,加上已經視頻聊天核 ......

    uj5u.com 2023-06-06 17:57:06 more
  • 電腦縮放例外、顯示亮度無法調整的處理辦法

    本文介紹Windows電腦**系統更新**或**重裝系統**后,出現螢屏亮度**最高且無法調整**、電腦**字體變小**等問題的解決方法。 最近更新了**Windows 10 20H2**版本,更新完畢打開電腦后發現,電腦中各類**字體變小**了,仿佛就是從一個普通的筆記本電腦變成了大螢屏電腦。 先 ......

    uj5u.com 2023-06-06 17:43:22 more
  • 2.1 變數與資料型別

    在Python中,變數是用來存盤資料的容器。資料型別是用來規定這些資料的型別,例如整數、浮點數和字串等。接下來我們將詳細了解Python中的變數和一些常見的資料型別。 #### 2.1.1 變數的命名和賦值 變數命名規則: 1. 變數名必須以字母(大寫或小寫)或下劃線(_)開頭,后面可以跟字母、數 ......

    uj5u.com 2023-06-06 17:20:21 more
  • 第三屆陜西省大學生網路安全技能部分WP

    #web ##easyrce 題目代碼如下: ``` 24、m->12、h->7、s->18、e->4、c->2 按照順序位移,數字字符跳過 最后獲得flag: flag(6fc0ea1e6f897033ee0c1fa40915d659} ......

    uj5u.com 2023-06-06 17:11:03 more