亢奋猫 发布的文章

以太坊是一个分布式的公链,由很多台电脑组网而成,每台接入这个网络的电脑本地都会保存一份完整区块链(可理解为一个本地数据库,多个文件组成)。这些组网的电脑中有一些节点电脑担任所谓的矿工,矿工负责将所有这个网络上的交易打包成一个小区块,然后分发到所有的节点(包括你的电脑),这些小区块就构成了刚才前面所说的区块链。智能合约可以简单的理解为一段可执行的程序片段,具体的代码由发布人使用特定的编程语言来编写(以太坊使用的是Solidity编程语言,类似JavaScript),在本地编译成功后可以发布到区块链上。而以太坊的智能合约也可以理解为一个特殊的交易(包括可执行代码的),被发送出去后会被矿工打包记录在某一个区块中,当需要调用这个智能合约的方法时只需要向这个智能合约的地址发送一笔交易即可。每个节点电脑都需要安装以太坊客户端,而这个以太坊客户端自带了EVM,一个以太坊智能合约的执行环境,类似JVM一样,通过交易触发智能合约后智能合约的代码就会在EVM中执行了。这种方式相当于把程序部署到了非常非常多的电脑上(只要这个电脑安装了以太坊客户端并接入了以太坊网络),随时都可以通过交易来触发这些智能合约的执行,也从而完成了分布式程序的部署和调用。当然,目前智能合约的功能还非常有限,不能完成所有的现在编程可以解决的事情(比如访问网络下载文件,这个是目前EVM不允许和不支持的)。但这并不妨碍以太坊和智能合约技术的发展,以及有可能成为下一代互联网基础设施和协议的可能!

作者:铁木箱子
链接:https://www.zhihu.com/question/57056818/answer/187414731
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2008年,中本聪提出了比特币的概念,这是一种全新的电子货币。比特币是一种去中心化的记账系统,人们通过挖矿获得比特币,通过公开记账的方式完成支付。

目前的记账方式

交易中最重要的事情就是记账,现在的记账是由银行来处理的,我们信任银行,因为银行的背后是国家的信用。但是银行可以冻结我们的账户,可以限制我们的交易,极端情况下我们的资产将不受保护。

区块链记账方式

中本聪提出一种设想,我们可以用去中心化的记账系统来记账,把所有的交易记录全部公开,并将这些交易记录存储在分布在世界各地的计算机上,每台计算机上都保存一份最新的账本。

如何记账:

假设初始网络中有A,B,C,D来记录交易:

  1. A -> 10BTC -> B
  2. A在本地记账,并广播通知网络上所有人,B、C、D共同参与记账
  3. B -> 5BTC -> C
  4. B在本地记账,并广播通知网络上所有人,A、C、D共同参与记账
  5. E想要加入记账,E会先将之前账本同步过来,然后加入网络,目前网络上有A,B,C,D,E参与记账
  6. C -> 5BTC -> D
  7. C在本地记账,并广播通知网络上所有人,A、B、D、E共同参与记账
  8. 重复这个过程

记账的数据

每10分钟将所有新发生的交易记录进行打包,每个包大约包含4000条交易记录,存储在计算机上占用1MB存储空间,这个打包后的数据就叫区块。世界上每10分钟就会产生一个区块,将区块按照时间顺序连接在一起就叫区块链。

打包的工作由所有的节点竞争完成(挖矿),而且10分钟内只能选出一个节点来打包区块,系统会奖励一些比特币给打包的节点。

如何打包区块

假如区块链系统开始工作,此时有A,B,C,D,E参与记账。第一个10分钟内产生了一些交易记录,10分钟过后A,B,C,D,E同时开始竞争打包,竞争的规则是计算一个复杂的数学题目(工作量证明),为了保证公平性,每个节点的计算难度都是随机的。最先得到正确结果的节点获得打包权限,然后将打包的区块数据链接到之前的区块上,得到最新的区块链。然后其余节点同步这个区块,从而获得最新的完整的区块链,区块链上记录着有史以来全部的交易记录。

区块+区块+区块+区块+区块+区块+区块+区块+区块+区块+区块+...+区块 = 区块链

区块链中的数据到底存在哪里?

区块链是一个分布式的网络,由诸多的节点组成,而区块链的数据在每个节点上都会存储一份。新加入的节点会去其他的节点上同步数据。至于数据量的问题,目前来看,还是可控的,比特币运行超过 10 年了,目前的数据也还没有超过 400G。比特币的数据上链之后就无法再更改了。区块链的数据存节点的本地磁盘上。

记账的奖励:

每一个比特币系统的节点都可以记账,那么记账会有什么好处呢?

  1. 手续费,如果 A 付 10BTC 给 B,那么 A 要多付一点点给 B,多付的部分就是给参与记账的节点的奖励
  2. 打包奖励,竞争打包区块成功的节点将获得额外比特币奖励

因为有手续费和打包奖励,很多人都争着去加入比特币系统中,成为其中的一个节点。加入计算的行为被人称为挖矿,参与计算的机器叫做矿机,每个矿机中都保存着一份完整的区块链数据,并参与竞争打包新的区块。

区块链本质是什么:

区块链本质就是一个分布式的数据库。比特币可以利用这种数据库存储交易记录,同样我们也可以利用区块链技术存放其他类型的数据。

区块链缺陷是什么:

区块链有两类数据,全部重复地存在每个全节点里面,全量复制,有n个全节点就有n倍的冗余。

第一类数据是:全网每个用户以及合约的最新状态,比如每个人的账户余额,这个数据存在内存里面。

第二类数据是:全网状态的历史修改记录,也就是log,存放在硬盘上。这个部分数据是我们所说的区块链。区块链就是这么个设计,每一台电脑,实际上承载了整个网络的工作量。这也是区块链性能瓶颈的根本原因。

当然,技术还是在发展,后续有技术可以将网络分而治之。

其他问题:

一个成熟的记账系统除了如何存储,如何激励问题外,还有很多问题需要解决。比如,如何保障账本安全,如何保障数据准确等,这里不再深入探讨。

什么是VMware vSphere?

VMware vSphere不是特定的产品或软件。VMware vSphere是整个VMware套件的商业名称。VMware vSphere堆栈包括虚拟化,管理和界面层。VMware vSphere的两个核心组件是ESXi服务器和vCenter Server。ESXi是hypervsior,您可以在其中创建和运行虚拟机和虚拟设备。vCenter Server是用于管理网络中连接的多个ESXi主机和池主机资源的服务。我希望这个简单的信息能够从“什么是VMware vSphere”这个问题中清除您的想法。与其他虚拟机管理程序(如Microsoft Hyper-v和Citrix Xen Server)相比,VMware vSphere是虚拟化行业的主人。

什么是VMware ESXi?

VMware ESXi 是 VMware 的裸机虚拟机管理程序。VMware ESXi是以ISO形式提供的软件,可直接安装在物理硬件上。ESXi安装占用空间小,大小为144 MB。VMWare ESXi允许您在其中创建多个虚拟机,以在单个物理硬件中运行多个操作系统,如windows,linux,solaris,macOS等。它使您能够在虚拟机之上运行工作负载,从而可以整合多个物理硬件,从而将工作负载运行到更少的物理硬件中。

tn-vsphere-overview-hypervisor.jpg

什么是VMware vCenter Server?

VMware vCenter是帮助您集中管理整个VMware虚拟化基础架构的软件。vCenter可以将大约数千个ESXi主机添加到清单中,从而可以管理多个ESXi主机以及ESXi主机上运行的虚拟机。vCenter Server提供了许多vSphere功能,例如VMware DRS,VMware HA(高可用性),VMware vMotion,VMware容错,虚拟机模板,VM克隆等。

arquitecturacenter.jpg

VMware vCenter可以安装在Windows上,也可以通过基于Linux的vCenter(称为vCenter Server Appliance)安装。最近在vSphere 6.5上从SUSE切换到Photon OS(VMware的操作系统)。了解基于Windows的vCenter Server和vCenter Server设备之间的区别。 您需要具有外部数据库(如Microsoft SQL Server,Oracle等)或嵌入式数据库(如PostgreSQL)才能安装vCenter Server。在Microsoft SQL Server Express版本是VMware vCenter Server的嵌入式数据库之前,PostgreSQL从vSphere 6.0成为嵌入式数据库。vCenter Server数据库存储有关虚拟基础架构清单对象的信息,例如ESXi主机信息,虚拟机信息以及性能数据。

一. Multipass 是什么?

Multipass 是一个轻量级 Linux 虚拟机命令行管理工具,支持 Linux、Windows 与 macOS。

二. 为什么要用 Multipass

  1. 能够以最小的成本和资源在本地快速搭建具备完整 Ubuntu 功能小型虚拟机集群(如测试 K8s各类特性、数据库小集群等)
  2. 可以方便快速的做各类 Linux 试验,而不用担心把系统搞坏,重建一个新系统只要几分钟
  3. 实例通过命令行管理,对开发非常友好,每个实例IP固定

三. 如何安装

安装方法

四. 功能介绍

可在 Multipass 官网 查看详细使用文档。

$ multipass help

用法: multipass [options] <command>
创建, 控制和连接 Ubuntu 实例。

multipass 命令行工具, 用于管理 ubuntu 实例。

参数:
  -h, --help     查看本帮助内容
  -v, --verbose  增加日志显示的详细程度。 通过在短参数中增加 'v' 来获取更多日志信息
                 最多支持4个等级,如: -vvvv。

可用的命令:
  delete    删除实例
  exec      在实例中执行命令
  find      查找并列出可用于创建实例的镜像
  get       获取某个配置项
  help      查看帮助
  info      查看实例信息
  launch    创建并启动实例
  list      列出所有实例
  mount     挂载文件夹到实例
  purge     清除已删除的实例
  recover   恢复已删除的实例
  restart   重启实例
  set       设置某个配置项
  shell     通过 shell 连接实例
  start     启动实例
  stop      停止实例
  suspend   挂起实例
  transfer  在本机和实例之间传输文件
  umount    移除实例中挂载的文件夹
  version   查看版本号

五. 常见问题(以 MacOS 为例)

问题一:最开始设置的内存或 CPU 数量小了,想扩容,怎么办?

multipass 通过 /var/root/Library/Application Support/multipassd/multipassd-vm-instances.json 中的配置来管理实例,可直接在这个配置文件中修改:

mem_size 来增加或减少内存
num_cores 来增加或减少CPU核心数

修改之前需要先停止 multipass 的进程,原因是 multipass 会在被关闭的时候将各个实例的状态写入到配置文件,所以在没有关闭 multipass 进程的时候修改配置文件,会被覆盖。

# 停止 multipassd 进程
sudo launchctl unload /Library/LaunchDaemons/com.canonical.multipassd.plist

# 编辑 /var/root/Library/Application Support/multipassd/multipassd-vm-instances.json 文件
# 需要 root 权限

# 重新启动 multipassd 进程
sudo launchctl load /Library/LaunchDaemons/com.canonical.multipassd.plist

问题二:电脑意外关机,无法启动实例,怎么办?

实例的启动关闭状态也维护在 /var/root/Library/Application Support/multipassd/multipassd-vm-instances.json 文件中的 state 字段,当电脑意外关机,state 字段不会被正确的维护,导致无法启动或关闭实例,这时候,可以先停止 multipassd 进程,然后手动到配置文件中修改 state 为 0,即关机状态,保存配置文件,并启动 multipassd 实例即可,这时候就可以正常启动各个实例了。

问题三:能安装 Cent OS 实例么?

暂时不能,该工具为 Ubuntu 背后的公司 Canonical 开发,目前仅支持 Ubuntu 系统。

问题四:如果在实例之间传递文件?

最简单的方式是通过挂载相同的文件夹到不同的实例中来共享文件。

参考

  1. multipass 官网

绕过 Apple 启动应用时连接 Apple 服务器的验证。这样可以有效提升应用加载速度。

sudo vim /etc/host

127.0.0.1 ocsp.apple.com

EPEL(Extra Packages for Enterprise Linux)是由Fedora Special Interest Group 维护的 Enterprise Linux(RHEL、CentOS)中经常用到的包。

What is Extra Packages for Enterprise Linux (or EPEL)?

Extra Packages for Enterprise Linux (or EPEL) is a Fedora Special Interest Group that creates, maintains, and manages a high quality set of additional packages for Enterprise Linux, including, but not limited to, Red Hat Enterprise Linux (RHEL), CentOS and Scientific Linux (SL), Oracle Linux (OL).

EPEL packages are usually based on their Fedora counterparts and will never conflict with or replace packages in the base Enterprise Linux distributions. EPEL uses much of the same infrastructure as Fedora, including buildsystem, bugzilla instance, updates manager, mirror manager and more.

Learn more about EPEL in the following pages:

Quickstart

You may retrieve signed binary configuration files from one the above two links (varying by the major release number of the installation target machine). They may be automatically installed by root thus:

  • RHEL/CentOS 7:

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

  • on RHEL 7 it is recommended to also enable the optional, extras, and HA repositories since EPEL packages may depend on packages from these repositories:
# subscription-manager repos --enable "rhel--optional-rpms" --enable "rhel--extras-rpms" --enable "rhel-ha-for-rhel-*-server-rpms"
  • RHEL/CentOS 8:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
  • CentOS Stream 8:
dnf install epel-release
  • on RHEL 8 it is required to also enable the codeready-builder-for-rhel-8-*-rpms repository since EPEL packages may depend on packages from it:
subscription-manager repos --enable "codeready-builder-for-rhel-8-$(arch)-rpms"
  • on CentOS 8 it is recommended to also enable the powertools repository since EPEL packages may depend on packages from it:
dnf config-manager --set-enabled powertools

https://docs.fedoraproject.org/zh_CN/epel/#_quickstart

国内软件源加速

brew

cd "$(brew --repo)"
git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
brew update

此时可以执行 brew config 命令,查看配置信息:

brew config

Node.js

使用淘宝源

npm config set registry https://registry.npmmirror.com/ --global

恢复

npm config set registry https://registry.npmjs.org/ --global

remove_old_kernels.sh

#!/bin/bash
# Run this script without any param for a dry run
# Run the script with root and with exec param for removing old kernels after checking
# the list printed in the dry run

uname -a
IN_USE=$(uname -a | awk '{ print $3 }')
echo "Your in use kernel is $IN_USE"

OLD_KERNELS=$(
    dpkg --list |
        grep -v "$IN_USE" |
        grep -Ei 'linux-image|linux-headers|linux-modules' |
        awk '{ print $2 }'
)
echo "Old Kernels to be removed:"
echo "$OLD_KERNELS"

if [ "$1" == "exec" ]; then
    for PACKAGE in $OLD_KERNELS; do
        yes | apt purge "$PACKAGE"
    done
fi

Run it like this for a dry run:

remove_old_kernels.sh

If all looks good, run it again like this:

sudo remove_old_kernels.sh exec

https://askubuntu.com/questions/1253347/how-to-easily-remove-old-kernels-in-ubuntu-20-04-lts?newreg=6a13fc7693b44ef8a5aa06b6487983b9