欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何實現(xiàn)Nacos注冊中心

這篇文章主要講解了“如何實現(xiàn)Nacos注冊中心”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何實現(xiàn)Nacos注冊中心”吧!

創(chuàng)新互聯(lián)服務(wù)項目包括資溪網(wǎng)站建設(shè)、資溪網(wǎng)站制作、資溪網(wǎng)頁制作以及資溪網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,資溪網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到資溪省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

什么是Nacos

一個更易于構(gòu)建云原生應(yīng)用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺。

通俗解釋就是:Nacos是一個注冊中心&配置中心

關(guān)鍵特性

  1. 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測

  2. 動態(tài)配置服務(wù)

  3. 動態(tài) DNS 服務(wù)

  4. 服務(wù)及其元數(shù)據(jù)管理

更多詳細內(nèi)容請關(guān)注Nacos官方文檔

什么是注冊中心

我們說Nacos是一個注冊中心,那么,什么是注冊中心呢?通過上面的關(guān)鍵特性不難發(fā)現(xiàn),注冊中心提供了服務(wù)注冊,服務(wù)發(fā)現(xiàn),服務(wù)健康檢查等基礎(chǔ)能力,使開發(fā)者能夠輕松地管理服務(wù),在Spring Cloud家族中,代表性的有Spring Cloud Eureka, Spring Cloud Consul,以及早期Apache的Zookeeper, 這些都能稱之為注冊中心,如果之前沒有接觸過微服務(wù)的小伙伴可能有疑問,為什么需要注冊中心呢?

注冊中心的由來

我們先來看看最原始的服務(wù)與服務(wù)之間的調(diào)用方式

Http遠程調(diào)用

如何實現(xiàn)Nacos注冊中心

相信這是最簡單的也是大家最熟悉的調(diào)用方式,在同一個公司中,A項目組(簡稱訂單服務(wù))想要使用B項目組(簡稱商品服務(wù))提供的能力時,往往就會采用這樣的方式,只需簡單的發(fā)送一個Http請求,即能獲取到對方的能力。

這樣的方式比較簡單,但同樣有一些問題,比如:

  • 商品服務(wù)做服務(wù)遷移時,訂單服務(wù)將不得不跟隨著修改請求地址,然后重啟服務(wù)

  • 商品服務(wù)做了集群時,訂單服務(wù)需要有負載均衡策略,不然就會造成商品服務(wù)單節(jié)點壓力過大

這時,有開發(fā)經(jīng)驗的小伙伴就會說:搞個Nginx做負載均衡不就好啦!沒錯,當服務(wù)上到生產(chǎn)環(huán)境時,我們都會改成這樣的方式。

Nginx負載

如何實現(xiàn)Nacos注冊中心

基于Http請求直接調(diào)用的問題,我們只需稍稍改變一下調(diào)用策略:中間增加一個Nginx,訂單服務(wù)不再直接調(diào)用商品服務(wù),而且訪問Nginx,由Nginx進行轉(zhuǎn)發(fā)到商品服務(wù)上,此時,

如果商品服務(wù)ip地址發(fā)生變更:改動Nginx的代理配置即可

如果商品服務(wù)發(fā)生擴縮容:改動Nginx的負載均衡配置即可

完美解決Http請求直接調(diào)用的問題

一般來說,尋常的項目到這里就可以了,但是隨著業(yè)務(wù)的不斷迭代,需要的能力也逐漸增多,此時不僅僅只有訂單和商品服務(wù),還出現(xiàn)了物流,積分,庫存,支付等等服務(wù),不僅如此,這些服務(wù)與服務(wù)之間還會發(fā)生相互調(diào)用的情況,訂單調(diào)積分,物流調(diào)庫存,訂單調(diào)支付....此時服務(wù)與服務(wù)之間的調(diào)用情況就會像下面這樣:

如何實現(xiàn)Nacos注冊中心

不難想象,此時的Nginx配置將會打動每一位運維小哥。后續(xù)每一個服務(wù)配置發(fā)生改動,或者增加一個服務(wù),運維小哥的心都將顫一顫。

直到有一天,開發(fā):今天再加一個服務(wù)。

如何實現(xiàn)Nacos注冊中心

阿鑒在之前的公司就有幸目睹過運維小哥配置服務(wù)時nginx的樣子,三臺nginx的配置滿滿當當,令人頭皮發(fā)麻,不知道有沒有小伙伴遇到過這種情況呢

使用MySQL記錄地址信息

使用Nginx負載的方式確實是一個比較好的方式,但就是有些費運維小哥,我們不妨思考一下,除了運維小哥知道服務(wù)的地址信息,還有誰知道呢?

沒錯,就是服務(wù)本身!

我們將運維小哥配置服務(wù)地址的動作轉(zhuǎn)化成:服務(wù)啟動時向MySQL中插入一條數(shù)據(jù)。

Nginx路由轉(zhuǎn)發(fā)的動作改為:訂單服務(wù)到數(shù)據(jù)庫中查詢商品服務(wù)的地址,再發(fā)起調(diào)用。

Nginx負載均衡改為:訂單服務(wù)查詢出商品服務(wù)列表,自己選擇其中一個地址。

改變?yōu)榈姆绞饺缦聢D:

如何實現(xiàn)Nacos注冊中心

表結(jié)構(gòu)中有個server_name字段,調(diào)用商品服務(wù)時使用server_name='goods-server'為條件查詢即可。

這樣子,我們就可以把運維小哥解放(kaichu)了。

善于思考的小伙伴不難看出其中帶來的問題:

  1. 所有的服務(wù)都需要連接這個MySQL,一但MySQL跪了,那咱也跪了。

  2. 每次服務(wù)發(fā)起調(diào)用時都需要查詢一次MySQL。

  3. 服務(wù)如果掛了,MySQL中的記錄仍舊存在。

那么我們現(xiàn)在就來著手解決這些問題吧

  1. 既然MySQL不行,我們就把它換成redis,所有服務(wù)連一個MySQL不太現(xiàn)實,連Redis總行吧

  2. 每次調(diào)用前都要查詢一次,改成查詢后緩存到服務(wù)本地,同時啟動定時任務(wù),每30秒更新緩存,服務(wù)調(diào)用時從緩存中獲取地址信息。

  3. 服務(wù)如果掛了,MySQL中的記錄仍舊存在:插入到Redis的數(shù)據(jù)有過期時間,而且服務(wù)啟動后開啟定時任務(wù),每30秒就更新緩存,如果服務(wù)掛了,緩存自動過期。

嘿,現(xiàn)在在看這個方案,是不是比較完美了呢~

偷偷告訴小伙伴,Dubbo使用Redis做注冊中心時,就是這么玩的

雖然看起來完美,但是第二和第三點在真正使用時,產(chǎn)生的問題產(chǎn)生的足以讓人自閉,現(xiàn)在阿鑒給大家模擬一下自閉場景。

環(huán)境:訂單服務(wù):一個實例,商品服務(wù),兩個實例,A和B

時間:1分00秒

訂單服務(wù)調(diào)用商品服務(wù),正常。

A商品服務(wù)緩存過期時間剩余:29S

時間:1分01秒

A商品服務(wù)同步Redis緩存信息,Redis剩余過期時間:30S。

同時,A商品服務(wù)下線(掛了)

時間:1分02秒

訂單服務(wù)調(diào)用商品服務(wù),由于A商品服務(wù)已下線,此時的調(diào)用時好時壞(調(diào)用B時正常)。

A商品服務(wù)在本地緩存過期時間剩余:28S

A商品服務(wù)Redis剩余過期時間: 29S

時間:1分29秒

本地緩存更新,刷新A商品服務(wù)緩存時間:30S

A商品服務(wù)Redis剩余過期時間: 1S,下一秒過期

時間:1分59秒

本地緩存更新,刷新A商品服務(wù)緩存:此時Redis緩存中已沒有A商品服務(wù)信息,所以本地緩存也將不再存在A商品服務(wù)信息。

訂單服務(wù)調(diào)用商品服務(wù),正常(此時緩存里只有B商品服務(wù)信息)

模擬完畢

大家可以看到,在1分01秒時,A商品服務(wù)已經(jīng)下線了,但是直到1分59秒時,訂單服務(wù)才能反應(yīng)過來,這其中的58秒的服務(wù)調(diào)用時好時壞,怎么樣,要是在生產(chǎn)環(huán)境足夠讓人自閉了吧。

當然,如果在訂單服務(wù)上加上一個重試策略:在調(diào)用A商品服務(wù)失敗后,重試,調(diào)用B商品服務(wù),就能較好的解決這個問題,但是假設(shè)A商品服務(wù)沒掛,它只是抖了一下,訂單服務(wù)又去調(diào)用了B商品服務(wù),這等于一個接口同時調(diào)了兩次,這時又要考慮接口冪等性的問題了。

這時可能有小伙伴會說:冪等性的問題有啥的,Easy! 但一個項目的開發(fā)人員水平參差不齊,要求人人都做到這是不太現(xiàn)實的,不說了,說多了該被噴了。

這個問題的關(guān)鍵在于:被調(diào)用的服務(wù)掛了,調(diào)用方能不能及時感知到這個變化。

嘿,最早的Zookeeper(簡稱zk)就是來干這活的~ zk的臨時節(jié)點機制能使服務(wù)下線后,zk能夠立即感知,watch機制能夠使其他服務(wù)立即收到所監(jiān)聽數(shù)據(jù)的變化。過多內(nèi)容阿鑒這里就不再展開說了,有興趣的小伙伴可以自己研究一下,Zookeeper官網(wǎng)

注冊中心

聊了那么多,相信小伙伴已經(jīng)有些感覺什么是注冊中心了哈,沒錯,以上都是注冊中心的能力,當我們把這些能力進行抽象,做成了一個服務(wù)時,那么這個服務(wù),就叫做注冊中心!

下面這張阿鑒畫的圖還是有些好看哈

如何實現(xiàn)Nacos注冊中心

可以看到,注冊中心的基礎(chǔ)接口有4個:服務(wù)注冊,服務(wù)發(fā)現(xiàn)(獲取),心跳檢測,服務(wù)注銷

以下為使用注冊中心時服務(wù)的調(diào)用過程

  1. 訂單服務(wù)|商品服務(wù)啟動時,調(diào)用服務(wù)注冊接口,將自己的地址信息發(fā)送給注冊中心

  2. 訂單服務(wù)調(diào)用商品服務(wù)時,調(diào)用服務(wù)獲取接口,獲取到商品服務(wù)的地址信息,放入緩存

  3. 使用調(diào)用組件進行負載均衡,發(fā)起調(diào)用

  4. 商品服務(wù)下線,調(diào)用服務(wù)注銷接口,注冊中心剔除商品服務(wù)信息

當然,這樣的方式還是沒能解決被調(diào)用的服務(wù)掛了,調(diào)用方能不能及時感知到這個變化這個問題,到底該如何解決,我們放到后面再聊~

相信小伙伴已經(jīng)明白了注冊中心的原理,那么現(xiàn)在我們就來手寫一個注冊中心吧,開始使用Nacos吧。

Nacos安裝

Nacos支持三種部署模式

  • 單機模式 - 用于測試和單機試用。

  • 集群模式 - 用于生產(chǎn)環(huán)境,確保高可用。

  • 多集群模式 - 用于多數(shù)據(jù)中心場景。

單機模式

環(huán)境:Ubuntu 18.04 LTS 一臺

下載安裝包

Releases notes

這里選擇版本1.4.2

wget https://github.wuyanzheshui.workers.dev/alibaba/nacos/releases/download/1.4.2/nacos-server-1.4.2.tar.gz
tar -xf nacos-server-1.4.2.tar.gz
配置

Nacos支持兩種數(shù)據(jù)存儲方式

  • 使用內(nèi)置數(shù)據(jù)源實現(xiàn)數(shù)據(jù)的存儲,使用這種方式直接啟動Nacos即可

  • 使用MySQL進行數(shù)據(jù)存儲,這種方式需要先有個MySQL

為了方便觀察數(shù)據(jù)存儲的基本情況,這里我們使用MySQL的存儲方式。

變變變,變出一臺MySQL,沒有MySQL的小伙伴可以參考安裝MySQL

  1. 執(zhí)行初始化SQL腳本

    腳本地址

  2. 修改配置文件

    vim nacos/conf/application.properties

    spring.datasource.platform=mysql
    ### Count of DB:
    db.num=1
    ### Connect URL of DB:
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=nacos
    db.password.0=nacos
    nacos.core.auth.enabled=true
    nacos.core.auth.enable.userAgentAuthWhite=false
    nacos.core.auth.server.identity.key=abcd
    nacos.core.auth.server.identity.value=123456

     

    其中db相關(guān)配置修改為自己的MySQL配置,nacos.core.auth.server.identity.keynacos.core.auth.server.identity.value自行定義

啟動
bash nacos/bin/startup.sh -m standalone

ubuntu系統(tǒng)需要使用bash命令,其他系統(tǒng)使用sh命令即可

此時在瀏覽器中輸入以下地址即可打開Nacos控制臺

127.0.0.1:8848/nacos/index.html

初始賬號密碼為:nacos | nacos

集群模式

環(huán)境:Ubuntu 18.04 LTS 三臺,地址分別為:

192.168.2.11:8848

192.168.2.12:8848

192.168.2.13:8848

沒有三臺的小伙伴可以搭建一個偽集群用于測試,如127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850

集群模式搭建十分簡單,具體步驟如下:

  1. 將單機模式的配置復(fù)制三份到每個節(jié)點中

  2. 在每個節(jié)點的conf文件夾下新建cluster.conf,配置如下

    192.168.2.11:8848
    192.168.2.12:8848
    192.168.2.13:8848

  3. 依次啟動各個節(jié)點

    bash startup.sh

這樣子nacos集群就搭建好了,但是在瀏覽器訪問時我們還需要一個nginx做負載均衡

變變變,變成一個nginx,如果沒有nginx的小伙伴可以參考安裝Nginx

  1. 配置反向代理

server {
    listen 8850;
    server_name _;
    location / {
       proxy_pass http://nacos-server;
    }
}
upstream nacos-server {
  server 192.168.2.13:8848 weight=5;
  server 192.168.2.12:8848 weight=5;
  server 192.168.2.11:8848 weight=5;
}
  1. 訪問

    由于我的Nginx在192.168.2.11上,所以我的訪問地址為:192.168.2.11:8848/nacos,初始賬號密碼同單機模式:nacos | nacos

Nacos Spring Cloud

Nacos已經(jīng)搭建好了,接下來就是使用了。

下面阿鑒給大家介紹一下如何在Spring Cloud項目中使用Nacos

基本使用

新建項目
  1. 新建一個my-micro-service-demo項目,并在pom.xml中增加Spring Cloud相關(guān)依賴

<properties>
  <java.version>1.8</java.version>
  <spring.cloud-version>Hoxton.SR8</spring.cloud-version>
  <spring.cloud.alibaba-version>2.2.5.RELEASE</spring.cloud.alibaba-version>
</properties>

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring.cloud-version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${spring.cloud.alibaba-version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
  1. 在項目中增加兩個子模塊,分別為my-ordermy-goods, 并引入Nacos的依賴

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 編寫bootstrap.yaml配置文件

server:
  port: 8080
spring:
  application:
    name: my-order
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.2.11:8850
        username: nacos
        password: nacos

management:
  endpoints:
    web:
      exposure:
        include: "*"

商品服務(wù)修改一下服務(wù)名和端口號即可

  1. 編寫啟動類

package com.my.micro.service.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author Zijian Liao
 * @since 1.0.0
 */
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

}
  1. 啟動項目,查看Nacos控制臺

    如何實現(xiàn)Nacos注冊中心

服務(wù)注冊成功

發(fā)起調(diào)用

服務(wù)已經(jīng)注冊到Nacos上了,接下來,我們嘗試使用訂單服務(wù)調(diào)用商品服務(wù)吧

在畫的原理圖中,訂單服務(wù)是使用的一個調(diào)用組件調(diào)用商品服務(wù),大家先不必關(guān)心這個調(diào)用組件是什么,關(guān)于這部分內(nèi)容,阿鑒會在后續(xù)的文章中詳解介紹。

  1. 在商品服務(wù)中編寫一個接口

    @RestController
    @RequestMapping("/goods")
    public class GoodsController {
    
    
        @GetMapping("/get")
        public String get(){
            return "商品服務(wù)響應(yīng)了一個蘋果";
        }
    }

  2. 在訂單服務(wù)中注入調(diào)用組件

      @LoadBalanced
      @Bean
      public RestTemplate restTemplate(){
        return new RestTemplate();
      }

     

    增加@LoadBalanced注解會使RestTemplate增加基于服務(wù)名進行調(diào)用的功能

  3. 發(fā)起調(diào)用

    @RestController
    @RequestMapping("/order")
    public class OrderController {
    
        @Resource
        private RestTemplate restTemplate;
    
        @GetMapping("/get")
        public String get(){
            // 舊方式:restTemplate.getForObject("http://127.0.0.1:8081/goods/get", String.class)
            // 現(xiàn)在直接使用服務(wù)名即可發(fā)起調(diào)用
            return restTemplate.getForObject("http://my-goods/goods/get", String.class);
        }
    }

  4. 測試

    如何實現(xiàn)Nacos注冊中心

優(yōu)雅上下線

Nacos還提供服務(wù)實例的上下線操作,在服務(wù)詳情頁面,可以點擊實例的上線或者下線按鈕,被下線的實例,將不會再被服務(wù)所獲取。

如何實現(xiàn)Nacos注冊中心

當然,前面也提到了,由于緩存的原因,服務(wù)下線后,調(diào)用方并不能立即感知到,需要等待一定的時間。

那么,這個功能可以用來做什么呢?

假設(shè)商品服務(wù)需要升級

運行版本:v1.0.0

升級版本:v1.1.0

我們先將v1.1.0部署到生產(chǎn)環(huán)境中,此時商品服務(wù)便有了兩個實例v1.0.0和v1.1.0,緊接著我們需要將舊版本下線

如果我們直接停止服務(wù),此時商品服務(wù)正在處理業(yè)務(wù),業(yè)務(wù)被中斷,造成的后果不可估摸。

如果我們先將v1.0.0下線,等待一段時間,此時便不會有服務(wù)再訪問v1.0.0了,便可以安全停止服務(wù)了。

命名空間

在以往的注冊中心里,一般都是一個注冊中心只對應(yīng)一整個微服務(wù)系統(tǒng),這是因為只要有服務(wù)注冊到了注冊中心上,那么只要在這個注冊中心上的服務(wù),都是可以相互訪問的,這樣就造成了每一個微服務(wù)系統(tǒng),都要有一個自己的注冊中心,比如Eureka。

這就會造成一個資源浪費的問題,因為一個注冊中心明明是可以注冊成千上萬的實例的(Nacos服務(wù)發(fā)現(xiàn)性能測試報告),所以,Nacos還給我們提供了命名空間的功能,這使得服務(wù)與服務(wù)之間擁有了隔離機制(同一個命名空間下的服務(wù)才能相互訪問),這樣,每個命名空間便可以對應(yīng)一個微服務(wù)系統(tǒng)。

  1. 新增命名空間

    新增一個dev命名空間與test命名空間

    如何實現(xiàn)Nacos注冊中心

  2. 修改服務(wù)配置

    修改my-goods, 讓my-goods處于dev命名空間下

    server:
      port: 8081
    spring:
      application:
        name: my-goods
      main:
        allow-bean-definition-overriding: true
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.2.11:8850
            namespace: dev
            username: nacos
            password: nacos

    修改my-order, 讓my-order處于test命名空間下

    server:
      port: 8080
    spring:
      application:
        name: my-order
      main:
        allow-bean-definition-overriding: true
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.2.11:8850
            namespace: test
            username: nacos
            password: nacos

  3. 重啟服務(wù)

    查看Nacos控制臺

    my-goods

    如何實現(xiàn)Nacos注冊中心

    my-order

    如何實現(xiàn)Nacos注冊中心

  4. 測試

    如何實現(xiàn)Nacos注冊中心

    此時服務(wù)已經(jīng)隔離了

感謝各位的閱讀,以上就是“如何實現(xiàn)Nacos注冊中心”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對如何實現(xiàn)Nacos注冊中心這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

標題名稱:如何實現(xiàn)Nacos注冊中心
轉(zhuǎn)載來于:http://www.chinadenli.net/article28/gpohjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名面包屑導(dǎo)航ChatGPT云服務(wù)器電子商務(wù)外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站