·Steem HF20 是一次“肠梗阻”的软件升级运动! 杂说分叉(Fork)的原理及方法steemCreated with Sketch.

in #cn6 years ago

Steem HF20 is a software upgrade campaign for "intestinal obstruction". The principle and method of Fork.

本篇学习笔记罗列了几个网络运营中与“硬叉或强制派生(Hard Fork)”相关的技术术语:硬分叉、软分叉、分叉、派生、割接。
0B925BCC-6C1D-426E-9071-FF1D54A1AD6C.jpeg


Steem HF20 似乎“消停”下来了。这阵子,Steem HF20 “肠梗阻”,它的全体活跃用户“腹阵痛”。

肠梗阻是外科常见的情况之一,指的是肠腔内由于多种原因而发生了阻塞,导致肠腔里的食物、气体等无法正常通过肠腔,并能引起呕吐、腹胀、腹痛等症状。


硬分叉(Hard Fork)

“硬分叉”,是指在区块链或去中心化网络中不再向前兼容的强制性分叉。

“硬分叉”特指在区块链或去中心化网络中,系统软件做不再向前兼容的更新性升级。这种升级,技术上采用源于UNIX系统的 fork() 函数原理,fork() 运行前后的拓扑图式犹似“分叉”,故以形命名该函数。硬分叉对区块链软件使用的技术进行永久更改,这种变化使得所有的新数据块与原来的块不同,旧版本不会接受新版本创建的区块。要实现硬分叉,所有用户都需要切换到新版本协议上。如果新的硬分叉失败,所有的用户将回滚到原始数据块。

Fork,直译是“分叉”,意译的有人译为“派生”。Hard,直译是“硬的”,意译可认为是“强制性的”。Hard Fork,就是以强制派生新链方法更新区块链运营技术。硬分中,区块链的区块格式或交易格式(这就是广泛流传的“共识”)发生改变时,未升级的节点拒绝验证已经升级的节点生产出的区块,然后大家各自延续自己认为正确的链继续前行,所以分成两条子链。最终,也可能有一条短链被放弃,也可能会产生(或派生)出一条新链运营系统,这两种现象在比特币和以太坊都已经发生过。

硬分叉或许会产生「永久性」分叉。
4FA4BDAA-3F4F-4E4C-B9BD-D496FBDC71D5.png
区块链的数据块分叉链接


软分叉(Soft Fork)

软分叉是指在区块链或去中心化网络中继续向前兼容的分叉。

向前兼容意味着,当新共识规则发布后,在去中心化架构中的节点不一定要升级到新的共识规则,因为软分叉的新规则仍旧符合老的规则,所以未升级的节点仍旧能接受新的规则。

软分叉只会产生「临时性」分叉。

12071136-6DBE-42FE-A1E2-6BFF539E9534.jpeg
硬分叉与软分叉的区别


分叉(Fork)

最初,分叉(Fork)是 UNIX 操作系统中的一个函数名,Linux 也沿用至今。

在 UNIX 中,通过 fork() 系统调用可以创建一个和当前进程印象一样的新进程。通常将新进程称为子进程,而当前的进程称为父进程。子进程继承了父进程的整个地址空间,其中包括了进程上下文、堆栈地址、内存信息进程控制块(PCB)等。

fork()的调用逻辑图示意如下:
48C4E31D-E0BA-4EAE-9F59-257508F115F1.png
若 fork() 调用运行成功,它执行一次却会返回两个值:0 和 Pid,这与大多数的函数概念不同。fork()的这一特殊功能使操作系统在进程管理上付出了最小的代价,另一方面,又为程序员提供了一个简洁明了的多进程方法。

fork 在英文中直接理解是"分叉"的意思。伟大的程序员当初为什么取这个名字呢?因为一个进程在运行中,如果使用了 fork(),就产生了另一个进程,于是进程就"分叉"了,所以这个名字是以形象而得名。

调用这个 fork() 函数时发生了什么呢?fork() 函数启动一个新的进程,这个进程几乎是当前进程的一个拷贝:子进程和父进程使用相同的代码段;子进程复制父进程的堆栈段和数据段。这样,父进程的所有数据都可以留给子进程。但是,子进程一旦开始运行,虽然它继承了父进程的一切数据,但实际上数据却已经分开,相互之间不再有影响了,也就是说,它们之间不再共享任何数据了。它们再要交互信息时,只有通过进程间通信来实现。

注意⚠️,fork() 函数是操作系统的一个特殊函数!关于它的详细介绍请参见☞⇲“Linux下Fork与Exec使用”和☞⇲“深度剖析fork()的原理及用法”


派生

派生,是一个汉语词汇,本义指江河的源头产生出支流。引申义为从一个主要事物的发展中分化出来另一新的事物。

刘勰《文心雕龙·隐秀》:“源奥而派生,根盛而颖峻。”

《新华文摘》1983年第12期:“一件艺术品的价值不仅仅在于它包含了多少思想,还在于它在被社会欣赏的过程中能激发出、派生出多少思想。”

在计算机工程领域的对象法编程中,关于“派生”是这么描述:利用继承机制,新的类可以从已有的类中派生。那些用于派生出新生类的类称为这些特别派生出的类的“基类”。

“基类”就是头,它是已有的;被基类派生出的新生类就是流。是一个叉,相交处是分叉的结点。在自然界中,河流分叉处遇到了罕有年份的洪水,就会出现梗阻,下游的灾害从这里开始出现。
DA9FE1AA-3F48-459C-8F49-06F21B128C3A.jpeg
对象的数据

EEF29222-D80A-4C1F-89F5-D2C447DDC710.png
对象中的类型


割接

网络运营离不开“割接”技术。这里,割接是源于传统通信领域网络更新的一项工作。
6EC416DE-14AD-415A-8A11-C916D795CA93.jpeg

网络升级改造中最关键的一步就是网络割接,网络割接是对正在使用的线路、设备、软件进行操作,将会直接影响到它上面承载的业务。 网络割接又叫网络迁移,是指运行网络物理或者逻辑上的更改。

最早期的通信网络割接就是只有割断原有线路,切换连接到新设备上。笔者在N年以前的一个村级区域电话“总机”机房看到过。

如今的割接,不仅仅限于新旧线路的切割与连接的“硬割接”,还包括有软件升级更新的“软割接”。区块链技术中的“硬叉(Hard Fork)”内容主要属于软割接方式。

许多网络割接不是一步就能完成割接的,通常会分为很多小的割接步骤。这时候就需要一个总体的割接方案和许多具体的割接方案,用这些技术方案一起组合来描述整个过程。

割接方案不但是描述割接中需要进行的各项任务,还包含各项任务的计划时间表,所以相关的割接方案内容是需要由各个配合部门、甚至各个供应商单位共同讨论通过的。

如今,对于网络割接中的具体割接步骤,牵涉到软件版本的改变,以致通信协议上有较大更改的情况,通常需要搭设模拟环境进行模拟割接测试。任何软件都很难避免技术设计的漏洞(Bug)。网络起初的稳定运行不能说明在软件版本改变、协议逻辑改动后依然能稳定运行。例如,美国曾经有一个大运营商就发生过路由器软件版本大规模升级过程中出现全网几个小时的业务中断情况。所以割接前的模拟测试是验证割接方案可行性的一个严谨的步骤,严格的测试有助于减少“网络瘫痪”这方面的风险。

实际操作中,割接前期的准备工作很多,包含通知相关部门和客户、确定联系人、准备割接材料、配置备份、信息采集备份等等。


显然,这次 “Steem HF20 肠梗阻”的手术已经基本成功了,但是窃以为它的割接技术方案做的很不好!

Obviously, the operation of "Steem HF20 intestinal obstruction" has been basically successful, but its cutting technology program is not doing very well!

*图片来自网度


Steem,司递梦!
Steemian,司梦人!梦友。
Newsteemian,新司梦人!新梦友。
九丰庄主,RS47.2018-10-3

Posted using Partiko iOS

Coin Marketplace

STEEM 0.28
TRX 0.12
JST 0.032
BTC 59940.43
ETH 2988.79
USDT 1.00
SBD 3.61