大家好,我是程序员鱼皮。之前有不少同学问:鱼皮啊,为啥你大学期间能学那么多技术?
其实,学新技术是越来越快的,而且学新技术是有套路的。我是怎么做到很快就能上手新技术,并运用到项目中的呢?
我专门做了一期视频,给大家分享一些自己的经验方法,看完后相信你的学习效率会事半功倍。
视频地址: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 实现注册中心的 ,感兴趣的同学欢迎加入我的 学习。
当你能熟练运用一门技术后,才是最后的几个阶段:了解原理、深入源码、修改源码,甚至能够推陈出新,创造一个类似的技术。
我反正是做不到,机会交给大家了,苟开源、勿相忘啊!
以上就是本期分享,希望对大家有帮助,我是鱼皮,一名发如雨下的程序员博主,感谢您的关注和三连支持。
👇🏻 点击下方阅读原文,获取鱼皮往期编程干货。
往期推荐