• 关于

    有效操作地址是什么

    的搜索结果

问题

什么是实例元数据

boxti 2019-12-01 21:40:35 1166 浏览量 回答数 0

回答

索引索引是提高数据库表访问速度的方法。分为聚集索引和非聚集索引。聚集索引:对正文内容按照一定规则排序的目录。非聚集索引:目录按照一定的顺序排列,正文按照另一种顺序排列,目录与正文之间保持一种映射关系。把数据库索引比作字典查询索引,聚集索引就是按照拼音查找,拼音栏中字的顺序就是查找得到的字的顺序。非聚集索引就像按照偏旁部首查找,同是单人旁查到的字所在的页码可能是杂乱的,没有顺序的。存储结构内存中存储的数据是有限的,当需要在磁盘中进行查找时就涉及到了磁盘的 I/O 操作。当磁盘驱动器执行读/写功能时。盘片装在一个主轴上,并绕主轴高速旋转,当磁道在读/写头(又叫磁头) 下通过时,就可以进行数据的读 / 写了。磁盘读取数据是以盘块(block)为基本单位的。位于同一盘块中的所有数据都能被一次性全部读取出来。而磁盘IO代价主要花费在查找时间Ts上。因此我们应该尽量将相关信息存放在同一盘块,同一磁道中。或者至少放在同一柱面或相邻柱面上,以求在读/写信息时尽量减少磁头来回移动的次数,避免过多的查找时间。索引查找时产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的时间复杂度。树高度越小,I/O次数越少。平衡树的高度过深进行多次磁盘IO,导致查询效率低下,而B树和B+树树中每个结点最多含有m个孩子,所以相对平衡树B树和B+树的高度比较低。B树每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为null。B+树只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针。所有非终端节点看成是索引,节点中仅含有其子树根节点最大(或最小)的关键字,不包含查找的有效信息。B+树中所有叶子节点都是通过指针连接在一起。总结:为什么使用B+树?1.文件很大,不可能全部存储在内存中,故要存储到磁盘上2.索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/+Tree,还跟磁盘存取原理有关,具体看下边分析)局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数,(在许多操作系统中,页得大小通常为4k)数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样 每个节点只需要一次I/O 就可以完全载入,(由于节点中有两个数组,所以地址连续)。而红黑树这种结构, h 明显要深的多。由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性。为什么B+树比B树更适合做索引?1.B+树磁盘读写代价更低B+的内部结点并没有指向关键字具体信息的指针,即内部节点不存储数据。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。2.B+-tree的查询效率更加稳定由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。在MySQL中,最常用的两个存储引擎是MyISAM和InnoDB,它们对索引的实现方式是不同的。MyISAM data存的是数据地址。索引是索引,数据是数据。InnoDB data存的是数据本身。索引也是数据。原文地址:https://blog.csdn.net/qq_40180411/article/details/81431386

vamcily 2019-12-02 01:50:31 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 RAM和STS是阿里云提供的权限管理系统。 RAM主要的作用是控制账号系统的权限。通过使用RAM可以将在主账号的权限范围内创建子用户,给不同的子用户分配不同的权限从而达到授权管理的目的。 STS是一个安全凭证(Token)的管理系统,用来授予临时的访问权限,这样就可以通过STS来完成对于临时用户的访问授权。 为什么要使用RAM和STS RAM和STS需要解决的一个核心问题是如何在不暴露主账号的AccessKey的情况下安全的授权别人访问。因为一旦主账号的AccessKey暴露出去的话会带来极大的安全风险,别人可以随意操作该账号下所有的资源,盗取重要信息等。 RAM提供的实际上是一种长期有效的权限控制机制,通过分出不同权限的子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子账号在一般情况下是长期有效的。 说明 因此,子账号的AccessKey也是不能泄露的。 相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权,通过STS可以返回临时的AccessKey和Token,这些信息是可以直接发给临时用户用来访问OSS。一般来说从STS获取的权限会受到更加严格的限制,并且拥有时间限制,因此这些信息泄露之后对于系统的影响也很小。 这些功能在下文中会以实际的例子来说明。 基本概念 以下是一些基本概念的简单解释: 子账号(RAM account):从阿里云的主账号中创建出来的子账号,在创建的时候可以分配独立的密码和权限,每个子账号拥有自己AccessKey,可以和阿里云主账号一样正常的完成有权限的操作。一般来说,这里的子账号可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。 角色(Role):表示某种操作权限的虚拟概念,但是没有独立的登录密码和AccessKey。 说明 子账号可以扮演角色,扮演角色的时候的权限是该角色自身的权限。 授权策略(Policy):用来定义权限的规则,比如允许用户读取、或者写入某些资源。 资源(Resource):代表用户可访问的云资源,比如OSS所有的Bucket、或者OSS的某个Bucket、或者OSS的某个Bucket下面的某个Object等。 子账号和角色可以类比为某个个人和其身份的关系,某人在公司的角色是员工,在家里的角色是父亲,在不同的场景扮演不同的角色,但是还是同一个人。在扮演不同的角色的时候也就拥有对应角色的权限。单独的员工或者父亲概念并不能作为一个操作的实体,只有有人扮演了之后才是一个完整的概念。这里还可以体现一个重要的概念,那就是角色可以被多个不同的个人同时扮演。 说明 完成角色扮演之后,该个人就自动拥有该角色的所有权限。 这里再用一个例子解释一下。 某个阿里云用户,名为Alice,其在OSS下有两个私有的Bucket,alice_a和alice_b。alice对这两个Bucket都拥有完全的权限。 为了避免阿里云账号的AccessKey泄露导致安全风险,Alice使用RAM创建了两个子账号bob和carol,bob对alice_a拥有读写权限,carol对alice_b拥有读写权限。bob和carol都拥有独立的AccessKey,这样万一泄露了也只会影响其中一个Bucket,而且Alice可以很方便的在控制台取消泄露用户的权限。 现在因为某些原因,需要授权给别人读取alice_a中的Object,这种情况下不应该直接把bob的AccessKey透露出去,那么,这个时候可以新建一个角色,比如AliceAReader,给这个角色赋予读取alice_a的权限。但是请注意,这个时候AliceAReader还是没法直接用的,因为并不存在对应AliceAReader的AccessKey,AliceAReader现在仅仅表示一个拥有访问alice_a权限的一个虚拟实体。 为了能获取临时授权,这个时候可以调用STS的AssumeRole接口,告诉STS,bob将要扮演AliceAReader这个角色,如果成功,STS会返回一个临时的AccessKeyId、AccessKeySecret还有SecurityToken作为访问凭证。将这个凭证发给需要访问的临时用户就可以获得访问alice_a的临时权限了。凭证过期的时间在调用AssumeRole的时候指定。 为什么RAM和STS这么复杂 乍一看RAM和STS的概念是很复杂的,但这是为了权限控制的灵活性而牺牲了部分的易用性。 将子账号和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果用户本身需要的权限很多,比如读写权限,但是实际上每次操作只需要其中的一部分权限,那么我们就可以创建两个角色,分别具有读写权限,然后创建一个没有任何权限但是可以拥有扮演这两个角色权限的用户。当用户需要读的时候就可以临时扮演其中拥有读权限的角色,写的时候同理,将每次操作中权限泄露的风险降低。而且通过扮演角色可以将权限授予其他的阿里云用户,更加方便了协同使用。 当然,提供了灵活性并不代表一定要使用全部的功能,应该根据需求来使用其中的一个子集即可。比如不需要带过期时间的临时访问凭证的话,完全可以只使用RAM的子账号功能而无需使用STS。 下面会用范例提供一些RAM和STS的使用指南,以及使用上的建议。示例在操作上会尽量使用控制台和命令行等操作方式,减少实际代码使用。如果需要使用代码来实现建议参看RAM和STS的API手册。 测试工具 在测试中使用到了osscmd,这是OSS的pythonSDK中的一个工具,可以直接在命令行操作OSS。获取的地址为PythonSDK。 osscmd的典型使用方法如下: 下载文件 ./osscmd get oss://BUCKET/OBJECT LOCALFILE --host=Endpoint -i AccessKeyId -k AccessKeySecret 这里的BUCKET和OBJECT替换成自己的,Endpoint的格式类似oss-cn-hangzhou.aliyuncs.com。AccessKeyId和AccessKeySecret使用自己账号对应的 上传文件 ./osscmd put LOCALFILE oss://BUCKET/OBJECT --host=Endpoint -i AccessKeyId -k AccessKeySecret 各个字段含义和下载一致

2019-12-01 23:13:32 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

详细解答可以参考官方帮助文档 RAM和STS是阿里云提供的权限管理系统。 RAM主要的作用是控制账号系统的权限。通过使用RAM可以将在主账号的权限范围内创建子用户,给不同的子用户分配不同的权限从而达到授权管理的目的。 STS是一个安全凭证(Token)的管理系统,用来授予临时的访问权限,这样就可以通过STS来完成对于临时用户的访问授权。 为什么要使用RAM和STS RAM和STS需要解决的一个核心问题是如何在不暴露主账号的AccessKey的情况下安全的授权别人访问。因为一旦主账号的AccessKey暴露出去的话会带来极大的安全风险,别人可以随意操作该账号下所有的资源,盗取重要信息等。 RAM提供的实际上是一种长期有效的权限控制机制,通过分出不同权限的子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子账号在一般情况下是长期有效的。 说明 因此,子账号的AccessKey也是不能泄露的。 相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权,通过STS可以返回临时的AccessKey和Token,这些信息是可以直接发给临时用户用来访问OSS。一般来说从STS获取的权限会受到更加严格的限制,并且拥有时间限制,因此这些信息泄露之后对于系统的影响也很小。 这些功能在下文中会以实际的例子来说明。 基本概念 以下是一些基本概念的简单解释: 子账号(RAM account):从阿里云的主账号中创建出来的子账号,在创建的时候可以分配独立的密码和权限,每个子账号拥有自己AccessKey,可以和阿里云主账号一样正常的完成有权限的操作。一般来说,这里的子账号可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。 角色(Role):表示某种操作权限的虚拟概念,但是没有独立的登录密码和AccessKey。 说明 子账号可以扮演角色,扮演角色的时候的权限是该角色自身的权限。 授权策略(Policy):用来定义权限的规则,比如允许用户读取、或者写入某些资源。 资源(Resource):代表用户可访问的云资源,比如OSS所有的Bucket、或者OSS的某个Bucket、或者OSS的某个Bucket下面的某个Object等。 子账号和角色可以类比为某个个人和其身份的关系,某人在公司的角色是员工,在家里的角色是父亲,在不同的场景扮演不同的角色,但是还是同一个人。在扮演不同的角色的时候也就拥有对应角色的权限。单独的员工或者父亲概念并不能作为一个操作的实体,只有有人扮演了之后才是一个完整的概念。这里还可以体现一个重要的概念,那就是角色可以被多个不同的个人同时扮演。 说明 完成角色扮演之后,该个人就自动拥有该角色的所有权限。 这里再用一个例子解释一下。 某个阿里云用户,名为Alice,其在OSS下有两个私有的Bucket,alice_a和alice_b。alice对这两个Bucket都拥有完全的权限。 为了避免阿里云账号的AccessKey泄露导致安全风险,Alice使用RAM创建了两个子账号bob和carol,bob对alice_a拥有读写权限,carol对alice_b拥有读写权限。bob和carol都拥有独立的AccessKey,这样万一泄露了也只会影响其中一个Bucket,而且Alice可以很方便的在控制台取消泄露用户的权限。 现在因为某些原因,需要授权给别人读取alice_a中的Object,这种情况下不应该直接把bob的AccessKey透露出去,那么,这个时候可以新建一个角色,比如AliceAReader,给这个角色赋予读取alice_a的权限。但是请注意,这个时候AliceAReader还是没法直接用的,因为并不存在对应AliceAReader的AccessKey,AliceAReader现在仅仅表示一个拥有访问alice_a权限的一个虚拟实体。 为了能获取临时授权,这个时候可以调用STS的AssumeRole接口,告诉STS,bob将要扮演AliceAReader这个角色,如果成功,STS会返回一个临时的AccessKeyId、AccessKeySecret还有SecurityToken作为访问凭证。将这个凭证发给需要访问的临时用户就可以获得访问alice_a的临时权限了。凭证过期的时间在调用AssumeRole的时候指定。 为什么RAM和STS这么复杂 乍一看RAM和STS的概念是很复杂的,但这是为了权限控制的灵活性而牺牲了部分的易用性。 将子账号和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果用户本身需要的权限很多,比如读写权限,但是实际上每次操作只需要其中的一部分权限,那么我们就可以创建两个角色,分别具有读写权限,然后创建一个没有任何权限但是可以拥有扮演这两个角色权限的用户。当用户需要读的时候就可以临时扮演其中拥有读权限的角色,写的时候同理,将每次操作中权限泄露的风险降低。而且通过扮演角色可以将权限授予其他的阿里云用户,更加方便了协同使用。 当然,提供了灵活性并不代表一定要使用全部的功能,应该根据需求来使用其中的一个子集即可。比如不需要带过期时间的临时访问凭证的话,完全可以只使用RAM的子账号功能而无需使用STS。 下面会用范例提供一些RAM和STS的使用指南,以及使用上的建议。示例在操作上会尽量使用控制台和命令行等操作方式,减少实际代码使用。如果需要使用代码来实现建议参看RAM和STS的API手册。 测试工具 在测试中使用到了osscmd,这是OSS的pythonSDK中的一个工具,可以直接在命令行操作OSS。获取的地址为PythonSDK。 osscmd的典型使用方法如下: 下载文件 ./osscmd get oss://BUCKET/OBJECT LOCALFILE --host=Endpoint -i AccessKeyId -k AccessKeySecret 这里的BUCKET和OBJECT替换成自己的,Endpoint的格式类似oss-cn-hangzhou.aliyuncs.com。AccessKeyId和AccessKeySecret使用自己账号对应的 上传文件 ./osscmd put LOCALFILE oss://BUCKET/OBJECT --host=Endpoint -i AccessKeyId -k AccessKeySecret 各个字段含义和下载一致

2019-12-01 23:13:31 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 RAM和STS是阿里云提供的权限管理系统。 RAM主要的作用是控制账号系统的权限。通过使用RAM可以将在主账号的权限范围内创建子用户,给不同的子用户分配不同的权限从而达到授权管理的目的。 STS是一个安全凭证(Token)的管理系统,用来授予临时的访问权限,这样就可以通过STS来完成对于临时用户的访问授权。 为什么要使用RAM和STS RAM和STS需要解决的一个核心问题是如何在不暴露主账号的AccessKey的情况下安全的授权别人访问。因为一旦主账号的AccessKey暴露出去的话会带来极大的安全风险,别人可以随意操作该账号下所有的资源,盗取重要信息等。 RAM提供的实际上是一种长期有效的权限控制机制,通过分出不同权限的子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子账号在一般情况下是长期有效的。 说明 因此,子账号的AccessKey也是不能泄露的。 相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权,通过STS可以返回临时的AccessKey和Token,这些信息是可以直接发给临时用户用来访问OSS。一般来说从STS获取的权限会受到更加严格的限制,并且拥有时间限制,因此这些信息泄露之后对于系统的影响也很小。 这些功能在下文中会以实际的例子来说明。 基本概念 以下是一些基本概念的简单解释: 子账号(RAM account):从阿里云的主账号中创建出来的子账号,在创建的时候可以分配独立的密码和权限,每个子账号拥有自己AccessKey,可以和阿里云主账号一样正常的完成有权限的操作。一般来说,这里的子账号可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。 角色(Role):表示某种操作权限的虚拟概念,但是没有独立的登录密码和AccessKey。 说明 子账号可以扮演角色,扮演角色的时候的权限是该角色自身的权限。 授权策略(Policy):用来定义权限的规则,比如允许用户读取、或者写入某些资源。 资源(Resource):代表用户可访问的云资源,比如OSS所有的Bucket、或者OSS的某个Bucket、或者OSS的某个Bucket下面的某个Object等。 子账号和角色可以类比为某个个人和其身份的关系,某人在公司的角色是员工,在家里的角色是父亲,在不同的场景扮演不同的角色,但是还是同一个人。在扮演不同的角色的时候也就拥有对应角色的权限。单独的员工或者父亲概念并不能作为一个操作的实体,只有有人扮演了之后才是一个完整的概念。这里还可以体现一个重要的概念,那就是角色可以被多个不同的个人同时扮演。 说明 完成角色扮演之后,该个人就自动拥有该角色的所有权限。 这里再用一个例子解释一下。 某个阿里云用户,名为Alice,其在OSS下有两个私有的Bucket,alice_a和alice_b。alice对这两个Bucket都拥有完全的权限。 为了避免阿里云账号的AccessKey泄露导致安全风险,Alice使用RAM创建了两个子账号bob和carol,bob对alice_a拥有读写权限,carol对alice_b拥有读写权限。bob和carol都拥有独立的AccessKey,这样万一泄露了也只会影响其中一个Bucket,而且Alice可以很方便的在控制台取消泄露用户的权限。 现在因为某些原因,需要授权给别人读取alice_a中的Object,这种情况下不应该直接把bob的AccessKey透露出去,那么,这个时候可以新建一个角色,比如AliceAReader,给这个角色赋予读取alice_a的权限。但是请注意,这个时候AliceAReader还是没法直接用的,因为并不存在对应AliceAReader的AccessKey,AliceAReader现在仅仅表示一个拥有访问alice_a权限的一个虚拟实体。 为了能获取临时授权,这个时候可以调用STS的AssumeRole接口,告诉STS,bob将要扮演AliceAReader这个角色,如果成功,STS会返回一个临时的AccessKeyId、AccessKeySecret还有SecurityToken作为访问凭证。将这个凭证发给需要访问的临时用户就可以获得访问alice_a的临时权限了。凭证过期的时间在调用AssumeRole的时候指定。 为什么RAM和STS这么复杂 乍一看RAM和STS的概念是很复杂的,但这是为了权限控制的灵活性而牺牲了部分的易用性。 将子账号和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果用户本身需要的权限很多,比如读写权限,但是实际上每次操作只需要其中的一部分权限,那么我们就可以创建两个角色,分别具有读写权限,然后创建一个没有任何权限但是可以拥有扮演这两个角色权限的用户。当用户需要读的时候就可以临时扮演其中拥有读权限的角色,写的时候同理,将每次操作中权限泄露的风险降低。而且通过扮演角色可以将权限授予其他的阿里云用户,更加方便了协同使用。 当然,提供了灵活性并不代表一定要使用全部的功能,应该根据需求来使用其中的一个子集即可。比如不需要带过期时间的临时访问凭证的话,完全可以只使用RAM的子账号功能而无需使用STS。 下面会用范例提供一些RAM和STS的使用指南,以及使用上的建议。示例在操作上会尽量使用控制台和命令行等操作方式,减少实际代码使用。如果需要使用代码来实现建议参看RAM和STS的API手册。 测试工具 在测试中使用到了osscmd,这是OSS的pythonSDK中的一个工具,可以直接在命令行操作OSS。获取的地址为PythonSDK。 osscmd的典型使用方法如下: 下载文件 ./osscmd get oss://BUCKET/OBJECT LOCALFILE --host=Endpoint -i AccessKeyId -k AccessKeySecret 这里的BUCKET和OBJECT替换成自己的,Endpoint的格式类似oss-cn-hangzhou.aliyuncs.com。AccessKeyId和AccessKeySecret使用自己账号对应的 上传文件 ./osscmd put LOCALFILE oss://BUCKET/OBJECT --host=Endpoint -i AccessKeyId -k AccessKeySecret 各个字段含义和下载一致

2019-12-01 23:13:31 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 RAM和STS是阿里云提供的权限管理系统。 RAM主要的作用是控制账号系统的权限。通过使用RAM可以将在主账号的权限范围内创建子用户,给不同的子用户分配不同的权限从而达到授权管理的目的。 STS是一个安全凭证(Token)的管理系统,用来授予临时的访问权限,这样就可以通过STS来完成对于临时用户的访问授权。 为什么要使用RAM和STS RAM和STS需要解决的一个核心问题是如何在不暴露主账号的AccessKey的情况下安全的授权别人访问。因为一旦主账号的AccessKey暴露出去的话会带来极大的安全风险,别人可以随意操作该账号下所有的资源,盗取重要信息等。 RAM提供的实际上是一种长期有效的权限控制机制,通过分出不同权限的子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子账号在一般情况下是长期有效的。 说明 因此,子账号的AccessKey也是不能泄露的。 相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权,通过STS可以返回临时的AccessKey和Token,这些信息是可以直接发给临时用户用来访问OSS。一般来说从STS获取的权限会受到更加严格的限制,并且拥有时间限制,因此这些信息泄露之后对于系统的影响也很小。 这些功能在下文中会以实际的例子来说明。 基本概念 以下是一些基本概念的简单解释: 子账号(RAM account):从阿里云的主账号中创建出来的子账号,在创建的时候可以分配独立的密码和权限,每个子账号拥有自己AccessKey,可以和阿里云主账号一样正常的完成有权限的操作。一般来说,这里的子账号可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。 角色(Role):表示某种操作权限的虚拟概念,但是没有独立的登录密码和AccessKey。 说明 子账号可以扮演角色,扮演角色的时候的权限是该角色自身的权限。 授权策略(Policy):用来定义权限的规则,比如允许用户读取、或者写入某些资源。 资源(Resource):代表用户可访问的云资源,比如OSS所有的Bucket、或者OSS的某个Bucket、或者OSS的某个Bucket下面的某个Object等。 子账号和角色可以类比为某个个人和其身份的关系,某人在公司的角色是员工,在家里的角色是父亲,在不同的场景扮演不同的角色,但是还是同一个人。在扮演不同的角色的时候也就拥有对应角色的权限。单独的员工或者父亲概念并不能作为一个操作的实体,只有有人扮演了之后才是一个完整的概念。这里还可以体现一个重要的概念,那就是角色可以被多个不同的个人同时扮演。 说明 完成角色扮演之后,该个人就自动拥有该角色的所有权限。 这里再用一个例子解释一下。 某个阿里云用户,名为Alice,其在OSS下有两个私有的Bucket,alice_a和alice_b。alice对这两个Bucket都拥有完全的权限。 为了避免阿里云账号的AccessKey泄露导致安全风险,Alice使用RAM创建了两个子账号bob和carol,bob对alice_a拥有读写权限,carol对alice_b拥有读写权限。bob和carol都拥有独立的AccessKey,这样万一泄露了也只会影响其中一个Bucket,而且Alice可以很方便的在控制台取消泄露用户的权限。 现在因为某些原因,需要授权给别人读取alice_a中的Object,这种情况下不应该直接把bob的AccessKey透露出去,那么,这个时候可以新建一个角色,比如AliceAReader,给这个角色赋予读取alice_a的权限。但是请注意,这个时候AliceAReader还是没法直接用的,因为并不存在对应AliceAReader的AccessKey,AliceAReader现在仅仅表示一个拥有访问alice_a权限的一个虚拟实体。 为了能获取临时授权,这个时候可以调用STS的AssumeRole接口,告诉STS,bob将要扮演AliceAReader这个角色,如果成功,STS会返回一个临时的AccessKeyId、AccessKeySecret还有SecurityToken作为访问凭证。将这个凭证发给需要访问的临时用户就可以获得访问alice_a的临时权限了。凭证过期的时间在调用AssumeRole的时候指定。 为什么RAM和STS这么复杂 乍一看RAM和STS的概念是很复杂的,但这是为了权限控制的灵活性而牺牲了部分的易用性。 将子账号和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果用户本身需要的权限很多,比如读写权限,但是实际上每次操作只需要其中的一部分权限,那么我们就可以创建两个角色,分别具有读写权限,然后创建一个没有任何权限但是可以拥有扮演这两个角色权限的用户。当用户需要读的时候就可以临时扮演其中拥有读权限的角色,写的时候同理,将每次操作中权限泄露的风险降低。而且通过扮演角色可以将权限授予其他的阿里云用户,更加方便了协同使用。 当然,提供了灵活性并不代表一定要使用全部的功能,应该根据需求来使用其中的一个子集即可。比如不需要带过期时间的临时访问凭证的话,完全可以只使用RAM的子账号功能而无需使用STS。 下面会用范例提供一些RAM和STS的使用指南,以及使用上的建议。示例在操作上会尽量使用控制台和命令行等操作方式,减少实际代码使用。如果需要使用代码来实现建议参看RAM和STS的API手册。 测试工具 在测试中使用到了osscmd,这是OSS的pythonSDK中的一个工具,可以直接在命令行操作OSS。获取的地址为PythonSDK。 osscmd的典型使用方法如下: 下载文件 ./osscmd get oss://BUCKET/OBJECT LOCALFILE --host=Endpoint -i AccessKeyId -k AccessKeySecret 这里的BUCKET和OBJECT替换成自己的,Endpoint的格式类似oss-cn-hangzhou.aliyuncs.com。AccessKeyId和AccessKeySecret使用自己账号对应的 上传文件 ./osscmd put LOCALFILE oss://BUCKET/OBJECT --host=Endpoint -i AccessKeyId -k AccessKeySecret 各个字段含义和下载一致

2019-12-01 23:13:32 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 RAM和STS是阿里云提供的权限管理系统。 RAM主要的作用是控制账号系统的权限。通过使用RAM可以将在主账号的权限范围内创建子用户,给不同的子用户分配不同的权限从而达到授权管理的目的。 STS是一个安全凭证(Token)的管理系统,用来授予临时的访问权限,这样就可以通过STS来完成对于临时用户的访问授权。 为什么要使用RAM和STS RAM和STS需要解决的一个核心问题是如何在不暴露主账号的AccessKey的情况下安全的授权别人访问。因为一旦主账号的AccessKey暴露出去的话会带来极大的安全风险,别人可以随意操作该账号下所有的资源,盗取重要信息等。 RAM提供的实际上是一种长期有效的权限控制机制,通过分出不同权限的子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子账号在一般情况下是长期有效的。 说明 因此,子账号的AccessKey也是不能泄露的。 相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权,通过STS可以返回临时的AccessKey和Token,这些信息是可以直接发给临时用户用来访问OSS。一般来说从STS获取的权限会受到更加严格的限制,并且拥有时间限制,因此这些信息泄露之后对于系统的影响也很小。 这些功能在下文中会以实际的例子来说明。 基本概念 以下是一些基本概念的简单解释: 子账号(RAM account):从阿里云的主账号中创建出来的子账号,在创建的时候可以分配独立的密码和权限,每个子账号拥有自己AccessKey,可以和阿里云主账号一样正常的完成有权限的操作。一般来说,这里的子账号可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。 角色(Role):表示某种操作权限的虚拟概念,但是没有独立的登录密码和AccessKey。 说明 子账号可以扮演角色,扮演角色的时候的权限是该角色自身的权限。 授权策略(Policy):用来定义权限的规则,比如允许用户读取、或者写入某些资源。 资源(Resource):代表用户可访问的云资源,比如OSS所有的Bucket、或者OSS的某个Bucket、或者OSS的某个Bucket下面的某个Object等。 子账号和角色可以类比为某个个人和其身份的关系,某人在公司的角色是员工,在家里的角色是父亲,在不同的场景扮演不同的角色,但是还是同一个人。在扮演不同的角色的时候也就拥有对应角色的权限。单独的员工或者父亲概念并不能作为一个操作的实体,只有有人扮演了之后才是一个完整的概念。这里还可以体现一个重要的概念,那就是角色可以被多个不同的个人同时扮演。 说明 完成角色扮演之后,该个人就自动拥有该角色的所有权限。 这里再用一个例子解释一下。 某个阿里云用户,名为Alice,其在OSS下有两个私有的Bucket,alice_a和alice_b。alice对这两个Bucket都拥有完全的权限。 为了避免阿里云账号的AccessKey泄露导致安全风险,Alice使用RAM创建了两个子账号bob和carol,bob对alice_a拥有读写权限,carol对alice_b拥有读写权限。bob和carol都拥有独立的AccessKey,这样万一泄露了也只会影响其中一个Bucket,而且Alice可以很方便的在控制台取消泄露用户的权限。 现在因为某些原因,需要授权给别人读取alice_a中的Object,这种情况下不应该直接把bob的AccessKey透露出去,那么,这个时候可以新建一个角色,比如AliceAReader,给这个角色赋予读取alice_a的权限。但是请注意,这个时候AliceAReader还是没法直接用的,因为并不存在对应AliceAReader的AccessKey,AliceAReader现在仅仅表示一个拥有访问alice_a权限的一个虚拟实体。 为了能获取临时授权,这个时候可以调用STS的AssumeRole接口,告诉STS,bob将要扮演AliceAReader这个角色,如果成功,STS会返回一个临时的AccessKeyId、AccessKeySecret还有SecurityToken作为访问凭证。将这个凭证发给需要访问的临时用户就可以获得访问alice_a的临时权限了。凭证过期的时间在调用AssumeRole的时候指定。 为什么RAM和STS这么复杂 乍一看RAM和STS的概念是很复杂的,但这是为了权限控制的灵活性而牺牲了部分的易用性。 将子账号和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果用户本身需要的权限很多,比如读写权限,但是实际上每次操作只需要其中的一部分权限,那么我们就可以创建两个角色,分别具有读写权限,然后创建一个没有任何权限但是可以拥有扮演这两个角色权限的用户。当用户需要读的时候就可以临时扮演其中拥有读权限的角色,写的时候同理,将每次操作中权限泄露的风险降低。而且通过扮演角色可以将权限授予其他的阿里云用户,更加方便了协同使用。 当然,提供了灵活性并不代表一定要使用全部的功能,应该根据需求来使用其中的一个子集即可。比如不需要带过期时间的临时访问凭证的话,完全可以只使用RAM的子账号功能而无需使用STS。 下面会用范例提供一些RAM和STS的使用指南,以及使用上的建议。示例在操作上会尽量使用控制台和命令行等操作方式,减少实际代码使用。如果需要使用代码来实现建议参看RAM和STS的API手册。 测试工具 在测试中使用到了osscmd,这是OSS的pythonSDK中的一个工具,可以直接在命令行操作OSS。获取的地址为PythonSDK。 osscmd的典型使用方法如下: 下载文件 ./osscmd get oss://BUCKET/OBJECT LOCALFILE --host=Endpoint -i AccessKeyId -k AccessKeySecret 这里的BUCKET和OBJECT替换成自己的,Endpoint的格式类似oss-cn-hangzhou.aliyuncs.com。AccessKeyId和AccessKeySecret使用自己账号对应的 上传文件 ./osscmd put LOCALFILE oss://BUCKET/OBJECT --host=Endpoint -i AccessKeyId -k AccessKeySecret 各个字段含义和下载一致

2019-12-01 23:13:32 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 RAM和STS是阿里云提供的权限管理系统。 RAM主要的作用是控制账号系统的权限。通过使用RAM可以将在主账号的权限范围内创建子用户,给不同的子用户分配不同的权限从而达到授权管理的目的。 STS是一个安全凭证(Token)的管理系统,用来授予临时的访问权限,这样就可以通过STS来完成对于临时用户的访问授权。 为什么要使用RAM和STS RAM和STS需要解决的一个核心问题是如何在不暴露主账号的AccessKey的情况下安全的授权别人访问。因为一旦主账号的AccessKey暴露出去的话会带来极大的安全风险,别人可以随意操作该账号下所有的资源,盗取重要信息等。 RAM提供的实际上是一种长期有效的权限控制机制,通过分出不同权限的子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子账号在一般情况下是长期有效的。 说明 因此,子账号的AccessKey也是不能泄露的。 相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权,通过STS可以返回临时的AccessKey和Token,这些信息是可以直接发给临时用户用来访问OSS。一般来说从STS获取的权限会受到更加严格的限制,并且拥有时间限制,因此这些信息泄露之后对于系统的影响也很小。 这些功能在下文中会以实际的例子来说明。 基本概念 以下是一些基本概念的简单解释: 子账号(RAM account):从阿里云的主账号中创建出来的子账号,在创建的时候可以分配独立的密码和权限,每个子账号拥有自己AccessKey,可以和阿里云主账号一样正常的完成有权限的操作。一般来说,这里的子账号可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。 角色(Role):表示某种操作权限的虚拟概念,但是没有独立的登录密码和AccessKey。 说明 子账号可以扮演角色,扮演角色的时候的权限是该角色自身的权限。 授权策略(Policy):用来定义权限的规则,比如允许用户读取、或者写入某些资源。 资源(Resource):代表用户可访问的云资源,比如OSS所有的Bucket、或者OSS的某个Bucket、或者OSS的某个Bucket下面的某个Object等。 子账号和角色可以类比为某个个人和其身份的关系,某人在公司的角色是员工,在家里的角色是父亲,在不同的场景扮演不同的角色,但是还是同一个人。在扮演不同的角色的时候也就拥有对应角色的权限。单独的员工或者父亲概念并不能作为一个操作的实体,只有有人扮演了之后才是一个完整的概念。这里还可以体现一个重要的概念,那就是角色可以被多个不同的个人同时扮演。 说明 完成角色扮演之后,该个人就自动拥有该角色的所有权限。 这里再用一个例子解释一下。 某个阿里云用户,名为Alice,其在OSS下有两个私有的Bucket,alice_a和alice_b。alice对这两个Bucket都拥有完全的权限。 为了避免阿里云账号的AccessKey泄露导致安全风险,Alice使用RAM创建了两个子账号bob和carol,bob对alice_a拥有读写权限,carol对alice_b拥有读写权限。bob和carol都拥有独立的AccessKey,这样万一泄露了也只会影响其中一个Bucket,而且Alice可以很方便的在控制台取消泄露用户的权限。 现在因为某些原因,需要授权给别人读取alice_a中的Object,这种情况下不应该直接把bob的AccessKey透露出去,那么,这个时候可以新建一个角色,比如AliceAReader,给这个角色赋予读取alice_a的权限。但是请注意,这个时候AliceAReader还是没法直接用的,因为并不存在对应AliceAReader的AccessKey,AliceAReader现在仅仅表示一个拥有访问alice_a权限的一个虚拟实体。 为了能获取临时授权,这个时候可以调用STS的AssumeRole接口,告诉STS,bob将要扮演AliceAReader这个角色,如果成功,STS会返回一个临时的AccessKeyId、AccessKeySecret还有SecurityToken作为访问凭证。将这个凭证发给需要访问的临时用户就可以获得访问alice_a的临时权限了。凭证过期的时间在调用AssumeRole的时候指定。 为什么RAM和STS这么复杂 乍一看RAM和STS的概念是很复杂的,但这是为了权限控制的灵活性而牺牲了部分的易用性。 将子账号和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果用户本身需要的权限很多,比如读写权限,但是实际上每次操作只需要其中的一部分权限,那么我们就可以创建两个角色,分别具有读写权限,然后创建一个没有任何权限但是可以拥有扮演这两个角色权限的用户。当用户需要读的时候就可以临时扮演其中拥有读权限的角色,写的时候同理,将每次操作中权限泄露的风险降低。而且通过扮演角色可以将权限授予其他的阿里云用户,更加方便了协同使用。 当然,提供了灵活性并不代表一定要使用全部的功能,应该根据需求来使用其中的一个子集即可。比如不需要带过期时间的临时访问凭证的话,完全可以只使用RAM的子账号功能而无需使用STS。 下面会用范例提供一些RAM和STS的使用指南,以及使用上的建议。示例在操作上会尽量使用控制台和命令行等操作方式,减少实际代码使用。如果需要使用代码来实现建议参看RAM和STS的API手册。 测试工具 在测试中使用到了osscmd,这是OSS的pythonSDK中的一个工具,可以直接在命令行操作OSS。获取的地址为PythonSDK。 osscmd的典型使用方法如下: 下载文件 ./osscmd get oss://BUCKET/OBJECT LOCALFILE --host=Endpoint -i AccessKeyId -k AccessKeySecret 这里的BUCKET和OBJECT替换成自己的,Endpoint的格式类似oss-cn-hangzhou.aliyuncs.com。AccessKeyId和AccessKeySecret使用自己账号对应的 上传文件 ./osscmd put LOCALFILE oss://BUCKET/OBJECT --host=Endpoint -i AccessKeyId -k AccessKeySecret 各个字段含义和下载一致

2019-12-01 23:13:32 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 RAM和STS是阿里云提供的权限管理系统。 RAM主要的作用是控制账号系统的权限。通过使用RAM可以将在主账号的权限范围内创建子用户,给不同的子用户分配不同的权限从而达到授权管理的目的。 STS是一个安全凭证(Token)的管理系统,用来授予临时的访问权限,这样就可以通过STS来完成对于临时用户的访问授权。 为什么要使用RAM和STS RAM和STS需要解决的一个核心问题是如何在不暴露主账号的AccessKey的情况下安全的授权别人访问。因为一旦主账号的AccessKey暴露出去的话会带来极大的安全风险,别人可以随意操作该账号下所有的资源,盗取重要信息等。 RAM提供的实际上是一种长期有效的权限控制机制,通过分出不同权限的子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子账号在一般情况下是长期有效的。 说明 因此,子账号的AccessKey也是不能泄露的。 相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权,通过STS可以返回临时的AccessKey和Token,这些信息是可以直接发给临时用户用来访问OSS。一般来说从STS获取的权限会受到更加严格的限制,并且拥有时间限制,因此这些信息泄露之后对于系统的影响也很小。 这些功能在下文中会以实际的例子来说明。 基本概念 以下是一些基本概念的简单解释: 子账号(RAM account):从阿里云的主账号中创建出来的子账号,在创建的时候可以分配独立的密码和权限,每个子账号拥有自己AccessKey,可以和阿里云主账号一样正常的完成有权限的操作。一般来说,这里的子账号可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。 角色(Role):表示某种操作权限的虚拟概念,但是没有独立的登录密码和AccessKey。 说明 子账号可以扮演角色,扮演角色的时候的权限是该角色自身的权限。 授权策略(Policy):用来定义权限的规则,比如允许用户读取、或者写入某些资源。 资源(Resource):代表用户可访问的云资源,比如OSS所有的Bucket、或者OSS的某个Bucket、或者OSS的某个Bucket下面的某个Object等。 子账号和角色可以类比为某个个人和其身份的关系,某人在公司的角色是员工,在家里的角色是父亲,在不同的场景扮演不同的角色,但是还是同一个人。在扮演不同的角色的时候也就拥有对应角色的权限。单独的员工或者父亲概念并不能作为一个操作的实体,只有有人扮演了之后才是一个完整的概念。这里还可以体现一个重要的概念,那就是角色可以被多个不同的个人同时扮演。 说明 完成角色扮演之后,该个人就自动拥有该角色的所有权限。 这里再用一个例子解释一下。 某个阿里云用户,名为Alice,其在OSS下有两个私有的Bucket,alice_a和alice_b。alice对这两个Bucket都拥有完全的权限。 为了避免阿里云账号的AccessKey泄露导致安全风险,Alice使用RAM创建了两个子账号bob和carol,bob对alice_a拥有读写权限,carol对alice_b拥有读写权限。bob和carol都拥有独立的AccessKey,这样万一泄露了也只会影响其中一个Bucket,而且Alice可以很方便的在控制台取消泄露用户的权限。 现在因为某些原因,需要授权给别人读取alice_a中的Object,这种情况下不应该直接把bob的AccessKey透露出去,那么,这个时候可以新建一个角色,比如AliceAReader,给这个角色赋予读取alice_a的权限。但是请注意,这个时候AliceAReader还是没法直接用的,因为并不存在对应AliceAReader的AccessKey,AliceAReader现在仅仅表示一个拥有访问alice_a权限的一个虚拟实体。 为了能获取临时授权,这个时候可以调用STS的AssumeRole接口,告诉STS,bob将要扮演AliceAReader这个角色,如果成功,STS会返回一个临时的AccessKeyId、AccessKeySecret还有SecurityToken作为访问凭证。将这个凭证发给需要访问的临时用户就可以获得访问alice_a的临时权限了。凭证过期的时间在调用AssumeRole的时候指定。 为什么RAM和STS这么复杂 乍一看RAM和STS的概念是很复杂的,但这是为了权限控制的灵活性而牺牲了部分的易用性。 将子账号和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果用户本身需要的权限很多,比如读写权限,但是实际上每次操作只需要其中的一部分权限,那么我们就可以创建两个角色,分别具有读写权限,然后创建一个没有任何权限但是可以拥有扮演这两个角色权限的用户。当用户需要读的时候就可以临时扮演其中拥有读权限的角色,写的时候同理,将每次操作中权限泄露的风险降低。而且通过扮演角色可以将权限授予其他的阿里云用户,更加方便了协同使用。 当然,提供了灵活性并不代表一定要使用全部的功能,应该根据需求来使用其中的一个子集即可。比如不需要带过期时间的临时访问凭证的话,完全可以只使用RAM的子账号功能而无需使用STS。 下面会用范例提供一些RAM和STS的使用指南,以及使用上的建议。示例在操作上会尽量使用控制台和命令行等操作方式,减少实际代码使用。如果需要使用代码来实现建议参看RAM和STS的API手册。 测试工具 在测试中使用到了osscmd,这是OSS的pythonSDK中的一个工具,可以直接在命令行操作OSS。获取的地址为PythonSDK。 osscmd的典型使用方法如下: 下载文件 ./osscmd get oss://BUCKET/OBJECT LOCALFILE --host=Endpoint -i AccessKeyId -k AccessKeySecret 这里的BUCKET和OBJECT替换成自己的,Endpoint的格式类似oss-cn-hangzhou.aliyuncs.com。AccessKeyId和AccessKeySecret使用自己账号对应的 上传文件 ./osscmd put LOCALFILE oss://BUCKET/OBJECT --host=Endpoint -i AccessKeyId -k AccessKeySecret 各个字段含义和下载一致

2019-12-01 23:13:31 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 RAM和STS是阿里云提供的权限管理系统。 RAM主要的作用是控制账号系统的权限。通过使用RAM可以将在主账号的权限范围内创建子用户,给不同的子用户分配不同的权限从而达到授权管理的目的。 STS是一个安全凭证(Token)的管理系统,用来授予临时的访问权限,这样就可以通过STS来完成对于临时用户的访问授权。 为什么要使用RAM和STS RAM和STS需要解决的一个核心问题是如何在不暴露主账号的AccessKey的情况下安全的授权别人访问。因为一旦主账号的AccessKey暴露出去的话会带来极大的安全风险,别人可以随意操作该账号下所有的资源,盗取重要信息等。 RAM提供的实际上是一种长期有效的权限控制机制,通过分出不同权限的子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子账号在一般情况下是长期有效的。 说明 因此,子账号的AccessKey也是不能泄露的。 相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权,通过STS可以返回临时的AccessKey和Token,这些信息是可以直接发给临时用户用来访问OSS。一般来说从STS获取的权限会受到更加严格的限制,并且拥有时间限制,因此这些信息泄露之后对于系统的影响也很小。 这些功能在下文中会以实际的例子来说明。 基本概念 以下是一些基本概念的简单解释: 子账号(RAM account):从阿里云的主账号中创建出来的子账号,在创建的时候可以分配独立的密码和权限,每个子账号拥有自己AccessKey,可以和阿里云主账号一样正常的完成有权限的操作。一般来说,这里的子账号可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。 角色(Role):表示某种操作权限的虚拟概念,但是没有独立的登录密码和AccessKey。 说明 子账号可以扮演角色,扮演角色的时候的权限是该角色自身的权限。 授权策略(Policy):用来定义权限的规则,比如允许用户读取、或者写入某些资源。 资源(Resource):代表用户可访问的云资源,比如OSS所有的Bucket、或者OSS的某个Bucket、或者OSS的某个Bucket下面的某个Object等。 子账号和角色可以类比为某个个人和其身份的关系,某人在公司的角色是员工,在家里的角色是父亲,在不同的场景扮演不同的角色,但是还是同一个人。在扮演不同的角色的时候也就拥有对应角色的权限。单独的员工或者父亲概念并不能作为一个操作的实体,只有有人扮演了之后才是一个完整的概念。这里还可以体现一个重要的概念,那就是角色可以被多个不同的个人同时扮演。 说明 完成角色扮演之后,该个人就自动拥有该角色的所有权限。 这里再用一个例子解释一下。 某个阿里云用户,名为Alice,其在OSS下有两个私有的Bucket,alice_a和alice_b。alice对这两个Bucket都拥有完全的权限。 为了避免阿里云账号的AccessKey泄露导致安全风险,Alice使用RAM创建了两个子账号bob和carol,bob对alice_a拥有读写权限,carol对alice_b拥有读写权限。bob和carol都拥有独立的AccessKey,这样万一泄露了也只会影响其中一个Bucket,而且Alice可以很方便的在控制台取消泄露用户的权限。 现在因为某些原因,需要授权给别人读取alice_a中的Object,这种情况下不应该直接把bob的AccessKey透露出去,那么,这个时候可以新建一个角色,比如AliceAReader,给这个角色赋予读取alice_a的权限。但是请注意,这个时候AliceAReader还是没法直接用的,因为并不存在对应AliceAReader的AccessKey,AliceAReader现在仅仅表示一个拥有访问alice_a权限的一个虚拟实体。 为了能获取临时授权,这个时候可以调用STS的AssumeRole接口,告诉STS,bob将要扮演AliceAReader这个角色,如果成功,STS会返回一个临时的AccessKeyId、AccessKeySecret还有SecurityToken作为访问凭证。将这个凭证发给需要访问的临时用户就可以获得访问alice_a的临时权限了。凭证过期的时间在调用AssumeRole的时候指定。 为什么RAM和STS这么复杂 乍一看RAM和STS的概念是很复杂的,但这是为了权限控制的灵活性而牺牲了部分的易用性。 将子账号和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果用户本身需要的权限很多,比如读写权限,但是实际上每次操作只需要其中的一部分权限,那么我们就可以创建两个角色,分别具有读写权限,然后创建一个没有任何权限但是可以拥有扮演这两个角色权限的用户。当用户需要读的时候就可以临时扮演其中拥有读权限的角色,写的时候同理,将每次操作中权限泄露的风险降低。而且通过扮演角色可以将权限授予其他的阿里云用户,更加方便了协同使用。 当然,提供了灵活性并不代表一定要使用全部的功能,应该根据需求来使用其中的一个子集即可。比如不需要带过期时间的临时访问凭证的话,完全可以只使用RAM的子账号功能而无需使用STS。 下面会用范例提供一些RAM和STS的使用指南,以及使用上的建议。示例在操作上会尽量使用控制台和命令行等操作方式,减少实际代码使用。如果需要使用代码来实现建议参看RAM和STS的API手册。 测试工具 在测试中使用到了osscmd,这是OSS的pythonSDK中的一个工具,可以直接在命令行操作OSS。获取的地址为PythonSDK。 osscmd的典型使用方法如下: 下载文件 ./osscmd get oss://BUCKET/OBJECT LOCALFILE --host=Endpoint -i AccessKeyId -k AccessKeySecret 这里的BUCKET和OBJECT替换成自己的,Endpoint的格式类似oss-cn-hangzhou.aliyuncs.com。AccessKeyId和AccessKeySecret使用自己账号对应的 上传文件 ./osscmd put LOCALFILE oss://BUCKET/OBJECT --host=Endpoint -i AccessKeyId -k AccessKeySecret 各个字段含义和下载一致

2019-12-01 23:13:32 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 RAM和STS是阿里云提供的权限管理系统。 RAM主要的作用是控制账号系统的权限。通过使用RAM可以将在主账号的权限范围内创建子用户,给不同的子用户分配不同的权限从而达到授权管理的目的。 STS是一个安全凭证(Token)的管理系统,用来授予临时的访问权限,这样就可以通过STS来完成对于临时用户的访问授权。 为什么要使用RAM和STS RAM和STS需要解决的一个核心问题是如何在不暴露主账号的AccessKey的情况下安全的授权别人访问。因为一旦主账号的AccessKey暴露出去的话会带来极大的安全风险,别人可以随意操作该账号下所有的资源,盗取重要信息等。 RAM提供的实际上是一种长期有效的权限控制机制,通过分出不同权限的子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子账号在一般情况下是长期有效的。 说明 因此,子账号的AccessKey也是不能泄露的。 相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权,通过STS可以返回临时的AccessKey和Token,这些信息是可以直接发给临时用户用来访问OSS。一般来说从STS获取的权限会受到更加严格的限制,并且拥有时间限制,因此这些信息泄露之后对于系统的影响也很小。 这些功能在下文中会以实际的例子来说明。 基本概念 以下是一些基本概念的简单解释: 子账号(RAM account):从阿里云的主账号中创建出来的子账号,在创建的时候可以分配独立的密码和权限,每个子账号拥有自己AccessKey,可以和阿里云主账号一样正常的完成有权限的操作。一般来说,这里的子账号可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。 角色(Role):表示某种操作权限的虚拟概念,但是没有独立的登录密码和AccessKey。 说明 子账号可以扮演角色,扮演角色的时候的权限是该角色自身的权限。 授权策略(Policy):用来定义权限的规则,比如允许用户读取、或者写入某些资源。 资源(Resource):代表用户可访问的云资源,比如OSS所有的Bucket、或者OSS的某个Bucket、或者OSS的某个Bucket下面的某个Object等。 子账号和角色可以类比为某个个人和其身份的关系,某人在公司的角色是员工,在家里的角色是父亲,在不同的场景扮演不同的角色,但是还是同一个人。在扮演不同的角色的时候也就拥有对应角色的权限。单独的员工或者父亲概念并不能作为一个操作的实体,只有有人扮演了之后才是一个完整的概念。这里还可以体现一个重要的概念,那就是角色可以被多个不同的个人同时扮演。 说明 完成角色扮演之后,该个人就自动拥有该角色的所有权限。 这里再用一个例子解释一下。 某个阿里云用户,名为Alice,其在OSS下有两个私有的Bucket,alice_a和alice_b。alice对这两个Bucket都拥有完全的权限。 为了避免阿里云账号的AccessKey泄露导致安全风险,Alice使用RAM创建了两个子账号bob和carol,bob对alice_a拥有读写权限,carol对alice_b拥有读写权限。bob和carol都拥有独立的AccessKey,这样万一泄露了也只会影响其中一个Bucket,而且Alice可以很方便的在控制台取消泄露用户的权限。 现在因为某些原因,需要授权给别人读取alice_a中的Object,这种情况下不应该直接把bob的AccessKey透露出去,那么,这个时候可以新建一个角色,比如AliceAReader,给这个角色赋予读取alice_a的权限。但是请注意,这个时候AliceAReader还是没法直接用的,因为并不存在对应AliceAReader的AccessKey,AliceAReader现在仅仅表示一个拥有访问alice_a权限的一个虚拟实体。 为了能获取临时授权,这个时候可以调用STS的AssumeRole接口,告诉STS,bob将要扮演AliceAReader这个角色,如果成功,STS会返回一个临时的AccessKeyId、AccessKeySecret还有SecurityToken作为访问凭证。将这个凭证发给需要访问的临时用户就可以获得访问alice_a的临时权限了。凭证过期的时间在调用AssumeRole的时候指定。 为什么RAM和STS这么复杂 乍一看RAM和STS的概念是很复杂的,但这是为了权限控制的灵活性而牺牲了部分的易用性。 将子账号和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果用户本身需要的权限很多,比如读写权限,但是实际上每次操作只需要其中的一部分权限,那么我们就可以创建两个角色,分别具有读写权限,然后创建一个没有任何权限但是可以拥有扮演这两个角色权限的用户。当用户需要读的时候就可以临时扮演其中拥有读权限的角色,写的时候同理,将每次操作中权限泄露的风险降低。而且通过扮演角色可以将权限授予其他的阿里云用户,更加方便了协同使用。 当然,提供了灵活性并不代表一定要使用全部的功能,应该根据需求来使用其中的一个子集即可。比如不需要带过期时间的临时访问凭证的话,完全可以只使用RAM的子账号功能而无需使用STS。 下面会用范例提供一些RAM和STS的使用指南,以及使用上的建议。示例在操作上会尽量使用控制台和命令行等操作方式,减少实际代码使用。如果需要使用代码来实现建议参看RAM和STS的API手册。 测试工具 在测试中使用到了osscmd,这是OSS的pythonSDK中的一个工具,可以直接在命令行操作OSS。获取的地址为PythonSDK。 osscmd的典型使用方法如下: 下载文件 ./osscmd get oss://BUCKET/OBJECT LOCALFILE --host=Endpoint -i AccessKeyId -k AccessKeySecret 这里的BUCKET和OBJECT替换成自己的,Endpoint的格式类似oss-cn-hangzhou.aliyuncs.com。AccessKeyId和AccessKeySecret使用自己账号对应的 上传文件 ./osscmd put LOCALFILE oss://BUCKET/OBJECT --host=Endpoint -i AccessKeyId -k AccessKeySecret 各个字段含义和下载一致

2019-12-01 23:13:32 0 浏览量 回答数 0

问题

消息服务的日志如何管理?

轩墨 2019-12-01 22:07:55 1227 浏览量 回答数 0

回答

我们都知道虚拟机的内存划分了多个区域,并不是一张大饼。那么为什么要划分为多块区域呢,直接搞一块区域,所有用到内存的地方都往这块区域里扔不就行了,岂不痛快。是的,如果不进行区域划分,扔的时候确实痛快,可用的时候再去找怎么办呢,这就引入了第一个问题,分类管理,类似于衣柜,系统磁盘等等,为了方便查找,我们会进行分区分类。另外如果不进行分区,内存用尽了怎么办呢?这里就引入了内存划分的第二个原因,就是为了方便内存的回收。如果不分,回收内存需要全部内存扫描,那就慢死了,内存根据不同的使用功能分成不同的区域,那么内存回收也就可以根据每个区域的特定进行回收,比如像栈内存中的栈帧,随着方法的执行栈帧进栈,方法执行完毕就出栈了,而对于像堆内存的回收就需要使用经典的回收算法来进行回收了,所以看起来分类这么麻烦,其实是大有好处的。 提到虚拟机的内存结构,可能首先想起来的就是堆栈。对象分配到堆上,栈上用来分配对象的引用以及一些基本数据类型相关的值。但是·虚拟机的内存结构远比此要复杂的多。除了我们所认识的(还没有认识完全)的堆栈以外,还有程序计数器,本地方法栈和方法区。我们平时所说的栈内存,一般是指的栈内存中的局部变量表。 从图中可以看到有5大内存区域,按照是否被线程所共享可分为两部分,一部分是线程独占区域,包括Java栈,本地方法栈和程序计数器。还有一部分是被线程所共享的,包括方法区和堆。什么是线程共享和线程独占呢,非常好理解,我们知道每一个Java进行都会有多个线程同时运行,那么线程共享区的这片区域就是被所有线程一起使用的,不管有多少个线程,这片空间始终就这一个。而线程的独占区,是每个线程都有这么一份内存空间,每个线程的这片空间都是独有的,有多少个线程就有多少个这么个空间。上图的区域的大小并不代表实际内存区域的大小,实际运行过程中,内存区域的大小也是可以动态调整的。下面来具体说说每一个区域的主要功能。 程序计数器,我们在写代码的过程中,开发工具一般都会给我们标注行号方便查看和阅读代码。那么在程序在运行过程中也有一个类似的行号方便虚拟机的执行,就是程序计数器,在c语言中,我们知道会有一个goto语句,其实就是跳转到了指定的行,这个行号就是程序计数器。存储的就是程序下一条所执行的指令。这部分区域是线程所独享的区域,我们知道线程是一个顺序执行流,每个线程都有自己的执行顺序,如果所有线程共用一个程序计数器,那么程序执行肯定就会出乱子。为了保证每个线程的执行顺序,所以程序计数器是被单个线程所独显的。程序计数器这块内存区域是唯一一个在jvm规范中没有规定内存溢出的。 java虚拟机栈,java虚拟机栈是程序运行的动态区域,每个方法的执行都伴随着栈帧的入栈和出栈。 栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。栈帧中包括了局部变量表,操作数栈,方法返回地址以及额外的一些附加信息,在编译过程中,局部变量表的大小已经确定,操作数栈深度也已经确定,因此栈帧在运行的过程中需要分配多大的内存是固定的,不受运行时影响。对于没有逃逸的对象也会在栈上分配内存,对象的大小其实在运行时也是确定的,因此即使出现了栈上内存分配,也不会导致栈帧改变大小。 一个线程中,可能调用链会很长,很多方法都同时处于执行状态。对于执行引擎来讲,活动线程中,只有栈顶的栈帧是最有效的,称为当前栈帧,这个栈帧所关联的方法称为当前方法。执行引擎所运行的字节码指令仅对当前栈帧进行操作。Ft5rk58GfiJxcdcCzGeAt8fjkFPkMRdf 局部变量表:我们平时所说的栈内存一般就是指栈内存中的局部变量表。这里主要是存储变量所用。对于基本数据类型直接存储其值,对于引用数据类型则存储其地址。局部变量表的最小存储单位是Slot,每个Slot都能存放一个boolean、byte、char、short、int、float、reference或returnAddress类型的数据。 既然前面提到了数据类型,在此顺便说一下,一个Slot可以存放一个32位以内的数据类型,Java中占用32位以内的数据类型有boolean、byte、char、short、int、float、reference和returnAddress八种类型。前面六种不需要多解释,大家都认识,而后面的reference是对象的引用。虚拟机规范既没有说明它的长度,也没有明确指出这个引用应有怎样的结构,但是一般来说,虚拟机实现至少都应当能从此引用中直接或间接地查找到对象在Java堆中的起始地址索引和方法区中的对象类型数据。而returnAddress是为字节码指令jsr、jsr_w和ret服务的,它指向了一条字节码指令的地址。 对于64位的数据类型,虚拟机会以高位在前的方式为其分配两个连续的Slot空间。Java语言中明确规定的64位的数据类型只有long和double两种(reference类型则可能是32位也可能是64位)。值得一提的是,这里把long和double数据类型读写分割为两次32读写的做法类似。不过,由于局部变量表建立在线程的堆栈上,是线程私有的数据,无论读写两个连续的Slot是否是原子操作,都不会引起数据安全问题。 操作数栈是一个后入先出(Last In First Out, LIFO)栈。同局部变量表一样,操作数栈的最大深度也在编译的时候被写入到字节码文件中,关于字节码文件,后面我会具体的来描述。操作数栈的每一个元素可以是任意的Java数据类型,包括long和double。32位数据类型所占的栈容量为1,64位数据类型所占的栈容量为2。在方法执行的任何时候,操作数栈的深度都不会超过在max_stacks数据项中设定的最大值。 当一个方法刚刚开始执行的时候,这个方法的操作数栈是空的,在方法的执行过程中,会有各种字节码指令向操作数栈中写入和提取内容,也就是入栈出栈操作。例如,在做算术运算的时候是通过操作数栈来进行的,又或者在调用其他方法的时候是通过操作数栈来进行参数传递的。 举个例子,整数加法的字节码指令iadd在运行的时候要求操作数栈中最接近栈顶的两个元素已经存入了两个int型的数值,当执行这个指令时,会将这两个int值和并相加,然后将相加的结果入栈。 操作数栈中元素的数据类型必须与字节码指令的序列严格匹配,在编译程序代码的时候,编译器要严格保证这一点,在类校验阶段的数据流分析中还要再次验证这一点。再以上面的iadd指令为例,这个指令用于整型数加法,它在执行时,最接近栈顶的两个元素的数据类型必须为int型,不能出现一个long和一个float使用iadd命令相加的情况。 本地方法栈 与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。虚拟机规范中对本地方法栈中的方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。甚至有的虚拟机(譬如Sun HotSpot虚拟机)直接就把本地方法栈和虚拟机栈合二为一。与虚拟机栈一样,本地方法栈区域也会抛出StackOverflowError和OutOfMemoryError异常。 方法区经常会被人称之为永久代,但这俩并不是一个概念。首先永久代的概念仅仅在HotSpot虚拟机中存在,不幸的是,在jdk8中,Hotspot去掉了永久代这一说法,使用了Native Memory,也就是Metaspace空间。那么方法区是干嘛的呢?我们可以这么理解,我们要运行Java代码,首先需要编译,然后才能运行。在运行的过程中,我们知道首先需要加载字节码文件。也就是说要把字节码文件加载到内存中。好了,问题就来了,字节码文件放到内存中的什么地方呢,就是方法区中。当然除了编译后的字节码之外,方法区中还会存放常量,静态变量以及及时编译器编译后的代码等数据。 堆,一般来讲堆内存是Java虚拟机中最大的一块内存区域,同方法区一样,是被所有线程所共享的区域。此区域所存在的唯一目的就存放对象的实例(对象实例并不一定全部在堆中创建)。堆内存是垃圾收集器主要光顾的区域,一般来讲根据使用的垃圾收集器的不同,堆中还会划分为一些区域,比如新生代和老年代。新生代还可以再划分为Eden,Survivor等区域。另外为了性能和安全性的角度,在堆中还会为线程划分单独的区域,称之为线程分配缓冲区。更细致的划分是为了让垃圾收集器能够更高效的工作,提高垃圾收集的效率。 如果想要了解更多的关于虚拟机的内容,可以观看录制的<深入理解Java虚拟机>这套视频教程。

zwt9000 2019-12-02 00:21:07 0 浏览量 回答数 0

问题

linux下安装Mycat-web监控

小柒2012 2019-12-01 21:14:52 11385 浏览量 回答数 1

回答

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 [编辑本段]基本概念 * 若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。 * 对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称冲突。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数H(key)和处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象” 作为记录在表中的存储位置,这种表便称为散列表,这一映象过程称为散列造表或散列,所得的存储位置称散列地址。 * 若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。 [编辑本段]常用的构造散列函数的方法 散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位ǐ 1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a•key + b,其中a和b为常数(这种散列函数叫做自身函数) 2. 数字分析法 3. 平方取中法 4. 折叠法 5. 随机数法 6. 除留余数法:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即 H(key) = key MOD p, p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。 [编辑本段]处理冲突的方法 1. 开放寻址法:Hi=(H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列,可有下列三种取法: 1. di=1,2,3,…, m-1,称线性探测再散列; 2. di=1^2, (-1)^2, 2^2,(-2)^2, (3)^2, …, ±(k)^2,(k<=m/2)称二次探测再散列; 3. di=伪随机数序列,称伪随机探测再散列。 == 2. 再散列法:Hi=RHi(key), i=1,2,…,k RHi均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间。 3. 链地址法(拉链法) 4. 建立一个公共溢出区 [编辑本段]查找的性能分析 散列表的查找过程基本上和造表过程相同。一些关键码可通过散列函数转换的地址直接找到,另一些关键码在散列函数得到的地址上产生了冲突,需要按处理冲突的方法进行查找。在介绍的三种处理冲突的方法中,产生冲突后的查找仍然是给定值与关键码进行比较的过程。所以,对散列表查找效率的量度,依然用平均查找长度来衡量。 查找过程中,关键码的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。影响产生冲突多少有以下三个因素: 1. 散列函数是否均匀; 2. 处理冲突的方法; 3. 散列表的装填因子。 散列表的装填因子定义为:α= 填入表中的元素个数 / 散列表的长度 α是散列表装满程度的标志因子。由于表长是定值,α与“填入表中的元素个数”成正比,所以,α越大,填入表中的元素较多,产生冲突的可能性就越大;α越小,填入表中的元素较少,产生冲突的可能性就越小。 实际上,散列表的平均查找长度是装填因子α的函数,只是不同处理冲突的方法有不同的函数。 了解了hash基本定义,就不能不提到一些著名的hash算法,MD5 和 SHA-1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。那么他们都是什么意思呢? 这里简单说一下: (1) MD4 MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD 是 Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现--它是基于 32 位操作数的位操作来实现的。 (2) MD5 MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好 (3) SHA-1 及其他 SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。 那么这些Hash算法到底有什么用呢? Hash算法在信息安全方面的应用主要体现在以下的3个方面: (1) 文件校验 我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。 MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。 (2) 数字签名 Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。 对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。 (3) 鉴权协议 如下的鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。 MD5、SHA1的破解 2004年8月17日,在美国加州圣芭芭拉召开的国际密码大会上,山东大学王小云教授在国际会议上首次宣布了她及她的研究小组近年来的研究成果——对MD5、HAVAL-128、MD4和RIPEMD等四个著名密码算法的破译结果。 次年二月宣布破解SHA-1密码。 [编辑本段]实际应用 以上就是一些关于hash以及其相关的一些基本预备知识。那么在emule里面他具体起到什么作用呢? 大家都知道emule是基于P2P (Peer-to-peer的缩写,指的是点对点的意思的软件), 它采用了"多源文件传输协议”(MFTP,the Multisource FileTransfer Protocol)。在协议中,定义了一系列传输、压缩和打包还有积分的标准,emule 对于每个文件都有md5-hash的算法设置,这使得该文件独一无二,并且在整个网络上都可以追踪得到。 什么是文件的hash值呢? MD5-Hash-文件的数字文摘通过Hash函数计算得到。不管文件长度如何,它的Hash函数计算结果是一个固定长度的数字。与加密算法不同,这一个Hash算法是一个不可逆的单向函数。采用安全性高的Hash算法,如MD5、SHA时,两个不同的文件几乎不可能得到相同的Hash结果。因此,一旦文件被修改,就可检测出来。 当我们的文件放到emule里面进行共享发布的时候,emule会根据hash算法自动生成这个文件的hash值,他就是这个文件唯一的身份标志,它包含了这个文件的基本信息,然后把它提交到所连接的服务器。当有他人想对这个文件提出下载请求的时候, 这个hash值可以让他人知道他正在下载的文件是不是就是他所想要的。尤其是在文件的其他属性被更改之后(如名称等)这个值就更显得重要。而且服务器还提供了,这个文件当前所在的用户的地址,端口等信息,这样emule就知道到哪里去下载了。 一般来讲我们要搜索一个文件,emule在得到了这个信息后,会向被添加的服务器发出请求,要求得到有相同hash值的文件。而服务器则返回持有这个文件的用户信息。这样我们的客户端就可以直接的和拥有那个文件的用户沟通,看看是不是可以从他那里下载所需的文件。 对于emule中文件的hash值是固定的,也是唯一的,它就相当于这个文件的信息摘要,无论这个文件在谁的机器上,他的hash值都是不变的,无论过了多长时间,这个值始终如一,当我们在进行文件的下载上传过程中,emule都是通过这个值来确定文件。 那么什么是userhash呢? 道理同上,当我们在第一次使用emule的时候,emule会自动生成一个值,这个值也是唯一的,它是我们在emule世界里面的标志,只要你不卸载,不删除config,你的userhash值也就永远不变,积分制度就是通过这个值在起作用,emule里面的积分保存,身份识别,都是使用这个值,而和你的id和你的用户名无关,你随便怎么改这些东西,你的userhash值都是不变的,这也充分保证了公平性。其实他也是一个信息摘要,只不过保存的不是文件信息,而是我们每个人的信息。 那么什么是hash文件呢? 我们经常在emule日志里面看到,emule正在hash文件,这里就是利用了hash算法的文件校验性这个功能了,文章前面已经说了一些这些功能,其实这部分是一个非常复杂的过程,目前在ftp,bt等软件里面都是用的这个基本原理,emule里面是采用文件分块传输,这样传输的每一块都要进行对比校验,如果错误则要进行重新下载,这期间这些相关信息写入met文件,直到整个任务完成,这个时候part文件进行重新命名,然后使用move命令,把它传送到incoming文件里面,然后met文件自动删除,所以我们有的时候会遇到hash文件失败,就是指的是met里面的信息出了错误不能够和part文件匹配,另外有的时候开机也要疯狂hash,有两种情况一种是你在第一次使用,这个时候要hash提取所有文件信息,还有一种情况就是上一次你非法关机,那么这个时候就是要进行排错校验了。 关于hash的算法研究,一直是信息科学里面的一个前沿,尤其在网络技术普及的今天,他的重要性越来越突出,其实我们每天在网上进行的信息交流安全验证,我们在使用的操作系统密钥原理,里面都有它的身影,特别对于那些研究信息安全有兴趣的朋友,这更是一个打开信息世界的钥匙,他在hack世界里面也是一个研究的焦点。 一般的线性表、树中,记录在结构中的相对位置是随机的即和记录的关键字之间不存在确定的关系,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较”的基础上,查找的效率与比较次数密切相关。理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。因而查找时,只需根据这个对应关系f找到给定值K的像f(K)。若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上,由此不需要进行比较便可直接取得所查记录。在此,称这个对应关系f为哈希函数,按这个思想建立的表为哈希表(又称为杂凑法或散列表)。 哈希表不可避免冲突(collision)现象:对不同的关键字可能得到同一哈希地址 即key1≠key2,而hash(key1)=hash(key2)。具有相同函数值的关键字对该哈希函数来说称为同义词(synonym)。 因此,在建造哈希表时不仅要设定一个好的哈希函数,而且要设定一种处理冲突的方法。可如下描述哈希表:根据设定的哈希函数H(key)和所选中的处理冲突的方法,将一组关键字映象到一个有限的、地址连续的地址集(区间)上并以关键字在地址集中的“象”作为相应记录在表中的存储位置,这种表被称为哈希表。 对于动态查找表而言,1) 表长不确定;2)在设计查找表时,只知道关键字所属范围,而不知道确切的关键字。因此,一般情况需建立一个函数关系,以f(key)作为关键字为key的录在表中的位置,通常称这个函数f(key)为哈希函数。(注意:这个函数并不一定是数学函数) 哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。 现实中哈希函数是需要构造的,并且构造的好才能使用的好。 用途:加密,解决冲突问题。。。。 用途很广,比特精灵中就使用了哈希函数,你可 以自己看看。 具体可以学习一下数据结构和算法的书。 [编辑本段]字符串哈希函数 (著名的ELFhash算法) int ELFhash(char *key) return h%MOD; }

晚来风急 2019-12-02 01:22:24 0 浏览量 回答数 0

回答

伸缩组支持关联负载均衡实例,通过负载均衡实例将访问流量分发到伸缩组内的多个ECS实例,有效增强伸缩组的服务能力。 前提条件 您持有一个或多个处于运行中状态的负载均衡实例,具体操作请参见创建负载均衡实例。 负载均衡实例和伸缩组必须位于同一地域。 如果负载均衡实例和伸缩组的网络类型均为专有网络,则必须位于同一专有网络。 当负载均衡实例的网络类型为经典网络,伸缩组的网络类型为专有网络时,如果负载均衡实例的后端服务器组中包含专有网络ECS实例,该ECS实例必须与伸缩组位于同一专有网络。 负载均衡实例配置至少一个监听,具体操作请参见监听概述。 负载均衡实例必须开启健康检查,具体操作请参见配置健康检查。 背景信息 负载均衡服务通过设置虚拟服务地址,将添加的同一地域的多个ECS实例虚拟成一个高性能、高可用的应用服务池。简单来说,负载均衡服务通过组合负载均衡实例 、监听和后端服务器,提供流量分发控制服务。更多信息,请参见什么是负载均衡。 伸缩组关联负载均衡实例后,无论是伸缩组自动创建ECS实例,还是您向伸缩组手动添加ECS实例,ECS实例都会自动加入到负载均衡实例的后端服务器组。负载均衡实例会根据流量分发、健康检查等策略灵活使用ECS实例资源,在资源弹性的基础上大大提高资源可用性。 说明 这些ECS实例的权重默认为50,您可以根据需要在对应负载均衡实例中调整权重,具体操作请参见编辑后端服务器的权重。 操作步骤 本步骤重点介绍负载均衡实例相关的控制台操作,如需了解其它配置,请参见创建伸缩组或者使用实例启动模板创建伸缩组。 登录弹性伸缩控制台。 在左侧导航栏中,单击伸缩组管理。 在顶部状态栏处,选择地域。 选择一种方式进入添加负载均衡实例的页面。 创建伸缩组时,单击创建伸缩组。 修改伸缩祖时,找到待操作的伸缩组,在操作列中,单击修改。 配置网络类型。 伸缩组的网络类型在创建伸缩组时指定,不支持修改。 选择负载均衡实例。 一个伸缩组可以关联的负载均衡实例数量有限,详细信息请参见使用限制。如果没有出现可选的负载均衡实例,请检查您的负载均衡实例是否满足前提条件。 选择负载均衡实例的后端服务器组。 伸缩组支持选择默认服务器组和虚拟服务器组,更多信息请参见后端服务器概述。 默认服务器组用于接收前端请求的ECS实例。如果监听没有设置虚拟服务器组或主备服务器组,默认将请求转发至默认服务器组中的ECS。 虚拟服务器组用于将不同的请求转发到不同的后端服务器上,或通过域名和URL进行请求转发。 伸缩组关联负载均衡实例 根据需要配置其余选项。

1934890530796658 2020-03-22 00:55:03 0 浏览量 回答数 0

回答

也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。 比如说,A服务器想调用B服务器上的一个方法: User getUserByName(String userName) 1、建立通信 首先要解决通讯的问题:即A机器想要调用B机器,首先得建立起通信连接。 主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。 通常这个连接可以是按需连接(需要调用的时候就先建立连接,调用结束后就立马断掉),也可以是长连接(客户端和服务器建立起连接之后保持长期持有,不管此时有无数据包的发送,可以配合心跳检测机制定期检测建立的连接是否存活有效),多个远程过程调用共享同一个连接。 2、服务寻址 要解决寻址的问题,也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么。 通常情况下我们需要提供B机器(主机名或IP地址)以及特定的端口,然后指定调用的方法或者函数的名称以及入参出参等信息,这样才能完成服务的一个调用。 可靠的寻址方式(主要是提供服务的发现)是RPC的实现基石,比如可以采用Redis或者Zookeeper来注册服务等等。 2.1、从服务提供者的角度看: 当服务提供者启动的时候,需要将自己提供的服务注册到指定的注册中心,以便服务消费者能够通过服务注册中心进行查找; 当服务提供者由于各种原因致使提供的服务停止时,需要向注册中心注销停止的服务; 服务的提供者需要定期向服务注册中心发送心跳检测,服务注册中心如果一段时间未收到来自服务提供者的心跳后,认为该服务提供者已经停止服务,则将该服务从注册中心上去掉。 2.2、从调用者的角度看: 服务的调用者启动的时候根据自己订阅的服务向服务注册中心查找服务提供者的地址等信息; 当服务调用者消费的服务上线或者下线的时候,注册中心会告知该服务的调用者; 服务调用者下线的时候,则取消订阅。 3、网络传输 3.1、序列化 当A机器上的应用发起一个RPC调用时,调用方法和其入参等信息需要通过底层的网络协议如TCP传输到B机器,由于网络协议是基于二进制的,所有我们传输的参数数据都需要先进行序列化(Serialize)或者编组(marshal)成二进制的形式才能在网络中进行传输。然后通过寻址操作和网络传输将序列化或者编组之后的二进制数据发送给B机器。 **3.2、反序列化 ** 当B机器接收到A机器的应用发来的请求之后,又需要对接收到的参数等信息进行反序列化操作(序列化的逆操作),即将二进制信息恢复为内存中的表达方式,然后再找到对应的方法(寻址的一部分)进行本地调用(一般是通过生成代理Proxy去调用, 通常会有JDK动态代理、CGLIB动态代理、Javassist生成字节码技术等),之后得到调用的返回值。 4、服务调用 B机器进行本地调用(通过代理Proxy和反射调用)之后得到了返回值,此时还需要再把返回值发送回A机器,同样也需要经过序列化操作,然后再经过网络传输将二进制数据发送回A机器,而当A机器接收到这些返回值之后,则再次进行反序列化操作,恢复为内存中的表达方式,最后再交给A机器上的应用进行相关处理(一般是业务逻辑处理操作)。 通常,经过以上四个步骤之后,一次完整的RPC调用算是完成了,另外可能因为网络抖动等原因需要重试等。

剑曼红尘 2020-03-15 15:40:38 0 浏览量 回答数 0

回答

Re如何在win2003上同时【完美】运行ASP和PHP? 我是深深的知道了,什么FastCGI啊,太占资源了,卡死了。 有没有教程之类的? ------------------------- 回5楼咻比嘟哗的帖子 我找到了简单有效的办法,已经解决。 正所谓:众里寻他千百度,那人却在灯火阑珊处。 找遍了很多网站和解决办法,真不如阿里云自己出的教程简单明了。 这里给出教程连接,希望各位同样使用2003的童鞋可以有个很好的解决办法。 教程地址: http://help.aliyun.com/manual?spm=0.0.0.0.ArjH39&helpId=1237 ------------------------- 回7楼vpsmm的帖子 2008系统是真没接触过,不过回头自己虚拟机试试。 08上貌似配置思路和03上大体一样。 不能说谁比谁复杂,只能说……谁比谁适合。 还是建议如果做站的话,统一一种语言的好,否则到头来会吃些苦头。 ------------------------- 回6楼dns2008的帖子 感谢dns2008的经验之谈,非常适用。 很多经验都是经过N多操作之后才总结出来。更多的是细节,再次感谢,顺祝:圣诞节快乐~!

起源 2019-12-02 02:30:10 0 浏览量 回答数 0

回答

C语言中有一个(愚蠢的)规则,说任何普通变量都可以用大括号括起来的初始化程序列表进行初始化,就好像它是一个数组一样。 例如,您可以编写int x = {0};,这完全等同于int x = 0;。 因此,在编写时,您int *nums = {5, 2, 1, 4};实际上是在为单个指针变量提供一个初始化器列表。但是,它只是一个变量,因此只会分配第一个值5,其余的列表将被忽略(实际上,我不认为带有过多初始值设定项的代码甚至不应该使用严格的编译器进行编译)-不会完全写入内存。该代码等效于 int *nums = 5;。也就是说,nums应该指向address 5。 此时,您应该已经收到了两个编译器警告/错误: 在不强制转换的情况下将整数分配给指针。 初始化程序列表中的多余元素。 然后,当然,代码将崩溃并烧毁,因为5很可能不是您可以取消引用的有效地址nums[0]。 附带说明,您应该printf使用说明%p符指向指针地址,否则将调用未定义的行为。 我不太确定您要在这里做什么,但是如果要设置一个指向数组的指针,则应该执行以下操作: int nums[] = {5, 2, 1, 4}; int* ptr = nums; // or equivalent: int* ptr = (int[]){5, 2, 1, 4}; 或者,如果您要创建一个指针数组: int* ptr[] = { /* whatever makes sense here */ };

保持可爱mmm 2020-02-08 14:35:25 0 浏览量 回答数 0

回答

一、使用中的域名,实现平滑迁移转入使用中的域名(如网站/邮箱),为避免影响域名正常使用,在获取域名转移密码之前需要做如下两步:第1步.设置阿里云解析。如何设置解析第2步.去域名原注册商,将域名的 DNS 修改为 ns1.alidns.com、ns2.alidns.com。如何修改DNS如果您的域名没在使用(如网站/邮箱),则可以步骤一,直接进入步骤二。 二、域名转入前获取域名转移密码在万网提交域名转入前,需向原注册商索取域名转移密码,此密码为域名转入成功的关键!三、确保域名持有者邮箱正确、有效国际域名(.com/net/org 等)转入必须验证所有者邮箱,您在转入前要确保域名持有者邮箱(Registrant Email)是您常用的邮箱且可以正常收信,您需要到此邮箱中确认域名要转入万网。四、如何查看域名持有者邮箱(Registrant Email)1、在万网查看:域名信息查询2、在原注册商查看:联系原注册商查询五、域名转入阿里云(含所有可转入后缀),均要进行实名认证用户在进行域名转入操作时,必须选择一个“已实名认证”状态的信息模板,才可提交转入并进行支付。六、域名什么时候能转入成功?域名转入成功时间取决于域名原注册商确认转出时间,如果原注册商确认较快,域名转入万网也会很快。一般情况下,5-7 天内都可以转入成功。七、域名转入收费吗?域名转入是免费办理的,因域名注册局的规定,域名在转入的同时需要续费 1 年。(即在域名转入前的域名到期日上再增加1年)请您特别注意,如您的域名当前已经续费至最大年限(10年),在您成功转入域名后,该域名可能无法增加一年年限。 八、如果原注册商不让转出怎么办?如果原注册商擅自限制或拒绝域名转出,域名持有者可以按照以下方式进行投诉:国际域名投诉地址:http://reports.internic.net/cgi/registrars/problem-report.cgi;国内域名投诉方式: 投诉邮箱为 supervise@cnnic.cn,投诉电话为 010-58813000。现在您已经掌握域名转入的所有操作,立刻转入域名到万网吧!立即转入

51干警网 2019-12-01 23:33:08 0 浏览量 回答数 0

回答

这个官方没有给出解决方法,个人想法是先上传到一个缓存目录,定时清理,草稿和发布成功的就更改到图片路径,还有,为什么一上传你就要保存图片到数据库呢,先用获取上传文件服务器路径,提交文章的时候一起提交就不存在改id的情况了。######回复 @Silentboy : 貌似没有清理没有用到的图片~######回复 @摔死的鸟 : 那这样岂不是数据库压力增加了么?每次定时执行都要查数据库看哪些图片没被用到,然后再删除,还不如来个缓存目录,你上传的图片只要提交文章时用到了,就存到正常目录下,缓存目录的每天删一次,这样数据库压力也小了, @卜祥龙 OSC博客默认kindeditor,这个问题是怎么处理的?######回复 @Silentboy : 比较有效的方法还是 定时执行,检查数据是否被使用统一清除。若客户部分实现太多这样的操作,会影响开发进度,而且容易出BUG。 槽糕的方法,也许是最好的解决方法。######回复 @摔死的鸟 : 嗯,目前我只想到这个方法去删除那些上传但没有使用的图片,莫非你有更有效的方法?说来学习学习哇######晕,这个编辑器官方没关系。本身他就是调用图片地址实现显示的。你还搞缓存目录,到时候提交你还要去整个文章的内容进行地址修改,不蛋疼吗?###### 这些编辑器就是有种种蛋疼问题. discuz那种可能会好点. ######回复 @Tuesday : 有些不是太喜欢DZ的,杂糅的太多。不过喜欢dz的图片上传的样式,打开上传时不会把网页全部遮盖######回复 @欣儿 : 我有discuz的.######DZ那个扣不下来。###### 还不简单 文章提交后 遍历 文章中的图片地址 然后更改图片的文章ID 图片保存里用文件的md5保存 命名 这样就很好查找了 ###### 引用来自“Silentboy”的答案 这个官方没有给出解决方法,个人想法是先上传到一个缓存目录,定时清理,草稿和发布成功的就更改到图片路径,还有,为什么一上传你就要保存图片到数据库呢,先用获取上传文件服务器路径,提交文章的时候一起提交就不存在改id的情况了。 一起提交?这个好像不行啊。比如怎么在一起提交时加入数据库(主要还是不知道怎么获取返回的路径,用js保存在本地)? “草稿和发布成功的就更改到图片路径”这个要怎么更改啊?都不知道图片的具体信息,就一个返回的路劲信息,还是用在文章里,提交时该怎么处理? ###### 这事和编辑器有毛线关系 用户开始编辑的时候就分配一个id,上传的图片就和这个id关联起来。 ######回复 @欣儿 : 数据库里的自增ID呗,销毁只能定期扫描了######那,有实现的方法吗?比如分配的这个ID是以什么样的方式分配?又怎样销毁这个不用的ID?######+1024,这个确实不是人家编辑器做的事,要在后端处理###### 引用来自“leo108”的答案 这事和编辑器有毛线关系 是这样吗? ###### 要么上传文章后扫下内容,把没用的图片删掉 要么把图片当作文章的附件,给用户自己管理 ######直接入数据库,反查没在库的图片,在执行定时删除。######但是,要怎么知道哪些图片没用啊?

kun坤 2020-06-06 14:35:51 0 浏览量 回答数 0

问题

【MARK】重启ECS后要重新挂盘的

爆老师 2019-12-01 22:09:22 4617 浏览量 回答数 4

回答

昨天在太平洋电脑网上看到一篇好文章<武汉IDC机房远程电源控制实际案例解析>,是唐华写的,讲的怎么在服务器死机状态下,不通过机房管理员人工重启,而是自己远程硬件唤醒服务器开关机、重启恢复正常,觉得很受启发,从此再也不用麻烦机房管理员帮我重启服务器了,再也不用苦苦等待机房管理员懒洋洋地过去重启了,只要服务器死机了,立即就能自己硬件重启恢复正常,无论服务器处于关机还是死机状态,都有效,真的挺实用的,介绍给大家,希望加精华。原文请看:[url] http://servers.pconline.com.cn/skills/0803/1250244_2.html[/url] 看过的也说说这样做行不行,有没有什么优缺点,我打算这样做了,对外推出“服务器死机零等待重启服务”,请大家给点意见吧,大家觉得可行嘛这么做? " 第一步:当远程桌面服务无法顺利使用后我们首先要确定的是服务器是否真的死机。我们可以通过ping目标服务器IP看是否畅通或者访问该服务器上的相关网络服务看是否还能顺利应用,当然也可以通过UNC地址来判断其网络访问是否顺利。当以上任何一个判断返回成功结果后,我们就可以使用下面的方法来远程重启服务器了。(如图) <img src=""https://gss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D600%2C800/sign=8ae8084ed2ca7bcb7d2ecf298e39475b/42a98226cffc1e177264bdbc4f90f603728de960.jpg""> 第二步:接下来我们通过shutdown命令,在远程桌面不能顺利连接的情况下通过网络重启服务器。具体操作是在命令提示窗口中执行“shutdown /m \服务器IP地址 /r”,这样服务器将自动重新启动。我们在ping -t命令窗口中也将看到目的网络连接情况从畅通到requeset timed out,这说明目的服务器已经在进行重启操作。(如图) <img src=""https://gss0.baidu.com/7Po3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D600%2C800/sign=b92118280f7b02080c9c37e752e9deeb/0824ab18972bd407e2dde3707e899e510fb30920.jpg""> 如果之前没有连接过目的服务器的话我们在执行shutdown命令前还需要使用“et user \服务器IP地址 “密码” /user:用户名”进行连接,例如“net user\129.168.12.1 123456 /user:administrator”(管理员用户名administrator,密码123456)。只有建立了相应的IPC$连接后shutdown才能够发挥作用,不连接就执行shutdown的话目的服务器并不会乖乖重启" iis7远程控制:   一款电脑远程监控的工具,IIS7远程桌面管理是一款专业的远程桌面连接软件,无需安装。操作简单方便。完美的界面设计、强大的监控功能、稳定的系统平台,满足了用户实现远程桌面连接的需求。   1、分组功能。   2、导入文本格式选择,杜绝编码错误的发生。   3、单个服务器手动添加。   4、支持特征搜索。   5、到期功能提醒。   6、导入服务器信息一键生效。   7、程序自动更新。 当远程桌面服务无法顺利使用后我们首先要确定的是服务器是否真的死机。我们可以通过ping目标服务器IP看是否畅通或者访问该服务器上的相关网络服务看是否还能顺利应用,当然也可以通过UNC地址来判断其网络访问是否顺利。当以上任何一个判断返回成功结果后,我们就可以使用下面的方法来远程重启服务器了。

保持可爱mmm 2019-12-02 02:14:39 0 浏览量 回答数 0

回答

一、使用中的域名,实现平滑迁移转入使用中的域名(如网站/邮箱),为避免影响域名正常使用,在获取域名转移密码之前需要做如下两步:第1步.设置阿里云解析。如何设置解析第2步.去域名原注册商,将域名的 DNS 修改为 ns1.alidns.com、ns2.alidns.com。如何修改DNS如果您的域名没在使用(如网站/邮箱),则可以步骤一,直接进入步骤二。 二、域名转入前获取域名转移密码在万网提交域名转入前,需向原注册商索取域名转移密码,此密码为域名转入成功的关键!三、确保域名持有者邮箱正确、有效国际域名(.com/net/org 等)转入必须验证所有者邮箱,您在转入前要确保域名持有者邮箱(Registrant Email)是您常用的邮箱且可以正常收信,您需要到此邮箱中确认域名要转入万网。四、如何查看域名持有者邮箱(Registrant Email)1、在万网查看:域名信息查询2、在原注册商查看:联系原注册商查询五、域名转入阿里云(含所有可转入后缀),均要进行实名认证用户在进行域名转入操作时,必须选择一个“已实名认证”状态的信息模板,才可提交转入并进行支付。六、域名什么时候能转入成功?域名转入成功时间取决于域名原注册商确认转出时间,如果原注册商确认较快,域名转入万网也会很快。一般情况下,5-7 天内都可以转入成功。七、域名转入收费吗?域名转入是免费办理的,因域名注册局的规定,域名在转入的同时需要续费 1 年。(即在域名转入前的域名到期日上再增加1年)请您特别注意,如您的域名当前已经续费至最大年限(10年),在您成功转入域名后,该域名可能无法增加一年年限。 八、如果原注册商不让转出怎么办?如果原注册商擅自限制或拒绝域名转出,域名持有者可以按照以下方式进行投诉:国际域名投诉地址:http://reports.internic.net/cgi/registrars/problem-report.cgi;国内域名投诉方式: 投诉邮箱为 supervise@cnnic.cn,投诉电话为 010-58813000。现在您已经掌握域名转入的所有操作,立刻转入域名到万网吧!立即转入如果问题还未能解决,请联系售后技术支持。

yezoutianya 2019-12-01 23:48:12 0 浏览量 回答数 0

问题

MongoDB与内存 先讲讲Linux是如何管理内存的 再说说MongoDB是如何使用内存的:报错

kun坤 2020-06-14 08:19:04 0 浏览量 回答数 0

问题

搞清楚这些,你就是域名高手——域名百问大合集

yq传送门 2019-12-01 19:38:17 24482 浏览量 回答数 41

回答

1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来。想抓取什么?这个由你来控制它咯。 比如它在抓取一个网页,在这个网中他发现了一条道路,其实就是指向网页的超链接,那么它就可以爬到另一张网上来获取数据。这样,整个连在一起的大网对这之蜘蛛来说触手可及,分分钟爬下来不是事儿。 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以及百度搜索框,这个过程其实就是用户输入网址之后,经过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器 HTML、JS、CSS 等文件,浏览器解析出来,用户便可以看到形形色色的图片了。 因此,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这些内容,通过分析和过滤这些 HTML 代码,实现对图片、文字等资源的获取。 3.URL的含义 URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。 URL的格式由三部分组成:①第一部分是协议(或称为服务方式)。②第二部分是存有该资源的主机IP地址(有时也包括端口号)。③第三部分是主机资源的具体地址,如目录和文件名等。爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依据,准确理解它的含义对爬虫学习有很大帮助。 环境的配置 学习Python,当然少不了环境的配置,最初我用的是Notepad++,不过发现它的提示功能实在是太弱了,于是,在Windows下我用了 PyCharm,在Linux下我用了Eclipse for Python,另外还有几款比较优秀的IDE,大家可以参考这篇文章 学习Python推荐的IDE 。好的开发工具是前进的推进器,希望大家可以找到适合自己的IDE 作者:谢科链接:https://www.zhihu.com/question/20899988/answer/24923424来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 “入门”是良好的动机,但是可能作用缓慢。如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习。另外如果说知识体系里的每一个知识点是图里的点,依赖关系是边的话,那么这个图一定不是一个有向无环图。因为学习A的经验可以帮助你学习B。因此,你不需要学习怎么样“入门”,因为这样的“入门”点根本不存在!你需要学习的是怎么样做一个比较大的东西,在这个过程中,你会很快地学会需要学会的东西的。当然,你可以争论说需要先懂python,不然怎么学会python做爬虫呢?但是事实上,你完全可以在做这个爬虫的过程中学习python :D看到前面很多答案都讲的“术”——用什么软件怎么爬,那我就讲讲“道”和“术”吧——爬虫怎么工作以及怎么在python实现。先长话短说summarize一下:你需要学习基本的爬虫工作原理基本的http抓取工具,scrapyBloom Filter: Bloom Filters by Example如果需要大规模网页抓取,你需要学习分布式爬虫的概念。其实没那么玄乎,你只要学会怎样维护一个所有集群机器能够有效分享的分布式队列就好。最简单的实现是python-rq: https://github.com/nvie/rqrq和Scrapy的结合:darkrho/scrapy-redis · GitHub后续处理,网页析取(grangier/python-goose · GitHub),存储(Mongodb)以下是短话长说:说说当初写的一个集群爬下整个豆瓣的经验吧。1)首先你要明白爬虫怎样工作。想象你是一只蜘蛛,现在你被放到了互联“网”上。那么,你需要把所有的网页都看一遍。怎么办呢?没问题呀,你就随便从某个地方开始,比如说人民日报的首页,这个叫initial pages,用$表示吧。在人民日报的首页,你看到那个页面引向的各种链接。于是你很开心地从爬到了“国内新闻”那个页面。太好了,这样你就已经爬完了俩页面(首页和国内新闻)!暂且不用管爬下来的页面怎么处理的,你就想象你把这个页面完完整整抄成了个html放到了你身上。突然你发现, 在国内新闻这个页面上,有一个链接链回“首页”。作为一只聪明的蜘蛛,你肯定知道你不用爬回去的吧,因为你已经看过了啊。所以,你需要用你的脑子,存下你已经看过的页面地址。这样,每次看到一个可能需要爬的新链接,你就先查查你脑子里是不是已经去过这个页面地址。如果去过,那就别去了。好的,理论上如果所有的页面可以从initial page达到的话,那么可以证明你一定可以爬完所有的网页。那么在python里怎么实现呢?很简单import Queue initial_page = "http://www.renminribao.com" url_queue = Queue.Queue()seen = set() seen.insert(initial_page)url_queue.put(initial_page) while(True): #一直进行直到海枯石烂 if url_queue.size()>0: current_url = url_queue.get() #拿出队例中第一个的url store(current_url) #把这个url代表的网页存储好 for next_url in extract_urls(current_url): #提取把这个url里链向的url if next_url not in seen: seen.put(next_url) url_queue.put(next_url) else: break 写得已经很伪代码了。所有的爬虫的backbone都在这里,下面分析一下为什么爬虫事实上是个非常复杂的东西——搜索引擎公司通常有一整个团队来维护和开发。2)效率如果你直接加工一下上面的代码直接运行的话,你需要一整年才能爬下整个豆瓣的内容。更别说Google这样的搜索引擎需要爬下全网的内容了。问题出在哪呢?需要爬的网页实在太多太多了,而上面的代码太慢太慢了。设想全网有N个网站,那么分析一下判重的复杂度就是N*log(N),因为所有网页要遍历一次,而每次判重用set的话需要log(N)的复杂度。OK,OK,我知道python的set实现是hash——不过这样还是太慢了,至少内存使用效率不高。通常的判重做法是怎样呢?Bloom Filter. 简单讲它仍然是一种hash的方法,但是它的特点是,它可以使用固定的内存(不随url的数量而增长)以O(1)的效率判定url是否已经在set中。可惜天下没有白吃的午餐,它的唯一问题在于,如果这个url不在set中,BF可以100%确定这个url没有看过。但是如果这个url在set中,它会告诉你:这个url应该已经出现过,不过我有2%的不确定性。注意这里的不确定性在你分配的内存足够大的时候,可以变得很小很少。一个简单的教程:Bloom Filters by Example注意到这个特点,url如果被看过,那么可能以小概率重复看一看(没关系,多看看不会累死)。但是如果没被看过,一定会被看一下(这个很重要,不然我们就要漏掉一些网页了!)。 [IMPORTANT: 此段有问题,请暂时略过]好,现在已经接近处理判重最快的方法了。另外一个瓶颈——你只有一台机器。不管你的带宽有多大,只要你的机器下载网页的速度是瓶颈的话,那么你只有加快这个速度。用一台机子不够的话——用很多台吧!当然,我们假设每台机子都已经进了最大的效率——使用多线程(python的话,多进程吧)。3)集群化抓取爬取豆瓣的时候,我总共用了100多台机器昼夜不停地运行了一个月。想象如果只用一台机子你就得运行100个月了...那么,假设你现在有100台机器可以用,怎么用python实现一个分布式的爬取算法呢?我们把这100台中的99台运算能力较小的机器叫作slave,另外一台较大的机器叫作master,那么回顾上面代码中的url_queue,如果我们能把这个queue放到这台master机器上,所有的slave都可以通过网络跟master联通,每当一个slave完成下载一个网页,就向master请求一个新的网页来抓取。而每次slave新抓到一个网页,就把这个网页上所有的链接送到master的queue里去。同样,bloom filter也放到master上,但是现在master只发送确定没有被访问过的url给slave。Bloom Filter放到master的内存里,而被访问过的url放到运行在master上的Redis里,这样保证所有操作都是O(1)。(至少平摊是O(1),Redis的访问效率见:LINSERT – Redis)考虑如何用python实现:在各台slave上装好scrapy,那么各台机子就变成了一台有抓取能力的slave,在master上装好Redis和rq用作分布式队列。代码于是写成#slave.py current_url = request_from_master()to_send = []for next_url in extract_urls(current_url): to_send.append(next_url) store(current_url);send_to_master(to_send) master.py distributed_queue = DistributedQueue()bf = BloomFilter() initial_pages = "www.renmingribao.com" while(True): if request == 'GET': if distributed_queue.size()>0: send(distributed_queue.get()) else: break elif request == 'POST': bf.put(request.url) 好的,其实你能想到,有人已经给你写好了你需要的:darkrho/scrapy-redis · GitHub4)展望及后处理虽然上面用很多“简单”,但是真正要实现一个商业规模可用的爬虫并不是一件容易的事。上面的代码用来爬一个整体的网站几乎没有太大的问题。但是如果附加上你需要这些后续处理,比如有效地存储(数据库应该怎样安排)有效地判重(这里指网页判重,咱可不想把人民日报和抄袭它的大民日报都爬一遍)有效地信息抽取(比如怎么样抽取出网页上所有的地址抽取出来,“朝阳区奋进路中华道”),搜索引擎通常不需要存储所有的信息,比如图片我存来干嘛...及时更新(预测这个网页多久会更新一次)

xuning715 2019-12-02 01:10:40 0 浏览量 回答数 0

回答

一。zval、引用计数、变量分离、写时拷贝我们一步步来理解1、php语言特性PHP是脚本语言,所谓脚本语言,就是说PHP并不是独立运行的,要运行PHP代码需要PHP解析器,用户编写的PHP代码最终都会被PHP解析器解析执行PHP的执行是通过Zend engine(ZE, Zend引擎),ZE是用C编写的用户编写的PHP代码最终都会被翻译成PHP的虚拟机ZE的虚拟指令(OPCODES)来执行也就说最终会被翻译成一条条的指令既然这样,有什么结果和你预想的不一样,查看php源码是最直接最有效的 2、php变量的存储结构在PHP中,所有的变量都是用一个结构zval结构来保存的,在Zend/zend.h中可以看到zval的定义:zval结构包括:① value —— 值,是真正保存数据的关键部分,定义为一个联合体(union)② type —— 用来储存变量的类型 ③ is_ref —— 下面介绍④ refcount —— 下面介绍 声明一个变量$addr="北京";PHP内部都是使用zval来表示变量的,那对于上面的脚本,ZE是如何把addr和内部的zval结构联系起来的呢?变量都是有名字的(本例中变量名为addr)而zval中并没有相应的字段来体现变量名。PHP内部肯定有一个机制,来实现变量名到zval的映射在PHP中,所有的变量都会存储在一个数组中(确切的说是hash table)当你创建一个变量的时候,PHP会为这个变量分配一个zval,填入相应的信息,然后将这个变量的名字和指向这个zval的指针填入一个数组中。当你获取这个变量的时候,PHP会通过查找这个数组,取得对应的zval 注意:数组和对象这类复合类型在生成zval时,会为每个单元生成一个zval3、我们经常说每个变量都有一个内存地址,那这个zval和变量的内存地址,这俩有什么关系吗?定义一个变量会开辟一块内存,这块内存好比一个盒子,盒子里放了zval,zval里保存了变量的相关信息,需要开辟多大的内存,是由zval所占空间大小决定的zval是内存对象,垃圾回收的时候会把zval和内存地址(盒子)分别释放掉 4、引用计数、变量分离、写时拷贝zval中的refcount和is_ref还没有介绍,我们知道PHP是一个长时间运行的服务器端脚本。那么对于它来说,效率和资源占用率是一个很重要的衡量标准,也就是说,PHP必须尽量减少内存占用率。考虑下面这段代码:第一行代码创建了一个字符串变量,申请了一个大小为9字节的内存,保存了字符串“laruence”和一个NULL(0)的结尾第二行定义了一个新的字符串变量,并将变量var的值“复制”给这个新的变量第三行unset了变量var 这样的代码是很常见的,如果PHP对于每一个变量赋值都重新分配内存,copy数据的话,那么上面的这段代码就要申请18个字节的内存空间,为了申请新的内存,还需要cpu执行某些计算,这当然会加重cpu的负载而我们也很容易看出来,上面的代码其实根本没有必要申请两份空间,当第三句执行后,$var被释放了,我们刚才的设想(申请18个字节内存空间)突然变的很滑稽,这次复制显得好多余。如果早知道$var不用了,直接让$var_dup用$var的内存不就行了,还复制干嘛?如果你觉得9个字节没什么,那设想下如果$var是个10M的文件内容,或者20M,是不是我们的计算机资源消耗的有点冤枉呢?呵呵,PHP的开发者也看出来了: 刚才说了,PHP中的变量是用一个存储在symbol_table中的符号名,对应一个zval来实现的,比如对于上面的第一行代码,会在symbol_table中存储一个值“var”,对应的有一个指针指向一个zval结构,变量值“laruence”保存在这个zval中,所以不难想象,对于上面的代码来说,我们完全可以让“var”和“var_dup”对应的指针都指向同一个zval就可以了(额,鸟哥一会说hash table,一会说symbol_table,暂且理解为symbol_table是hash table的子集) PHP也是这样做的,这个时候就需要介绍一下zval结构中的refcount字段了refcount,引用计数,记录了当前的zval被引用的次数(这里的引用并不是真正的 & ,而是有几个变量指向它)比如对于代码:第一行,创建了一个整形变量,变量值是1。 此时保存整形1的这个zval的refcount为1第二行,创建了一个新的整形变量(通过赋值的方式),变量也指向刚才创建的zval,并将这个zval的refcount加1,此时这个zval的refcount为2所以,这个时候(通过值传递的方式赋值给别的变量),并没有产生新的zval,两个变量指向同一zval,通过一个计数器来共用zval及内存地址,以达到节省内存空间的目的当一个变量被第一次创建的时候,它对应的zval结构的refcount的值会被初始化为1,因为只有这一个变量在用它。但是当你把这个变量赋值给别的变量时,refcount属性便会加1变成2,因为现在有两个变量在用这个zval结构了 PHP提供了一个函数可以帮助我们了解这个过程debug_zval_dump输出:long(1) refcount(2)long(1) refcount(3)如果你奇怪 ,var的refcount应该是1啊?我们知道,对于简单变量,PHP是以传值的形式传参数的。也就是说,当执行debug_zval_dump($var)的时候,$var会以传值的方式传递给debug_zval_dump,也就是会导致var的refcount加1,所以只要能看到,当变量赋值给一个变量以后,能导致zval的refcount加1这个结果即可现在我们回头看上面的代码, 当执行了最后一行unset($var)以后,会发生什么呢?unset($var)的时候,它删除符号表里的$var的信息,准备清理它对应的zval及内存空间,这时它发现$var对应的zval结构的refcount值是2,也就是说,还有另外一个变量在一起用着这个zval,所以unset只需把这个zval的refcount减去1就行了上代码:输出:string(8) "laruence" refcount(2) 但是,对于下面的代码呢?很明显在这段代码执行以后,$var_dup的值应该还是“laruence”,那么这又是怎么实现的呢?这就是PHP的copy on write机制(简称COW):PHP在修改一个变量以前,会首先查看这个变量的refcount,如果refcount大于1,PHP就会执行一个分离的过程(在Zend引擎中,分离是破坏一个引用对的过程)对于上面的代码,当执行到第三行的时候,PHP发现$var想要改变,并且它指向的zval的refcount大于1,那么PHP就会复制一个新的zval出来,改变其值,将改变的变量指向新的zval(哪个变量指向新复制的zval其实已经无所谓了),并将原zval的refcount减1,并修改symbol_table里该变量的指针,使得$var和$var_dup分离(Separation)。这个机制就是所谓的copy on write(写时复制,这里的写包括普通变量的修改及数组对象里的增加、删除单元操作)如果了解了is_ref之后,上面说的并不严谨 上代码测试:输出:long(1) refcount(2)string(8) "laruence" refcount(2) 现在我们知道,当使用变量复制的时候 ,PHP内部并不是真正的复制,而是采用指向相同的zval结构来节约开销。那么,对于PHP中的引用,又是如何实现呢?这段代码结束以后,$var也会被间接的修改为1,这个过程称作(change on write:写时改变)那么ZE是怎么知道,这次的复制不需要Separation呢?这个时候就要用到zval中的is_ref字段了:对于上面的代码,当第二行执行以后,$var所代表的zval的refcount变为2,并且设置is_ref为1到第三行的时候,PHP先检查var_ref对应的zval的is_ref字段(is_ref 表示该zval是否被&引用,仅表示真或假,就像开关的开与关一样,zval的初始化情况下为0,即非引用),如果为1,则不分离,直接更改(否则需要执行刚刚提到的zval分离),更改共享的zval实际上也间接更改了$var的值,因为引擎想所有的引用变量都看到这一改变php源码做了这样一个判断,大体逻辑示意如下:如果这个zval中的if_ref为1(即被引用),或者该zval引用计数小于2任何一种方式:都不会进行分离 尽管已经存在写时复制和写时改变,但仍然还存在一些不能通过is_ref和refcount来解决的问题对于如下的代码,又会怎样呢?这里$var、$var_dup、$var_ref三个变量将共用一个zval结构(其实这是不可能的,一个zval不可能既被&,又被指向),有两个属于change-on-write组合($var和$var_ref),有两个属于copy-on-write组合($var和$var_dup),那is_ref和refcount该怎样工作,才能正确的处理好这段复杂的关系呢?答案是不可能!在这种情况下,变量的值必须分离成两份完全独立的存在当执行第二行代码的时候,和前面讲过的一样,$var_dup 和 $var 指向相同的zval, refcount为2当执行第三行的时候,PHP发现要操作的zval的refcount大于1,则PHP会执行Separation(也就是说php将一个zval的is_ref从0设为1 之前,当然此时refcount还没有增加,会看该zval的refcount,如果refcount>1,则会分离), 将$var_dup分离出去,并将$var和$var_ref做change on write关联。也就是,refcount=2, is_ref=1;所以内存会给变量var_dup 分配出一个新的zval,类型与值同 $var和$var_ref指向的zval一样,是新分配出来的,尽管他们拥有同样的值,但是必须通过两个zval来实现。试想一下,如果三者指向同一个zval的话,改边 $var_dup 的值,那么 $var和$var_ref 也会受到影响,这样就乱套了图解:下面的这段代码在内核中同样会产生歧义,所以需要强制复制!也就是说一个zval不会既被引用,又被指向,必须分离 基于这样的分析,我们就可以让debug_zval_dump出refcount为1的结果来:输出:string(8) "laruence" refcount(1) 为什么结果是refcount(1)呢debug_zval_dump()中参数是引用的话,refcount永远为1这两段代码在执行的时候是这样的逻辑:PHP先看变量指向的zval是否被引用,如果是引用,则不再产生新的zval甭管哪个变量引用了它,比如有个变量$a被引用了,$b=&$a,就算自己引用自己$a=&$a,$a所指向的zval都不会被复制,改变其中一个变量的值,另一个值也被改变(写时改变)如果is_ref为0且refcount大于1,改变其中一个变量时,复制新的zval(写时复制) 还有一个知识点需要了解下,就是PHP数组复制的机制复制一个数组,就是把一个数组赋值给一个变量便可。会把数组指针位置一同复制。这里面有两种情况:① 指针位置合法,这时直接复制,无影响② 原数组指针位置非法时(移出界),“新”数组指针会初始化(这里的新为什么要加引号?请看下文),而老的数组指针位置不变,还是false先看例子: 结果:!结果:出现这种情况好像不对?$arr2 难道不是新数组?新数组的数组指针应该重置了啊这里注意了:$arr2 = $arr1 ,在俩变量都没发生写操作时,他们其实引用的是同一个内存地址。在其中一个变量发生写操作后,内存地址会复制一份,发生改变的变量会去引用它,并把数组指针初始化。所以 $arr1 会去引用复制的内存地址,并将指针初始化二。.foreach循环时调用current等函数!结果: 56按照之前说的,foreach先赋值,再移动指针,再执行循环体,第一次结果为2可以理解为什么三次都是2呢?咋就这么2呢?因为current函数是按引用传递的函数 在zval笔记中说了,一个zval不能既被引用,又被指向所以,变量分离,重新拷贝一份数组专门用于current函数 当然,如果数组zval的is_ref为1,则不会拷贝数组了或者:结果:current是引用传参

杨冬芳 2019-12-02 02:26:33 0 浏览量 回答数 0

问题

域名相关

麒麟论坛 2019-12-01 19:38:53 2165 浏览量 回答数 3

回答

回 2楼(niudehua) 的帖子 您好, 欢迎来到阿里云论坛。 如果您将DNS更改回万网的,那之前在dns.he.net里的解析设置就失效了喔。 ------------------------- 回 3楼(niudehua) 的帖子 您好, 建议检查一下当前有效的DNS地址是什么,判断 ipv6-test.com 里查询到的DNS是不是最新的。 如图中显示是web访问不了,需要先检查web是否在相应的ipv6地址里监听使用喔。 ------------------------- 回 3楼(niudehua) 的帖子 您好, 现在我从国外的测试机访问您的ipv6网址,返回是404的错误信息喔: converted 'http://www.top1yuangou.com' (ANSI_X3.4-1968) -> 'http://www.top1yuangou.com' (UTF-8) --2017-05-16 18:00:57--   http://www.top1yuangou.com/ Resolving www.top1yuangou.com (www.top1yuangou.com)... 2001:470:18:1d7::2 Connecting to www.top1yuangou.com (www.top1yuangou.com)|2001:470:18:1d7::2|:80... connected. HTTP request sent, awaiting response... 404 Not Found 2017-05-16 18:00:58 ERROR 404: Not Found. ------------------------- 回 7楼(niudehua) 的帖子 您好, 有的DNS修改,国外的需要48小时后可能才会同步到的。 建议您耐心等待。 ------------------------- 回 8楼(niudehua) 的帖子 您好, 您指的是您自己的这个隧道地址(2001:470:18:1d7::2)吗? 这应该是从HE申请分配到的吧? ------------------------- 回 12楼(niudehua) 的帖子 您好, 是这个ipv4的A记录吗? PING www.top1yuangou.com (120.27.93.57) 56(84) bytes of data 如果当前域名使用的DNS是he.net的,您需要登录到 https://dns.he.net 来设置域名解析(如A记录)的喔。 ------------------------- 回 14楼(niudehua) 的帖子 您好, 现在ping的话,可以看到如解析面板中出现的ip地址,但好象没有返回信息,是禁ping了吗? 正在 Ping www.top1yuangou.com [120.27.93.57] 具有 32 字节的数据 ------------------------- 回 17楼(niudehua) 的帖子 您好, 请问您今天将APP提交给苹果审核了吗? 祝您成功喔。 ------------------------- 回 19楼(jsrabbit) 的帖子 您好, 如果您是需要一个支持ipv6的DNS服务器地址,请参考这里的一个帖子: 《用HE提供的免费DNS解析服务通过IPv6 DNS检测》 - https://bbs.aliyun.com/read/313524.html? ------------------------- 回 22楼(jsrabbit) 的帖子 您好, 如果您当前的域名DNS使用的是he.net的, 那么或许这两项,在过一小段时间后再次测试就通过啦。因为he.net提供的DNS应该是能支持ipv6的。 ------------------------- 回 25楼(伟啊) 的帖子 您好, 欢迎来到阿里云论坛。 我一般的做法是,将原阿里云上的解析逐条(包括您提到的cname解析)记录在HE上添加, 最后是修改域名的DNS服务器地址。 这样,无论是阿里云还是HE的服务器来解析域名,解析的结果都是一样的。 ------------------------- 回 27楼(杰科森) 的帖子 您好, 欢迎来到阿里云论坛。 您可以根据具体的操作系统来设置喔,如这里的一个例子:《在CentOS 7系统里设置开机自动执行脚本systemd》 - https://bbs.aliyun.com/read/301042.html ------------------------- 回 30楼(我的天啊666) 的帖子 您好, 至少现在我在外围的测试机里测试,好象可以ping6通您的主机地址喔: liujia@hk2:~$ ping6 app.51dtwl.com PING app.51dtwl.com(wispei-1-pt.tunnel.tserv20.hkg1.ipv6.he.net) 56 data bytes 64 bytes from wispei-1-pt.tunnel.tserv20.hkg1.ipv6.he.net: icmp_seq=1 ttl=63 time=313 ms 64 bytes from wispei-1-pt.tunnel.tserv20.hkg1.ipv6.he.net: icmp_seq=2 ttl=63 time=312 ms ------------------------- 回 32楼(ac1322) 的帖子 您好, 欢迎来到阿里云论坛。 好象现在看不了您贴的图, 请问您的站点访问网址或域名是什么呢? ------------------------- 回 35楼(ac1322) 的帖子 您好, 从我现在的电脑里ping,好象是已经生效,能解析到您的ipv6隧道地址里了: C:\Users\liujia>ping -6 api.cifmedia.cn 正在 Ping api.cifmedia.cn [2001:470:18:102e::2] 具有 32 字节的数据: 来自 2001:470:18:102e::2 的回复: 时间=663ms 来自 2001:470:18:102e::2 的回复: 时间=663ms ------------------------- 回 37楼(ac1322) 的帖子 您好, ipv6-test.com/validate.php   仅是在线的检测网站之一, 您还可以在其它网站上检测的,如 ipv6proxy.net ------------------------- 回 39楼(ac1322) 的帖子 您好, 还需要您的检测机要支持ipv6访问的, 如您可以访问 http://ipv6.baidu.com 看看会有什么内容提示。

dongshan8 2019-12-02 00:57:55 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 阿里云双十一主会场 阿里云双十一新人会场 1024程序员加油包 阿里云双十一拼团会场 场景化解决方案 阿里云双十一直播大厅