Singularity(Apptainer)容器技术
Singularity 更名为 ApptainerApptainer官方地址
一. 安装
ubuntu22.04环境下编译安装
为了方便演示,我们使用singularity容器环境实现下面的操作,实际上你需要将下列shell在宿主机上执行,毕竟目的就是为了安装singularity下面操作会在后续讲解,暂时会用即可,不需要懂,我是在包含singularity的容器中进行的, 你可以直接跳转到shell脚本处,在宿主机上安装即可singularity pull ubuntu:22.04singularity build –sandbox install-sing ubuntu_22.04.sifsingularity shell -w install-sing/
安装脚本:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253# install.shexport GOPROXY=https://goproxy.cn,direct ...
frp内网穿透技术
FRP
FRP(Fast Reverse Proxy)是一个高性能的内网穿透工具,用于帮助内网服务通过公网访问。它主要适用于无法直接从外部访问的内网环境,比如家庭网络、企业内部网络等。FRP 可以帮助你将内网的各种服务(如HTTP、SSH等)映射到外网上,方便远程访问。
主要特性
反向代理:FRP 支持 TCP、UDP、HTTP、HTTPS 等多种协议的反向代理。
配置灵活:通过配置文件可以灵活地设定不同的转发规则和监听端口。
安全性:支持通过密钥认证的方式确保连接的安全性。
多用户支持:可以为不同的用户配置不同的权限和资源限制
工作原理FRP 包括两个部分:frps(服务端)和 frpc(客户端)。服务端部署在具有公网 IP 的服务器上,客户端部署在需要进行内网穿透的本地机器上。客户端(frpc):在内网机器上配置要映射到外网的服务,然后连接到服务端。服务端(frps):接收来自客户端的连接请求,根据配置将请求转发到指定的内网服务上。
快速部署公网部署服务端
编写服务端配置1234567891011cat << EOF > frps.toml ...
快速搭建静态文件服务
静态文件服务
快速实现一个静态文件服务,实现文件的上传下载,解决内网下载文件问题,目前有gohttpserver和python内置应用两种方式可以快速解决
gohttpserver文件服务官方文档: gohttpserver使用docker部署:
12345docker run -itd --restart=always -p 8000:8000 \ -v $(pwd):/app/public \ --name gohttpserver \ codeskyblue/gohttpserver \ --auth-type http --auth-http ${UserName}:${Password} --upload
python文件服务
python312# python3 -m http.server 服务端口 -d 启动目录python3 -m http.server 9981 -d $(pwd)
python21python2 -m SimpleHTTPSe ...
最全最常见的 Git 指令
Git 指令设置用户名与邮箱12git config --global user.name "name<自己的用户名>"git config --global user.email "email<自己的邮箱>"
生成 SSH Key 密匙1ssh-keygen -t rsa -C "emai<自己的邮箱>"
执行成功后执行 cat ~/.ssh/id_rsa.pub查看密匙,如下图。
绑定远程仓库1234# 初次绑定git remote add origin "https://github.com/xxx/xxx.git" # 修改远程仓库git remote set-url origin "new repository"
常用指令基础- 克隆12345678# 克隆git clone git@github.com:username/blog.git # 只下载减小克隆的深度来加速克隆,只下载最新的commitgit clone --depth=1 ...
celery分布式消息队列简单使用
Celery-分布式任务队列一、Celery简介
官方文档
1. 什么是任务队列任务队列是一种用于在线程或计算机之间分配工作的机制。
任务队列的输入是一个称为任务的工作单元,有专门的职程(Worker)进行不断的监视任务队列,进行执行新的任务工作。
Celery 通过消息机制进行通信,通常使用中间件(Broker)作为客户端和职程(Worker)调节。启动一个任务,客户端向消息队列 发送一条消息,然后中间件(Broker)将消息传递给一个职程(Worker),最后由职程(Worker)执行。
Celery 可以有多个职程(Worker)和中间件(Broker),用来提高Celery的高可用性以及横向扩展能力。
Celery 需要消息中间件来进行发送和接收消息。 RabbitMQ 和 Redis 中间件的功能比较齐全,但也支持其它的实验性的解决方案,其 中包括 SQLite 进行本地开发。
Celery 可以在一台机器上运行,也可以在多台机器上运行,甚至可以跨数据中心运行。
2. Celery组件Celery 扮演生产者和消费者的角色
Celery Beat:任务调度器。B ...
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 // 用指定版本执行脚本