当前位置: 欣欣网 > 码农

大厂程序员,竟然是这样学新技术的?

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 实现注册中心的 ,感兴趣的同学欢迎加入我的 学习。

    当你能熟练运用一门技术后,才是最后的几个阶段:了解原理、深入源码、修改源码,甚至能够推陈出新,创造一个类似的技术。

    我反正是做不到,机会交给大家了,苟开源、勿相忘啊!


    以上就是本期分享,希望对大家有帮助,我是鱼皮,一名发如雨下的程序员博主,感谢您的关注和三连支持。
    👇🏻 点击下方阅读原文,获取鱼皮往期编程干货。

    往期推荐