技术阅读周刊第三期

技术阅读周刊,每周更新。

历史更新

Understanding The Linux TTY Subsystem

URL: https://ishuah.com/2021/02/04/understanding-the-linux-tty-subsystem/

本文讲解了 Linux TTY 的历史故事和来源。

  1. TTY 是 teletype 的简写,电传打印机;最早是在二次世界大战发挥重要作用。
  2. 60 年代的计算机使用了teletype 作为输入终端。
  3. 后续随着技术进步使用了软件模拟替代了物理的电传打印机。
  4. TTY 早起位于 Linux 的内核空间,导致缺乏灵活性,后续移动到了用户空间。
  5. 之后又出现了 shell,用户使用 shell 登录系统时会分配一个 TTY 给 shell镜像操作。
  6. TTY 作为 shell 的硬件运行环境,搭配在一起提供了基础的 Linux 操作环境。

100行代码实现一个模拟终端

URL: https://ishuah.com/2021/03/10/build-a-terminal-emulator-in-100-lines-of-go/
本文在之前介绍 TTY 背景知识的前提下,讲解使用 100 行代码实现一个模拟终端的 App。
最终使用效果如下:

  1. 第一步使用了 Go 的一个 GUI 库 fyne 渲染了一个普通文本框
  2. 讲解了一个终端和内核通讯的流程图
    image.png
  3. PTY master 获取用户输入发送给 PTY slaver,slave 会执行最终的 shell,并将执行结果返回到 PTY master
  4. 这里使用了 Go 的一个第三方库实现了 PTY 的功能
    image.png
  5. 使用 fyne 获取键盘事件,缓存用户输入的内容,直到检测到输入了回车键,此时将缓存内容发往 pty
  6. 优化响应结果,目前只能输出最新的一行内容,所以新增一个缓冲区存放历史输出。
    image.png
    最终一个简单的模拟终端便实现了,当然功能还很简单,感兴趣的朋友可以在这基础上持续优化。

混沌工程

最近在复现一个可能的网络问题的时候,接触到了混沌工程,以下是我对它的一些理解

混沌工程(Chaos-Mesh)是一个开源的混沌平台,混沌这词可能不好理解,不过通过他所提供的功能就知道具体是干什么的了。

核心功能是提供了一些列的故障注入,比如:

  • Pod 故障:重启、OOM等
  • 网络故障:延迟、丢包、断网
  • DNS 故障
  • HTTP 故障
  • 甚至还能模拟 JVM 故障
    image.png

这是对一个 Pod 的 http 请求 80 端口进行中断的配置。

通过这些功能可以看出它是一个模拟故障平台,我们可以在它的管理台进行丰富的故障模拟,可以在开发测试过程中增强我们系统的健壮性。

Hacking Your iTerm. Boost your command line productivity by… | by Chandan Kumar | Better Programming

URL: https://betterprogramming.pub/hacking-your-iterm-5d2bdacdaccf

作者分享了它使用终端的一些技巧和工具

iTerm

推荐使用 iTerm 这个就不多说了

powerlevel10k

image.png

powerlevel10k 是一个 zsh 主题,提供了许多自定义的选项,可以按照自己的习惯定制。
https://github.com/romkatv/powerlevel10k

Syntax highlighting

image.png
语法高亮可以让自己知道输入是否正确
https://github.com/zsh-users/zsh-syntax-highlighting

Auto-suggestion

自动提示插件,可以类似于 IDE 的方式使用命令行,这个还蛮好用的。

https://github.com/zsh-users/zsh-autosuggestions

Autojump

image.png
自动跳转,可以更快的跳转到我们尝使用的目录,提高效率。
https://github.com/wting/autojump

iTerm 的一些窗口导航快捷键

  • 新窗口 —  + T
  • 关闭窗口 —  + W 
  • 切换 Tab + Number Key — ( ⌘2 切换到第二个 Tab)
  • 垂直分割窗口 (same profile) —  + D
  • 水平分割窗口(same profile) —  + Shift + D 
  • 根据顺序切换窗口 —  + ] ,  + [
  • 上一个 tab<- —
  • 下一个窗口->
  • 最大化窗口 + Shift + Enter

当我们聊 Kubernetes Operator 时,我们在聊些什么_云原生_徐新坤_InfoQ精选文章

URL: https://www.infoq.cn/article/SJMUvMg_0H7BS5d99euR

作者讲解了 Docker、Helm、Operator、kubernetes Controller 之间的关系以及一些核心概念。

  1. Docker的核心价值是提供了标准化的交付流程,现在几乎没人再交付源码了
  2. Operator 和 Docker 类似的是标准化了分布式系统的交付流程。
  3. Helm 也可以做分布式系统交付,但他更侧重于协调多个资源管理,比如可以让 A Pod 启动之后再启动 B Pod。
  4. 但 Helm 无法感知整个系统的运行时状态,而 Operator 则可以,通过这个感知可以自动实现扩容、故障恢复、异常处理等工作,在实现了 Helm 的自动化的同时还实现了智能化。
  5. Operator 是处于一个第三方视角观察整个系统,所以它可以拿到全局的信息,从而最终达到声明状态的一个目的。
  6. Operator 可以当做另一种 Controller,可以理解为第三方的 controller,一般是运维我们自己的应用。
  7. Operator 可以将以往运维的经验沉淀为代码,更利于推进 Dev、Ops 合并为 DevOps

文章链接:

#Newletters