Docker 镜像优化
一、Docker 镜像优化层面
空间优化:优化 Docker 镜像体积(也称为“镜像瘦身”)
时间优化:优化 Docker 镜像构建速度
二、Docker 镜像优化方式
选择最精简的基础镜像
合理规划镜像的层数
清理镜像构建的中间产物
优化网络需求
构建缓存
使用多阶段构建镜像
编写 .dockerignore 文件
分类说明:
空间优化(1、3、6)
时间优化(4、5、7)
三、时间优化时间层面的优化方式有三种:网络优化、构建缓存、编写 .dockerignore 文件。
1. 网络优化优化网络是为了让镜像下载、依赖安装、代码下载等操作更加流畅。常见的优化方式包括:
调整构建机器的网络质量
配置就近的加速仓库地址
2. 构建缓存本地缓存Docker 构建时下载的基础镜像文件会进行缓存。为了减少镜像的传输下载时间,建议使用固定的机器专门进行镜像的构建。
镜像分层缓存Docker 镜像采用分层存储,构建时每个指令对应镜像的每一层。只要满足以下条件,构建时可以利用缓存:
镜像父层没有变化
构建指令保持不变
文件校验和一致
满足条件时,该层构建将不会重复执行,而是使用之前的构 ...
Docker 学习
常用 CLI
官方文档
用户登录
1234567docker login -u${user_name} -p{password} ${hub_uri}cat ~/.docker/config.jsondocker logout# 登陆私有 docker docker login register.austsxk.com # 退出私有 dockerdocker logout register.austsxk.com
查看所有运行容器
docker ps -a
查看所有镜像
docker images
常见指令
1234567891011121314151617181920212223242526# 启动容器 docker start <容器 ID> # 关闭容器 docker stop <容器 ID># 重启容器 docker restart <容器 ID>docker rm -f <容器 ID> # 删除镜像docker image rm -f <i ...
彻底搞懂什么是一次性哈希算法
背景近期在学习 Go 语言,在 分布式存储 Geecache 练习教程中第一次听到一次性哈希,由于第一次接触后端,不是特别理解,所以记录下以备后续巩固学习。
分配请求在分布式存储中,往往会通过多台服务器构成集群来提供服务,因为单机的并发量和数据量是有限的,接下来我们称服务器为节点。
假设集群有十个节点,当 节点A 接收到 请求A 时,如果 节点A 没有缓存数据,那么它将会从数据源获取 数据A 并缓存到 节点A 。那么第二次当输入一致时将只有 1/10 的几率选择 节点A 去读取缓存,而有 9/10 的几率会选择其他节点,并再次访问数据源进而存储数据。就会造成在多个节点中,多次缓存同一份数据,导致效率低下,存储空间的浪费。
那么我们该如何将缓存均匀的分布到不同节点进行缓存,并保证但输入一致时,访问同一个节点?
哈希算法取模运算通过对输入进行哈希计算,每次计算都是相同的值,这样就可以将某些相同的请求全部打到同一个节点,从而满足分布式系统的负载均衡需求。
比如当前有三个节点 A、B、C,我们将输入的所有字符的 ASCII 码加起来生成一个 KEY,基于 hash(key) % 3 公式计算得 ...
Golang 学习
环境
MacOS 安装
1brew install go
修改 .zshrc 配置
1234export PATH=$PATH:$GOROOT/binexport GOPATH=$HOME/Developer/gopathsource ~/.zshrc
查看环境变量
12go versiongo env
语法基本结构和基本数据类型可见性规则
只有当某个(常量、变量、类型、函数、结构字段等)需要被外部包调用的时候才使用大写字母开头,并遵循 Pascal 命名法,称为导出(像面向对象语言中的 public);
否则就遵循骆驼命名法,即第一个单词的首字母小写,其余单词的首字母大写,对外不可见。
类型Go 语言中不存在类型继承
基本类型:int、float、bool、string
结构化/复合:struct、array、since、map、channel
结构化的类型没有真正的值,使用 nil 作为默认值
描述类型行为:interface
示例
12345678910单类型定义var IZ initvar a IZ = 5// 多类型定义type ( IZ int ...
通过 N 指令快速切换 Node 版本
安装 n 模块1sudo npm install -g n
安装 Node 版本1sudo n 20.12.2
查看所有版本并切换1n
切换选择 Node 版本
常用指令1234sudo n stable // 安装稳定版本sudo n x.x.x // 安装指定版本sudo n rm x.x.x // 删除指定版本sudo n use x.x.x demo.js // 用指定版本执行脚本
最常见的 pm2 指令
PM2 是 node 进程管理工具,可以利用它来简化很多 node 应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。
基础指令
全局安装
1npm install -g pm2
启动
1pm2 start app.js
-i --instance: 创建进程实例,可用于负载均衡。
-n --name: 指定启动实例的应用名称。
-o --output <path>: 输出标准日志路径。
-e --error <path>: 输出错误日志路径。
--watch: 监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听、不见听的目录,最好通过配置文件。
--ignore-watch: 排除监听的目录/文件,可以是特定的文件名,也可以是正则。比如–ignore-watch=”test node_modules “some scripts””
重新启动
1pm2 restart app.js
查看所有进程信息
123pm2 statuspm2 listpm2 ls
查看某个进程信息
1pm2 describe <NAME | ...
如何在 Linux 快速安装 Nodejs
在 Linux 环境下,我通过 apt 安装 nodejs 发现无论怎么更新 sudo apt update & sudo apt install nodejs,始终只能安装到 node 10.x 版本,然而我需要安装最新版本的 Node.于是通过二进制安装。
确定版本
确定 Linux 系统版本,我的是 x86_64
1uname -m
到 Node 官网 找到你需要安装的版本,右键复制安装包地址链接。
安装
下载1wget https://nodejs.org/dist/v20.10.0/node-v20.10.0-linux-x64.tar.xz
解压我放在了 /usr/local/bin 目录下
1sudo tar -xvf node-v13.11.0-linux-x64.tar.xz -C /usr/local/bin
修改命名
1sudo mv /usr/local/bin/node-v13.11.0-linux-x6 /usr/local/bin/node
配置环境变量
1echo 'export PATH=" ...
最实用的 Linux 高级指令(持续更新)
主机名要修改服务器的主机名(hostname),可以按照以下步骤进行:
使用管理员权限登录到服务器。
1ssh root@192.12.**.**
输入以下命令以查看当前的主机名:
1hostname
输入以下命令以修改主机名(将 替换为你想要设置的新主机名):
1sudo hostnamectl set-hostname <new_hostname>
或者,如果你使用的是旧版本的 Linux 发行版,可以使用以下命令:
1sudo hostname <new_hostname>
输入管理员密码以确认操作。
重新启动服务器或注销并重新登录以使主机名更改生效。
如果遇到 sudo: unable to resolve host RN-0914: Name or service not known
12sudo nano /etc/hosts
修改 192.221..
保存
用户在 Linux 系统中,有许多与用户相关的操作可以进行。以下是一些常见的用户操作:
添加用户:使用 useradd 命令可以添加新用户。例如:
1sudo usera ...
使用 Cloudflare Workers 反代节点
反代节点(Reverse Proxy Node)通常是指充当反向代理服务器的节点。它们用于接收来自客户端的请求,并将这些请求代理到一个或多个后端服务器,然后将后端服务器的响应返回给客户端。这类似于反向代理服务器的功能,用于负载均衡、缓存、安全性和性能优化等用途。
反代节点通常用于隐藏后端服务器的真实 IP 地址或域名,以提高安全性和隐私。它们可以在网络架构中充当重要的中继点,帮助优化流量分发、减轻后端服务器的负载,同时提供额外的网络功能和安全策略。
因此,反代节点通常是一种反向代理服务器,即服务端代理。它用于管理和代理客户端请求,以改进网络性能和提供其他功能。
接下来,我们通过 Cloudflare Workers 来实现反代节点。
注册 Cloudflare访问 Cloudflare 控制台 进行注册/登录
域名正常情况下,cloudflare 会生成一个四级域名地址 ${worker-name}.{username}.workers.dev,但是 worders.dev 在国内已经被墙了,所以我们需要准备一个自己的域名。
假如我打 ...
Ubuntu 20.04 LTS 更新 Linux 内核版本
Ubuntu 20.04 LTS 内核默认版本是 5.4,如果需要升级到最新版本,可以按照以下步骤操作:
打开终端,查看当前 Linux 内核版本
显示系统主机名、内核版本号、CPU 类型等信息:
12uname -a // Linux emooa 5.15.0-87-generic #97~20.04.1-Ubuntu SMP Thu Oct 5 08:25:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
仅显示系统主机名:
123uname -n或者hostname
显示当前系统的内核版本 :
1uname -r // 5.15.0-87-generic
显示当前系统的硬件架构:
1uname -i // x86_64
更新软件源列表:
1sudo apt update
安装 Ubuntu 20.04 LTS 官方提供的 HWE 内核包:
1sudo apt install linux-generic-hwe-20.04
安装完毕后,重新启动电脑,可以通过 uname -r 来验证内核版本:
12sudo reboot
如果显示的 ...