当前位置: 首页 > news >正文

制作个人网站要多少钱好的公司网站

制作个人网站要多少钱,好的公司网站,网站后台管理规定,龙华做网站多少钱集群通过分片sharding来进行数据共享#xff0c;并提供复制和故障转移功能。 17.1 节点 一个Redis集群通常由多个节点node组成#xff0c;刚开始每个节点都是相互独立的#xff0c;必须将各个独立的节点连接起来#xff0c;才能构成一个包含多个节点的集群。通过CLUSTER …集群通过分片sharding来进行数据共享并提供复制和故障转移功能。 17.1 节点 一个Redis集群通常由多个节点node组成刚开始每个节点都是相互独立的必须将各个独立的节点连接起来才能构成一个包含多个节点的集群。通过CLUSTER MEET ipport命令完成向一个节点发送该命令可以让node节点与ip/port所指定的节点进行握手handshake当握手成功后node节点就会将ip/port所指定的节点添加到节点当前所在的集群中。 17.1.1 启动节点 一个节点就是一个运行在集群模式下的Redis服务器这个服务器会在启动时根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式。 节点会继续使用所有在单机模式中使用的服务器组件。 初次之后只有集群模式下才会用到的数据节点保存在了clusterNode/clusterLink/clusterState结构。 17.1.2 集群数据结构 clusterNode结构保存了一个节点的当前状态比如节点的创建时间、名字、配置纪元、IP地址和端口号。每个节点都使用一个clusterNode结构来记录自己的状态并且也记录集群里其他节点的作用。 struct clusterNode{//创建节点的时间mstime_t ctime;//节点的名字由40个十六进制字符组成//例如68eef66df23420a5862208ef5b1a7005b806f2ffchar name[REDIS_CLUSTER_NAMELEN];//节点标识//使用各种不同的标识值记录节点的角色(比如主节点或者从节点)//以及节点目前所处的状态(比如在线或者下线)。int flags;//节点当前的配置纪元用于实现故障转移uint64 tconfigEpoch;//节点的IP地址Char ip[REDIS_IP_STR_LEN];//节点的端口号int port;//保存连接节点所需的有关信息clusterLink *link;其中link结构保存了连接节点所需的有关信息比如套接字描述符、输入缓冲区和输出缓冲区。 typedef struct clusterLink{//连接的创建时间mstime_t ctime;// TCP 套接字描述符int fd;//输出缓冲区保存着等待发送给其他节点的消息(message)。sds sndbuf; //输入缓冲区保存着从其他节点接收到的消息。sds rcvbuf;//与这个连接相关联的节点如果没有的话就为NULLstruct clusterNode *node; }clusterLink;redisClient结构和clusterLink结构都有自己的套接字描述符和输入、输出缓冲区这两个结构的区别在于redisClient结构中的套接字和缓冲区是用于连接客户端的而clusterLink结构中的套接字和缓冲区则是用于连接节点的。 每个节点都保存一个clusterState结构记录了在当前的视角下集群目前所处的状态例如集群是在线还是下线包含多少个节点当前的配置纪元。 typedef struct clusterstate//指向当前节点的指针clusterNode *myself;//集群当前的配置纪元用于实现故障转移uint64 tcurrentEpoch;//集群当前的状态:是在线还是下线int state;//集群中至少处理着一个槽的节点的数量int size;//集群节点名单(包括myself节点)//字典的键为节点的名字字典的值为节点对应的clusterNode结构dict *nodes; }clusterState;17.1.3 CLUSTER MEET命令的实现 通过向节点A发送CLUSTER MEET命令客户端可以向接收命令的节点A将另一个节点B添加到节点A当前所在的集群里面。 收到命令的节点A将与节点B进行握手 节点A会为节点B创建一个clusterNode结构并将该结构添加到自己的clusterState.nodes字典里 之后节点A会根据该命令给出的IP地址和端口号向节点B发送一条MEET消息 如果一切顺利节点B将接收到节点A发送的MEET消息节点B会为节点A创建一个clusternode结构并将该结构添加到自己的clusterState.nodes字典里 之后节点B向节点A发送一条PONG消息 节点A收到以后就知道节点B已经成功接收到了自己发送的MEET消息 节点A向节点B返回一条PING消息 节点B收到后握手完成 之后节点A会将节点B的信息通过Gossip协议传播给集群中其他节点让其他节点也与节点B握手。 17.2 槽指派 Redis集群通过分片的方式来保存数据库中的键值对集群的整个数据库被划分为16384个槽slot数据库的每个键都属于这16384个槽的其中一个集群中的每个节点可以处理0个或最多16384个槽 当数据库中的16384个槽都有节点在处理时集群处于上线ok状态否则处于下线fail状态。 通过向节点发送CLUSTER ADDSLOTS命令可以将一个或多个槽指派给节点负责比如127.0.0.17000 CLUSTER ADDSLOTS 0 1 2 3 4 ……5000 表示把槽0至槽5000指派给节点7000负责。 17.2.1 记录节点的槽指派信息 clusterNode结构的slots属性和numslot属性记录了节点负责处理哪些槽。 struct clusterNode{unsigned char slots[16384/8];int numslots;};slots属性是一个二进制数组这个数组长度是16384/82048个字节共包含16384个二进制位 Redis以0为起始索引16383为终止索引对slots数组中的16384个二进制位进行编号并根据索引i上的二进制位的值来判断节点是否负责处理槽i。如果该位为1表示负责处理。 因为取出和设置slots数组中的任意一个二进制位的值的复杂度仅为O(1) 所以检查节点是否负责处理某个槽或是把某个槽指派给节点负责复杂度都是O(1) numslots属性记录节点负责处理的槽的数量也就是slots数组中值为1的二进制位的数量 17.2.2 传播节点的槽指派信息 一个节点除了会将自己负责处理的槽记录在clusterNode结构的slots属性和numslots属性之后它还会将自己的slots数组通过消息发送给集群里的其他节点以此来告知其他节点自己目前正在负责处理哪些槽。 当节点A通过消息从节点B那里接收到节点B的slots数组时节点A会在自己的clusterState.nodes字典中查找节点B对应的clusterNode结构并对结构中的slots数组进行保存或更新。 这样集群里的每个节点都会将自己的slots数组通过消息发送给集群中的其他节点并且每个接收到slots数组的节点都会将数组保存到相应节点的clusterNode结构里面。因此集群里的每个节点都会知道数据库的16384个槽分别被指派给了集群里的哪些节点。 17.2.3 记录集群所有槽的指派信息 clusterState结构的slots数组记录了集群里所有16384个槽的指派信息 typedef struct clusterstate(clusterNode *slots[16384]; }clusterstate;slots数组包含16384个项每个数组项都是一个指向clusterNode结构的指针如果指向NULL表示尚未指派给任何节点如果指向一个clusterNode结构表示槽i已经指派给了clusterNode结构所代表的节点。通过这样的记录方式程序要检查槽i是否已经被指派又或者取得负责槽i的节点只需要访问clusterState.slots[i]的值即可这个复杂度仅为O(1) 虽然clusterState.slots数组记录了集群中所有槽的指派信息但是使用clusterNode结构的slots数组来记录单个节点的槽指派信息仍然是有必要的因为程序需要将某个节点的槽指派信息通过消息发送给其他节点时程序只需要将相应节点的clusterNode.slots数组整个发送出去就可以了如果单独使用clusterState.slots数组的话每次将节点A的槽指派信息传播给其他节点后需要先遍历整个数组记录节点A负责处理哪些槽才能发送效率低。 clusterState.slots数组记录了集群中所有槽的指派信息clusterNode结构的slots数组记录clusterNode结构所代表的节点的槽指派信息。 17.2.4 CLUSTER ADDSLOTS命令的实现 CLUSTER ADDSLOTS 命令接受一个或多个槽作为参数并将所有输入的槽指派给接收该命令的节点负责 def CLUSTER ADDSLOTS(*allinput slots): #遍历所有输入槽检查它们是否都是未指派槽 for i in all input slots: #如果有哪怕一个槽已经被指派给了某个节点 #那么向客户端返回错误并终止命令执行if clusterState.slots[i]!NULL:reply error()return #如果所有输入槽都是未指派槽 #那么再次遍历所有输入槽将这些槽指派给当前节点 for i in all input slots: #设置clusterstate结构的slots数组 #将slots[i]的指针指向代表当前节点的clusterNode结构clusterState.slotsi]clusterState.myself #访问代表当前节点的clusterNode结构的slots数组 #将数组在索引i上的二进制位设置为1setSlotBit(clusterstate.myself.slotsi)命令执行完后节点会通过发送消息告知集群中的其他节点自己目前正在负责处理哪些槽
http://www.dnsts.com.cn/news/208532.html

相关文章:

  • 教育类网站源码网站制作与建设书籍
  • 免费网站建设 源代码滁州市重点工程建设管理局网站
  • 外贸网站建设费用多少o2o网站开发
  • 学校网站开发工程师龙华网站建设设计公司
  • 网站建设的行业资讯文字转图片生成器在线制作
  • 智慧旅游网站开发与设计与实现建设工程规范在哪个网站发布
  • 书店网站建设设计方案苏州惊天网站制作网
  • 企业做pc网站需要什么资料网站品牌推广设计
  • 网站只做程序员wordpress留言区
  • 企业网站建立答辩问题小程序推广文案
  • 做外贸网站费用网站策划案4500
  • php网站开发应具备能力免费创建个人网页
  • 民宿网站建设方案外贸怎么入行
  • 长沙网站建设搭建甘肃手机版建站系统价格
  • 网站建设比较合理的流程如何入wordpress
  • 重庆中小企业网站建设公司培训学校设计
  • 建设三合一网站wordpress简易商城
  • 中国本科高等质量建设研究网站注册公司流程和费用公司注册
  • 厦门比较有名的设计公司河南网站seo地址
  • 网站制作知名 乐云践新专家益阳营销网站建设
  • 网站 流量攻击怎么办焦作网站制作公司
  • 网站被谷歌收录信息发布平台
  • 电商网站有哪些特色在网上卖东西怎么找货源
  • 安徽省建设厅网站 职称wordpress网址导航插件
  • 网站建设应该考虑哪些方面福州做网站的公司电话
  • ui参考网站天元建设集团网站
  • 信誉好的网站建设怎么建网站 手机版
  • 为什么有的网站打不开权威发布海报
  • 网络销售网站推广网站百度快照不更新
  • .net网站模版绍兴seo淄博公司