archlinux k8s

archlinux k8s disable swap # check swap usage, if no output, swap is disabled swapon --show # check swap status systemctl list-units --type=swap # disable swap sudo swapoff -a # disable zram swap sudo systemctl mask dev-zram0.swap sudo pacman -Syu reboot sudo pacman -S containerd kubeadm kubelet kubectl curl jq open-iscsi reboot # 如果提示 : iptables-nft-1:1.8.11-2 and iptables-1:1.8.11-2 are in conflict. Remove iptables? [y/N] # 删除 iptables, Kubernetes,推荐使用 iptables-nft,因为 Kubernetes 自 v1.13 起支持 iptables 的 nftables 后端(iptables-nft),而且 nftables 是 Linux 内核中更现代的防火墙实现,逐渐取代传统 iptables。此外,Arch Linux 的默认配置倾向于 nftables。 # 查看 containerd 版本 ctr version lsmod|grep br_netfilter lsmod|grep overlay # 在安装 kubelet 的时候 br_netfilter 已经设置 好了, k8s.conf 里不需要再加 br_netfilter cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay EOF sudo modprobe overlay # 安装 kubeadm 的时候这三个变量会自动设置, 输出应该都是 1 sysctl net.bridge.bridge-nf-call-iptables sysctl net.bridge.bridge-nf-call-ip6tables sysctl net.ipv4.ip_forward # containerd config sudo mkdir /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml vim /etc/containerd/config.toml # 打开文件,找到 `[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]` # 在下面加 一行 SystemdCgroup = true # 配置 containerd 使用 systemd 作为 cgroup 驱动 # 检查 containerd 的 状态 sudo systemctl status containerd # 重启 containerd sudo systemctl restart containerd sudo systemctl enable --now containerd sudo systemctl status kubelet systemctl enable kubelet.service systemctl enable --now iscsid kube-vip kube-vip 相关的命令要在每个 control plane 节点上执行 ...

2012-12-23 · 4 min · 663 words · -

USB, Universal Serial Bus

USB, Universal Serial Bus USB 即"Universal Serial Bus",中文名称为通用串行总线。是在 PC 领域广为应用的新型接口技术。USB 接口具有传输速度更快,支持热插拔以及连接多个设备的特点。目前已经在各类外部设备中广泛的被采用。目前USB接口标准有: USB1.1, USB2.0, usb 3.0 USB1.1 传输速度 12Mbps/秒 USB2.0 速度 480Mbps, 向下兼容USB1.1。 USB3.0 为 5Gbps 全双工 usb 接口颜色 黑色插孔:黑色插孔就代表一般的普通USB插孔,没有特殊含义,早期的表示USB 1.0,现在多代表USB 2.0插孔。 蓝色插孔:蓝色插孔代表USB 3.0。USB 2.0 为 480Mbps 半双工,而 USB 3.0 为5Gbps 全双工,理论上能达到 USB 2.0 速度的10倍。 黄色插孔:黄色USB插孔又被称为Powered USB,一般为“USB 2.0 + 关机可充电"接口,支持在关闭电脑的时候,为USB提供电源。方便关机为手机、MP3等进行充电,而且还不会造成浪费。 USB 线序 G C D V, 黑 绿 白 红 USB接口有四根线,中间触点短的两根用于数据传输,外侧另两根供电。 红色: 电源线 (vcc+) , V 白色 (port-) : 负数据线, D 绿色 (prot+) : 正数据线, C ...

2012-12-09 · 1 min · 85 words · -

lazygit

lazygit https://github.com/jesseduffield/lazygit go install github.com/jesseduffield/lazygit@latest

2012-11-23 · 1 min · 5 words · -

xrandr

‘Linux 双显示器/多屏/扩展屏幕/xrandr’ Can’t open display :0 用 root 用户执行 xrandr 会报错 Can’t open display :0, 尝试用其它普通用户 https://www.reddit.com/r/linux4noobs/comments/lu1plx/hi_i_get_this_authorization_required_but_no/ 4k 显示器调整 dpi xrandr -display :0.0 --listmonitors xrandr -display :0 --listmonitors xrandr -display :0 --dpi 144 # 或者这样配置环境变量 export DISPLAY=:0 xrandr --listmonitors xrdb -query xdpyinfo|grep dots xdpyinfo | grep -B 2 resolution xrandr -verbose xrandr -output DVI-0 -left-of VGA-0 -auto 不带参数执行xrandr能够列出当前的显示设备和每个设备支持的模式。 edit xorg.conf add line Virtual 2560 1024 wiloon@debian:~$ xrandr Screen 0: minimum 320 x 200, current 1680 x 1050, maximum 16384 x 16384 DFP1 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 518mm x 324mm 1920x1200 60.0 + 1920x1080 60.0 1600x1200 60.0 1680x1050 60.0* 1400x1050 60.0 1600x900 60.0 1360x1024 60.0 1280x1024 60.0 1440x900 60.0 1280x960 60.0 1280x800 60.0 1280x768 60.0 1280x720 60.0 1024x768 60.0 800x600 60.3 640x480 59.9 DFP2 disconnected (normal left inverted right x axis y axis) DFP3 disconnected (normal left inverted right x axis y axis) DFP4 disconnected (normal left inverted right x axis y axis) DFP5 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 408mm x 255mm 1680x1050 60.0*+ 1600x1200 60.0 1400x1050 60.0 1600x900 60.0 1360x1024 60.0 1280x1024 75.0 60.0 1440x900 59.9 1280x960 60.0 1280x800 60.0 1152x864 60.0 75.0 1280x768 60.0 1280x720 60.0 1024x768 75.0 70.1 60.0 800x600 72.2 75.0 60.3 56.2 640x480 75.0 72.8 66.6 59.9 CRT1 disconnected (normal left inverted right x axis y axis) wiloon@debian:~$ xrandr -output DFP1 -auto -left-of DFP5 xrandr -output DFP1 -mode 1920x1200 -left-of CRT2 -mode 1680x1050 wiloon@debian:~$ cvt 1680 1050 # 1680x1050 59.95 Hz (CVT 1.76MA) hsync: 65.29 kHz; pclk: 146.25 MHz Modeline "1680x1050_60.00" 146.25 1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsync wiloon@debian:~$ xrandr -newmode "1680x1050" 146.25 1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsync wiloon@debian:~$ xrandr -addmode VGA1 "1680x1050" wiloon@debian:~$ xrandr -output VGA1 -mode 1680x1050 设置显示分辨率及 xrandr 介绍 X Windows 中有一个显示分辨率的概念,在默认情况下,这个显示分辨率为 max*max ,max等于你的所有连接上的显示器中最大分辨率中的最大值。例如我的笔记本液晶屏最大分辨率为 1024*768,外接显示器最大分辨率为 1280*1024,则默认的显示分辨率为 1280*1280。如果我设置左右双屏且使用最大分辨率,那么总显示分辨率就会达到2304*1024,达到超出系统默认的大小。在这种情况下强行设置双屏幕,就会导致 X 进入超低分辨率,结果不得不手工重设 xrog.conf 来恢复。 为了更好检测这个问题,我们需要用到xrandr 这个软件,xrandr系统已经自带,如果没有请安装x11-xserver-utils: sudo apt-get install x11-xserver-utils 。 不带参数执行xrandr能够列出当前的显示设备和每个设备支持的模式。Screen代表了总显示区域,VGA代表显示器,LVDS代表笔记本液晶屏。 ...

2012-11-11 · 4 min · 765 words · -

Beelink SER8 archlinux

文档说明: 本文档记录 Beelink SER8 mini PC 在 Arch Linux + KDE 桌面环境下使用过程中遇到的问题、解决方案和系统操作。 亮度自动降低问题解决方案 问题描述 系统在锁屏、关闭显示器或重启后,显示器亮度会被自动调低到 30% 左右,且不会自动恢复。 环境信息 设备: Beelink SER8 (mini PC) 系统: Arch Linux 桌面环境: KDE Plasma 亮度控制: DDC/CI (通过 ddcutil) 解决方案 方案 1: 禁用 KDE 的自动亮度调节 (推荐) 打开 KDE 系统设置: systemsettings5 导航到: 电源管理 (Power Management) → 节能 (Energy Saving) 检查以下设置: 取消勾选 “当空闲时降低屏幕亮度” (Dim screen when idle) 取消勾选 “在锁定屏幕时降低亮度” (Dim screen on lock) 在 “屏幕亮度” 部分,将所有电源模式下的亮度设置为你想要的值(如 100%) 点击 “应用” 保存设置 ...

2012-10-29 · 20 min · 4151 words · lcf

refactor, 重构

refactor, 重构 重构是克服演进式设计中大杂烩问题的主力,通过在单独的类及方法级别上做一系列小步重构来完成。 在解决现实问题时,我们会将问题映射到脑海中的概念模型,在模型中解决问题,再将解决方案转换为实际的代码。上述问题在于我们解决了设计到代码之间的重构,但提炼出来的设计模型,并不具有实际的业务含义,这就导致在开发新需求时,其他同学并不能很自然地将业务问题映射到该设计模型。设计似乎变成了重构者的自娱自乐,代码继续腐败,重新重构……无休止的循环。

2012-09-26 · 1 min · 4 words · -

linux 时区,时间

linux 时区,时间 # 把硬件时间设置成系统时间 hwclock --hctosys # 把系统时间设置成硬件 hwclock --systohc # 设置硬件时间 hwclock --set --date="mm/dd/yy hh:mm:ss" # 修改系统时间 date -s "dd/mm/yyyy hh:mm:ss" timedatectl 设置时区 # 查看系统时间方面的各种状态 timedatectl timedatectl status # 列出所有时区 timedatectl list-timezones # 设置系统时区为上海 timedatectl set-timezone Asia/Shanghai timesync sudo systemctl restart systemd-timesyncd systemctl status systemd-timesyncd timedatectl show-timesync timedatectl timesync-status https://www.linuxuprising.com/2019/07/how-to-set-timezone-and-enable-network.html timedatectl set-local-rtc 1 # 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间 其实不考虑各个发行版的差异化, 从更底层出发的话, 修改时间时区比想象中要简单: cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ...

2012-09-24 · 2 min · 397 words · lcf

UML

UML 时序图, Sequence Diagram Use Case Diagram 类图, Class Diagram Object Diagram 活动图, Activity Diagram 组件图, Component Diagram 部署图, Deployment Diagram 状态图, State Diagram Timing Diagram 部署图 部署图描述的是系统运行时的结构,展示了硬件的配置及其软件如何部署到网络结构中。一个系统模型只有一个部署图,部署图通常用来帮助理解分布式系统。 组件图 https://zhuanlan.zhihu.com/p/78244670 https://plantuml.com/zh/component-diagram 组件图:组件图是 UML(统一建模语言)中的一种结构图,用于可视化系统组件的组织和关系。这些图有助于将复杂的系统分解成易于管理的组件,展示它们之间的相互依存关系,确保高效的系统设计和架构。 Component diagram shows components, provided and required interfaces, ports, and relationships between them. This type of diagrams is used in Component-Based Development (CBD) to describe systems with Service-Oriented Architecture (SOA). Component-based development is based on assumptions that previously constructed components could be reused and that components could be replaced by some other “equivalent” or “conformant” components, if needed. The artifacts that implement component are intended to be capable of being deployed and re-deployed independently, for instance to update an existing system. ...

2012-09-24 · 2 min · 261 words · -

子网, 子网掩码

子网, 子网掩码 子网掩码 subnet mask 子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。 https://www.zhihu.com/question/21064101 IP和子网掩码 IP 是由四段数字组成 3 类常用的 IP A 类IP段 0.0.0.0 到 127.255.255.255 B 类IP段 128.0.0.0 到 191.255.255.255 C 类IP段 192.0.0.0 到 223.255.255.255 A 类的默认子网掩码 255.0.0.0 一个子网最多可以容纳 1677 万个 IP B 类的默认子网掩码 255.255.0.0 一个子网最多可以容纳 6 万个 IP C 类的默认子网掩码 255.255.255.0 一个子网最多可以容纳 254 个 IP 要想在同一网段,只要网络标识相同就可以了,那要怎么看网络标识呢?首先要做的是把每段的IP转换为二进制。 (有人说,我不会转换耶,没关系,我们用 windows 自带计算器就行。打开计算器,点查看>科学型,输入十进制的数字,再点一下"二进制"这个单选点,就可以切换至二进制了。) 把子网掩码切换至二进制,我们会发现,所有的子网掩码是由一串连续的1和一串连续的0组成的 (一共4段,每段8位,一共32位数) 。 255.0.0.0 11111111.00000000.00000000.00000000 255.255.0.0 11111111.11111111.00000000.00000000 255.255.255.0 11111111.11111111.11111111.00000000 这是A/B/C三类默认子网掩码的二进制形式,其实,还有好多种子网掩码,只要是一串连续的1和一串连续的0就可以了 (每段都是8位) 。如11111111.11111111.11111000.00000000,这也是一段合法的子网掩码。子网掩码决定的是一个子网的计算机数目,计算机公式是2的m次方,其中,我们可以把m看到是后面的多少颗0。如255.255.255.0 转换成二进制,那就是11111111.11111111.11111111.00000000,后面有8个0,那m就是8,255.255.255.0 这个子网掩码可以容纳2的8次方 (台) 电脑,也就是256台,但是有两个IP是不能用的,那就是最后一段不能为0和255,减去这两台,就是254台。我们再来做一个。 255.255.248.0这个子网掩码可以最多容纳多少台电脑? 计算方法: 把将其转换为二进制的四段数字 (每段要是8位,如果是0,可以写成8个0,也就是00000000) 11111111.1111111.11111000.00000000 然后,数数后面有几颗0,一共是有11颗,那就是2的11次方,等于2048,这个子网掩码最多可以容纳2048台电脑。 一个子网最多可以容纳多少台电脑你会算了吧,下面我们来个逆向算法的题。 一个公司有530台电脑,组成一个对等局域网,子网掩码设多少最合适? 首先,无疑,530台电脑用B类IP最合适 (A类不用说了,太多,C类又不够,肯定是B类) ,但是B类默认的子网掩码是255.255.0.0,可以容纳6万台电脑,显然不太合适,那子网掩码设多少合适呢?我们先来列个公式。 2的m次方=560 首先,我们确定2一定是大于8次方的,因为我们知道2的8次方是256,也就是C类IP的最大容纳电脑的数目,我们从9次方一个一个试2的9次方是512,不到560,2的10次方是1024,看来2的10次方最合适了。子网掩码一共由32位组成,已确定后面10位是0了,那前面的22位就是1,最合适的子网掩码就是: 11111111.11111111.11111100.00000000,转换成10进制,那就是255.255.252.0。 ...

2012-09-19 · 1 min · 133 words · -

Markdown 语法

Markdown 语法 JetBrain Writerside implements the CommonMark Spec: https://spec.commonmark.org/0.30/ 转义 比如在 Markdown 中显示反引号, 可以用反斜杠转义 ` 字体 加粗 要加粗的文字左右分别用两个*号包起来 斜体 要倾斜的文字左右分别用一个*号包起来 *foo* foobarfoo 斜体加粗 要倾斜和加粗的文字左右分别用三个*号包起来 删除线 要加删除线的文字左右分别用两个~~号包起来 示例 这是加粗的文字 这是倾斜的文字 这是斜体加粗的文字 这是加删除线的文字 标题 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 图片 ![Alt text](图片链接 "optional title") # 本地图片 ![avatar](/user/desktop/doge.png) # 网络图片 ![avatar](https://dubbo.apache.org/imgs/v3/concepts/threecenters.png) ![](https://dubbo.apache.org/imgs/v3/concepts/threecenters.png) 表格 | t0 | t1 | | - | - | | c0r0 | c1r0| | c1r1 | c1r1 | 引用 >foo Markdown 是一种轻量级的标记语言,由John Gruber和Aaron Swartz创建,使其成为可读性最大并可再发行的可输入输出的格式。这种语言创建灵感来自于已经存在的带标记的电子邮件文本。Markdown 允许 HTML 语法,所以使用者如果需要可以直接用 HTML来表示是可以的。Markdown最初由Gruber应用在Perl语言中,但现在已经有多种编程语言应用了。它是开源项目,并以BSD-style许可证的许可方式以插件形式或内容管理系统形式发布。 ...

2012-09-17 · 1 min · 174 words · -

公有云安装 archlinux, Aliyun/阿里云 ecs, bwg KVM

aliyun ecs, 阿里云安装 archlinux aliyun vm 安装 非 EFI 的镜像 cd /tmp curl -O http://mirrors.163.com/archlinux/iso/2024.04.01/archlinux-bootstrap-2024.04.01-x86_64.tar.gz tar zxvf archlinux-bootstrap-xxx.tar.gz # 要用 mount --bind 把 RootFS 解包的目录自己与自己链接起来,不然 pacman 会装不了软件 sudo mount --bind /tmp/root.x86_64 /tmp/root.x86_64 # edit mirror list vim /tmp/root.x86_64/etc/pacman.d/mirrorlist # chroot /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/ # 初始化 pacman 的密钥 pacman-key --init pacman-key --populate archlinux # 把 原系统的 根目录 / 挂载到 /mnt # 先 df -h 看一下 根目录在哪个分区 mount /dev/vdaX /mnt # 保留的目录 /dev /proc /run /sys /tmp , 这些目录都是存储到硬件的映射的,所以不能删 # boot 目录有可能会删除失败 rm -rf /mnt/boot rm -rf /mnt/bin rm -rf /mnt/data rm -rf /mnt/etc rm -rf /mnt/home rm -rf /mnt/lib rm -rf /mnt/lib32 rm -rf /mnt/lib64 rm -rf /mnt/libx32 rm -rf /mnt/media rm -rf /mnt/mnt rm -rf /mnt/opt rm -rf /mnt/root rm -rf /mnt/sbin rm -rf /mnt/srv rm -rf /mnt/usr rm -rf /mnt/var pacstrap /mnt base linux linux-firmware genfstab -U /mnt >> /mnt/etc/fstab arch-chroot /mnt ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo 'nameserver 114.114.114.114' >> resolv.conf pacman -S gvim openssh grub sudo neofetch python echo 'aliyun0' > /etc/hostname echo '127.0.0.1 localhost' >> /etc/hosts echo '127.0.0.1 aliyun0' >> /etc/hosts systemctl enable systemd-networkd systemctl enable systemd-resolved systemctl enable sshd vim /etc/systemd/network/eth.network [Match] Name=en* [Network] DHCP=ipv4 [DHCPv4] UseHostname=false useradd -m wiloon passwd wiloon passwd root echo 'wiloon ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/wiloon.conf grub-install --target=i386-pc /dev/vda grub-mkconfig -o /boot/grub/grub.cfg reboot timedatectl set-ntp true -` root@aliyun0 .o+` ------------ `ooo/ OS: Arch Linux x86_64 `+oooo: Host: Alibaba Cloud ECS pc-i440fx-2.1 `+oooooo: Kernel: 6.8.7-arch1-1 -+oooooo+: Uptime: 6 mins `/:-:++oooo+: Packages: 254 (pacman) `/++++/+++++++: Shell: bash 5.2.26 `/++++++++++++++: Resolution: 1024x768 `/+++ooooooooooooo/` Terminal: /dev/pts/0 ./ooosssso++osssssso+` CPU: Intel Xeon Platinum 8269CY (2) @ 2.500GHz .oossssso-````/ossssss+` GPU: 00:02.0 Cirrus Logic GD 5446 -osssssso. :ssssssso. Memory: 93MiB / 422MiB :osssssss/ osssso+++. /ossssssss/ +ssssooo/- `/ossssso+/:- -:/+osssso+- `+sso+:-` `.-/+oso: `++:. `-/+/ .` `/ https://limelight.moe/t/topic/6007 https://www.scarletdrop.cn/archives/14 ...

2012-09-16 · 2 min · 305 words · -

MSVC, MinGW, GNU

MSVC, MinGW, GNU Qt 中有两种方式编译,一种是MinGW ,另一种MSVC。 MSVC 是指微软的VC编译器。 MinGW 是指是Minimalist GNU on Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时库。 它们都是很好用的编译工具,但是它们兼容的并不好。当你的项目使用MinGW编译的使用,想要用一个MSVC编译生成的库时就会有问题。使用MinGW编译项目的时候,所使用的Lib也要是MinGW编译的。如果你只是开发Window平台的软件时,最好用Qt MSVC组合,这样可以使用大量的第三方lib,还有很多的构建指令,毕竟window上MSVC才是王道。 ———————————————— 版权声明:本文为CSDN博主「自先沉稳~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/error_again/article/details/109765184 GNU VS. MSVC winget search rust Rust (MSVC) Rusr (GNU) The GNU toolchain uses the MinGW build tools (mostly the linker) and produces binaries that use the GNU ABI. The MSVC toolchain uses the Visual Studio build tools and produces binaries that use the Microsoft ABI, making them more compatible with most other Windows binaries/libraries. ...

2012-09-15 · 1 min · 76 words · -

awk command

awk command [ɔk] 参数 -F fs, --field-separator=fs, # 指定输入文件折分隔符,fs 是一个字符串或者是一个正则表达式 print ‘{pirnt $2}’, print 外层要用单引号, 不能用双引号 $0 代表当前行 内建变量 NF 一条记录的字段的数目 commands #最短行: awk '(NR==1||length(min)>length()){min=$0}END{print min}' data.txt # 最长行: awk '{if (length(max)<length()) max=$0}END{print max}' data.txt # 单独使用 awk, 不需要 cat awk '{print $1}' /tmp/foo.txt cat dep-clean|awk -F '@' '{if(NF>2){print "\"""@"$2"\""":"$3} else {pint $1":"$2}}' cat dep-clean|awk -F '@' '{if(NF<3){print "\""$1"\""":"$2}}' cat dep-clean|awk -F '@' '{if(NF>2){print "\"""@"$2"\""":"$3} else if (NF<3) {print $1":"$2}}' # kill all java process ps -ef |grep java|awk '{print $2}'|xargs -t -n 1 kill -9 # 取本机ip >https://www.cnblogs.com/poloyy/p/12212868.html ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' # print column range awk '{for(i=1;i<=NF-1;i++) printf $i" "; print ""}' marks.txt # 统计每一行逗号出现的次数 awk -F "," '{pirnt NF-1}' foo.txt 变量 除了 $ + 数字表示某个字段,awk 还提供其他一些变量。 ...

2012-07-05 · 5 min · 947 words · -

事务, transaction

事务, transaction TRANSACTION(事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 数据库事务通常包含了一个序列的对数据库的读/写操作。包含有以下两个目的: 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。 当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。 事务的属性: 原子性, 一致性, 隔离性, 持久性, ACID 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。 事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务应该具有 4 个属性: 原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID 特性。 分布式事务 分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。例如在大型电商系统中,下单接口通常会扣减库存、减去优惠、生成订单 id, 而订单服务与库存、优惠、订单 id 都是不同的服务,下单接口的成功与否,不仅取决于本地的 db 操作,而且依赖第三方系统的结果,这时候分布式事务就保证这些操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 一致性 Consistency 其实只有两类数据一致性,强一致性与弱一致性。强一致性也叫做线性一致性,除此以外,所有其他的一致性都是弱一致性的特殊情况。所谓强一致性,即复制是同步的,弱一致性,即复制是异步的。 强一致性 任何一次读都能读到某个数据的最近一次写的数据。系统中的所有进程,看到的操作顺序,都和全局时钟下的顺序一致。简言之,在任意时刻,所有节点中的数据是一样的。 弱一致性 数据更新后,如果能容忍后续的访问只能访问到部分或者全部访问不到,则是弱一致性。 最终一致性 不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。简单说,就是在一段时间后,节点间的数据会最终达到一致状态 事务处理过程中,会有短暂不一致的情况,但通过恢复系统,可以让事务的数据达到最终一致的目标。 最终一致性要求系统中数据副本最终能够一致,而不需要实时保证数据副本一致。例如,银行系统中的非实时转账操作,允许 24 小时内用户账户的状态在转账前后是不一致的,但 24 小时后账户数据必须正确。 最终一致性是 BASE 原理的核心,也是 NoSQL 数据库的主要特点,通过弱化一致性,提高系统的可伸缩性、可靠性和可用性。而且对于大多数 Web 应用,其实并不需要强一致性,因此牺牲一致性而换取高可用性,是多数分布式数据库产品的方向。 重试 重试机制可以使分布式不一致数据自动恢复,前提是重试接口要提供幂等保证。重试机制是达成分布式最终一致性的重要手段。例如,超时重传是TCP协议保证数据可靠性的一个重要机制,核心思想其实就是重试。 同步重试 : 在上次请求失败或超时,程序再次发起同步调用请求。后端程序不推荐同步重试,其一因为同步等待占用系统线程资源,其二因为重试引起的流量放大,可能导致系统雪崩。 异步重试 : 通过异步系统(消息队列或调度中间件)对失败或超时请求再次发起调用。推荐这种方式的重试,重试的时间间隔可以设置为根据重试次数指数增长,超过重试阈值仍未成功,可以报警通知并由人工订正。 重试也是提高系统可用性的一种有效手段。如果一个服务的可用性为98%(有1个9),1次重试之后其可用性可达到99.96%(3个9),2次重试可以达到99.9992%(5个9)。 幂等 幂等的数学定义为 f(f(x)) = f(x) 用通俗的话来说就是 : 相同的操作执行多次 和 执行一次产生的效果是一样的。有的操作是天然幂等的,如查询、删除操作。有的操作是人为使其幂等,例如TCP的超时重传操作就是幂等的,无论客户端将一个seq字节传送多少次,服务端窗口只会用一次该字节。 ...

2012-06-28 · 1 min · 123 words · -

从 HTTP GET 和 POST 的区别说起

从 HTTP GET 和 POST 的区别说起 HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST. 面试时得到的回答大多是: POST 是安全的,因为被提交的数据看不到,或者被加密的,其它的还有 GET 的时候中文出现乱码 (在地址栏里) ,数据最大长度限制等等。 说 POST 比 GET 安全肯定是错的,POST 跟 GET 都是明文传输,用httpfox等插件,或者像WireShark 等类似工具就能观察到。 POST 和 GET 的差别其实是很大的。语义上,GET 是获取指定URL上的资源,是读操作,重要的一点是不论对某个资源 GET 多少次,它的状态是不会改变的, 在这个意义上,我们说 GET 是安全的 (不是被密码学或者数据保护意义上的安全) 。因为 GET 是安全的,所以 GET 返回的内容可以被浏览器, Cache 服务器缓存起来 (其中还有很多细节,但不影响这里的讨论) 。 而 POST 的语意是对指定资源"追加/添加"数据,所以是不安全的,每次提交的 POST,参与的代码都会认为这个操作会修改操作对象资源的状态, 于是,浏览器在你按下 F5 的时候会跳出确认框,缓存服务器不会缓存 POST 请求返回内容。 很遗憾到目前为止没有应聘者能够提到这一点。我猜测这背后的原因大概有两个,一是也许大多数人往往 (我也一样) 满足于只要完成任务就好,不管用哪个, 表单提交了,数据处理了,内容显示或者重新定向到另外一个页面,就算完成了一个任务,从任务表里划掉,结束。 而且对大部分项目(OA, CRM, MIS)的大部分情况下,用哪个似乎都可以。 同时,在被商业机构在媒体和书籍上宣传兜售的 WS-* 概念和使用集成开发环境提供的"方便"的代码生成工具后,“了解"到所有 Web 服务调用都是通过 POST, 更潜意识里确定了 POST 和 GET 是一样的,而且 GET 能做的,POST 都能做,POST 简直就是 GET++ 嘛。 自然,能用 POST 就用 POST,不必在乎两者的差别了。 ...

2012-06-03 · 4 min · 740 words · -

TLS, HTTPS

TLS, HTTPS 创建自签名TLS/SSL证书和私钥 https://www.ssldragon.com/zh/how-to/openssl/create-self-signed-certificate-openssl/ # 生成私钥 openssl genpkey -algorithm RSA -out private.key 自签名证书里的域名不能用 .dev 结尾, .dev 是 Google 持有的顶级域名, 不能用在自签名证书里 https://stackoverflow.com/questions/49503337/self-signed-dev-cert-untrusted-using-firefox-59-on-ubuntu https://blog.ideawand.com/2017/11/22/build-certificate-that-support-Subject-Alternative-Name-SAN/ https://www.mikesay.com/2018/12/30/create-self-signed-ssl/ 创建 CA 证书用的配置文件 ca.cnf https://www.mikesay.com/2018/12/30/create-self-signed-ssl/ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfsigned-key.key -out selfsigned-certificate.crt openssl: 基本命令行工具,用来创建和管理OpenSSL证书,私钥和其它文件。 req: 子命令,主要是用来创建和处理PKCS#10格式的证书请求。它也能创建被用作根证书的自签名证书。 -x509: 这个选项告诉openssl创建一个自签名证书而不是一个证书请求。 -nodes: 这个选项告诉openssl不要加密私钥,否则当使用在Nginx上时,每次Nginx启动都要提示输入密码。 -days 365: 设置证书的有效期为1年(365天)。 -newkey rsa:2048: 这个选项告诉 openss l在生成证书的同时生成私钥。rsa:2048 说明创建一个 2048 比特长的 RSA 私钥。 -keyout: 告诉 openssl 生成的私钥的名字和路径。 -out: 告诉openssl生成的自签名证书和路径。 客户端安装自签名证书 # ubuntu # 将证书拷贝到目录 “/usr/local/share/ca-certificates” sudo cp selfsigned-certificate.crt /usr/local/share/ca-certificates # 更新CA存储 sudo update-ca-certificates # 删除sudo update-ca-certificates --fresh sudo rm /usr/local/share/ca-certificates/selfsigned-certificate.crt sudo update-ca-certificates --fresh SAN SAN, Subject Alternative Name(证书主体别名) 是 SSL 标准 x509 中定义的一个扩展。它允许一个证书支持多个不同的域名。通过使用 SAN 字段,可以在一个证书中指定多个 DNS 名称(域名)、 IP 地址或其他类型的标识符,这样证书就可以同时用于多个不同的服务或主机上。这种灵活性意味着企业不需要为每个域名单独购买和安装证书, 从而降低了成本和复杂性。 ...

2012-03-21 · 3 min · 517 words · -

systemd timer, cron, crond, crontab, linux 定时任务, cronie

systemd timer, systemd-timer, cron, crond, crontab, linux 定时任务, cronie 安装了 systemd 的系统, 可以用 systemd-timer 来替代 cron 和 anacron。 When using the systemd init system, (persistent) timers are available as a replacement of (ana)cron. Since version 197 systemd supports timers, making cron unnecessary on a systemd system. Since version 212 persistent services are supported, replacing even anacron. Persistent timers are run at the next opportunity if the system was powered down when the timer was scheduled to run. ...

2012-03-02 · 6 min · 1075 words · -

linux 内核, kernel

linux 内核, kernel kernel-devel和kernel-headers都是Linux内核开发和编译过程中需要的软件包,它们包含的内容有一定的区别。 kernel-headers是Linux内核头文件的软件包,它包含了编译内核模块所需的头文件和接口定义,但是不包含内核模块的源代码。这些头文件包括了Linux内核的各种数据结构、系统调用和其他接口的声明,编译内核模块时需要这些头文件来编译并链接内核模块。 kernel-devel则是Linux内核开发包,它不仅包含了内核头文件,还包含了编译内核模块所需的各种库文件、编译器和调试工具等。它还包含了内核模块的源代码,可以让开发人员对内核进行修改和定制。 kernel doc https://www.kernel.org/doc/html/latest/ linux内核版本的分类 Linux内核版本有两种: 稳定版和开发版 ,Linux内核版本号由3组数字组成: 第一个组数字.第二组数字.第三组数字 第一个组数字: 目前发布的内核主版本。 第二个组数字: 偶数表示稳定版本;奇数表示开发中版本。 第三个组数字: 错误修补的次数。 例1: 2.6.18-128.ELsmp , 第一个组数字: 2 , 主版本号 第二个组数字: 6 , 次版本号,表示稳定版本(因为有偶数) 第三个组数字 18 , 修订版本号 , 表示修改的次数,头两个数字合在一齐可以描述内核系列。如稳定版的2.6.0,它是2.6版内核系列。128: 表示这个当前版本的第128次微调patch , 而ELsmp指出了当前内核是为ELsmp特别调校的 EL : Enterprise Linux ; smp : 表示支持多处理器 , 表示该内核版本支持多处理器 linux内核下里的ELsmp与EL与smp 在linux下ELsmp指出了当前内核是为ELsmp特别调校的 EL : Enterprise Linux ; smp : 表示支持多处理器 , 表示该内核版本支持多处理器 例2:Red Hat Linux开机的时候,GRUB的启动菜单会有两个选项,分别是 Red Hat Enterprise Linux ES (版本号.ELsmp) Red Hat Enterprise Linux ES-up (版本号.EL) 其实这个就是系统开机时由GRUB引导启动 - 单处理器与对称多处理器启动核心文件的区别。 Red Hat Enterprise Linux ES (版本号.ELsmp) multiple processor (symmetric multiprocessing ) Red Hat Enterprise Linux ES-up (版本号.EL) uniprocessor ...

2012-02-26 · 1 min · 101 words · -

IELTS, 雅思

IELTS, 雅思 a, an art. 一个 abandon v. 抛弃,放弃 abandonment n.放弃 accord [ә’kɔ:d] vt.使一致,给予

2012-02-01 · 1 min · 14 words · -

文件系统 Ext2, Ext3, Ext4, xfs, btrfs

文件系统 Ext2, Ext3, Ext4, xfs, btrfs Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能: 与 Ext3 兼容。执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。 更大的文件系统和更大的文件。较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB (1,048,576TB, 1EB=1024PB, 1PB=1024TB) 的文件系统,以及 16TB 的文件。 FS 无限数量的子目录。Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。 Extents。Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块 (每个数据块大小为 4KB) 的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent 为一组连续的数据块,上述文件则表示为"该文件数据保存在接下来的 25,600 个数据块中",提高了不少效率。 ...

2011-12-03 · 3 min · 491 words · -