當前位置: 妍妍網 > 碼農

大廠程式設計師,竟然是這樣學新技術的?

2024-03-26碼農

大家好,我是程式設計師魚皮。之前有不少同學問:魚皮啊,為啥你大學期間能學那麽多技術?

其實,學新技術是越來越快的,而且學新技術是有套路的。我是怎麽做到很快就能上手新技術,並運用到計畫中的呢?

我專門做了一期視訊,給大家分享一些自己的經驗方法,看完後相信你的學習效率會事半功倍。

視訊地址:https://www.bilibili.com/video/BV1Ax4y1m72q

以下是文字版,分享給喜歡閱讀的朋友~


下面就以當下非常流行的 Etcd 雲原生分布式儲存中介軟體 為例,給大家分享我快速入門新技術的通用經驗和小技巧。

本文也是一個極簡的 Etcd 入門教程,保證能讓你會用這個技術,但並不會有什麽很深入、勸退的東西。

學會的同學記得點贊、收藏支持呀~

通用技術學習方法

如何學好一門技術,從入門到入土呢?

1、基本了解 - Etcd 介紹

先搞清楚為什麽要學這個技術?

有同學說了:找工作要求的。

那要明確幾個問題:

  1. 這個技術是做什麽的?

  2. 有什麽優點和缺點?

  3. 適用於什麽場景?

為什麽找工作會要求這個技術,對不對?

就以 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 實作註冊中心的 ,感興趣的同學歡迎加入我的 學習。

    當你能熟練運用一門技術後,才是最後的幾個階段:了解原理、深入源碼、修改源碼,甚至能夠推陳出新,創造一個類似的技術。

    我反正是做不到,機會交給大家了,茍開源、勿相忘啊!


    以上就是本期分享,希望對大家有幫助,我是魚皮,一名發如雨下的程式設計師博主,感謝您的關註和三連支持。
    👇🏻 點選下方閱讀原文,獲取魚皮往期編程幹貨。

    往期推薦