小師妹學JavaIO之:文件File和路徑Path

簡介

文件和路徑有什麼關係?文件和路徑又隱藏了什麼秘密?在文件系統的管理下,創建路徑的方式又有哪些?今天F師兄帶小師妹再給大家來一場精彩的表演。

文件和路徑

小師妹:F師兄我有一個問題,java中的文件File是一個類可以理解,因為文件裡面包含了很多其他的信息,但是路徑Path為什麼也要單獨一個類出來?只用一個String表示不是更簡單?

更多精彩內容且看:

  • 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
  • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
  • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
  • java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程

更多內容請訪問www.flydean.com

萬物皆有因,沒有無緣無故的愛,也沒有無緣無故的恨。一切真的是妙不可言啊。

我們來看下File和path的定義:

public class File
   implements Serializable, Comparable<File>
public interface Path
    extends Comparable<Path>, Iterable<Path>, Watchable

首先,File是一個類,它表示的是所有的文件系統都擁有的屬性和功能,不管你是windows還是linux,他們中的File對象都應該是一樣的。

File中包含了Path,小師妹你且看,Path是一個interface,為什麼是一個interface呢?因為Path根據不同的情況可以分為JrtPath,UnixPath和ZipPath。三個Path所對應的FileSystem我們在上一篇文章中已經討論過了。所以Path的實現是不同的,但是包含Path的File是相同的。

小師妹:F師兄,這個怎麼這麼拗口,給我來一個直白通俗的解釋吧。

既然這樣,且聽我解釋:愛國版的,或許我們屬於不同的民族,但是我們都是中國人。通俗版的,大家都是文化人兒,為啥就你這麼拽。文化版的,同九年,汝何秀?

再看兩者的實現接口,File實現了Serializable表示可以被序列化,實現了Comparable,表示可以被排序。

Path繼承Comparable,表示可以被排序。繼承Iterable表示可以被遍歷,可以被遍歷是因為Path可以表示目錄。繼承Watchable,表示可以被註冊到WatchService中,進行監控。

文件中的不同路徑

小師妹:F師兄,File中有好幾個關於Path的get方法,能講一下他們的不同之處嗎?

直接上代碼:

public void getFilePath() throws IOException {
        File file= new File("../../www.flydean.com.txt");
        log.info("name is : {}",file.getName());

        log.info("path is : {}",file.getPath());
        log.info("absolutePath is : {}",file.getAbsolutePath());
        log.info("canonicalPath is : {}",file.getCanonicalPath());
    }

File中有三個跟Path有關的方法,分別是getPath,getAbsolutePath和getCanonicalPath。

getPath返回的結果就是new File的時候傳入的路徑,輸入什麼返回什麼。

getAbsolutePath返回的是絕對路徑,就是在getPath前面加上了當前的路徑。

getCanonicalPath返回的是精簡后的AbsolutePath,就是去掉了.或者..之類的指代符號。

看下輸出結果:

 INFO com.flydean.FilePathUsage - name is : www.flydean.com.txt
 INFO com.flydean.FilePathUsage - path is : ../../www.flydean.com.txt
 INFO com.flydean.FilePathUsage - absolutePath is : /Users/flydean/learn-java-io-nio/file-path/../../www.flydean.com.txt
 INFO com.flydean.FilePathUsage - canonicalPath is : /Users/flydean/www.flydean.com.txt

構建不同的Path

小師妹:F師兄,我記得路徑有相對路徑,絕對路徑等,是不是也有相應的創建Path的方法呢?

當然有的,先看下絕對路徑的創建:

public void getAbsolutePath(){
        Path absolutePath = Paths.get("/data/flydean/learn-java-io-nio/file-path", "src/resource","www.flydean.com.txt");
        log.info("absolutePath {}",absolutePath );
    }

我們可以使用Paths.get方法傳入絕對路徑的地址來構建絕對路徑。

同樣使用Paths.get方法,傳入非絕對路徑可以構建相對路徑。

public void getRelativePath(){
        Path RelativePath = Paths.get("src", "resource","www.flydean.com.txt");
        log.info("absolutePath {}",RelativePath.toAbsolutePath() );
    }

我們還可以從URI中構建Path:

public void getPathfromURI(){
        URI uri = URI.create("file:///data/flydean/learn-java-io-nio/file-path/src/resource/www.flydean.com.txt");
        log.info("schema {}",uri.getScheme());
        log.info("default provider absolutePath {}",FileSystems.getDefault().provider().getPath(uri).toAbsolutePath().toString());
    }

也可以從FileSystem構建Path:

public void getPathWithFileSystem(){
            Path path1 = FileSystems.getDefault().getPath(System.getProperty("user.home"), "flydean", "flydean.txt");
           log.info(path1.toAbsolutePath().toString());

            Path path2 = FileSystems.getDefault().getPath("/Users", "flydean", "flydean.txt");
            log.info(path2.toAbsolutePath().toString());

        }

總結

好多好多Path的創建方法,總有一款適合你。快來挑選吧。

本文的例子https://github.com/ddean2009/learn-java-io-nio

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/java-io-file-path/

本文來源:flydean的博客

歡迎關注我的公眾號:程序那些事,更多精彩等着您!

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

掌握SpringBoot-2.3的容器探針:基礎篇

歡迎訪問我的GitHub

  • 地址:https://github.com/zq2599/blog_demos
  • 內容:原創文章分類匯總,及配套源碼,涉及Java、Docker、K8S、DevOPS等

關於《SpringBoot-2.3容器化技術》系列

《SpringBoot-2.3容器化技術》系列,旨在和大家一起學習實踐2.3版本帶來的最新容器化技術,讓咱們的Java應用更加適應容器化環境,在雲計算時代依舊緊跟主流,保持競爭力;
全系列文章分為主題和輔助兩部分,主題部分如下:

  1. 《體驗SpringBoot(2.3)應用製作Docker鏡像(官方方案)》;
  2. 《詳解SpringBoot(2.3)應用製作Docker鏡像(官方方案)》;
  3. 《掌握SpringBoot-2.3的容器探針:基礎篇》;
  4. 《掌握SpringBoot-2.3的容器探針:深入篇》;
  5. 《掌握SpringBoot-2.3的容器探針:實戰篇》;
  • 輔助部分是一些參考資料和備忘總結,如下:
  1. 《SpringBoot-2.3鏡像方案為什麼要做多個layer》;
  2. 《設置非root賬號不用sudo直接執行docker命令》;
  3. 《開發階段,將SpringBoot應用快速部署到K8S》;

SpringBoot容器探針系列文章簡介

為了讓應用更適應容器化環境,SpringBoot2.3版本推出了新的探針技術,《掌握SpringBoot-2.3的容器探針》系列旨在與您一起學習和實踐這些新技術,分為三個階段:

  1. 基礎篇:即本文,對容器探針的相關知識點進行梳理和學習;
  2. 深入篇:繼續深入學習探針相關的知識點;
  3. 實戰篇:將springboot應用部署在kubernetes環境,並使用最新的探針技術;

探針特性的官方信息

  • 如下圖紅框所示,2.3版本的容器探針特性早在預覽版(v2.3.0.M4)就已經發布:

  • 如今v2.3.0.RELEASE已發布,可以放心的學習和使用該特性了,首先把基礎知識點列出來,確保準備工作OK;

知識點整理

下面是掌握探針技術所需的基礎知識,也是本文的主要內容:

  1. kubernetes的存活探針livenessProbe
  2. kubernetes的就緒探針readinessProbe
  3. SpringBoot的actuator

接下來逐個學習,有了這些知識積累,我們才能更好的閱讀官方資料,開發適合自己業務場景的探針;

kubernetes的存活探針livenessProbe

  1. kubernetes的探針涉及的內容是很多的,這裏只提和SpringBoot相關的部分;
  2. kubelet 使用存活探針livenessProbe來知道什麼時候要重啟容器;
  3. 下圖是kubernetes官網的存活探針示例,幾個關鍵參數已經做了詳細說明:
  1. 可見如果我們的SpringBoot應用發布到kubernetes環境,只要應用還健康,livenessProbe對應的地址就要能響應200-400的返回碼;

kubernetes的就緒探針readinessProbe

  1. 有時候,應用程序會暫時性的不能提供通信服務。例如,應用程序在啟動時可能需要加載很大的數據或配置文件,或是啟動后要依賴等待外部服務。在這種情況下,既不想殺死應用程序,也不想給它發送請求。Kubernetes 提供了就緒探測器來發現並緩解這些情況。容器所在 Pod 上報還未就緒的信息,並且不接受通過 Kubernetes Service 的流量。
  2. 就緒探測器的配置和存活探測器的配置相似,唯一區別就是要使用 readinessProbe字段,而不是 livenessProbe 字段;
  3. 簡單的說,就緒探針正常的容器,k8s就認為是可以對外提供服務的,相應的請求也會被調度到該容器上來;

SpringBoot的actuator

  1. 簡單來說,actuator是用來幫助用戶監控和操作SprinBoot應用的,這些監控和操作都可以通過http請求實現,如下圖,http://localhost:8080/actuator/health 地址返回的是應用的健康狀態:
  1. 下面是常用的actuator地址,訪問不同的地址可以得到不同的信息:
  1. 在SpringBoot-2.3版本中,actuator新增了兩個地址:/actuator/health/liveness/actuator/health/readiness,前者用作kubernetes的存活探針,後者用作kubernetes的就緒探針

畫外音:SpringBoot的探針技術就這點東西?

  1. 文章看到這裏,您可能覺得索然無味:所謂的容器探針特性如此簡單,新增兩個actuator地址留給kubernetes的存活和就緒探針用,只要這兩個地址響應正常,kubernetes就判定該容器正常;
  2. 大多數時候,上述結論並無不妥,SpringBoot官方給出的推薦配置如下圖,我們只要照搬即可:
  1. 冷靜下來仔細思考,有三個問題似乎沒有解決:
  • 首先,SpringBoot為kubernetes提供了兩個actuator項,但是那些並未部署在kubernetes的SringBoot應用呢?用不上這兩項也要對外暴露這兩個服務地址嗎?

  • 其次,就緒探針是什麼時候開始返回200返回碼的?應用啟動階段,業務服務可能需要一段時間才能正常工作,就緒探針要是提前返回了200,那k8s就認為容器可以正常工作了,這時候把外部請求調度過來是無法正常響應的,所以搞清楚就緒探針的狀態變化邏輯很重要;

  • 最後,也是最重要的一點:有的場景下,例如外部依賴服務異常、本地全局異常等情況下,業務不想對外提供服務,等到問題解決后業務又可以對外提供服務了,如果此時我們能自己寫代碼控制就緒探針的返回碼,那就做到了控制kubernetes是否將外部請求調度到此容器上,這可是個很實用的功能!

還需要繼續深入

面對上述三個問題您是否會感慨:看似簡單的容器探針技術,想要用好還需掌握更多知識,接下來的文章中咱們一起努力吧,從知識覆蓋到實戰操練,終究會掌握這門實用技術;

歡迎關注我的公眾號:程序員欣宸

https://github.com/zq2599/blog_demos

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

※回頭車貨運收費標準

Elasticsearch 別管原理,先run起來

少點代碼,多點頭髮

本文已經收錄至我的GitHub,歡迎大家踴躍star 和 issues。

https://github.com/midou-tech/articles

看文章有兩點需要注意:

  • 本公號講解的Elasticsearch是基於7.7.0版本,你們在閱讀一些相關書籍和博客注意版本,不同版本很多概念會有出入。

  • 文章寫作過程中會經常將Elasticsearch簡寫為Es,閱讀過程中需要注意。

一般學習一個新的技術或者產品,第一步就是用起來。什麼設計理論,框架源碼,都別和我談,先run起來。這也是在公司看別人項目的絕招。

用起來,有一個很明顯的點,是你能感受到他,不然天天看理論知識,看源碼會讓你覺得你好像懂了,但又心裏沒底,最終會導致你走火入魔。

今天龍叔的主題就是 學Es,先run起來,用起來之後在去探索內部更多問題和原理。

Elasticsearch

Elasticsearch安裝

Elasticsearch 的底層是開源庫 Lucene。但是,你沒法直接用 Lucene,必須自己寫代碼去調用它的接口。Elasticsearch 是 Lucene 的封裝,提供了 REST API 的操作接口,開箱即用。

Elasticsearch 需要 Java 8 環境。如果你的機器還沒安裝 Java,可以在網上找個教程安裝,注意要保證環境變量JAVA_HOME正確設置。

安裝完 Java,就可以跟着 官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/zip-targz.html 安裝 Elasticsearch。我這裏就直接下載壓縮包比較簡單。

#mac和linux上安裝教程一樣的
# 下載
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.0-darwin-x86_64.tar.gz
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.0-darwin-x86_64.tar.gz.sha512
$ shasum -a 512 -c elasticsearch-7.7.0-darwin-x86_64.tar.gz.sha512 
#解壓
$ tar -xzf elasticsearch-7.7.0-darwin-x86_64.tar.gz
$ cd elasticsearch-7.7.0/

接着,進入解壓后的目錄,運行下面的命令,啟動 Elasticsearch。

$ ./bin/elasticsearch

如果一切正常,那可能是run起來了,Es默認打開9200端口。測試下是否啟動成功,用 curl 工具測試(這個工具後面會寫一篇文章介紹,還有上面用的wget),也可以在瀏覽器訪問。

$ curl localhost:9200 #測試命令
{
  "name" : "MacBook-Pro.local",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Z1NxCjE4T6CgTjZmpAVe_A",
  "version" : {
    "number" : "7.7.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "81a1e9eda8e6183f5237786246f6dced26a10eaf",
    "build_date" : "2020-05-12T02:01:37.602180Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

請求9200端口,Elastic 返回一個 JSON 對象,包含當前節點、集群、版本等信息。

收到這樣一個JSON對象,說明啟動成功。

安裝整體沒什麼壓力,java環境裝好,基本就是開箱即用。程序員最喜歡使用這樣的中間件,開箱即用,從不管箱子裏面是啥。

基本概念

本來run起來就準備說搞點數據進去,在和Es進行交互起來,但是正在準備寫數據進索引的時候,發現不對勁。

可能有人根本不知道什麼是索引?什麼Document。於是 就來了,先普及下基本概念。

節點(Node) 與集群( Cluster)

Elastic 本質上是一個分佈式數據庫,允許多台服務器協同工作,每台服務器可以運行多個 Elastic 實例。

單個 Elastic 實例稱為一個節點(node)。一組節點構成一個集群(cluster)。

索引(Index)

Elastic 會索引所有字段,經過處理后寫入一個反向索引(Inverted Index),也經常稱之為倒排索引。查找數據的時候,直接查找該索引。

Elastic 數據管理的頂層單位就叫做 Index(索引)。它是單個數據庫的同義詞。每個 Index (即數據庫)的名字必須是小寫。

文檔(Document)

Index 裏面單條的記錄稱為 Document(文檔)。許多條 Document 構成了一個 Index。

寫點數據進Es

基本概念已經有了,知道查找是通過倒排索引進行的,所以數據肯定是存放在索引裏面的。

我們現在要寫數據進Es,其實就是把數據寫到Es的索引(index)中,前面已經把Es啟動起來了,並沒有創建索引。

今天寫數據就不寫代碼了,利用ES的一些封裝很好的接口,直接命令行操作,後期在用代碼寫數據進Es。

先創建一個index ,使用curl 工具在命令行操作,這是一個put請求。

$curl -X PUT 'localhost:9200/user'

查看索引是否以及創建成功

$ curl -X GET 'http://localhost:9200/_cat/indices?v'

這個get請求可以查看當前節點的所有索引

妥妥的已經創建成功

順便說下,刪除一個索引的命令,DELETE參數表示刪除

$curl -X DELETE 'localhost:9200/user'

到這裏索引已經創建好了,可以寫點數據進去了。使用接口 /index/_doc/id ,/索引名/_doc/doc_id

$ curl -X PUT -H 'Content-Type: application/json' 'localhost:9200/user/_doc/1' -d ' {  "name": "龍躍十二",  "title": "工程師",  "desc": "一個分享互聯網技術和心路歷程的star" }'

查看當前索引下的所有數據

$ curl 'localhost:9200/user/_search?pretty=true 

到這裏基本我們已經可以寫數據到指定索引了,生產場景不會這麼寫數據的,都是用代碼寫海量數據進ES的,這就幾條數據也沒什麼搜索性能可談的。

我之前工作中日誌數據都是TB級別的寫到Es中,當遇到這種數據量的搜索時才會感受到搜索引擎的魅力,才會意識到Es的重要性。

這裏主要是練手和跑通流程,所以造了一些數據到Es中

和ES進行交互

其實寫數據進Es已經是一種交互了,在講一些其他的交互接口

目前講的交互方式主要是通過原生的請求的方式,還沒有上升到界面操作,後期在學習的過程中會展現出來。

查詢交互

使用 GET 方法,直接請求/Index/_search,就會返回所有記錄。

$ curl 'localhost:9200/user/_search?pretty=true'
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "user",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "龍躍十二",
          "title" : "工程師",
          "desc" : "一個分享互聯網技術和心路歷程的star"
        }
      },
      {
        "_index" : "user",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "三y",
          "title" : "工程師",
          "desc" : "只有光頭才能變得更強"
        }
      },
      {
        "_index" : "user",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "敖丙",
          "title" : "工程師",
          "desc" : "一個互聯網苟且偷生的工具人"
        }
      }
    ]
  }
}

上面代碼中,返回結果的 took字段表示該操作的耗時(單位為毫秒),timed_out字段表示是否超時,hits字段表示命中的記錄,裏面子字段的含義如下。

  • total:返回記錄數,本例是2條。
  • max_scor:最高的匹配程度,本例是1.0。
  • hits:返回的記錄組成的數組。

返回的記錄中,每條記錄都有一個_score字段,表示匹配的程序,默認是按照這個字段降序排列。

Es的查詢語法還有很多,後面在結合實戰項目的時候會講解其他語法,你也可以看下官網語法介紹 官網查詢語法。

數據操作交互

新增一條doc記錄的語法示例如下,可以不用指定doc_id的,Es會默認有一個doc_id。

$ curl -X PUT -H 'Content-Type: application/json' 'localhost:9200/user/_doc/2' -d ' {  "name": "敖丙",  "title": "工程師",  "desc": "一個互聯網苟且偷生的工具人" }'

刪除一條doc記錄的語法是 /Index/_doc/doc_id

$ curl -X DELETE  'localhost:9200/user/_doc/1'

更新一條記錄的語法示例

$ curl -X PUT -H 'Content-Type: application/json' 'localhost:9200/user/_doc/2' -d ' {  "name": "三太子敖丙",  "title": "工程師",  "desc": "一個互聯網苟且偷生的工具人" }'

總結一下

本篇文章,我們把Es從官網下載下來,可以run起來,可以寫數據進去,可以查詢,學習了一些簡單的交互語法。

當然Es的魅力不在於此,Es的魅力之一在於可以對海量數據進行高效的檢索。

下篇文章出一個關於Es的寫作大綱,方便大家在看的過程中有一個整理的輪廓。

Es整個知識點我也是邊學邊寫,有什麼不對的地方,還希望大佬們儘管指出來。

龍躍十二

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

計算機網絡之網絡層

網絡層概述

  網絡層的目的是實現兩個端系統之間的數據透明傳送,具體功能包括尋址和路由選擇、連接的建立、保持和終止等。它提供的服務使傳輸層不需要了解網絡中的數據傳輸和交換技術。如果您想用盡量少的詞來記住網絡層,那就是”路徑選擇、路由及邏輯尋址”。

  網絡層中涉及眾多的協議,其中包括最重要的協議,也是TCP/IP的核心協議——IP協議。IP協議非常簡單,僅僅提供不可靠、無連接的傳送服務。IP協議的主要功能有:無連接數據報傳輸、數據報路由選擇和差錯控制。與IP協議配套使用實現其功能的還有地址解析協議ARP、逆地址解析協議RARP、因特網報文協議ICMP、因特網組管理協議IGMP。

IP協議詳解

虛擬互連網絡

  實際的計算機網絡是錯綜複雜的,物理設備通過使用IP協議,屏蔽了物理網絡之間的差異,當網絡中的主機使用IP協議連接時,則無需關注網絡細節。IP協議使得複雜的實際網絡變為一個虛擬互連的網絡,還使得網絡層可以屏蔽底層細節而專註網絡層的數據轉發,IP協議解決了在虛擬網絡中數據報傳輸路徑的問題。

  IP地址長度為32位,常分成4個8位,IP地址常使用點分十進制來表示(0~255.0~255.0~255.0~255),也就是共有\(2^{32} = 4294961296\)個IP地址。下圖是IP協議的格式:

我們來看看IP協議的首部:

4位版本 4位首部長度 8位服務類型(TOS) 16位總長度(字節)
16位標識 3位標誌 13位片偏移
8位生存時間(TTL) 8位協議 16位首部校驗和
32位源IP地址
32位目的IP地址
選項options(若有)
IP數據

版本:佔4位,指的是IP協議的版本,通信雙方的版本必須一致,當前主流版本是4,即IPv4,也有IPv6
首部位長度:佔4位,最大數值為15,表示的是IP首部長度,單位是“32位字”(4個字節),也即是IP首部最大長度為60字節
總長度:佔16位,最大數值為65535,表示的是IP數據報總長度(IP首部+IP數據)
TTL:佔8位,表明IP數據報文在網絡中的壽命,每經過一個設備,TTL減1,當TTL=0時,網絡設備必須丟棄該報文。作用:避免數據在網絡中無限傳輸,當這個網絡報文找不到目的機器時,而進行無限傳輸,來浪費帶寬資源
協議:佔8位,表明IP數據所攜帶的具體數據是什麼協議的(如:TCP、UDP等)

協議名 ICMP IGMP IP TCP UDP OSPF
字段值 1 2 4 6 17 89

首部校驗和:佔16位,校驗IP首部是否有出錯

IP協議的轉發流程

  在數據鏈路層的學習中我們知道了MAC地址表,由於IP協議的轉發是通過逐跳(hop-by-hop)來實現的,所以在網絡層中,存在一個類似於MAC地址表的路由表,路由表是存儲的目的IP地址和下一跳IP地址的映射,計算機或者路由器都擁有路由表。路由表如下:

目的IP地址 下一跳IP地址
IP1 IP4
IP2 IP5
IP3 IP6

A設備是如何跨設備將數據發送給C設備的呢?

A設備向C設備在網絡層中傳輸數據的過程如下:

  1. A發出目的地為C的IP數據報,查詢路由表發現下一跳為E
  2. A將數據報發送給E
  3. E查詢路由表發現下一跳為F,將數據報發送給F
  4. F查詢路由表發現目的地C直接連接,將數據報發送給C

現在結合數據鏈路層和網絡層,再來看一下跨設備傳輸數據的過程:

  1. A發出目的地為C的IP數據報,查詢路由表發現下一跳為E
  2. A將IP數據報交給數據鏈路層,並告知目的MAC地址是E
  3. 數據鏈路層填充源MAC地址A目的MAC地址E
  4. 數據鏈路層通過物理層將數據發送給E
  5. E的數據鏈路層接收到數據幀,把幀數據交給網絡層
  6. E查詢路由表,發現下一跳為F
  7. E把數據報交給數據鏈路層,並告知目的MAC地址為F
  8. E的數據鏈路層封裝數據幀併發送
  9. F的數據鏈路層接收到數據幀,把幀數據交給網絡層
  10. F查詢路由表,發現下一跳為C
  11. F把數據報交給數據鏈路層,並告知目的MAC地址為C
  12. F的數據鏈路層F封裝數據幀併發送

  從IP協議的轉發流程中我們可以看到:數據幀每一跳的MAC地址都在變化,但IP數據報每一跳的IP地址始終不變。但我們會發現一個問題,在網絡層中將數據報交給數據鏈路層,並且需要告知目的MAC地址,但是在網絡層中只知道IP地址,我們是如何知道目的MAC地址的呢?這就是ARP協議做的事情了。

ARP協議

  ARP(Address Resolution Protocol)地址解析協議,將網絡層中的32位IP地址,通過ARP協議解析為數據鏈路層中的48位MAC地址。這個映射關係是存儲在ARP緩存表中的。arp -a命令:查看ARP緩存表

IP地址 MAC地址
192.168.83.254 00-50-56-e0-33-40
192.168.83.255 01-00-5e-00-00-16
224.0.0.251 01-00-5e-00-00-fc
239.1.2.3 01-00-5e-40-98-8f
255.255.255.255 01-00-5e-7f-ff-fa

  ARP緩存表是ARP協議和RARP協議運行的關鍵,ARP緩存表緩存了IP地址到硬件地址之間的映射關係,ARP緩存表中的記錄並不是永久有效的,有一定的期限。這是因為當你的網絡設備,換個網絡環境,網絡設備的IP地址就可能會發生改變,ARP緩存表中的原來的記錄就失效了。當ARP緩存表中有映射關係,就直接查詢ARP緩存表;如果沒有這個映射關係,ARP協議就會廣播,並記錄回應得地址信息。

  RARP(Reverse Address Resolution Protocol)逆地址解析協議,其作用與ARP協議相反,即把數據鏈路層中48位MAC地址,解析位網絡層中的32位IP地址。(R)ARP協議是TCP/IP協議棧裏面基礎的協議,ARP和RARP的操作對程序員是透明的,理解(R)ARP協議有助於理解網絡分層的細節。

IP地址的子網劃分

分類的IP地址

最小網絡號 最大網絡號 子網數量 最小主機號 最大主機號 主機數量
A 0(00000000) 127(01111111) \(2^7\) 0.0.0 255.255.255 \(2^{24}\)
B 128.0 191.255 \(2^{14}\) 0.0 255.255 \(2^{16}\)
C 192.0.0 223.255.255 \(2^{21}\) 0 255 \(2^{8}\)

特殊的主機號:主機號全0表示當前網絡段,不可分配為特定主機;主機號為全1表示廣播地址,向當前網絡段所有主機發消息

  • A類地址網絡段全0(00000000)表示特殊網絡
  • A類地址網絡段后7位全1(01111111:127)表示迴環地址
  • B類地址網絡段(10000000.00000000:128.0)是不可使用的
  • C類地址網絡段(192.0.0)是不可使用的

實際可使用各類IP地址如下:

最小網絡號 最大網絡號 子網數量 最小主機號 最大主機號 主機數量
A 1 127(01111111) \(2^7\)-2 0.0.1 255.255.254 \(2^{24}\)-2
B 128.1 191.255 \(2^{14}\)-1 0.1 255.254 \(2^{16}\)-2
C 192.0.1 223.255.255 \(2^{21}\)-1 1 254 \(2^{8}\)-2

  127.0.0.1,通常被稱為本地迴環地址(Loopback Address),不屬於任何一個有類別地址類。它代表設備的本地虛擬接口,所以默認被看作是永遠不會宕掉的接口。在Windows操作系統中也有相似的定義,所以通常在安裝網卡前就可以ping通這個本地迴環地址。一般都會用來檢查本地網絡協議、基本數據接口等是否正常的。

劃分子網

  隨着互連網應用的不斷擴大,原先的IPv4的弊端也逐漸暴露出來,即網絡號佔位太多,而主機號位太少,所以其能提供的主機地址也越來越稀缺,目前除了使用NAT在企業內部利用保留地址自行分配以外,通常都對一個高類別的IP地址進行再劃分,以形成多個子網,提供給不同規模的用戶群使用。這裏主要是為了在網絡分段情況下有效地利用IP地址,通過對主機號的高位部分取作為子網號,從通常的網絡位界限中擴展或壓縮子網掩碼,用來創建某類地址的更多子網。但創建更多的子網時,在每個子網上的可用主機地址數目會比原先減少。

上圖就把原來的C類地址劃分成了兩個子網。
  但子網號這麼多,有沒有辦法快速判斷某個IP的網絡號?這就是子網掩碼的作用了,子網掩碼是標誌兩個IP地址是否同屬於一個子網的,也是32位二進制地址,其每一個為1代表該位是網絡位,為0代表主機位。它和IP地址一樣也是使用點式十進制來表示的。如果兩個IP地址在子網掩碼的按位與的計算下所得結果相同,即表明它們共屬於同一子網中。

  子網掩碼由連續的1和連續的0組成,某一個子網的子網掩碼具備網絡號位數個連續的1

  在計算子網掩碼時,我們要注意IP地址中的保留地址,即” 0″地址和廣播地址,它們是指主機地址或網絡地址全為” 0″或” 1″時的IP地址,它們代表着本網絡地址和廣播地址,一般是不能被計算在內的。

無分類編址CIDR

  CIDR中沒有A、B、C類網絡號、和子網劃分的概念,CIDR將網絡前綴相同的IP地址稱為一個“CIDR地址塊”,注意網絡前綴是任意位數的。

網絡前綴 主機號

斜線記法:193.10.10.129/25 使用二進製表示:11000001.00001010.00001010.10000001
無分類地址CIDR相比原來的子網劃分更加 靈活:

CIDR前綴長度 掩碼點分十進制 地址數
/13 255.248.0.0 512K
/14 255.252.0.0 256K
/15 255.254.0.0 128K
/16 255.255.0.0 64K
/17 255.255.128.0 32K
/18 255.255.192.0 16K
/19 255.255.224.0 8K

網絡地址轉換NAT技術

  IPv4最多只有40+億個IP地址,早期IP地址的不合理規劃導致IP號浪費。在介紹NAT技術之前,首先要知道內網地址和外網地址。

  • 內網地址:內部機構使用,避免與外網地址重複。三類內網地址如下:
    • 10.0.0.0~10.255.255.255(支持千萬數量級設備)
    • 172.16.0.0~172.31.255.255(支持百萬數量級設備)
    • 192.168.0.0~192.168.255.255(支持萬數量級設備)
  • 外網地址:全球範圍使用,全球公網唯一

  網絡地址轉換技術是發生在本地路由器的,主要功能就是把內網的IP地址轉成外網的IP地址來進行外部的通信,並且在接收到數據之後,再把外網IP地址映射成內網IP地址,轉發到具體的某個設備上面去。

  內網多個設備使用同一個外網IP請求外網的服務,外部怎麼知道具體是哪個設備在請求的?網絡地址轉換NAT的英文全稱是Network Address Translation,NAT技術用於多個主機通過一個公有IP訪問互聯網的私有網絡中,外部主要是通過端口號來區分到底是內網的哪一個設備進行請求的,這其中有一個NA(P)T表表:示例如下:

方向 舊的地址和端口號 新的地址與端口號
192.168.2.11:6666 173.21.59.10:16666
192.168.2.10:7777 173.21.59.10:17777
173.21.59.10:16666 192.168.2.11:6666
173.21.59.10:17777 192.168.2.10:7777

NAT減緩了IP地址的消耗,但是增加了網絡通信的複雜度

ICMP協議

  ICMP協議全稱是網際控制報文協議(Internet Control Message Protocol),ICMP協議可以報告錯誤信息或者異常情況

ICMP協議首部:

8位類型 8位代碼 16位校驗和
ICMP報文數據

ICMP報文分為:差錯報告報文和詢問報文:

ICMP報文種類 類型的值 報文類型 具體代碼
差錯報告報文 3(終點不可達) 網絡不可達 0
主機不可達 1
5(重定向) 對網絡重定向 0
對主機重定向 1
11 傳輸超時
12 壞的IP頭 0
缺少其他必要參數 1
詢問報文 0或8 回送(Echo)請求或應答
13或14 時間戳(Timestamp)請求或應答

ICMP協議的應用

ping應用:我們可以通過ping命令進行簡單的網絡故障排查:

  1. ping本地迴環地址,一般情況下,都會得到返回的,如果得不到返回,則說明你的計算機的協議棧出現了問題,這個時候就可能需要重裝系統,或者是重新安裝這個協議棧
  2. ping網關地址,即路由器地址,如果能得到返回的話,則說明本機到路由器的通路是通的,如果沒有返回的話,則說明你的wifi,或者你的網線連接是有問題的
  3. ping遠端地址,如果不通的話,則說明你的家到ISP之間的網絡是故障的,此時就需要聯繫網絡服務商(移動、電信、聯通)進行排查。

Traceroute應用:Traceroute可以探測IP數據報在網絡中走過的路徑

路由概述

  思考:路由表中的下一跳地址是怎麼來的?下一跳地址是唯一的嗎?下一跳地址是最佳的嗎?路由器怎麼多,他們是怎麼協同工作的?為了解決這些問題,路由表需要一個好的算法去解決這些事情。路由算法實際上是圖論的算法,由於網絡環境複雜,使得路由算法要比圖論的算法更複雜。

  由於互聯網的規模是非常大的,互聯網環境是非常複雜的,所以我們需要對互聯網進行劃分。自治系統(Autonomous System)是指處於一個管理機構下的網絡設備群,AS內部網絡自行管理,AS對外提供一個或者多個出(入)口。自治系統內部路由的協議稱為:內部網關協議(RIP、OSPF), 自治系統外部路由的協議稱為:外部網關協議(BGP)。

路由算法

  路由算法的本質是距離矢量(DV)算法, 距離矢量(DV)算法介紹如下:

  • 每一個節點使用兩個向量\(D_i\)\(S_i\)
  • \(D_i\)描述的是當前節點到別的節點的距離
  • \(S_i\)描述的是當前節點到別的節點的下一節點
  • 每一個節點與相鄰的節點交換向量\(D_i\)\(S_i\)的信息
  • 每一個節點根據交換的信息更新自己的節點信息

現在假設有A的距離矢量信息,收到的距離矢量信息如下圖:

A通過B到各個節點得距離矢量信息如下:

A通過C到各個節點得距離矢量:並更新下一條的節點

A通過D到各個節點得距離矢量:並更新下一條的節點

A通過F到各個節點得距離矢量:並更新下一條的節點

RIP協議

  RIP(Routing Information Protocol)協議,RIP協議是使用DV算法的一種路由協議。RIP協議把網絡的跳數(hop)作為DV算法的距離,每隔30s交換一次路由信息,認為跳數>15的路由則為不可達路由。

RIP協議的過程

  1. 路由器初始化路由信息(兩個向量\(D_i\)\(S_i\))
  2. 對相鄰路由器X發過來的信息,對信息的內容進行修改(下一跳地址設置為X,所有距離加1)
    1. 檢索本地路由,將信息中新的路由插入到路由表裡面
    2. 檢索本地路由,對於下一跳為X的,更新為修改后的信息
    3. 檢索本地路由,對比相同目的的距離,如果新信息的距離更小,則更新本地路由表
  3. 如果3分鐘沒有收到相鄰的路由信息,則把相鄰路由設置為不可達(16跳)

RIP協議的優缺點:

  • 優點:實現簡單,開銷很小。
  • 缺點:故障信息傳遞慢。也就是隨便相信“隔壁老王”,“自己不思考” “視野不夠”。因為RIP協議每一個路由器它只看到相鄰路由器的信息,而看不到更遠的路由器信息,這也限制了網絡的規模。

內部網關路由協議之OSPF協議

鏈路狀態(LS)協議

  鏈路狀態(LS)協議:向所有的路由器發送消息,也就是一傳十、十傳百,只和相鄰的路由器交換信息。消息描述該路由器與相鄰路由器的鏈路狀態,每隔30s交換路由信息,只有鏈路狀態發生變化時,才發送更新信息。

Dijkstra(迪傑斯特拉)算法

  Dijkstra算法是著名的圖算法,Dijkstra算法解決有權圖從一個節點到其他節點的最短路徑問題,“以起始點為中心,向外層層擴展”。

Dijkstra(迪傑斯特拉)算法定義:

  1. 初始化兩個集合(S, U)(S為只有初始頂點點A的集合,U為其他頂點集合)
  2. 如果U不為空, 對U集合頂點進行距離的排序,並取出距離A最近的一個頂點D
    i. 將頂點D的納入S集合
    ii. 更新通過頂點D到達U集合所有點的距離(如果距離更小則更新,否則不更新)
    iii. 重複2步驟
  3. 直到U集合為空,算法完成

OSPF協議的過程

  OSPF(Open Shortest Path First:開放最短路徑優先),OSPF協議的核心是Dijkstra算法。OSPF協議的過程:路由器接入網絡,路由器向鄰居發出問候信息,與鄰居交流鏈路狀態數據庫,廣播和更新未知路由。

RIP協議 OSPF協議
從鄰居看網絡 整個網絡的拓撲
在路由器之間累加距離 Dijkstra算法計算最短路徑
頻繁、周期更新,收斂很慢 狀態變化更新,收斂很快
路由間拷貝路由信息 路由間傳遞鏈路狀態,自行計算路徑

外部網關路由協議之BGP協議

  BGP(Border Gateway Protocol: 邊際網關協議),BGP協議是運行在AS之間的一種協議。由於互聯網的規模很大,AS內部使用不同的路由協議。

  AS之間需要考慮除網絡特性以外的一些因素(政治、安全…),BGP(Border Gateway Protocol,邊界網關協議),BGP協議能夠找到一條到達目的比較好的路由,AS之間通過BGP發言人來進行路由信息的交換。BGP發言人(speaker):BGP並不關心內部網絡拓撲,AS之間通過BGP發言人交流信息,BGP Speaker可以人為配置策略。

總結:網絡層負責對子網間的數據包進行路由選擇。此外,網絡層還可以實現擁塞控制、網際互連等功能;網絡層的基本數據單位為IP數據報;包含的主要協議:IP協議(Internet Protocol,因特網互聯協議)、ICMP協議(Internet Control Message Protocol,因特網控制報文協議)、ARP協議(Address Resolution Protocol,地址解析協議)以及RARP協議(Reverse Address Resolution Protocol,逆地址解析協議)。網絡層重要的設備是路由器。常見的路由選擇協議有:RIP協議、OSPF協議。RIP協議 :底層是貝爾曼福特算法,它選擇路由的度量標準(metric)是跳數,最大跳數是15跳,如果大於15跳,它就會丟棄數據包;OSPF協議 :Open Shortest Path First開放式最短路徑優先,底層是迪傑斯特拉算法,是鏈路狀態路由選擇協議,它選擇路由的度量標準是帶寬,延遲。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

一個基於Consul的.NET Leader選舉類庫

前段時間有傳言說Consul將不能在我國繼續使用,后被查明是因法律問題Vault企業版產品不能在國內銷售。Valut和Consul都是HashiCorp公司的產品,並且都推出了開源版本,繼續使用開源版本都是沒有問題的,虛驚一場。Consul是一款優秀的服務發現和配置管理產品,基於其提供的Session機制,可以很方便的實現Leader選舉功能。這篇文章將介紹我編寫的一個基於Consul的.NET Leader選舉類庫。

基於Consul的Leader選舉原理

1、參加選舉的程序可以在Consul中創建一個Session,這個Session的存活狀態依賴於當前程序的Consul健康檢查狀態, 一旦健康檢查處於Critical狀態,則對應的Session就會失效。

2、使用這個Session去鎖定某個Consul Key/Value,只有一個Session能成功鎖住KV,擁有這個Session的程序即為Leader。

3、Leader選舉成功后,所有節點還要繼續阻塞查詢上邊的Consul Key/Value,如果KV綁定的Session失效了, 所有節點可以立即發現併發起一次Leader選舉,並選舉出1個Leader。

使用說明

1、啟動本機Consul

當前的版本依賴本機Consul,後續會支持配置遠程Consul地址。

如果本地環境已經配置Consul,保證其正常運行即可。

如果本地環境沒有配置Consul,可以下載后以開發模式快速啟動,以方便體驗Leader選舉功能。

下載地址:https://www.consul.io/downloads

啟動命令:./consul agent -dev

2、安裝Nuget包

NuGet包地址:https://www.nuget.org/packages/FireflySoft.LeaderElection

3、編寫Leader選舉代碼

首先創建LeaderElectionManager的一個實例,傳入服務名稱、服務Id、leader選舉選項等參數,然後調用Watch方法參与選舉,並在Watch方法中傳入Leader選舉結果的處理方法。

以控制台程序為例:

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("I am ElectionService1.");

            // 參与Leader選舉的多個程序應該使用相同的服務名
            // 參与Leader選舉的每個程序應該有唯一的服務Id
            LeaderElectionManager electionManager = new LeaderElectionManager("ElectionService", "ElectionService1", new LeaderElectionOptions());
            electionManager.Watch(LeaderElectCompletedEventHandler);

            Console.WriteLine("Start Election...");

            Console.Read();
        }

        private static void LeaderElectCompletedEventHandler(LeaderElectionResult result)
        {
            // 在這裏處理Leader選舉結果。
            Console.WriteLine($"LeaderElectCompleted, Result: {result.IsSuccess}, Current Leader: {result.State.CurrentLeaderId}.");
        }
    }

4、注意事項

選舉沉默期

LeaderElectionOptions中提供了一個重新選舉沉默期:ReElectionSilencePeriod,默認15s。應用場景如下:

當一個程序的Leader狀態失效時,它可能仍在處理某些事務,並且不能立即中止。 這時候如果其它節點馬上選舉成為Leader,並且開始處理數據,則可能導致數據不一致的狀態。

Leader優先選舉權

此類庫為Leader增加了優先選舉權。應用場景如下:

Leader狀態失效可能只是一種短暫的中斷導致的,系統會很快自動恢復,而業務事務的的啟動和中止需要進行複雜的處理, 所以我們仍然期望下一次Leader選舉時之前的Leader有優先選舉權,避免數據同步和加快系統恢復。

5、源碼開放

這麼好的東西當然要開源:https://github.com/bosima/FireflySoft.LeaderElection

參考文檔

1、Consul Session機制參考:

使用Consul做leader选举的方案

https://www.consul.io/docs/internals/sessions

2、基於Session的Leader選舉機制參考:

https://learn.hashicorp.com/consul/developer-configuration/elections

 

如果你有關於Consul的任何使用問題歡迎加入千人Consul QQ交流群:234939415

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※回頭車貨運收費標準

台中搬家公司費用怎麼算?

「殭屍火」來襲? 破紀錄野火再臨北極圈 碳匯恐不保

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

※別再煩惱如何寫文案,掌握八大原則!

中國紅蘿蔔殘留農藥超標 日本發出檢查令

摘錄自2020年6月15日中央社報導

因為從中國進口的紅蘿蔔陸續查出含有超過安全標準的殘留農藥,日本政府今(15日)依法發出檢查令,今後中國產的紅蘿蔔都須接受檢查。

「讀賣新聞」報導,日本厚生勞動省今天根據食品衛生法發出檢查命令,今後如果進口中國產的紅蘿蔔(包含加工品),業者有義務須接受紅蘿蔔殘留農藥的檢查。

生活環境
國際新聞
日本
蘿蔔
殘留農藥
食品安全

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

法國擬開採莫三比克天然氣 環團批製造氣候炸彈

摘錄自2020年6月15日中央社報導

法國石油業巨擘道達爾(Total)正在莫三比克發展開採天然氣的大型計畫,環保組織「地球之友」今(15日)指控法國此舉無異是在當地放置一枚「氣候定時炸彈」。

法新社報導,「地球之友」(Friends of the Earth)一份報告名為「產業的意外之財,莫三比克的詛咒:法國把莫三比克推進氣阱」(A windfall for the industry, a curse for the country: France Thrusts Mozambique into the gas trap)。報告指出,2010年代初在莫三比克的北海岸外海水面下發現巨大的天然氣儲量,開採總投資金額將達600億美元。

「地球之友」指控,「法國這項陰謀是代表法國能源產業與銀行家的經濟利益……迫使另個非洲國家仰賴化石燃料」。

這份報告指出,法國正研擬三個天然氣計畫,「釋放出的溫室氣體可能相當於法國一年溫室氣體排放量的7倍,更是莫三比克目前年排放量的49倍」。

能源議題
能源轉型
國際新聞
法國
天然氣
油氣開採

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

※回頭車貨運收費標準

聯合國環境署:清潔能源是新冠疫情後最具成本效益的投資之一 

摘錄自2020年6月11日聯合國新聞報導

聯合國環境署在6月10日發布的《2020年全球可再生能源投資趨勢》顯示,新型冠狀病毒對化石燃料行業造成嚴重衝擊。而可再生能源比以往更具成本效益,為各國在經濟復甦中優先考慮清潔能源提供機會,使世界更接近實現《巴黎協定》的目標。

報告顯示可再生能源裝機成本創新低,意味著未來,可再生能源領域的投資將實現更高的產能。得益於技術進步、規模經濟和激烈競爭,風能和太陽能的成本不斷下降。2019年下半年,新建太陽能發電廠的電力成本比10年前降低了83%。

環境署執行主任安德森(Inger Andersen)表示,利用可再生能源價格不斷下跌的優勢,將清潔能源置於後疫情時代經濟復甦方案的核心,是應對全球疫情的最佳保險政策。

能源議題
能源轉型
國際新聞
美國
清潔能源
聯合國
可再生能源發電
巴黎協定

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

動物園戶外展覽3袋鼠遭咬死 當局鎖定美洲獅涉案

摘錄自2020年6月21日聯合報報導

美國舊金山動物園近日舉行戶外展覽,孰料兩隻大袋鼠(wallaroos)和一隻紅袋鼠(red kangaroo)卻遭咬死,經過調查和可能是當地食肉動物犯案,目前已鎖定一隻美洲獅(山獅)涉有重嫌。

據《ABC》報導,這隻美洲獅之前因為在舊金山街道上遊蕩被捕獲,由加州大學聖克魯斯美洲獅計畫(University of California Santa Cruz Puma Project)為其戴上追蹤項圈,隨後便將牠野放。

加州野生動物局發言人帕格里亞(Ken Paglia)透露,在美洲獅重獲自由之前,舊金山動物園戶外展覽並沒有任何動物死亡因此,目前當局正朝著美洲獅犯案的方向進行調查,舊金山動物園則強調,園區已採取了額外的措施來保護動物的安全,但並未透露相關措施的細節。

國際新聞
美國
舊金山
袋鼠
美洲獅
展示動物
動物福利

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

※別再煩惱如何寫文案,掌握八大原則!