查看原文
其他

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

鱼皮 程序员鱼皮 2024-03-31

大家好,我是程序员鱼皮。之前有不少同学问:鱼皮啊,为啥你大学期间能学那么多技术?

其实,学新技术是越来越快的,而且学新技术是有套路的。我是怎么做到很快就能上手新技术,并运用到项目中的呢?

我专门做了一期视频,给大家分享一些自己的经验方法,看完后相信你的学习效率会事半功倍。

视频地址: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 class EtcdRegistry {

    public static void main(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 实现注册中心的 手写 RPC 框架实战教程 ,感兴趣的同学欢迎加入我的 编程导航 学习。

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

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



以上就是本期分享,希望对大家有帮助,我是鱼皮,一名发如雨下的程序员博主,感谢您的关注和三连支持。

👇🏻 点击下方阅读原文,获取鱼皮往期编程干货。

往期推荐

我的编程学习小圈子

为了帮新人上手,多年来 Java 偷偷做了这个改进。。

我们公司的春招来啦!

又踩坑了,java日期闰年处理,算少一天!

几个有点冷门的 vscode 插件,但绝对好用!

唉,新项目内测延期了。。我的一点思考

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存