大家好,我是程式設計師魚皮。之前有不少同學問:魚皮啊,為啥你大學期間能學那麽多技術?
其實,學新技術是越來越快的,而且學新技術是有套路的。我是怎麽做到很快就能上手新技術,並運用到計畫中的呢?
我專門做了一期視訊,給大家分享一些自己的經驗方法,看完後相信你的學習效率會事半功倍。
視訊地址:https://www.bilibili.com/video/BV1Ax4y1m72q
以下是文字版,分享給喜歡閱讀的朋友~
下面就以當下非常流行的
Etcd 雲原生分布式儲存中介軟體
為例,給大家分享我快速入門新技術的通用經驗和小技巧。
本文也是一個極簡的 Etcd 入門教程,保證能讓你會用這個技術,但並不會有什麽很深入、勸退的東西。
學會的同學記得點贊、收藏支持呀~
通用技術學習方法
如何學好一門技術,從入門到入土呢?
1、基本了解 - Etcd 介紹
先搞清楚為什麽要學這個技術?
有同學說了:找工作要求的。
那要明確幾個問題:
這個技術是做什麽的?
有什麽優點和缺點?
適用於什麽場景?
為什麽找工作會要求這個技術,對不對?
就以 Etcd 技術為例,一般我了解一門技術會先去看他的 官方文件或者官方開源倉庫 ,能獲得最官方的定義。
Etcd 的官方 GitHub:https://github.com/etcd-io/etcd
根據官方的介紹,Etcd 是 Go 語言實作的、開源分布式鍵值儲存系統,它主要用於儲存分布式系統中最關鍵的數據。
讓我們思考前面幾個問題:
1)Etcd 是做什麽的?儲存鍵值對數據的。
2)它有什麽優點?簡單易用、安全、高效能、可靠、高可用。
3)適用於什麽場景?官方也說了,好多公司在用它,第一個,大名鼎鼎的容器管理平台 k8s 就使用了 Etcd 來儲存集群資訊,還有什麽配置管理、任務排程、分布式鎖、服務發現。
聽到這裏,可能學過後端的同學會有點想法:這不就是 ZooKeeper、Redis 麽?
的確可以把它們理解為同類的中介軟體,能解決的問題都是差不多的。那為什麽還要學 Etcd 呢?
畢竟它是 Go 語言實作的,會更輕量、易部署、效能更高,所以比較受到大廠的青睞。
如果你的目標是進大廠,學這個技術會非常加分。至少我看了這麽多份簡歷,基本上沒有同學在簡歷上寫這個技術。畢竟教程比較少嘛,大部份同學沒教程不會學技術的,但是我這篇文章發出來後,相信會有更多同學了解和運用它吧。
2、快速上手 - Etcd 基本操作
對技術有了基本的了解後,我們要做什麽呢?
先不要管他為什麽高效能、高可用、什麽 Raft 演算法,怎麽用它實作分布式鎖、服務發現,而是要先 快速上手 ,透過寫 Demo 等實戰的方式,快速用這個技術完成基本操作,不要上來就看一堆理論。
怎麽用呢?
還是要看官方文件。換位思考,如果你創造了一個技術,肯定要寫一個最容易上手的例子來吸引別人去用。
Etcd Playground
那首先,我們可以使用官方提供的 Playground 來玩 Etcd,便於學習理解。
Playground 地址:http://play.etcd.io/play
和所有數據儲存中介軟體一樣,Etcd 的基本操作無非就是:增刪改查。
可以用視覺化界面模擬操作,下圖中的小圓圈就是我們的 Etcd 伺服器節點,比如寫入一條鍵值對數據:
然後根據鍵名來讀取數據:
還支持根據鍵名的字首搜尋數據:
綠色的小圓圈是 Etcd 的主節點(負責寫數據),其余節點是從節點(負責讀數據):
當主節點掛掉後,需要重新選出一個主節點。但是我們會發現,並沒有新的從節點成為主節點,因為還剩 2 個節點,一人一票,誰都不服誰!這種現象也稱為 「腦裂」。
然後我們再啟動一個節點,會發現有節點被選舉為了新的主節點:
大概就是這樣,暫時沒必要深究背後的演算法了,能理解 Etcd 的基本操作和選舉方式就行。
Etcd 安裝
了解 Etcd 的基本操作後,我們要在自己的電腦上安裝它。
直接進入官方的下載頁:https://github.com/etcd-io/etcd/releases
找到自己的作業系統,復制指令碼,在終端中執行即可:
安裝完成後,會得到 2 個指令碼:
etcd:etcd 服務本身
etcdctl:客戶端,用於操作 etcd,比如讀寫數據
執行 etcd 指令碼就可以啟動服務了,服務預設占用 2379 和 2380 埠,作用分別如下:
2379:提供 HTTP API 服務,和 etcdctl 互動
2380:集群中節點間通訊
啟動服務後,你就可以使用 etcdctl 客戶端來操作 ectd 了,比如透過下列命令寫入和讀取數據:
etcdctl put mykey "this is awesome"
etcdctl get mykey
Etcd 視覺化工具
如果將 Etcd 用於計畫,用終端來管理數據是不方便的。
一般情況下,我們使用數據儲存中介軟體時,可以使用視覺化工具,更直觀清晰地管理數據,也便於學習。比如 Redis 的 RDM。
Etcd 的視覺化工具我推薦
etcdkeeper
,安裝成本更低,學習使用更方便。
地址:https://github.com/evildecay/etcdkeeper/
進入計畫的 GitHub,就能看到安裝方式,直接按照指引下載、解壓、執行指令碼即可:
安裝後,控制台執行命令,可以在指定埠啟動視覺化界面:
./etcdkeeper -p 8081
執行命令後,透過瀏覽器存取,就能看到視覺化頁面了:
我們會發現,Etcd 儲存數據的模式類似於檔案系統路徑的階層,所以能夠很靈活地按字首查詢,也比較適用於註冊中心的實作。
Etcd Java 客戶端
工具準備好了,我們就要學習如何在程式碼中操作 Etcd。不同的語言,需要的客戶端類別庫也不同,比如Java 客戶端推薦使用 jetcd。
地址:https://github.com/etcd-io/jetcd
同樣開啟官方倉庫就能看到使用教程,註意,JDK 的版本必須大於 11!
它的用法非常簡單,就像 curator 能夠操作 ZooKeeper、jedis 能夠操作 Redis 一樣。
1)首先在 Maven 計畫中引入 jetcd:
<!-- https://mvnrepository.com/artifact/io.etcd/jetcd-core -->
<dependency>
<groupId>io.etcd</groupId>
<artifactId>jetcd-core</artifactId>
<version>0.7.7</version>
</dependency>
2)按照官方文件的範例寫一個增刪改查的 Demo:
package com.yupi.yurpc.registry;
import io.etcd.jetcd.ByteSequence;
import io.etcd.jetcd.Client;
import io.etcd.jetcd.KV;
import io.etcd.jetcd.kv.GetResponse;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public classEtcdRegistry{
publicstaticvoidmain(String[] args)throws ExecutionException, InterruptedException {
// create client using endpoints
Client client = Client.builder().endpoints("http://localhost:2379")
.build();
KV kvClient = client.getKVClient();
ByteSequence key = ByteSequence.from("test_key".getBytes());
ByteSequence value = ByteSequence.from("test_value".getBytes());
// put the key-value
kvClient.put(key, value).get();
// get the CompletableFuture
CompletableFuture<GetResponse> getFuture = kvClient.get(key);
// get the value from CompletableFuture
GetResponse response = getFuture.get();
// delete the key
kvClient.delete(key).get();
}
}
在這段程式碼中,我們使用了最常用的 KVClient 來對 Etcd 寫入和讀取數據。除此之外,Etcd 還提供了很多其他客戶端。
我們可以巧用編輯器的提示來了解更多的用法,我個人很喜歡這麽幹,多花一點點時間,就能探索到很多新知識。
3)最後,我們可以透過 Debug 模式執行上述程式碼,觀察 Etcd 的數據結構。
你會發現除了 key 和 value 外,還能看到版本、建立版本、修改版本欄位。這是因為 etcd 中的每個鍵都有一個與之關聯的版本號,用於跟蹤鍵的修改歷史。當一個鍵的值發生變化時,其版本號也會增加。
完成這些操作後,大家就算入門 Etcd 了。怎麽樣,是不是非常簡單?
Etcd 的入門成本是極低的,只要你學過 Redis、ZooKeeper 或者物件儲存中的一個,就能夠很快理解 Etcd 並投入實戰運用。我們學技術的一個技巧,就是把新技術和老技術進行類比和關聯。
3、進階學習
熟悉一門技術的基本操作後,感興趣的同學,就可以開啟進階學習了。
首先是 系統學習 :透過看一套教程,學會某個技術的核心特性,並能運用到計畫中。
像 Etcd 有很多特性值得學習,尤其是租約、監聽機制,非常實用。
理想情況下,大家要掌握一個能力:就是能自發地想到用某種技術或特性來解決問題,比如要做分詞搜尋就想到用 Elasticsearch。所以多自主思考和敲程式碼很重要。網上有一些 Etcd 系統教程,但是我會更推薦看書和計畫實戰,我前段時間剛寫了一套基於 Etcd 實作註冊中心的 ,感興趣的同學歡迎加入我的 學習。
當你能熟練運用一門技術後,才是最後的幾個階段:了解原理、深入源碼、修改源碼,甚至能夠推陳出新,創造一個類似的技術。
我反正是做不到,機會交給大家了,茍開源、勿相忘啊!
以上就是本期分享,希望對大家有幫助,我是魚皮,一名發如雨下的程式設計師博主,感謝您的關註和三連支持。
👇🏻 點選下方閱讀原文,獲取魚皮往期編程幹貨。
往期推薦