数据库为什么要分库分表,第1张

1 基本思想之什么是分库分表?

从字面上简单理解,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。

2 基本思想之为什么要分库分表?

据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增

删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、

数据处理能力都将遭遇瓶颈。

3 分库分表的实施策略。

分库分表有垂直切分和水平切分两种。

31

何谓垂直切分,即将表按照功能模块、关系密切程度划分出来,部署到不同的库上。例如,我们会建立定义数据库workDB、商品数据库payDB、用户数据

库userDB、日志数据库logDB等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。

32

何谓水平切分,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库

上。例如,我们的userDB中的用户数据表中,每一个表的数据量都很大,就可以把userDB切分为结构相同的多个userDB:part0DB、

part1DB等,再将userDB上的用户数据表userTable,切分为很多userTable:userTable0、userTable1等,

然后将这些表按照一定的规则存储到多个userDB上。

33 应该使用哪一种方式来实施数据库分库分表,这要看数据库中数据量的瓶颈所在,并综合项目的业务类型进行考虑。

如果数据库是因为表太多而造成海量数据,并且项目的各项业务逻辑划分清晰、低耦合,那么规则简单明了、容易实施的垂直切分必是首选。

如果数据库中的表并不多,但单表的数据量很大、或数据热度很高,这种情况之下就应该选择水平切分,水平切分比垂直切分要复杂一些,它将原本逻辑上属于一体

的数据进行了物理分割,除了在分割时要对分割的粒度做好评估,考虑数据平均和负载平均,后期也将对项目人员及应用程序产生额外的数据管理负担。

在现实项目中,往往是这两种情况兼而有之,这就需要做出权衡,甚至既需要垂直切分,又需要水平切分。我们的游戏项目便综合使用了垂直与水平切分,我们首先对数据库进行垂直切分,然后,再针对一部分表,通常是用户数据表,进行水平切分。

4 分库分表存在的问题。

41 事务问题。

在执行分库分表之后,由于数据存储到了不同的库上,数据库事务管理出现了困难。如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价;如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担。

42 跨库跨表的join问题。

在执行了分库分表之后,难以避免会将原本逻辑关联性很强的数据划分到不同的表、不同的库上,这时,表的关联操作将受到限制,我们无法join位于不同分库的表,也无法join分表粒度不同的表,结果原本一次查询能够完成的业务,可能需要多次查询才能完成。

43 额外的数据管理负担和数据运算压力。

外的数据管理负担,最显而易见的就是数据的定位问题和数据的增删改查的重复执行问题,这些都可以通过应用程序解决,但必然引起额外的逻辑运算,例如,对于

一个记录用户成绩的用户数据表userTable,业务要求查出成绩最好的100位,在进行分表之前,只需一个order

by语句就可以搞定,但是在进行分表之后,将需要n个order

by语句,分别查出每一个分表的前100名用户数据,然后再对这些数据进行合并计算,才能得出结果。

链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。

分片(sharding)是数据库分区的一种,它将大型数据库分成更小、更快、更容易管理的部分,这些部分叫做数据碎片。碎片这个词意思就是整体的一小部分。

Jason Tee表示:“简言之,分片(sharding)数据库需要将数据库(database)分成多个没有共同点的小型数据库,且它们可以跨多台服务器传播。”

技术上来说,分片(sharding)是水平分区的同义词。在实际操作中,这个术语常用来表示让一个大型数据库更易于管理的所有数据库分区。

分片(sharding)的核心理念基于一个想法:数据库大小以及数据库上每单元时间内的交易数呈线型增长,查询数据库的响应时间(response time)以指数方式增长。

另外,在一个地方创建和维护一个大型数据库的成本会成指数增长,因为数据库将需要高端的计算机。相反地,数据碎片可以分布到大量便宜得多的商用服务器上。就硬件和软件要求而言,数据碎片相对来说没什么限制。

在某些情况中,数据库分片(sharding)可以很简单地完成。按地理位置拆分用户数据库就是一个常见的例子。位于东海岸的用户被分到一台服务器上,在西海岸的用户被分在另一台服务器上。假设没有用户有多个地理位置,这种分区很易于维护和创建规则。

但是数据分片(sharding)在某些情况下会是更为复杂的过程。例如,一个数据库持有很少结构化数据,分片它就可能非常复杂,并且结果碎片可能会很难维护。

分片过程

对于发送端发送的每份IP数据报来说,其标识字段都包含一个唯一值。该值在数据报分片时被复制到每个片中。标志字段用其中一个比特来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。

  最后,标志字段中有一个比特称作“不分片”位。如果将这一比特置1,IP将不对数据报进行分片。相反把数据报丢弃并发送一个ICMP差错报文给起始端。

  当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。

控制Elasticsearch分片和副本的分配

生产情景:比如生产环境有三个索引分别为 man、woman、katoey希望达到的效果: man索引放置在一些集群节点上 woman索引又单独放置到集群的另外一些集群节点上 katoey索引希望放置在所有放置man索引和woman索引的集群节点上 这么做是因为katoey索引比其他两个索引小很多,因此我们可以将它和其他两个索引一起分配。但是基于ES默认算法的处理方法,我们不能确定分片和副本的存放位置,但是ES允许我们对其做相应的控制!

1、指定节点的参数

索引创建 当所有节点配置文件属性配置完成后,我们就可以根据空间名称,我们就可以创建索引放到指定的空间。 首先我们运行如下命令,来创建man索引:# curl -XPOST " http://ElasticSearchnode:9200/man'

2、分配时排除节点 跟我们上面操作为索引指定放置节点位置一样,我们也可以在索引分配的时候排除某些节点。参照之前的例子,我们新建一个people索引,但是不希望people索引放置到zone_one的ES集群节点服务器上,我们可以运行如下命令操作:# curl -XPOST " http://ElasticSearchcode:9200/people "

请注意,在这里我们使用的是 indexroutingallocationexcludezone 属性而不是 indexroutingallocationincludezone 属性。 使用IP地址进行分配配置 除了在节点的配置中添加一些特殊的属性参数外,我们还可以使用IP地址来指定你将分片和副本分配或者不分配到哪些节点上面。为了做到这点,我们应该使用_ip属性,把zone换成_ip就好了。例如我们希望lucky索引分配到IP地址为1001110和1001119的节点上,我们可以运行如下命令设置:# curl -XPOST " http://ElasticSearchnode:9200/lucky "

二、集群范围内分配

除了索引层面指定分配或者排除分配之外(上面我们所做的都是这两种情况),我们还可以指定集群中所有索引的分配。例如,我们希望将所有的新索引分配到IP地址为1001112和1001114的节点上,我们可以运行如下命令设置:# curl -XPUT " http://ElasticSearchnode:9200/_cluster/settings " -d '{ "transient" : { "clusterroutingallocationinclude_ip" "1001112,1001114" } }'

移动分片 假设我们有两个节点:es_node_one和es_node_two,ElasticSearch在es_node_one节点上分配了ops索引的两个分片,我们现在希望将第二个分片移动到es_node_two节点上。可以如下操作实现:# curl -XPOST " http://ElasticSearchnode:9200/_cluster/reroute " -d '{ "commands" : [ { "move" : { "index" : "ops", "shard" : 1, "from_node" : "es_node_one", "to_node" : "es_node_two" } }] }'

一次HTTP请求包含多个命令 我们可以在一次HTTP请求中包含多个命令,例如:# curl -XPOST " http://ElasticSearchnode:9200/_cluster/reroute " -d '{ "commands" : [ {"move" : {"index" : "ops", "shard" : 1, "from_node" : "es_node_one", "to_node" : "es_node_two"}}, {"cancel" : {"index" : "ops", "shard" : 0, "node" : "es_node_one"}} ] }'

写在文前:视频版本和文字版本略有不同,想要看我深情并茂演绎,请看视频版本 (喵懂区块链22期|分片(Sharding):以太坊太慢,“盘”他!),思维逻辑怪,请看文案加长版。

最近以太坊由于君士坦丁堡升级(Constantinople)而出现了压倒性的积极走势,而以太坊的升级之路则犹如升级打怪一般,落入了rabbit hole,谁也不知道这洞有多深。既然是“路漫漫其修远兮”,则把脚下的每一步走好走准,则成了至关重要的点。攻破这一难点之后,以太坊的下一技术难点---Sharding分片,则又被摆到了台面上。本期《喵懂区块链》会带大家走进让以太坊快起来的法宝--- Sharding分片。

什么是sharding分片?

分片技术其实并不是什么新概念,起初是针对大型中心数据库提出的优化方案,具体来说就是将大型数据库中的数据划按照某种规则分成很多数据分片(shard),再将这些数据分片分别存放在不同的服务器中,以减小每个服务器的数据访问压力,从而提高整个数据库系统的性能。

我们举一个通俗的小例子:

比如我们平时经常使用的美团,滴滴打车等软件,就可以按照“城市”来进行分片,由于不同城市的数据不需要互通,就可以将不同城市的数据存放在不同数据库中,这样既可以把数据库服务器部署到离对应城市最近的节点上,还可以提高访问速度,何乐而不为呢?!

从上面的例子中,我大家应该对分片的概念有了初步了解,那么对应到区块链场景中来说,分片又是怎么样的呢?

以以太坊分片为例,在原有的单链系统中,公链整体的性能取决于单个节点的性能,进行分片之后,每个节点只需要承当全网部分工作,各个分片并行工作,按照Vitalik的话来说,each shard is like a separate galaxy每个分片都像是独立的小宇宙,这样效率自然噌噌噌提升!原本以太坊链全网TPS约为20,现在若增加到100个分片,那么全网TPS可以提升至2000,同理,全网容量也将提升至原来的100倍。

“每个节点只需要承担全网部分工作”,这就会引出几大问题,1怎么确定这个节点是负责哪个分片的工作?2哪些交易应该归类到哪些分片当中去?3每个节点是否只需要储存自己所在分片的交易信息(账本)?

根据以上问题的实现与否,我们可以将分片依次分为三种类型:网络分片,交易分片,状态分片。

网络分片:如何将全网节点划分到不同分片当中去。

交易分片:如何将全网交易划分到不同分片当中去。

状态分片:如何让各个节点只维护各自分片内的账本,但又不影响整个系统的安全性。

主链和分片链的区别和联系?

分片的类型我们已经明白了,那么主链(Main chain)和分片链(shard chain)有什么不同呢?

向左转|向右转

在主链中,我们知道记账的人叫做矿工,账本是存在区块当中,对应到分片链当中,则是Collator校对人和Collation校对块。

类似于区块的构成,Collation校对块也包含Collation header校对头和tansaction list具体的交易信息。

向左转|向右转

对比下来,主链和分片链本身来说,还是大同小异,但是一但要把他们联系起来,问题就变得复杂了,这里我们举个通俗的小例子类比一下:

假设,

以太坊主链=温州银行

每个分片=温州银行分行

比如:

shard1(分片1)=温州银行(杭州分行)

Shard2(分片2)=温州银行(宁波分行)

……

在这个系统中,我们就会清晰看到几大问题:1各大分行的账本如何汇总到总行里去?2各大分行的账本如何互联?

对应到主链和分片链系统当中来,则变成了1分片链和主链如何实现跨链链接?2分片之间怎么互联?甚至分叉的场景要怎么办

分片链和主链如何实现跨链链接?

为了将分片链加入到主链中,在主链上需要有一个叫做验证人管理员合约(Validator Manager Contract)VMC的特殊合约。VMC具体是这样的:

向左转|向右转

所有的验证人把它们的保证金(stake)存入 VMC当中,这些验证人就会被收录在VMC的common validator pool验证人备选池中。系统将会“隔一段时间”根据stake权益的多少随机为每个分片抽取一名验证人,将各个分片的collation header校对头信息同步到主链中去。

这里的“隔一段时间”,我们需要额外解释一下:“时间”,也叫period周期,这到底是怎么确定的呢?答案是主要看开发人员在最终代码中的实现为准,比如说我们把周期定为5个区块,那么就意味着主链出5个区块,所有分片链分别出一个collation校对块,这就间接决定了分片链的出块时间。

这种随机的形式,使得验证者无法提前预测他们何时会成为验证者,也无法预测会成为哪个分片的验证人,从而预防作恶的可能性。

如果一旦发现我们的分片验证人作恶了,他的stake权益就会被剥夺。

跨分片通信(cross-shard communication)怎么办?

比如说一个转账方小A在分片M中,收款方小B在分片N中,小A可以通过主链这个桥梁,完成扣款操作,并创建一个带有ID的 receipt收据,代表着“自己已经完成了扣款操作”,收款方小B可以根据这个 receipt ID 创建一个receipt-consuming收据消费交易,“消费”成功了之后,收款也就成功了。

向左转|向右转

分片链分叉了怎么办?(fork choice rule)

在以往的分叉情况中,都是“以最长链为主链”,在分片当中,分叉规则是“以最长主链里面的最长分片链为有效分片链(the longest valid shard chain within the longest valid main chain)”。

什么意思呢?我们举个例子:

一条主链出现了分叉,一条分叉连续跟了两个区块,同时也跟了两个Collation校对块,另一条则是一个区块和一个校对块,那么很明显,第一条是有效链。

向左转|向右转

接下来,第二条链又加了一个区块,变成两个区块和一个Collation校对块,依然很明显,第一条链仍然是有效链:

向左转|向右转

接下来,第一条链上又加了一个区块,虽然这条链上只有一个Collation校对块,但是它的主链长度已经超过了第一条,那么第二条则成为了现在的有效链,这就是分片场景下的分叉规则,首先比较主链长度,再比较分片链长度!

向左转|向右转

以太坊分片的实现是一个漫长的过程,就连Vitalik自己也说将会分阶段来逐步实现,分片到底能不能从理论走向实践,我们还是小小期待一下吧。

参考资料:

https://githubcom/ethereum/sharding/blob/develop/docs/docmd

https://www8btccom/article/348469

https://ethfansorg/posts/ethereum-sharding-and-finality

http://wwwqukuaiwangcomcn/news/11390html

第一章 概述

电信网、计算机网和有线电视网 三网合一

TCP/IP是当前的因特网协议簇的总称,TCP和 IP是其中的两个最重要的协议。

RFC标准轨迹由3个成熟级构成:提案标准、草案标准和标准。

第二章 计算机网络与因特网体系结构

根据拓扑结构:计算机网络可以分为总线型网、环型网、星型网和格状网。

根据覆盖范围:计算机网络可以分为广域网、城域网、局域网和个域网。

网络可以划分成:资源子网和通信子网两个部分。

网络协议是通信双方共同遵守的规则和约定的集合。网络协议包括三个要素,即语法、语义和同步规则。

通信双方对等层中完成相同协议功能的实体称为对等实体 ,对等实体按协议进行通信。

有线接入技术分为铜线接入、光纤接入和混合光纤同轴接入技术。

无线接入技术主要有卫星接入技术、无线本地环路接入和本地多点分配业务。

网关实现不同网络协议之间的转换。

因特网采用了网络级互联技术,网络级的协议转换不仅增加了系统的灵活性,而且简化了网络互联设备。

因特网对用户隐藏了底层网络技术和结构,在用户看来,因特网是一个统一的网络。

因特网将任何一个能传输数据分组的通信系统都视为网络,这些网络受到网络协议的平等对待。

TCP/IP 协议分为 4 个协议层 :网络接口层、网络层、传输层和应用层。

IP 协议既是网络层的核心协议 ,也是 TCP/IP 协议簇中的核心协议。

第四章 地址解析

建立逻辑地址与物理地址之间 映射的方法 通常有静态映射和动态映射。动态映射是在需要获得地址映射关系时利用网络通信协议直接从其他主机上获得映射信息。 因特网采用了动态映射的方法进行地址映射。

获得逻辑地址与物理地址之间的映射关系称为地址解析 。

地址解析协议 ARP 是将逻辑地址( IP 地址)映射到物理地址的动态映射协议。

ARP 高速缓存中含有最近使用过的 IP 地址与物理地址的映射列表。

在 ARP 高速缓存中创建的静态表项是永不超时的地址映射表项。

反向地址解析协议 RARP 是将给定的物理地址映射到逻辑地址( IP地址)的动态映射。RARP需要有RARP 服务器帮助完成解析。

ARP请求和 RARP请求,都是采用本地物理网络广播实现的。

在代理ARP中,当主机请求对隐藏在路由器后面的子网中的某一主机 IP 地址进行解析时,代理 ARP路由器将用自己的物理地址作为解析结果进行响应。

第五章 IP协议

IP是不可靠的无连接数据报协议,提供尽力而为的传输服务。

TCP/IP 协议的网络层称为IP层

IP数据报在经过路由器进行转发时一般要进行三个方面的处理:首部校验、路由选择、数据分片

IP层通过IP地址实现了物理地址的统一,通过IP数据报实现了物理数据帧的统一。 IP 层通过这两个方面的统一屏蔽了底层的差异,向上层提供了统一的服务。

IP 数据报由首部和数据两部分构成 。首部分为定长部分和变长部分。选项是数据报首部的变长部分。定长部分 20 字节,选项不超过40字节。

IP 数据报中首部长度以 32 位字为单位 ,数据报总长度以字节为单位,片偏移以 8 字节( 64 比特)为单位。数据报中的数据长度 =数据报总长度-首部长度× 4。

IP 协议支持动态分片 ,控制分片和重组的字段是标识、标志和片偏移, 影响分片的因素是网络的最大传输单元 MTU ,MTU 是物理网络帧可以封装的最大数据字节数。通常不同协议的物理网络具有不同的MTU 。分片的重组只能在信宿机进行。

生存时间TTL是 IP 数据报在网络上传输时可以生存的最大时间,每经过一个路由器,数据报的TTL值减 1。

IP数据报只对首部进行校验 ,不对数据进行校验。

IP选项用于网络控制和测试 ,重要包括严格源路由、宽松源路由、记录路由和时间戳。

IP协议的主要功能 包括封装 IP 数据报,对数据报进行分片和重组,处理数据环回、IP选项、校验码和TTL值,进行路由选择等。

在IP 数据报中与分片相关的字段是标识字段、标志字段和片偏移字段。

数据报标识是分片所属数据报的关键信息,是分片重组的依据

分片必须满足两个条件: 分片尽可能大,但必须能为帧所封装 ;片中数据的大小必须为 8 字节的整数倍 ,否则 IP 无法表达其偏移量。

分片可以在信源机或传输路径上的任何一台路由器上进行,而分片的重组只能在信宿机上进行片重组的控制主要根据 数据报首部中的标识、标志和片偏移字段

IP选项是IP数据报首部中的变长部分,用于网络控制和测试目的 (如源路由、记录路由、时间戳等 ),IP选项的最大长度 不能超过40字节。

1、IP 层不对数据进行校验。

原因:上层传输层是端到端的协议,进行端到端的校验比进行点到点的校验开销小得多,在通信线路较好的情况下尤其如此。另外,上层协议可以根据对于数据可靠性的要求, 选择进行校验或不进行校验,甚至可以考虑采用不同的校验方法,这给系统带来很大的灵活性。

2、IP协议对IP数据报首部进行校验。

原因: IP 首部属于 IP 层协议的内容,不可能由上层协议处理。

IP 首部中的部分字段在点到点的传递过程中是不断变化的,只能在每个中间点重新形成校验数据,在相邻点之间完成校验。

3、分片必须满足两个条件:

分片尽可能大,但必须能为帧所封装 ;

片中数据的大小必须为8字节的整数倍,否则IP无法表达其偏移量。

第六章 差错与控制报文协议(ICMP)

ICMP 协议是 IP 协议的补充,用于IP层的差错报告、拥塞控制、路径控制以及路由器或主机信息的获取。

ICMP既不向信宿报告差错,也不向中间的路由器报告差错,而是 向信源报告差错 。

ICMP与 IP协议位于同一个层次,但 ICMP报文被封装在IP数据报的数据部分进行传输。

ICMP 报文可以分为三大类:差错报告、控制报文和请求 /应答报文。

ICMP 差错报告分为三种 :信宿不可达报告、数据报超时报告和数据报参数错报告。数据报超时报告包括 TTL 超时和分片重组超时。

数据报参数错包括数据报首部中的某个字段的值有错和数据报首部中缺少某一选项所必须具有的部分参数。

ICMP控制报文包括源抑制报文和重定向报文。

拥塞是无连接传输时缺乏流量控制机制而带来的问题。ICMP 利用源抑制的方法进行拥塞控制 ,通过源抑制减缓信源发出数据报的速率。

源抑制包括三个阶段 :发现拥塞阶段、解决拥塞阶段和恢复阶段。

ICMP 重定向报文由位于同一网络的路由器发送给主机,完成对主机的路由表的刷新。

ICMP 回应请求与应答不仅可以被用来测试主机或路由器的可达性,还可以被用来测试 IP 协议的工作情况。

ICMP时间戳请求与应答报文用于设备间进行时钟同步 。

主机利用 ICMP 路由器请求和通告报文不仅可以获得默认路由器的 IP 地址,还可以知道路由器是否处于活动状态。

第七章 IP 路由

数据传递分为直接传递和间接传递 ,直接传递是指直接传到最终信宿的传输过程。间接传递是指在信

源和信宿位于不同物理网络时,所经过的一些中间传递过程。

TCP/IP 采用 表驱动的方式 进行路由选择。在每台主机和路由器中都有一个反映网络拓扑结构的路由表,主机和路由器能够根据 路由表 所反映的拓扑信息找到去往信宿机的正确路径。

通常路由表中的 信宿地址采用网络地址 。路径信息采用去往信宿的路径中的下一跳路由器的地址表示。

路由表中的两个特殊表目是特定主机路由和默认路由表目。

路由表的建立和刷新可以采用两种不同 的方式:静态路由和动态路由。

自治系统 是由独立管理机构所管理的一组网络和路由器组成的系统。

路由器自动获取路径信息的两种基本方法是向量—距离算法和链路 —状态算法。

1、向量 — 距离 (Vector-Distance,简称 V—D)算法的基本思想 :路由器周期性地向与它相邻的路由器广播路径刷新报文,报文的主要内容是一组从本路由器出发去往信宿网络的最短距离,在报文中一般用(V,D)序偶表示,这里的 V 代表向量,标识从该路由器可以到达的信宿 (网络或主机 ),D 代表距离,指出从该路由器去往信宿 V 的距离, 距离 D 按照去往信宿的跳数计。 各个路由器根据收到的 (V ,D)报文,按照最短路径优先原则对各自的路由表进行刷新。

向量 —距离算法的优点是简单,易于实现。

缺点是收敛速度慢和信息交换量较大。

2、链路 — 状态 (Link-Status,简称 L-S)算法的基本思想 :系统中的每个路由器通过从其他路由器获得的信息,构造出当前网络的拓扑结构,根据这一拓扑结构,并利用 Dijkstra 算法形成一棵以本路由器为根的最短路径优先树, 由于这棵树反映了从本节点出发去往各路由节点的最短路径, 所以本节点就可以根据这棵最短路径优先树形成路由表。

动态路由所使用的路由协议包括用于自治系统内部的 内部网关协 议和用于自治系统之间的外部网关协议。

RIP协议在基本的向量 —距离算法的基础上 ,增加了对路由环路、相同距离路径、失效路径以及慢收敛问题的处理。 RIP 协议以路径上的跳数作为该路径的距离。 RIP 规定,一条有效路径的距离不能超过

RIP不适合大型网络。

RIP报文被封装在 UDP 数据报中传输。RIP使用 UDP 的 520 端口号。

3、RIP 协议的三个要点

仅和相邻路由器交换信息。

交换的信息是当前本路由器所知道的全部信息,即自己的路由表。

按固定的时间间隔交换路由信息,例如,每隔30秒。

4、RIP 协议的优缺点

RIP 存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。

RIP 协议最大的优点就是实现简单,开销较小。

RIP 限制了网络的规模,它能使用的最大距离为15(16表示不可达)。

路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。

5、为了防止计数到无穷问题,可以采用以下三种技术。

1)水平 分割 法(Split Horizon) 水平分割法的基本思想:路由器从某个接口接收到的更新信息不允许再从这个接口发回去。在图 7-9 所示的例子中, R2 向 R1 发送 V-D 报文时,不能包含经过 R1 去往 NET1的路径。因为这一信息本身就是 R1 所产生的。

2) 保持法 (Hold Down) 保持法要求路由器在得知某网络不可到达后的一段时间内,保持此信息不变,这段时间称为保持时间,路由器在保持时间内不接受关于此网络的任何可达性信息。

3) 毒性逆转法 (Poison Reverse)毒性逆转法是水平分割法的一种变化。当从某一接口发出信息时,凡是从这一接口进来的信息改变了路由表表项的, V-D 报文中对应这些表目的距离值都设为无穷 (16)。

OSPF 将自治系统进一步划分为区域,每个区域由位于同一自治系统中的一组网络、主机和路由器构成。区域的划分不仅使得广播得到了更好的管理,而且使 OSPF能够支持大规模的网络。

OSPF是一个链路 —状态协议。当网络处于收敛状态时, 每个 OSPF路由器利用 Dijkstra 算法为每个网络和路由器计算最短路径,形成一棵以本路由器为根的最短路径优先 (SPF)树,并根据最短路径优先树构造路由表。

OSPF直接使用 IP。在IP首部的协议字段, OSPF协议的值为 89。

BGP 是采用路径 —向量算法的外部网关协议 , BGP 支持基于策略的路由,路由选择策略与政治、经济或安全等因素有关。

BGP 报文分为打开、更新、保持活动和通告 4 类。BGP 报文被封装在 TCP 段中传输,使用TCP的179 号端口 。

第八章 传输层协议

传输层承上启下,屏蔽通信子网的细节,向上提供通用的进程通信服务。传输层是对网络层的加强与弥补。 TCP 和 UDP 是传输层 的两大协议。

端口分配有两种基本的方式:全局端口分配和本地端口分配。

在因特网中采用一个 三元组 (协议,主机地址,端口号)来全局惟一地标识一个进程。用一个五元组(协议 ,本地主机地址 ,本地端口号 ,远地主机地址 ,远地端口号)来描述两个进程的关联。

TCP 和 UDP 都是提供进程通信能力的传输层协议。它们各有一套端口号,两套端口号相互独立,都是从0到 65535。

TCP 和 UDP 在计算校验和时引入伪首部的目的是为了能够验证数据是否传送到了正确的信宿端。

为了实现数据的可靠传输, TCP 在应用进程间 建立传输连接 。TCP 在建立连接时采用 三次握手方法解决重复连接的问题。在拆除连接时采用 四次握手 方法解决数据丢失问题。

建立连接前,服务器端首先被动打开其熟知的端口,对端口进行监听。当客户端要和服务器建立连接时,发出一个主动打开端口的请求,客户端一般使用临时端口。

TCP 采用的最基本的可靠性技术 包括流量控制、拥塞控制和差错控制。

TCP 采用 滑动窗口协议 实现流量控制,滑动窗口协议通过发送方窗口和接收方窗口的配合来完成传输控制。

TCP 的 拥塞控制 利用发送方的窗口来控制注入网络的数据流的速度。发送窗口的大小取通告窗口和拥塞窗口中小的一个。

TCP通过差错控制解决 数据的毁坏、重复、失序和丢失等问题。

UDP 在 IP 协议上增加了进程通信能力。此外 UDP 通过可选的校验和提供简单的差错控制。但UDP不提供流量控制和数据报确认 。

1、传输层( Transport Layer)的任务 是向用户提供可靠的、透明的端到端的数据传输,以及差错控制和流量控制机制。

2 “传输层提供应用进程间的逻辑通信 ”。“逻辑通信 ”的意思是:传输层之间的通信好像是沿水平方向传送数据。但事实上这两个传输层之间并没有一条水平方向的物理连接。

TCP 提供的可靠传输服务有如下五个特征 :

面向数据流 ; 虚电路连接 ; 有缓冲的传输 ; 无结构的数据流 ; 全双工连接

3、TCP 采用一种名为 “带重传功能的肯定确认 ( positive acknowledge with retransmission ) ”的技术作为提供可靠数据传输服务的基础。

第九章 域名系统

字符型的名字系统为用户提供了非常直观、便于理解和记忆的方法,非常符合用户的命名习惯。

因特网采用层次型命名机制 ,层次型命名机制将名字空间分成若干子空间,每个机构负责一个子空间的管理。 授权管理机构可以将其管理的子名字空间进一步划分, 授权给下一级机构管理。名字空间呈一种树形结构。

域名由圆点 “.”分开的标号序列构成 。若域名包含从树叶到树根的完整标号串并以圆点结束,则称该域名为完全合格域名FQDN。

常用的三块顶级域名 为通用顶级域名、国家代码顶级域名和反向域的顶级域名。

TCP/IP 的域名系统是一个有效的、可靠的、通用的、分布式的名字 —地址映射系统。区域是 DNS 服务器的管理单元,通常是指一个 DNS 服务器所管理的名字空间 。区域和域是不同的概念,域是一个完整的子树,而区域可以是子树中的任何一部分。

名字服务器的三种主要类型是 主名字服务器、次名字服务器和惟高速缓存名字服务器。主名字服务器拥有一个区域文件的原始版本,次名字服务器从主名字服务器那里获得区域文件的拷贝,次名字服务器通过区域传输同主名字服务器保持同步。

DNS 服务器和客户端属于 TCP/IP 模型的应用层, DNS 既可以使用 UDP,也可以使用 TCP 来进行通信。 DNS 服务器使用 UDP 和 TCP 的 53 号熟知端口。

DNS 服务器能够使用两种类型的解析: 递归解析和反复解析 。

DNS 响应报文中的回答部分、授权部分和附加信息部分由资源记录构成,资源记录存放在名字服务器的数据库中。

顶级域 cn 次级域 educn 子域 njusteducn 主机 serynjusteducn

TFTP :普通文件传送协议( Trivial File Transfer Protocol )

RIP: 路由信息协议 (Routing Information Protocol)

OSPF 开放最短路径优先 (Open Shortest Path First)协议。

EGP 外部网关协议 (Exterior Gateway Protocol)

BGP 边界网关协议 (Border Gateway Protocol)

DHCP 动态主机配置协议( Dynamic Host Configuration Protocol)

Telnet工作原理 : 远程主机连接服务

FTP 文件传输工作原理 File Transfer Protocol

SMTP 邮件传输模型 Simple Message Transfer Protocol

HTTP 工作原理

我简单点说一下我的想法:

使用base64将大文件进行字符串处理,然后进行将字符串进行按规则进行分组

{ Key:'1',Data='byte',Index:1,EndStatus:'0' }

{ Key:'1',Data='byte',Index:2 ,EndStatus:'1' }

服务器使用redis或者其他缓存工具,服务器发现了EndStatus=1时,读取Redis中符合Key的集合数据,排序组装,然后byte转Stream存储文件

注意的点:B端文件转byte大小会增加30%,服务器端需要解开Request的最大请求大小

分片技术是开发人员用来提高交易吞吐量的几种常见方法之一。简单地说,分片就是一种在点对点网络中分割计算能力和存储工作负载的分区方式,分片后每个节点不再需要负责处理整个网络的交易负载,而仅需处理其所在分区(或称分片)中的交易。与当前的区块链相同,分片中包含的信息也是由多个节点共同维护的,从而保证了账本的去中心化和安全性,启用分片后每个人仍然可以看到账本中的所有信息,只不过人们不再需要处理和存储所有的信息。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 数据库为什么要分库分表

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情