• 关于

    前向安全性会出现哪些问题

    的搜索结果

回答

MongoDB ACID事务支持 这里要有一定的关系型数据库的事务的概念,不然不一定能理解的了这里说的事务概念。 下面说一说MongoDB的事务支持,这里可能会有疑惑,前面我们在介绍MongoDB时,说MongoDB是一个NoSQL数据库,不支持事务。这里又介绍MongoDB的事务。这里要说明一下MongoDB的事务支持跟关系型数据库的事务支持是两码事,如果你已经非常了解关系型数据库的事务,通过下面一副图对比MongoDB事务跟MySQL事务的不同之处。 MongoDB是如何实现事务的ACID? 1)MongoDB对原子性(Atomicity)的支持 原子性在Mongodb中到底是一个什么概念呢?为什么说支持但又说Mongodb的原子性是单行/文档级原子性,这里提供了一个MongoDB更新语句样例,如下图: MongoDB是如何实现事务的ACID? 更新“username”等于“tj.tang”的文档,更新salary、jobs、hours字段。这里对于这三个字段Mongodb在执行时要么都更新要么都不更新,这个概念在MySQL中可能你没有考虑过,但在MongoDB中由于文档可以嵌套子文档可以很复杂,所以Mongodb的原子性叫单行/文档级原子性。 对于关系型数据库的多行、多文档、多语句原子性目前Mongodb是不支持的,如下情况: MongoDB是如何实现事务的ACID? MongoDB更新条件为工资小于50万的人都把工资调整为50万,这就会牵扯到多文档更新原子性。如果当更新到Frank这个文档时,出现宕机,服务器重启之后是无法像关系型数据库那样做到数据回滚的,也就是说处理这种多文档关系型数据库事务的支持,但MongoDB不支持。那么怎么解决Mongodb这个问题呢?可以通过建模,MongoDB不是范式而是反范式的设计,通过大表和小表可以把相关的数据放到同一个文档中去。然后通过一条语句来执行操作。 2)MongoDB对一致性(consistency)的支持 对于数据一致性来说,传统数据库(单机)跟分布式数据库(MongoDB)对于数据一致性是不太一样的,怎么理解呢?如下图: MongoDB是如何实现事务的ACID? 对于传统型数据库来说,数据一致性主要是在单机上,单机的问题主要是数据进来时的规则检验,数据不能被破坏掉。而在分布式数据库上,因为他们都是多节点分布式的,我们讲的一致性往往就是讲的各个节点之间的数据是否一致。而MongoDB在这点上做的还是不错的,MongoDB支持强一致性或最终一致性(弱一致性),MongoDB的数据一致性也叫可调一致性,什么意思呢?如下图: MongoDB是如何实现事务的ACID? MongoDB的可调一致性,也就是可以自由选择强一致性或最终一致性,如果你的应用场景是前台的方式可以选择强一致性,如果你的应用场景是后台的方式(如报表)可以选择弱一致性。 一致性 上面我们讲到了通过将数据冗余存储到不同的节点来保证数据安全和减轻负载,下面我们来看看这样做引发的一个问题:保证数据在多个节点间的一致性是非常困难的。在实际应用中我们会遇到很多困难,同步节点可能会故障,甚至会无法恢复,网络可能会有延迟或者丢包,网络原因导致集群中的机器被分隔成两个不能互通的子域等等。在NoSQL中,通常有两个层次的一致性:第一种是强一致性,既集群中的所有机器状态同步保持一致。第二种是最终一致性,既可以允许短暂的数据不一致,但数据最终会保持一致。我们先来讲一下,在分布式集群中,为什么最终一致性通常是更合理的选择,然后再来讨论两种一致性的具体实现结节。 关于CAP理论 为什么我们会考虑削弱数据的一致性呢?其实这背后有一个关于分布式系统的理论依据。这个理论最早被Eric Brewer提出,称为CAP理论,尔后Gilbert和Lynch对CAP进行了理论证明。这一理论首先把分布式系统中的三个特性进行了如下归纳: 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。 分区容忍性(P):集群中的某些节点在无法联系后,集群整体是否还能继续进行服务。 而CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。 要保证数据强一致性,最简单的方法是令写操作在所有数据节点上都执行成功才能返回成功,也就是同步概念。而这时如果某个结点出现故障,那么写操作就成功不了了,需要一直等到这个节点恢复。也就是说,如果要保证强一致性,那么就无法提供7×24的高可用性。 而要保证可用性的话,就意味着节点在响应请求时,不用完全考虑整个集群中的数据是否一致。只需要以自己当前的状态进行请求响应。由于并不保证写操作在所有节点都写成功,这可能会导致各个节点的数据状态不一致。 CAP理论导致了最终一致性和强一致性两种选择。当然,事实上还有其它的选择,比如在Yahoo的PNUTS中,采用的就是松散的一致性和弱可用性结合的方法。但是我们讨论的NoSQL系统没有类似的实现,所以我们在后续不会对其进行讨论。 强一致性 强一致性的保证,要求所有数据节点对同一个key值在同一时刻有同样的value值。虽然实际上可能某些节点存储的值是不一样的,但是作为一个整体,当客户端发起对某个key的数据请求时,整个集群对这个key对应的数据会达成一致。下面就举例说明这种一致性是如何实现的。 假设在我们的集群中,一个数据会被备份到N个结点。这N个节点中的某一个可能会扮演协调器的作用。它会保证每一个数据写操作会在成功同步到W个节点后才向客户端返回成功。而当客户端读取数据时,需要至少R个节点返回同样的数据才能返回读操作成功。而NWR之间必须要满足下面关系:R+W>N 下面举个实在的例子。比如我们设定N=3(数据会备份到A、B、C三个结点)。比如值 employee30:salary 当前的值是20000,我们想将其修改为30000。我们设定W=2,下面我们会对A、B、C三个节点发起写操作(employee30:salary, 30000),当A、B两个节点返回写成功后,协调器就会返回给客户端说写成功了。至于节点C,我们可以假设它从来没有收到这个写请求,他保存的依然是20000那个值。之后,当一个协调器执行一个对employee30:salary的读操作时,他还是会发三个请求给A、B、C三个节点: 如果设定R=1,那么当C节点先返回了20000这个值时,那我们客户端实际得到了一个错误的值。 如果设定R=2,则当协调器收到20000和30000两个值时,它会发现数据不太正确,并且会在收到第三个节点的30000的值后判断20000这个值是错误的。 所以如果要保证强一致性,在上面的应用场景中,我们需要设定R=2,W=2 如果写操作不能收到W个节点的成功返回,或者写操作不能得到R个一致的结果。那么协调器可能会在某个设定的过期时间之后向客户端返回操作失败,或者是等到系统慢慢调整到一致。这可能就导致系统暂时处于不可用状态。 对于R和W的不同设定,会导致系统在进行不同操作时需要不同数量的机器节点可用。比如你设定在所有备份节点上都写入才算写成功,既W=N,那么只要有一个备份节点故障,写操作就失败了。一般设定是R+W = N+1,这是保证强一致性的最小设定了。一些强一致性的系统设定W=N,R=1,这样就根本不用考虑各个节点数据可能不一致的情况了。 HBase是借助其底层的HDFS来实现其数据冗余备份的。HDFS采用的就是强一致性保证。在数据没有完全同步到N个节点前,写操作是不会返回成功的。也就是说它的W=N,而读操作只需要读到一个值即可,也就是说它R=1。为了不至于让写操作太慢,对多个节点的写操作是并发异步进行的。在直到所有的节点都收到了新的数据后,会自动执行一个swap操作将新数据写入。这个操作是原子性和一致性的。保证了数据在所有节点有一致的值。 最终一致性 像Voldemort,Cassandra和Riak这些类Dynamo的系统,通常都允许用户按需要设置N,R,W三个值,即使是设置成W+R<= N也是可以的。也就是说他允许用户在强一致性和最终一致性之间自由选择。而在用户选择了最终一致性,或者是W 3)MongoDB对隔离性(isolation)的支持 在关系型数据库中,SQL2定义了四种隔离级别,分别是READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。但是很少有数据库厂商遵循这些标准,比如Oracle数据库就不支持READ UNCOMMITTED和REPEATABLE READ隔离级别。而MySQL支持这全部4种隔离级别。每一种级别都规定了一个事务中所做的修改,哪些在事务内核事务外是可见的,哪些是不可见的。为了尽可能减少事务间的影响,事务隔离级别越高安全性越好但是并发就越差;事务隔离级别越低,事务请求的锁越少,或者保持锁的时间就越短,这也就是为什么绝大多数数据库系统默认的事务隔离级别是RC。 下图展示了几家不同的数据库厂商的不同事物隔离级别。 MongoDB是如何实现事务的ACID? MongoDB在3.2之前使用的是“读未提交”,这种情况下会出现“脏读”。但在MongoDB 3.2开始已经调整为“读已提交”。 下面说说每种隔离级别带来的问题: READ-UNCOMMITTED(读尚未提交的数据) 在这个级别,一个事务的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也被称为“脏读(dirty read)”。这个级别会导致很多问题,从性能上来说,READ UNCOMMITTED不会比其他的级别好太多,但却缺乏其他级别的很多好处,除非真的有非常必要的理由,在实际应用中一般很少使用。 READ-COMMITTED(读已提交的数据) 在这个级别,能满足前面提到的隔离性的简单定义:一个事务开始时,只能“看见”已经提交的事务所做的修改。换句话说,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。这个级别有时候也叫“不可重复读(non-repeatable read)”,因为两次执行同样的查询,可能会得到不一样的结果。 REPEATABLE-READ(可重复读) 在这个级别,保证了在同一个事务中多次读取统一记录的结果是一致的。MySQL默认使用这个级别。InnoDB和XtraDB存储引擎通过多版本并发控制MVCC(multiversion concurrency control)解决了“幻读”和“不可重复读”的问题。通过前面的学习我们知道RR级别总是读取事务开始那一刻的快照信息,也就是说这些数据数据库当前状态,这在一些对于数据的时效特别敏感的业务中,就很可能会出问题。 SERIALIZABLE(串行化) 在这个级别,它通过强制事务串行执行,避免了前面说的一系列问题。简单来说,SERIALIZABLE会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用的问题。实际应用中也很少在本地事务中使用SERIALIABLE隔离级别,主要应用在InnoDB存储引擎的分布式事务中。 4)MongoDB对持久性(durability)的支持 对于数据持久性来说,在传统数据库中(单机)的表现为服务器任何时候发生宕机都不需要担心数据丢失的问题,因为有方式可以把数据永久保存起来了。一般都是通过日志来保证数据的持久性。通过下图来看一下传统数据库跟MongoDB对于数据持久性各自所使用的方式。 MongoDB是如何实现事务的ACID? 从上图可以看出,MongoDB同样是使用数据进来先写日志(日志刷盘的速度是非常快)然后在写入到数据库中的这种方式来保证数据的持久性,如果出现服务器宕机,当启动服务器时会从日志中读取数据。不同的是传统数据库这种方式叫做“WAL” Write-Ahead Logging(预写日志系统),而MongoDB叫做“journal”。此外MongoDB在数据持久性上这点可能做的更好,MongoDB的复制默认节点就是三节点以上的复制集群,当数据到达主节点之后会马上同步到从节点上去。

景凌凯 2019-12-02 02:05:12 0 浏览量 回答数 0

问题

VPC网络架构助力媒体数字化转型

福利达人 2019-12-01 21:09:15 3511 浏览量 回答数 0

问题

【精品问答】Java技术1000问(1)

问问小秘 2019-12-01 21:57:43 37578 浏览量 回答数 11

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

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

回答

在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上 要重 视 它 , 战术上又 要 藐 视 它。先举个例子感受一下千万级到底是什么数量级?现在很流行的优步(Uber),从媒体公布的信息看,它每天接单量平均在百万左右, 假如每天有10个小时的服务时间,平均QPS只有30左右。对于一个后台服务器,单机的平均QPS可以到达800-1000,单独看写的业务量很简单 。为什么我们又不能说轻视它?第一,我们看它的数据存储,每天一百万的话,一年数据量的规模是多少?其次,刚才说的订单量,每一个订单要推送给附近的司机、司机要并发抢单,后面业务场景的访问量往往是前者的上百倍,轻松就超过上亿级别了。 今天我想从架构的本质谈起之后,希望大家理解在做一些建构设计的时候,它的出发点以及它解决的问题是什么。 架构,刚开始的解释是我从知乎上看到的。什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像。更抽象一点,说架构其 实 是 对 我 们 重复性业务 的抽象和我 们 未来 业务 拓展的前瞻,强调过去的经验和你对整个行业的预见。 我们要想做一个架构的话需要哪些能力?我觉得最重要的是架构师一个最重要的能力就是你要有 战 略分解能力。这个怎么来看呢: 第一,你必须要有抽象的能力,抽象的能力最基本就是去重,去重在整个架构中体现在方方面面,从定义一个函数,到定义一个类,到提供的一个服务,以及模板,背后都是要去重提高可复用率。 第二, 分类能力。做软件需要做对象的解耦,要定义对象的属性和方法,做分布式系统的时候要做服务的拆分和模块化,要定义服务的接口和规范。 第三, 算法(性能),它的价值体现在提升系统的性能,所有性能的提升,最终都会落到CPU,内存,IO和网络这4大块上。 这一页PPT举了一些例子来更深入的理解常见技术背后的架构理念。 第一个例子,在分布式系统我们会做 MySQL分 库 分表,我们要从不同的库和表中读取数据,这样的抽象最直观就是使用模板,因为绝大多数SQL语义是相同的,除了路由到哪个库哪个表,如果不使用Proxy中间件,模板就是性价比最高的方法。 第二看一下加速网络的CDN,它是做速度方面的性能提升,刚才我们也提到从CPU、内存、IO、网络四个方面来考虑,CDN本质上一个是做网络智能调度优化,另一个是多级缓存优化。 第三个看一下服务化,刚才已经提到了,各个大网站转型过程中一定会做服务化,其实它就是做抽象和做服务的拆分。第四个看一下消息队列,本质上还是做分类,只不过不是两个边际清晰的类,而是把两个边际不清晰的子系统通过队列解构并且异步化。新浪微博整体架构是什么样的 接下我们看一下微博整体架构,到一定量级的系统整个架构都会变成三层,客户端包括WEB、安卓和IOS,这里就不说了。接着还都会有一个接口层, 有三个主要作用: 第一个作用,要做 安全隔离,因为前端节点都是直接和用户交互,需要防范各种恶意攻击; 第二个还充当着一个 流量控制的作用,大家知道,在2014年春节的时候,微信红包,每分钟8亿多次的请求,其实真正到它后台的请求量,只有十万左右的数量级(这里的数据可能不准),剩余的流量在接口层就被挡住了; 第三,我们看对 PC 端和移 动 端的需求不一样的,所以我们可以进行拆分。接口层之后是后台,可以看到微博后台有三大块: 一个是 平台服 务, 第二, 搜索, 第三, 大数据。到了后台的各种服务其实都是处理的数据。 像平台的业务部门,做的就是 数据存储和读 取,对搜索来说做的是 数据的 检 索,对大数据来说是做的数据的 挖掘。微博其实和淘宝是很类似 微博其实和淘宝是很类似的。一般来说,第一代架构,基本上能支撑到用户到 百万 级别,到第二代架构基本能支撑到 千万 级别都没什么问题,当业务规模到 亿级别时,需要第三代的架构。 从 LAMP 的架构到面向服 务 的架构,有几个地方是非常难的,首先不可能在第一代基础上通过简单的修修补补满足用户量快速增长的,同时线上业务又不能停, 这是我们常说的 在 飞 机上 换 引擎的 问题。前两天我有一个朋友问我,说他在内部推行服务化的时候,把一个模块服务化做完了,其他部门就是不接。我建议在做服务化的时候,首先更多是偏向业务的梳理,同时要找准一个很好的切入点,既有架构和服务化上的提升,业务方也要有收益,比如提升性能或者降低维护成本同时升级过程要平滑,建议开始从原子化服务切入,比如基础的用户服务, 基础的短消息服务,基础的推送服务。 第二,就是可 以做无状 态 服 务,后面会详细讲,还有数据量大了后需要做数据Sharding,后面会将。 第三代 架构 要解决的 问题,就是用户量和业务趋于稳步增加(相对爆发期的指数级增长),更多考虑技术框架的稳定性, 提升系统整体的性能,降低成本,还有对整个系统监控的完善和升级。 大型网站的系统架构是如何演变的 我们通过通过数据看一下它的挑战,PV是在10亿级别,QPS在百万,数据量在千亿级别。我们可用性,就是SLA要求4个9,接口响应最多不能超过150毫秒,线上所有的故障必须得在5分钟内解决完。如果说5分钟没处理呢?那会影响你年终的绩效考核。2015年微博DAU已经过亿。我们系统有上百个微服务,每周会有两次的常规上线和不限次数的紧急上线。我们的挑战都一样,就是数据量,bigger and bigger,用户体验是faster and faster,业务是more and more。互联网业务更多是产品体验驱动, 技 术 在 产 品 体验上最有效的贡献 , 就是你的性能 越来越好 。 每次降低加载一个页面的时间,都可以间接的降低这个页面上用户的流失率。微博的技术挑战和正交分解法解析架构 下面看一下 第三代的 架构 图 以及 我 们 怎么用正交分解法 阐 述。 我们可以看到我们从两个维度,横轴和纵轴可以看到。 一个 维 度 是 水平的 分层 拆分,第二从垂直的维度会做拆分。水平的维度从接口层、到服务层到数据存储层。垂直怎么拆分,会用业务架构、技术架构、监控平台、服务治理等等来处理。我相信到第二代的时候很多架构已经有了业务架构和技术架构的拆分。我们看一下, 接口层有feed、用户关系、通讯接口;服务层,SOA里有基层服务、原子服务和组合服务,在微博我们只有原子服务和组合服务。原子服务不依赖于任何其他服务,组合服务由几个原子服务和自己的业务逻辑构建而成 ,资源层负责海量数据的存储(后面例子会详细讲)。技 术框架解决 独立于 业务 的海量高并发场景下的技术难题,由众多的技术组件共同构建而成 。在接口层,微博使用JERSY框架,帮助你做参数的解析,参数的验证,序列化和反序列化;资源层,主要是缓存、DB相关的各类组件,比如Cache组件和对象库组件。监 控平台和服 务 治理 , 完成系统服务的像素级监控,对分布式系统做提前诊断、预警以及治理。包含了SLA规则的制定、服务监控、服务调用链监控、流量监控、错误异常监控、线上灰度发布上线系统、线上扩容缩容调度系统等。 下面我们讲一下常见的设计原则。 第一个,首先是系统架构三个利器: 一个, 我 们 RPC 服 务组 件 (这里不讲了), 第二个,我们 消息中 间 件 。消息中间件起的作用:可以把两个模块之间的交互异步化,其次可以把不均匀请求流量输出为匀速的输出流量,所以说消息中间件 异步化 解耦 和流量削峰的利器。 第三个是配置管理,它是 代码级灰度发布以及 保障系统降级的利器。 第二个 , 无状态 , 接口 层 最重要的就是无状 态。我们在电商网站购物,在这个过程中很多情况下是有状态的,比如我浏览了哪些商品,为什么大家又常说接口层是无状态的,其实我们把状态从接口层剥离到了数据层。像用户在电商网站购物,选了几件商品,到了哪一步,接口无状态后,状态要么放在缓存中,要么放在数据库中, 其 实 它并不是没有状 态 , 只是在 这 个 过 程中我 们 要把一些有状 态 的 东 西抽离出来 到了数据层。 第三个, 数据 层 比服 务层 更需要 设计,这是一条非常重要的经验。对于服务层来说,可以拿PHP写,明天你可以拿JAVA来写,但是如果你的数据结构开始设计不合理,将来数据结构的改变会花费你数倍的代价,老的数据格式向新的数据格式迁移会让你痛不欲生,既有工作量上的,又有数据迁移跨越的时间周期,有一些甚至需要半年以上。 第四,物理结构与逻辑结构的映射,上一张图看到两个维度切成十二个区间,每个区间代表一个技术领域,这个可以看做我们的逻辑结构。另外,不论后台还是应用层的开发团队,一般都会分几个垂直的业务组加上一个基础技术架构组,这就是从物理组织架构到逻辑的技术架构的完美的映射,精细化团队分工,有利于提高沟通协作的效率 。 第五, www .sanhao.com 的访问过程,我们这个架构图里没有涉及到的,举个例子,比如当你在浏览器输入www.sanhao网址的时候,这个请求在接口层之前发生了什么?首先会查看你本机DNS以及DNS服务,查找域名对应的IP地址,然后发送HTTP请求过去。这个请求首先会到前端的VIP地址(公网服务IP地址),VIP之后还要经过负载均衡器(Nginx服务器),之后才到你的应用接口层。在接口层之前发生了这么多事,可能有用户报一个问题的时候,你通过在接口层查日志根本发现不了问题,原因就是问题可能发生在到达接口层之前了。 第六,我们说分布式系统,它最终的瓶颈会落在哪里呢?前端时间有一个网友跟我讨论的时候,说他们的系统遇到了一个瓶颈, 查遍了CPU,内存,网络,存储,都没有问题。我说你再查一遍,因为最终你不论用上千台服务器还是上万台服务器,最终系统出瓶颈的一定会落在某一台机(可能是叶子节点也可能是核心的节点),一定落在CPU、内存、存储和网络上,最后查出来问题出在一台服务器的网卡带宽上。微博多级双机房缓存架构 接下来我们看一下微博的Feed多级缓存。我们做业务的时候,经常很少做业务分析,技术大会上的分享又都偏向技术架构。其实大家更多的日常工作是需要花费更多时间在业务优化上。这张图是统计微博的信息流前几页的访问比例,像前三页占了97%,在做缓存设计的时候,我们最多只存最近的M条数据。 这里强调的就是做系统设计 要基于用 户 的 场 景 , 越细致越好 。举了一个例子,大家都会用电商,电商在双十一会做全国范围内的活动,他们做设计的时候也会考虑场景的,一个就是购物车,我曾经跟相关开发讨论过,购物车是在双十一之前用户的访问量非常大,就是不停地往里加商品。在真正到双十一那天他不会往购物车加东西了,但是他会频繁的浏览购物车。针对这个场景,活动之前重点设计优化购物车的写场景, 活动开始后优化购物车的读场景。 你看到的微博是由哪些部分聚合而成的呢?最右边的是Feed,就是微博所有关注的人,他们的微博所组成的。微博我们会按照时间顺序把所有关注人的顺序做一个排序。随着业务的发展,除了跟时间序相关的微博还有非时间序的微博,就是会有广告的要求,增加一些广告,还有粉丝头条,就是拿钱买的,热门微博,都会插在其中。分发控制,就是说和一些推荐相关的,我推荐一些相关的好友的微博,我推荐一些你可能没有读过的微博,我推荐一些其他类型的微博。 当然对非时序的微博和分发控制微博,实际会起多个并行的程序来读取,最后同步做统一的聚合。这里稍微分享一下, 从SNS社交领域来看,国内现在做的比较好的三个信息流: 微博 是 基于弱关系的媒体信息流 ; 朋友圈是基于 强 关系的信息流 ; 另外一个做的比 较 好的就是今日 头 条 , 它并不是基于关系来构建信息流 , 而是基于 兴趣和相关性的个性化推荐 信息流 。 信息流的聚合,体现在很多很多的产品之中,除了SNS,电商里也有信息流的聚合的影子。比如搜索一个商品后出来的列表页,它的信息流基本由几部分组成:第一,打广告的;第二个,做一些推荐,热门的商品,其次,才是关键字相关的搜索结果。 信息流 开始的时候 很 简单 , 但是到后期会 发现 , 你的 这 个流 如何做控制分发 , 非常复杂, 微博在最近一两年一直在做 这样 的工作。刚才我们是从业务上分析,那么技术上怎么解决高并发,高性能的问题?微博访问量很大的时候,底层存储是用MySQL数据库,当然也会有其他的。对于查询请求量大的时候,大家知道一定有缓存,可以复用可重用的计算结果。可以看到,发一条微博,我有很多粉丝,他们都会来看我发的内容,所以 微博是最适合使用 缓 存 的系统,微博的读写比例基本在几十比一。微博使用了 双 层缓 存,上面是L1,每个L1上都是一组(包含4-6台机器),左边的框相当于一个机房,右边又是一个机房。在这个系统中L1缓存所起的作用是什么? 首先,L1 缓 存增加整个系 统 的 QPS, 其次 以低成本灵活扩容的方式 增加 系统 的 带宽 。想象一个极端场景,只有一篇博文,但是它的访问量无限增长,其实我们不需要影响L2缓存,因为它的内容存储的量小,但它就是访问量大。这种场景下,你就需要使用L1来扩容提升QPS和带宽瓶颈。另外一个场景,就是L2级缓存发生作用,比如我有一千万个用户,去访问的是一百万个用户的微博 ,这个时候,他不只是说你的吞吐量和访问带宽,就是你要缓存的博文的内容也很多了,这个时候你要考虑缓存的容量, 第二 级缓 存更多的是从容量上来 规划,保证请求以较小的比例 穿透到 后端的 数据 库 中 ,根据你的用户模型你可以估出来,到底有百分之多少的请求不能穿透到DB, 评估这个容量之后,才能更好的评估DB需要多少库,需要承担多大的访问的压力。另外,我们看双机房的话,左边一个,右边一个。 两个机房是互 为 主 备 , 或者互 为热备 。如果两个用户在不同地域,他们访问两个不同机房的时候,假设用户从IDC1过来,因为就近原理,他会访问L1,没有的话才会跑到Master,当在IDC1没找到的时候才会跑到IDC2来找。同时有用户从IDC2访问,也会有请求从L1和Master返回或者到IDC1去查找。 IDC1 和 IDC2 ,两个机房都有全量的用户数据,同时在线提供服务,但是缓存查询又遵循最近访问原理。还有哪些多级缓存的例子呢?CDN是典型的多级缓存。CDN在国内各个地区做了很多节点,比如在杭州市部署一个节点时,在机房里肯定不止一台机器,那么对于一个地区来说,只有几台服务器到源站回源,其他节点都到这几台服务器回源即可,这么看CDN至少也有两级。Local Cache+ 分布式 缓 存,这也是常见的一种策略。有一种场景,分布式缓存并不适用, 比如 单 点 资 源 的爆发性峰值流量,这个时候使用Local Cache + 分布式缓存,Local Cache 在 应用 服 务 器 上用很小的 内存资源 挡住少量的 极端峰值流量,长尾的流量仍然访问分布式缓存,这样的Hybrid缓存架构通过复用众多的应用服务器节点,降低了系统的整体成本。 我们来看一下 Feed 的存 储 架构,微博的博文主要存在MySQL中。首先来看内容表,这个比较简单,每条内容一个索引,每天建一张表,其次看索引表,一共建了两级索引。首先想象一下用户场景,大部分用户刷微博的时候,看的是他关注所有人的微博,然后按时间来排序。仔细分析发现在这个场景下, 跟一个用户的自己的相关性很小了。所以在一级索引的时候会先根据关注的用户,取他们的前条微博ID,然后聚合排序。我们在做哈希(分库分表)的时候,同时考虑了按照UID哈希和按照时间维度。很业务和时间相关性很高的,今天的热点新闻,明天就没热度了,数据的冷热非常明显,这种场景就需要按照时间维度做分表,首先冷热数据做了分离(可以对冷热数据采用不同的存储方案来降低成本),其次, 很容止控制我数据库表的爆炸。像微博如果只按照用户维度区分,那么这个用户所有数据都在一张表里,这张表就是无限增长的,时间长了查询会越来越慢。二级索引,是我们里面一个比较特殊的场景,就是我要快速找到这个人所要发布的某一时段的微博时,通过二级索引快速定位。 分布式服务追踪系统 分布式追踪服务系统,当系统到千万级以后的时候,越来越庞杂,所解决的问题更偏向稳定性,性能和监控。刚才说用户只要有一个请求过来,你可以依赖你的服务RPC1、RPC2,你会发现RPC2又依赖RPC3、RPC4。分布式服务的时候一个痛点,就是说一个请求从用户过来之后,在后台不同的机器之间不停的调用并返回。 当你发现一个问题的时候,这些日志落在不同的机器上,你也不知道问题到底出在哪儿,各个服务之间互相隔离,互相之间没有建立关联。所以导致排查问题基本没有任何手段,就是出了问题没法儿解决。 我们要解决的问题,我们刚才说日志互相隔离,我们就要把它建立联系。建立联系我们就有一个请求ID,然后结合RPC框架, 服务治理功能。假设请求从客户端过来,其中包含一个ID 101,到服务A时仍然带有ID 101,然后调用RPC1的时候也会标识这是101 ,所以需要 一个唯一的 请求 ID 标识 递归迭代的传递到每一个 相关 节点。第二个,你做的时候,你不能说每个地方都加,对业务系统来说需要一个框架来完成这个工作, 这 个框架要 对业务 系 统 是最低侵入原 则 , 用 JAVA 的 话 就可以用 AOP,要做到零侵入的原则,就是对所有相关的中间件打点,从接口层组件(HTTP Client、HTTP Server)至到服务层组件(RPC Client、RPC Server),还有数据访问中间件的,这样业务系统只需要少量的配置信息就可以实现全链路监控 。为什么要用日志?服务化以后,每个服务可以用不同的开发语言, 考虑多种开发语言的兼容性 , 内部定 义标 准化的日志 是唯一且有效的办法。最后,如何构建基于GPS导航的路况监控?我们刚才讲分布式服务追踪。分布式服务追踪能解决的问题, 如果 单一用 户发现问题 后 , 可以通 过请 求 ID 快速找到 发 生 问题 的 节 点在什么,但是并没有解决如何发现问题。我们看现实中比较容易理解的道路监控,每辆车有GPS定位,我想看北京哪儿拥堵的时候,怎么做? 第一个 , 你肯定要知道每个 车 在什么位置,它走到哪儿了。其实可以说每个车上只要有一个标识,加上每一次流动的信息,就可以看到每个车流的位置和方向。 其次如何做 监 控和 报 警,我们怎么能了解道路的流量状况和负载,并及时报警。我们要定义这条街道多宽多高,单位时间可以通行多少辆车,这就是道路的容量。有了道路容量,再有道路的实时流量,我们就可以基于实习路况做预警? 对应于 分布式系 统 的话如何构建? 第一 , 你要 定义 每个服 务节 点它的 SLA A 是多少 ?SLA可以从系统的CPU占用率、内存占用率、磁盘占用率、QPS请求数等来定义,相当于定义系统的容量。 第二个 , 统计 线 上 动态 的流量,你要知道服务的平均QPS、最低QPS和最大QPS,有了流量和容量,就可以对系统做全面的监控和报警。 刚才讲的是理论,实际情况肯定比这个复杂。微博在春节的时候做许多活动,必须保障系统稳定,理论上你只要定义容量和流量就可以。但实际远远不行,为什么?有技术的因素,有人为的因素,因为不同的开发定义的流量和容量指标有主观性,很难全局量化标准,所以真正流量来了以后,你预先评估的系统瓶颈往往不正确。实际中我们在春节前主要采取了三个措施:第一,最简单的就是有降 级 的 预 案,流量超过系统容量后,先把哪些功能砍掉,需要有明确的优先级 。第二个, 线上全链路压测,就是把现在的流量放大到我们平常流量的五倍甚至十倍(比如下线一半的服务器,缩容而不是扩容),看看系统瓶颈最先发生在哪里。我们之前有一些例子,推测系统数据库会先出现瓶颈,但是实测发现是前端的程序先遇到瓶颈。第三,搭建在线 Docker 集群 , 所有业务共享备用的 Docker集群资源,这样可以极大的避免每个业务都预留资源,但是实际上流量没有增长造成的浪费。 总结 接下来说的是如何不停的学习和提升,这里以Java语言为例,首先, 一定要 理解 JAVA;第二步,JAVA完了以后,一定要 理 解 JVM;其次,还要 理解 操作系统;再次还是要了解一下 Design Pattern,这将告诉你怎么把过去的经验抽象沉淀供将来借鉴;还要学习 TCP/IP、 分布式系 统、数据结构和算法。

hiekay 2019-12-02 01:39:25 0 浏览量 回答数 0

问题

Web测试方法

技术小菜鸟 2019-12-01 21:41:32 7022 浏览量 回答数 1

回答

微服务 (MicroServices) 架构是当前互联网业界的一个技术热点,圈里有不少同行朋友当前有计划在各自公司开展微服务化体系建设,他们都有相同的疑问:一个微服务架构有哪些技术关注点 (technical concerns)?需要哪些基础框架或组件来支持微服务架构?这些框架或组件该如何选型?笔者之前在两家大型互联网公司参与和主导过大型服务化体系和框架建设,同时在这块也投入了很多时间去学习和研究,有一些经验和学习心得,可以和大家一起分享。 服务注册、发现、负载均衡和健康检查和单块 (Monolithic) 架构不同,微服务架构是由一系列职责单一的细粒度服务构成的分布式网状结构,服务之间通过轻量机制进行通信,这时候必然引入一个服务注册发现问题,也就是说服务提供方要注册通告服务地址,服务的调用方要能发现目标服务,同时服务提供方一般以集群方式提供服务,也就引入了负载均衡和健康检查问题。根据负载均衡 LB 所在位置的不同,目前主要的服务注册、发现和负载均衡方案有三种: 第一种是集中式 LB 方案,如下图 Fig 1,在服务消费者和服务提供者之间有一个独立的 LB,LB 通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy 等实现。LB 上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向 LB 发起请求,由 LB 以某种策略(比如 Round-Robin)做负载均衡后将请求转发到目标服务。LB 一般具备健康检查能力,能自动摘除不健康的服务实例。服务消费方如何发现 LB 呢?通常的做法是通过 DNS,运维人员为服务配置一个 DNS 域名,这个域名指向 LB。 Fig 1, 集中式 LB 方案 集中式 LB 方案实现简单,在 LB 上也容易做集中式的访问控制,这一方案目前还是业界主流。集中式 LB 的主要问题是单点问题,所有服务调用流量都经过 LB,当服务数量和调用量大的时候,LB 容易成为瓶颈,且一旦 LB 发生故障对整个系统的影响是灾难性的。另外,LB 在服务消费方和服务提供方之间增加了一跳 (hop),有一定性能开销。 第二种是进程内 LB 方案,针对集中式 LB 的不足,进程内 LB 方案将 LB 的功能以库的形式集成到服务消费方进程里头,该方案也被称为软负载 (Soft Load Balancing) 或者客户端负载方案,下图 Fig 2 展示了这种方案的工作原理。这一方案需要一个服务注册表 (Service Registry) 配合支持服务自注册和自发现,服务提供方启动时,首先将服务地址注册到服务注册表(同时定期报心跳到服务注册表以表明服务的存活状态,相当于健康检查),服务消费方要访问某个服务时,它通过内置的 LB 组件向服务注册表查询(同时缓存并定期刷新)目标服务地址列表,然后以某种负载均衡策略选择一个目标服务地址,最后向目标服务发起请求。这一方案对服务注册表的可用性 (Availability) 要求很高,一般采用能满足高可用分布式一致的组件(例如 Zookeeper, Consul, Etcd 等)来实现。 Fig 2, 进程内 LB 方案 进程内 LB 方案是一种分布式方案,LB 和服务发现能力被分散到每一个服务消费者的进程内部,同时服务消费方和服务提供方之间是直接调用,没有额外开销,性能比较好。但是,该方案以客户库 (Client Library) 的方式集成到服务调用方进程里头,如果企业内有多种不同的语言栈,就要配合开发多种不同的客户端,有一定的研发和维护成本。另外,一旦客户端跟随服务调用方发布到生产环境中,后续如果要对客户库进行升级,势必要求服务调用方修改代码并重新发布,所以该方案的升级推广有不小的阻力。 进程内 LB 的案例是 Netflix 的开源服务框架,对应的组件分别是:Eureka 服务注册表,Karyon 服务端框架支持服务自注册和健康检查,Ribbon 客户端框架支持服务自发现和软路由。另外,阿里开源的服务框架 Dubbo 也是采用类似机制。 第三种是主机独立 LB 进程方案,该方案是针对第二种方案的不足而提出的一种折中方案,原理和第二种方案基本类似,不同之处是,他将 LB 和服务发现功能从进程内移出来,变成主机上的一个独立进程,主机上的一个或者多个服务要访问目标服务时,他们都通过同一主机上的独立 LB 进程做服务发现和负载均衡,见下图 Fig 3。 Fig 3 主机独立 LB 进程方案 该方案也是一种分布式方案,没有单点问题,一个 LB 进程挂了只影响该主机上的服务调用方,服务调用方和 LB 之间是进程内调用,性能好,同时,该方案还简化了服务调用方,不需要为不同语言开发客户库,LB 的升级不需要服务调用方改代码。该方案的不足是部署较复杂,环节多,出错调试排查问题不方便。 该方案的典型案例是 Airbnb 的 SmartStack 服务发现框架,对应组件分别是:Zookeeper 作为服务注册表,Nerve 独立进程负责服务注册和健康检查,Synapse/HAproxy 独立进程负责服务发现和负载均衡。Google 最新推出的基于容器的 PaaS 平台 Kubernetes,其内部服务发现采用类似的机制。 服务前端路由微服务除了内部相互之间调用和通信之外,最终要以某种方式暴露出去,才能让外界系统(例如客户的浏览器、移动设备等等)访问到,这就涉及服务的前端路由,对应的组件是服务网关 (Service Gateway),见图 Fig 4,网关是连接企业内部和外部系统的一道门,有如下关键作用: 服务反向路由,网关要负责将外部请求反向路由到内部具体的微服务,这样虽然企业内部是复杂的分布式微服务结构,但是外部系统从网关上看到的就像是一个统一的完整服务,网关屏蔽了后台服务的复杂性,同时也屏蔽了后台服务的升级和变化。安全认证和防爬虫,所有外部请求必须经过网关,网关可以集中对访问进行安全控制,比如用户认证和授权,同时还可以分析访问模式实现防爬虫功能,网关是连接企业内外系统的安全之门。限流和容错,在流量高峰期,网关可以限制流量,保护后台系统不被大流量冲垮,在内部系统出现故障时,网关可以集中做容错,保持外部良好的用户体验。监控,网关可以集中监控访问量,调用延迟,错误计数和访问模式,为后端的性能优化或者扩容提供数据支持。日志,网关可以收集所有的访问日志,进入后台系统做进一步分析。 Fig 4, 服务网关 除以上基本能力外,网关还可以实现线上引流,线上压测,线上调试 (Surgical debugging),金丝雀测试 (Canary Testing),数据中心双活 (Active-Active HA) 等高级功能。 网关通常工作在 7 层,有一定的计算逻辑,一般以集群方式部署,前置 LB 进行负载均衡。 开源的网关组件有 Netflix 的 Zuul,特点是动态可热部署的过滤器 (filter) 机制,其它如 HAproxy,Nginx 等都可以扩展作为网关使用。 在介绍过服务注册表和网关等组件之后,我们可以通过一个简化的微服务架构图 (Fig 5) 来更加直观地展示整个微服务体系内的服务注册发现和路由机制,该图假定采用进程内 LB 服务发现和负载均衡机制。在下图 Fig 5 的微服务架构中,服务简化为两层,后端通用服务(也称中间层服务 Middle Tier Service)和前端服务(也称边缘服务 Edge Service,前端服务的作用是对后端服务做必要的聚合和裁剪后暴露给外部不同的设备,如 PC,Pad 或者 Phone)。后端服务启动时会将地址信息注册到服务注册表,前端服务通过查询服务注册表就可以发现然后调用后端服务;前端服务启动时也会将地址信息注册到服务注册表,这样网关通过查询服务注册表就可以将请求路由到目标前端服务,这样整个微服务体系的服务自注册自发现和软路由就通过服务注册表和网关串联起来了。如果以面向对象设计模式的视角来看,网关类似 Proxy 代理或者 Façade 门面模式,而服务注册表和服务自注册自发现类似 IoC 依赖注入模式,微服务可以理解为基于网关代理和注册表 IoC 构建的分布式系统。 Fig 5, 简化的微服务架构图 服务容错当企业微服务化以后,服务之间会有错综复杂的依赖关系,例如,一个前端请求一般会依赖于多个后端服务,技术上称为 1 -> N 扇出 (见图 Fig 6)。在实际生产环境中,服务往往不是百分百可靠,服务可能会出错或者产生延迟,如果一个应用不能对其依赖的故障进行容错和隔离,那么该应用本身就处在被拖垮的风险中。在一个高流量的网站中,某个单一后端一旦发生延迟,可能在数秒内导致所有应用资源 (线程,队列等) 被耗尽,造成所谓的雪崩效应 (Cascading Failure,见图 Fig 7),严重时可致整个网站瘫痪。 Fig 6, 服务依赖 Fig 7, 高峰期单个服务延迟致雪崩效应 经过多年的探索和实践,业界在分布式服务容错一块探索出了一套有效的容错模式和最佳实践,主要包括: Fig 8, 弹性电路保护状态图 电路熔断器模式 (Circuit Breaker Patten), 该模式的原理类似于家里的电路熔断器,如果家里的电路发生短路,熔断器能够主动熔断电路,以避免灾难性损失。在分布式系统中应用电路熔断器模式后,当目标服务慢或者大量超时,调用方能够主动熔断,以防止服务被进一步拖垮;如果情况又好转了,电路又能自动恢复,这就是所谓的弹性容错,系统有自恢复能力。下图 Fig 8 是一个典型的具备弹性恢复能力的电路保护器状态图,正常状态下,电路处于关闭状态 (Closed),如果调用持续出错或者超时,电路被打开进入熔断状态 (Open),后续一段时间内的所有调用都会被拒绝 (Fail Fast),一段时间以后,保护器会尝试进入半熔断状态 (Half-Open),允许少量请求进来尝试,如果调用仍然失败,则回到熔断状态,如果调用成功,则回到电路闭合状态。舱壁隔离模式 (Bulkhead Isolation Pattern),顾名思义,该模式像舱壁一样对资源或失败单元进行隔离,如果一个船舱破了进水,只损失一个船舱,其它船舱可以不受影响 。线程隔离 (Thread Isolation) 就是舱壁隔离模式的一个例子,假定一个应用程序 A 调用了 Svc1/Svc2/Svc3 三个服务,且部署 A 的容器一共有 120 个工作线程,采用线程隔离机制,可以给对 Svc1/Svc2/Svc3 的调用各分配 40 个线程,当 Svc2 慢了,给 Svc2 分配的 40 个线程因慢而阻塞并最终耗尽,线程隔离可以保证给 Svc1/Svc3 分配的 80 个线程可以不受影响,如果没有这种隔离机制,当 Svc2 慢的时候,120 个工作线程会很快全部被对 Svc2 的调用吃光,整个应用程序会全部慢下来。限流 (Rate Limiting/Load Shedder),服务总有容量限制,没有限流机制的服务很容易在突发流量 (秒杀,双十一) 时被冲垮。限流通常指对服务限定并发访问量,比如单位时间只允许 100 个并发调用,对超过这个限制的请求要拒绝并回退。回退 (fallback),在熔断或者限流发生的时候,应用程序的后续处理逻辑是什么?回退是系统的弹性恢复能力,常见的处理策略有,直接抛出异常,也称快速失败 (Fail Fast),也可以返回空值或缺省值,还可以返回备份数据,如果主服务熔断了,可以从备份服务获取数据。Netflix 将上述容错模式和最佳实践集成到一个称为 Hystrix 的开源组件中,凡是需要容错的依赖点 (服务,缓存,数据库访问等),开发人员只需要将调用封装在 Hystrix Command 里头,则相关调用就自动置于 Hystrix 的弹性容错保护之下。Hystrix 组件已经在 Netflix 经过多年运维验证,是 Netflix 微服务平台稳定性和弹性的基石,正逐渐被社区接受为标准容错组件。 服务框架微服务化以后,为了让业务开发人员专注于业务逻辑实现,避免冗余和重复劳动,规范研发提升效率,必然要将一些公共关注点推到框架层面。服务框架 (Fig 9) 主要封装公共关注点逻辑,包括: Fig 9, 服务框架 服务注册、发现、负载均衡和健康检查,假定采用进程内 LB 方案,那么服务自注册一般统一做在服务器端框架中,健康检查逻辑由具体业务服务定制,框架层提供调用健康检查逻辑的机制,服务发现和负载均衡则集成在服务客户端框架中。监控日志,框架一方面要记录重要的框架层日志、metrics 和调用链数据,还要将日志、metrics 等接口暴露出来,让业务层能根据需要记录业务日志数据。在运行环境中,所有日志数据一般集中落地到企业后台日志系统,做进一步分析和处理。REST/RPC 和序列化,框架层要支持将业务逻辑以 HTTP/REST 或者 RPC 方式暴露出来,HTTP/REST 是当前主流 API 暴露方式,在性能要求高的场合则可采用 Binary/RPC 方式。针对当前多样化的设备类型 (浏览器、普通 PC、无线设备等),框架层要支持可定制的序列化机制,例如,对浏览器,框架支持输出 Ajax 友好的 JSON 消息格式,而对无线设备上的 Native App,框架支持输出性能高的 Binary 消息格式。配置,除了支持普通配置文件方式的配置,框架层还可集成动态运行时配置,能够在运行时针对不同环境动态调整服务的参数和配置。限流和容错,框架集成限流容错组件,能够在运行时自动限流和容错,保护服务,如果进一步和动态配置相结合,还可以实现动态限流和熔断。管理接口,框架集成管理接口,一方面可以在线查看框架和服务内部状态,同时还可以动态调整内部状态,对调试、监控和管理能提供快速反馈。Spring Boot 微框架的 Actuator 模块就是一个强大的管理接口。统一错误处理,对于框架层和服务的内部异常,如果框架层能够统一处理并记录日志,对服务监控和快速问题定位有很大帮助。安全,安全和访问控制逻辑可以在框架层统一进行封装,可做成插件形式,具体业务服务根据需要加载相关安全插件。文档自动生成,文档的书写和同步一直是一个痛点,框架层如果能支持文档的自动生成和同步,会给使用 API 的开发和测试人员带来极大便利。Swagger 是一种流行 Restful API 的文档方案。当前业界比较成熟的微服务框架有 Netflix 的 Karyon/Ribbon,Spring 的 Spring Boot/Cloud,阿里的 Dubbo 等。 运行期配置管理服务一般有很多依赖配置,例如访问数据库有连接字符串配置,连接池大小和连接超时配置,这些配置在不同环境 (开发 / 测试 / 生产) 一般不同,比如生产环境需要配连接池,而开发测试环境可能不配,另外有些参数配置在运行期可能还要动态调整,例如,运行时根据流量状况动态调整限流和熔断阀值。目前比较常见的做法是搭建一个运行时配置中心支持微服务的动态配置,简化架构如下图 (Fig 10): Fig 10, 服务配置中心 动态配置存放在集中的配置服务器上,用户通过管理界面配置和调整服务配置,具体服务通过定期拉 (Scheduled Pull) 的方式或者服务器推 (Server-side Push) 的方式更新动态配置,拉方式比较可靠,但会有延迟同时有无效网络开销 (假设配置不常更新),服务器推方式能及时更新配置,但是实现较复杂,一般在服务和配置服务器之间要建立长连接。配置中心还要解决配置的版本控制和审计问题,对于大规模服务化环境,配置中心还要考虑分布式和高可用问题。 配置中心比较成熟的开源方案有百度的 Disconf,360 的 QConf,Spring 的 Cloud Config 和阿里的 Diamond 等。 Netflix 的微服务框架Netflix 是一家成功实践微服务架构的互联网公司,几年前,Netflix 就把它的几乎整个微服务框架栈开源贡献给了社区,这些框架和组件包括: Eureka: 服务注册发现框架Zuul: 服务网关Karyon: 服务端框架Ribbon: 客户端框架Hystrix: 服务容错组件Archaius: 服务配置组件Servo: Metrics 组件Blitz4j: 日志组件下图 Fig 11 展示了基于这些组件构建的一个微服务框架体系,来自 recipes-rss。 Fig 11, 基于 Netflix 开源组件的微服务框架 Netflix 的开源框架组件已经在 Netflix 的大规模分布式微服务环境中经过多年的生产实战验证,正逐步被社区接受为构造微服务框架的标准组件。Pivotal 去年推出的 Spring Cloud 开源产品,主要是基于对 Netflix 开源组件的进一步封装,方便 Spring 开发人员构建微服务基础框架。对于一些打算构建微服务框架体系的公司来说,充分利用或参考借鉴 Netflix 的开源微服务组件 (或 Spring Cloud),在此基础上进行必要的企业定制,无疑是通向微服务架构的捷径。 原文地址:https://www.infoq.cn/article/basis-frameworkto-implement-micro-service#anch130564%20%EF%BC%8C

auto_answer 2019-12-02 01:55:22 0 浏览量 回答数 0

问题

SaaS模式云数据仓库MaxCompute 百问百答合集(持续更新20200921)

亢海鹏 2020-05-29 15:10:00 19050 浏览量 回答数 5

回答

01「思维陷阱」是一个人职场平庸的根本原因 有没有人想过:为什么有些人在职场显得能力特别差? 我们生活在一个容易让人焦虑的时代,每天都需要主动或者被动地接受大量的信息,但少有人清醒地知道,这些信息悄悄改变了我们的“思维方式”乃至“行为”,引导我们走进陷阱。 如果你不能意识到,你可能正在被“思维陷阱”拖入平庸和焦虑的痛苦中。 为了方便理解,我下面列出三种最常见的陷入“思维陷阱”的人,对照看看自己是不是: 热衷快餐知识,却不能清醒知道自己无知的人 习惯什么都“靠自己”的人 无法一眼看透事物发展背后本质的人 **1. 热衷快餐知识 ** 却不能清醒知道自己无知的人 伴随着知识付费的崛起,近几年出现了大量热衷快餐知识的人_他们是朋友圈的“概念狂人”,对权威、意见领袖的观点非常追捧,关于最新的话题他总能发表看法,他们热衷于走捷径,转发的文章总是散发着贩卖焦虑的气味。 但如果与他们深入交流,你会发现:除了这些二手的快餐知识,他们对常识和经典无知的可怕。 这些人最大的特点是不知道自己的无知——认为自己脑子中的想法是什么样,世界就是什么样。这种人在职场有一个很难缠的习惯:很喜欢先入为主一个自己坚持的观点,然后再围绕这个观点去寻找支持论据。 如果这种人有较高的执行力,那就太可怕了——因为在他们很努力地将片面的理解付诸行动时,你根本无法说服他,一切都要等他让所有人都撞得头破血流停下来才能进行调整。 **2. 习惯 ** 什么都“靠自己”的人 如果一个人看多了鸡汤文里“什么都不如自己可靠”的口号,或者片面理解了近几年常说的“为结果负责”这句话,那他就会走入“靠自己”的思维陷阱。 这些人最大的特点就是害怕麻烦别人,害怕拒绝——认为目前事物无法圆满完成的原因,主要是自身实力或资源还不够,所以会一味地增强自身资源以期望达到目标。 他们既不能看到别人那里多余的可协作资源,也不能将自己的资源为别人所用。 因为害怕暴露出错,他们也不擅长分享和求助。 他们会觉得自己深刻理解了“责任”的意义,但是却总是感到每天的工作压力山大,那些习惯在办公室里加班到凌晨但效率低下的员工往往是这种人。 **3. 无法一眼看透事物发展背后矛盾本质的人 ** 《教父》最有名的一句话是“花半秒钟就看透事物本质的人,和一生都看不清事物本质的人,注定是截然不同的命运。” 那什么是“事物的本质”呢? 其实就是位于事物发展中底层的矛盾。 如果一个人看事物或者解决工作难题的时候,没有思考背后的矛盾和规律的习惯,就容易流于表面,他们可能洞察力不错,比起一般人能关注那些细节,但是却缺乏全局观,容易纠结在自己的小世界里。 注意:没有日常观察思考“事物发展背后的矛盾”习惯的人,注定无法成长为团队的领导者! 在职场,他们是需要反复指导和争论,耗费团队沟通成本的下属,在解决问题时,他们是无法快速清晰找到问题抓手的那群人;在生活中,他们往往又会陷入“拎不清”或“选择困难”的麻烦中。 02 那些互联网大神 是如何跳出“思维陷阱”的? “思维陷阱”就藏在人性的弱点中,它是如此可怕和不易察觉,我们必须保持一些日常思考习惯来对抗它对我们的影响。 也许你能从下面三位阿里巴巴高管身上拥有的特质中找到答案,这些习惯帮助他们克服“思维陷阱”在中国最复杂的商业经济体——阿里巴巴中取得了事业上的巨大成就。 他们是那些经历过绝望后谷底反弹的人,那些长期默默坚持而又一鸣惊人的人,那些在危急关头敢于独自按下刹车键的人,他们分别是钉钉创始人无招、盒马鲜生创始人侯毅,以及现在的淘宝天猫总裁蒋凡。 **1. 钉钉创始人无招 ** 抛下已知去“观察”外界的习惯 “无招”是花名,如果结合他在阿里的经历看,会发现很有意思。 钉钉创始人无招 2014年,阿里经历了强推社交产品“来往”的巨大挫折;在智能手机全国开始普及的年代,因为社交用户基数大,而且极度高频的入口级特性,社交产品所能带来的安全感是各大互联网厂商都极度渴望的,所以你可以理解为什么马化腾会把微信横空出世称为:抢到第一张移动互联网船票。 而陈航和他所在的团队,就是试图通过挑战微信,为阿里赢得安全感的一群人。 用再造一个“微信”来挑战微信,结果就是无招需要和团队把一场惨痛的失败消化下来。 但有没有人想过:这样的严重挫败陷入的低谷,对一个产品型的团队领导者也许是一件好事——因为绝望会让一个人抛弃原有的脑子里对世界所有的理解,进入一种彻底放空和内省状态,这时候才能静下心来观察和阅读世界真正的需要。 这与悟道的逻辑不谋而合。 作为一个产品经理可能会反思:任何大而广的东西一定有弱点,如果说微信的社交面是一条横线,需要观察寻找的,是哪里可以诞生一条尚未挖掘的纵线。 那么这条纵线是什么呢? 静心向内看就会有答案,那就是阿里生态圈的万千小B企业。 如果你进入用户的心中去“观察”他们的想法,你就会用心眼看到后面的答案。 之后被外界评价“反人性”的钉钉迅速破圈微信获得了成功,而鹅厂主打“温度”的企业微信却一直不温不火,这个现象背后原因是什么? 很多人认为是因为钉钉抓住了老板的强压执行力需求,自上而下地推动市场,所以在微信办公的大环境下撕开了一个缺口。还有人同时认为无招是个冷酷的人。 但我现在却不这样认为。 在仔细阅读和研究了关于钉钉2015年来,所有无招在公开场合的发言和对钉钉产品的理解后,我认为他是国内少有的具备高度同理心的产品经理型CEO之一。 他身上有一种放下固有认知,虚心“观察”用户内心所需的能力,而且这几乎融入了他和团队的日常习惯中。 可能连使用者自己都不知道,钉钉的成功最深处,是在碎片化办公的大环境下,人性中饱含的对深度工作专注和效率的追求。而在这一点上,无论是老板还是员工,只要他还算是 “想做事的人” 那就是共通的! 人们只会说自己要一匹更快的马,但亨利福特却能观察到人心深处对速度的追求,为人们造出汽车。 “观察”的不是表面,而应该是人的内心! 在这个状态中,最重要的是要保持不带任何预设立场的“空”,不先入为主,不画地为牢,带着无知观察世界。 你不能带着“已知”去看待市场;不能孤立地,刻板地去读那些所谓的“大数据”,也不能光靠人云亦云来判断用户真正的需求,而要用“无知”的心态去接近和观察用户——那些一个个自然人的情绪和需要,以人为本。 不然,就会像百度沉迷于搜索引擎的修补,放出了头条;腾讯放弃了对用户工作外时间使用的的观察,做大了抖音。 如果他们的产品经理愿意走出北上广高大上的写字楼,走到他们真正需要服务的“群众”中去,结合数据和实践,也许就会“观察”到——哦~原来世界不是自己坐在角落里想象的那样。 钉钉所有的员工,入职后第一课就是被要求放下已知,带着空杯进入那些小B企业中,同工同吃,“观察”和阅读用户内心真正的需要。 “无”招胜有招——《笑傲江湖》里风清扬传给令狐冲的第一句话。 **2. 盒马鲜生创始人侯毅 ** 保持“关联性”思考的习惯 说完钉钉的无招,我们再看看盒马的侯毅。 盒马鲜生创始人侯毅 侯毅这个人很有意思,因为他最早是刘强东的“兄弟”,在京东长期希望推动一个类似盒马的前瞻O2O项目,无奈一直没有人关注;最后被逍遥子识才,多次劝说后,决定加入阿里,盒马鲜生是这么来的(这里不得不说:老逍简直比老萧还厉害)。 盒马鲜生是带火了“新零售”这个概念的明星企业,但很多人其实不懂“新零售”是什么。 所谓新零售的准确定义,其实就是在各种资源的关联和协同组合中,寻求一种能大大节约成本,提高价值的新组合。 为什么代表人物会是侯毅? 你可以理解成:因为长年专注在线下线上相结合的领域,侯毅的脑子有了一个叫“资源相互联系”的魔方,每天他都需要转动几次,去寻找数个变量组合资源中,无限接近“提高价值降低成本”的最优解。 所以这样看盒马和侯毅,你就可以突然看懂了:为什么可以推出“盒区房”这种以小博大的品牌亮点,通过捆绑房地产这个敏感话题,达到巨大宣传效果;以及明白为什么在今年的艰难时期,盒马能够快速反应,第一个推出了大显身手的“共享员工”模式了。 盒马的品牌是围绕着社区服务来的,线下线上配合的打法中,作为领导者的侯毅永远不能孤立地去思考,如果只想着依靠自己的力量去发展,那就坏事了。 保持日常的关联性思考,也有助于让一般人看竞争时,不陷入二元对立的表面理解。 用“关联性”的思维来理解阿里的战略,你会发现:任何与阿里展开竞争的企业,他们需要面对的是整个的阿里军团。 比如美团面对的是饿了么和口碑吗?那么盒马呢?大润发呢?银泰呢?支付宝呢?阿里云呢?天猫超市呢? 所以作为普通人,你可以学到的是永远不要只想着只用自己的资源和能力去做事。 一定要懂得资源之间的“关联性”,不要怕麻烦别人,也许你也能给别人创造价值呢?所以,你也可以在大脑中培养一个“关联性”思考事物的魔方。 **3. 淘宝天猫总裁蒋凡 ** 思索事物发展背后矛盾的习惯 当宣布蒋凡挑大梁的时候,很多人会问:为什么张勇和马云会选择一个少壮派? 淘宝天猫总裁蒋凡 也许张勇最能理解蒋凡:因为他们都是那种“在关键时刻孤独地扮演过‘扳道工’角色的人”——无论当时对他们来说,自己在不在最重要的位置上。 在蒋凡身上,有着外界所说的“一眼看穿底层逻辑”的能力;也是当下信息爆炸的时代,一种透过乱七八糟的消息迷雾,看到复杂事物中最简单的常识的能力。 这种能力,就是要看透推动事物发展背后的矛盾。 一个外表复杂的事物,它的本质其实是常识,就像新闻联播里每天在说的“当下主要矛盾已经转化为人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾”。 到底什么是“消费升级”? 必须要用矛盾的观点看: 我们这些五环内白领在双11抢不到戴森吸尘器的不是真正的主要矛盾,你看不到的地方,“国内的大多数”的小镇青年想买一件耐克配国潮,而自己所处的城镇既没有CBD和没有大商场,下班时间甚至都不知道怎么打发——这才是主要矛盾。 去拼多多拼个9块9的手纸,被五环内用户嘲讽为“消费降级”,可你要知道拼多多的手纸不是为你准备的,是为广大“中国的大多数”准备的——这,才是真正的消费升级! 但在那个年代,并不是所有人都能认清主要矛盾。 当时即使在阿里内部,长年的竞争也让一部分人陷入了思维陷阱,认为京东是天猫最大的追赶者。 那时候也有人知道小镇青年的重要性,可是当时大家的理解还停留在跑到农村去刷墙。 拼多多为什么能够在阿里眼皮下迅速崛起呢!? 如果说是把握了下沉市场还是流于表面,你用矛盾的观点看本质: 第一点,2015~2017年间,大量阿里生态内的小小B端的角色,如底层商家、淘客、羊毛党因为阿里战略调整,对外发生了外溢,这些互联网游牧民走到哪,哪里就形成了新的细小供应链——这些人离开阿里要吃饭啊,这是最主要矛盾。 第二点,低价智能机和微信支付相结合,带来了小镇青年整体电商用户盘子扩大——这些人的日常时间要怎么打发,身边可能连个高级商场都没有,这是次主要矛盾。 这些东西,身处五环内的你在那个年代里,光看数据是不会马上发现的,只有靠细微的洞察才能感知到: 快递小哥的包裹里是不是开始有了别的平台的商品? 老家父母亲戚的朋友圈,是不是很多东西变了? 地方台的的综艺节目里面,广告赞助商是不是出现了不认识的牌子?(可惜很多北上广人不看电视) 那些像游牧民族一样的羊毛党,被你屏蔽朋友圈的微商妈妈又在忙什么? 透过现象看本质,拼多多就是抓住了这些要素悄悄长大的。 蒋凡上任后面对这个需要被再次重视的市场,是怎么抓“主要矛盾”的? 首先是重新平衡天猫、淘宝的重心,平衡“大多数用户”和B端之间的消费和供给——这不是拿捏尺度的平面问题,而是一个对顶层架构重新分析、设计的立体问题。 选用模式更适合五环外市场的聚划算做渠道下沉,向低线城市渗透、并且覆盖全年龄段,尽快封堵挤压拼多多的继续扩张 发力短视频、抖音、网红,直播这些内容场景,再通过大数据精准推送,通过占领用户时间,赢得市场,让B端人群比如主播网红下沉去填补C端的使用手机时间。 带领品牌商家下沉。之前很多品牌集中在打一二线市场,原有的渠道网络对于下沉市场是滞后的。但随着阿里的强势运营,优质的中部商家做敲门砖品牌迅速得以下沉——提前占住山头,让对手仰攻。 随着最近淘宝特价推出,结合淘宝、聚划算、天猫、淘小铺全面出击,阿里军团的刀枪剑戟朝向了同一个方向:B端搭建架构,C端占领时间,蒋凡完成了对北上广人群和下沉市场的一记全垒打! 目前我们还不知道拼多多的黄铮会如何接下蒋凡这一记硬球——因为占据了品牌优势,拼多多对阿里会长期处于一种“仰攻”状态。 这就难受了,毕竟狮子猛回头扑向一只咬自己尾巴的鬣狗很容易,但鬣狗要一口吃下一只狮子却很难。 03 你该如何训练“三种思维” 获得职场成功! 写到这里,你也许会说:似乎这些思维习惯也没有多么的深奥啊?这些难道不是常识吗? 你说的没错,但那些高手恰恰是将尝试变成了一种日常习惯去反复练习——因为“思维陷阱”会无时无刻存在,人必须通过训练保持觉知才行,所以我们需要复习一下这三种思维习惯: **1. 如何训练 ** 带着无知“观察”的思维习惯? 日常中,很多人会觉得自己的情商和同理心不足,不知道对方心里想什么,要怎么办? 这就可以先从“观察”自己的内心的练习开始。 练习“观察”的方式: 保持空无,抛下预设 ▼ 用客体视角觉察出自己内心与行为的关系 ▼ 再试着深入“阅读”他人内心与行为的关系 ▼ 结合规律,分析出外界真实的需要 ▼ 在生活与工作中做出策略调整或反应 ▼ 保持练习,达到情商和洞察力的提高 如果观察熟练,可以用这个方法去看世界和他人的情绪,进而搞明白对方真正的需要,即使是对方没有清晰表达出来的。 打个比方:春节时期,网上那种对于钟南山敬佩和对湖北一些事情愤怒的两极声音,如果你用心观察,你会发现他们的底层其实是同一种情绪“恐惧”——恐惧引发了行为,无论是愤怒还是寻找安全感。 再打个比方:如你单位中有一个人,别人都说这个人是自私自利的小人;你通过“观察”发现,原来对方只是个内心缺乏安全感的可怜人,所以也就可以在职场打交道中理解和推测出对方的想法和行为,读出对方真正的内心需要。 做市场运营,产品经理,品牌定位,尤其需要这种“观察”他人内心真正需要的能力。 **2. 如何训练 ** 保持“关联性”思考的习惯? 如何培养“关联性”思维,在职场拿到资源,产生更好的协作? 练习“关联性”思维的方式: 抛开过去那种任何事都想着“自己干”的想法,问自己三个问题: 我现在要做的事情,有没有利他性? 可以不可以与他人形成合力? 最终取得的成果,能不能多方共享? 如果三个问题想清楚了没问题,那么不怕拒绝,厚着脸皮干就完了! 如果三个问题想清楚了没问题,那么不怕拒绝,厚着脸皮干就完了! 日常要留心,自己和他人身上,有哪些可以“做成事”的资源,这并不是要人学会自利,而是需要培养自己的协作性;自己的专业知识,钱,甚至体力,时间,人脉圈,都是能一起互相协作的资源。 除了人与人的资源关联性,还可以培养物与物相互跨界联系的能力。 比如在阿里,训练公关的新闻策划能力,就有一种称之为“两只试管法”的日常思考方法。 你可以想象成左手握一个产品试管,右手握一个情绪试管,然后两种试剂倒在了一起,产生神奇的化学反应。 比如: 盒马鲜生(线下的果蔬生鲜服务设施/一种都市快节奏生活方式)+ 房价(情绪饱满的高敏感民生话题)= 品牌概念:盒区房 进口水果 + 北上广的生活压力(情绪饱满的消费焦虑)= 热门话题:车厘子自由 “关联性”思维练习配合“观察”运用在策划和创意里,是不是非常有趣? **3. 如何训练 ** “看穿事物底层矛盾”的思维习惯? 看事物的底层逻辑,也同样需要上面的两种思维。 日常可以多读读经典,少接触如今的“时髦概念书”以免被先入为主污染,枕头边可以放一本《毛选》,其中《矛盾论》和《实践论》是精华。 日常遇到争议性的事情,不要着急下判断,也不要站队;就站在旁观者的角度,思考思考为什么双方会这么想,他们各自有哪些需要没有被满足? 渐渐地,在别人眼中,你成了一开口就可以直击问题本质的人。 等到熟练之后,再拿来看一个人群或者一片市场,思考和实践调研他们真正的供需中,有哪些地方是目前供需所不平衡的,在这样不平衡产生的痛点中,出现了什么替代方案? 以上就是我所分享的练习方法。 最后补充一点:如果有一件事你觉得一定会如此,那么保险起见尝试从相反的方向推论看有没有漏洞。 你还可以经常对外分享自己的心得和观点(我自己就在用这种方式保持二次学习和修正提炼),不要担心出错,通过理性的交流和思辨,通过他人的认知进行思辨和修正。 通过这种方式收获了解,你会发现:自己其实并不孤独。 参考: 《毛选》 《行为》罗伯特·M·萨波斯基 《智能的结构》霍华德·加德纳 《硬球》克里斯·马修斯 《合作的进化》罗伯特.阿克塞尔罗德 《笑傲江湖》金庸 作者:舒扬,笔名舍予兄(个人WX:shuyang9451)休养前担任阿里健康高级公关专家,目前是一名 长跑 和 行为心理学 爱好者,著有畅销书《共鸣》,一个喜欢深夜在朋友圈发长篇思考的人。事业目标是成为最好的公关,在这条路上将永远是一个学生。

剑曼红尘 2020-04-13 11:47:20 0 浏览量 回答数 0

回答

遍历一个 List 有哪些不同的方式?每种方法的实现原理是什么?Java 中 List 遍历的最佳实践是什么? 遍历方式有以下几种: for 循环遍历,基于计数器。在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后停止。 迭代器遍历,Iterator。Iterator 是面向对象的一个设计模式,目的是屏蔽不同数据集合的特点,统一遍历集合的接口。Java 在 Collections 中支持了 Iterator 模式。 foreach 循环遍历。foreach 内部也是采用了 Iterator 的方式实现,使用时不需要显式声明 Iterator 或计数器。优点是代码简洁,不易出错;缺点是只能做简单的遍历,不能在遍历过程中操作数据集合,例如删除、替换。 最佳实践:Java Collections 框架中提供了一个 RandomAccess 接口,用来标记 List 实现是否支持 Random Access。 如果一个数据集合实现了该接口,就意味着它支持 Random Access,按位置读取元素的平均时间复杂度为 O(1),如ArrayList。如果没有实现该接口,表示不支持 Random Access,如LinkedList。 推荐的做法就是,支持 Random Access 的列表可用 for 循环遍历,否则建议用 Iterator 或 foreach 遍历。 说一下 ArrayList 的优缺点 ArrayList的优点如下: ArrayList 底层以数组实现,是一种随机访问模式。ArrayList 实现了 RandomAccess 接口,因此查找的时候非常快。ArrayList 在顺序添加一个元素的时候非常方便。 ArrayList 的缺点如下: 删除元素的时候,需要做一次元素复制操作。如果要复制的元素很多,那么就会比较耗费性能。插入元素的时候,也需要做一次元素复制操作,缺点同上。 ArrayList 比较适合顺序添加、随机访问的场景。 如何实现数组和 List 之间的转换? 数组转 List:使用 Arrays. asList(array) 进行转换。List 转数组:使用 List 自带的 toArray() 方法。 代码示例: ArrayList 和 LinkedList 的区别是什么? 数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。内存空间占用:LinkedList 比 ArrayList 更占内存,因为 LinkedList 的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。线程安全:ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全; 综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。 补充:数据结构基础之双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 ArrayList 和 Vector 的区别是什么? 这两个类都实现了 List 接口(List 接口继承了 Collection 接口),他们都是有序集合 线程安全:Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非线程安全的。性能:ArrayList 在性能方面要优于 Vector。扩容:ArrayList 和 Vector 都会根据实际的需要动态的调整容量,只不过在 Vector 扩容每次会增加 1 倍,而 ArrayList 只会增加 50%。 Vector类的所有方法都是同步的。可以由两个线程安全地访问一个Vector对象、但是一个线程访问Vector的话代码要在同步操作上耗费大量的时间。 Arraylist不是同步的,所以在不需要保证线程安全时时建议使用Arraylist。 插入数据时,ArrayList、LinkedList、Vector谁速度较快?阐述 ArrayList、Vector、LinkedList 的存储性能和特性? ArrayList、LinkedList、Vector 底层的实现都是使用数组方式存储数据。数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。 Vector 中的方法由于加了 synchronized 修饰,因此 Vector 是线程安全容器,但性能上较ArrayList差。 LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但插入数据时只需要记录当前项的前后项即可,所以 LinkedList 插入速度较快。 多线程场景下如何使用 ArrayList? ArrayList 不是线程安全的,如果遇到多线程场景,可以通过 Collections 的 synchronizedList 方法将其转换成线程安全的容器后再使用。例如像下面这样: 为什么 ArrayList 的 elementData 加上 transient 修饰? ArrayList 中的数组定义如下: private transient Object[] elementData; 再看一下 ArrayList 的定义: public class ArrayList extends AbstractList implements List<E>, RandomAccess, Cloneable, java.io.Serializable 可以看到 ArrayList 实现了 Serializable 接口,这意味着 ArrayList 支持序列化。transient 的作用是说不希望 elementData 数组被序列化,重写了 writeObject 实现: 每次序列化时,先调用 defaultWriteObject() 方法序列化 ArrayList 中的非 transient 元素,然后遍历 elementData,只序列化已存入的元素,这样既加快了序列化的速度,又减小了序列化之后的文件大小。 List 和 Set 的区别 List , Set 都是继承自Collection 接口 List 特点:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个null元素,元素都有索引。常用的实现类有 ArrayList、LinkedList 和 Vector。 Set 特点:一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。Set 接口常用实现类是 HashSet、LinkedHashSet 以及 TreeSet。 另外 List 支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。 Set和List对比 Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。 List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变 Set接口 说一下 HashSet 的实现原理? HashSet 是基于 HashMap 实现的,HashSet的值存放于HashMap的key上,HashMap的value统一为PRESENT,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,HashSet 不允许重复的值。 HashSet如何检查重复?HashSet是如何保证数据不可重复的? 向HashSet 中add ()元素时,判断元素是否存在的依据,不仅要比较hash值,同时还要结合equles 方法比较。 HashSet 中的add ()方法会使用HashMap 的put()方法。 HashMap 的 key 是唯一的,由源码可以看出 HashSet 添加进去的值就是作为HashMap 的key,并且在HashMap中如果K/V相同时,会用新的V覆盖掉旧的V,然后返回旧的V。所以不会重复( HashMap 比较key是否相等是先比较hashcode 再比较equals )。 以下是HashSet 部分源码: hashCode()与equals()的相关规定: 如果两个对象相等,则hashcode一定也是相同的 两个对象相等,对两个equals方法返回true 两个对象有相同的hashcode值,它们也不一定是相等的 综上,equals方法被覆盖过,则hashCode方法也必须被覆盖 hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写hashCode(),则该class的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)。 ** ==与equals的区别** ==是判断两个变量或实例是不是指向同一个内存空间 equals是判断两个变量或实例所指向的内存空间的值是不是相同 ==是指对内存地址进行比较 equals()是对字符串的内容进行比较3.==指引用是否相同 equals()指的是值是否相同 HashSet与HashMap的区别 Queue BlockingQueue是什么? Java.util.concurrent.BlockingQueue是一个队列,在进行检索或移除一个元素的时候,它会等待队列变为非空;当在添加一个元素时,它会等待队列中的可用空间。BlockingQueue接口是Java集合框架的一部分,主要用于实现生产者-消费者模式。我们不需要担心等待生产者有可用的空间,或消费者有可用的对象,因为它都在BlockingQueue的实现类中被处理了。Java提供了集中BlockingQueue的实现,比如ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue,、SynchronousQueue等。 在 Queue 中 poll()和 remove()有什么区别? 相同点:都是返回第一个元素,并在队列中删除返回的对象。 不同点:如果没有元素 poll()会返回 null,而 remove()会直接抛出 NoSuchElementException 异常。 代码示例: Queue queue = new LinkedList (); queue. offer("string"); // add System. out. println(queue. poll()); System. out. println(queue. remove()); System. out. println(queue. size()); Map接口 说一下 HashMap 的实现原理? HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 HashMap的数据结构: 在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。 HashMap 基于 Hash 算法实现的 当我们往Hashmap中put元素时,利用key的hashCode重新hash计算出当前对象的元素在数组中的下标存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同,则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。理解了以上过程就不难明白HashMap是如何解决hash冲突的问题,核心就是使用了数组的存储方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比。 需要注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn) HashMap在JDK1.7和JDK1.8中有哪些不同?HashMap的底层实现 在Java中,保存数据有两种比较简单的数据结构:数组和链表。数组的特点是:寻址容易,插入和删除困难;链表的特点是:寻址困难,但插入和删除容易;所以我们将数组和链表结合在一起,发挥两者各自的优势,使用一种叫做拉链法的方式可以解决哈希冲突。 JDK1.8之前 JDK1.8之前采用的是拉链法。拉链法:将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可。 JDK1.8之后 相比于之前的版本,jdk1.8在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。 JDK1.7 VS JDK1.8 比较 JDK1.8主要解决或优化了一下问题: resize 扩容优化引入了红黑树,目的是避免单条链表过长而影响查询效率,红黑树算法请参考解决了多线程死循环问题,但仍是非线程安全的,多线程时可能会造成数据丢失问题。 HashMap的put方法的具体流程? 当我们put的时候,首先计算 key的hash值,这里调用了 hash方法,hash方法实际是让key.hashCode()与key.hashCode()>>>16进行异或操作,高16bit补0,一个数和0异或不变,所以 hash 函数大概的作用就是:高16bit不变,低16bit和高16bit做了一个异或,目的是减少碰撞。按照函数注释,因为bucket数组大小是2的幂,计算下标index = (table.length - 1) & hash,如果不做 hash 处理,相当于散列生效的只有几个低 bit 位,为了减少散列的碰撞,设计者综合考虑了速度、作用、质量之后,使用高16bit和低16bit异或来简单处理减少碰撞,而且JDK8中用了复杂度 O(logn)的树结构来提升碰撞下的性能。 putVal方法执行流程图 ①.判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容; ②.根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新建节点添加,转向⑥,如果table[i]不为空,转向③; ③.判断table[i]的首个元素是否和key一样,如果相同直接覆盖value,否则转向④,这里的相同指的是hashCode以及equals; ④.判断table[i] 是否为treeNode,即table[i] 是否是红黑树,如果是红黑树,则直接在树中插入键值对,否则转向⑤; ⑤.遍历table[i],判断链表长度是否大于8,大于8的话把链表转换为红黑树,在红黑树中执行插入操作,否则进行链表的插入操作;遍历过程中若发现key已经存在直接覆盖value即可; ⑥.插入成功后,判断实际存在的键值对数量size是否超多了最大容量threshold,如果超过,进行扩容。 HashMap的扩容操作是怎么实现的? ①.在jdk1.8中,resize方法是在hashmap中的键值对大于阀值时或者初始化时,就调用resize方法进行扩容; ②.每次扩展的时候,都是扩展2倍; ③.扩展后Node对象的位置要么在原位置,要么移动到原偏移量两倍的位置。 在putVal()中,我们看到在这个函数里面使用到了2次resize()方法,resize()方法表示的在进行第一次初始化时会对其进行扩容,或者当该数组的实际大小大于其临界值值(第一次为12),这个时候在扩容的同时也会伴随的桶上面的元素进行重新分发,这也是JDK1.8版本的一个优化的地方,在1.7中,扩容之后需要重新去计算其Hash值,根据Hash值对其进行分发,但在1.8版本中,则是根据在同一个桶的位置中进行判断(e.hash & oldCap)是否为0,重新进行hash分配后,该元素的位置要么停留在原始位置,要么移动到原始位置+增加的数组大小这个位置上 HashMap是怎么解决哈希冲突的? 答:在解决这个问题之前,我们首先需要知道什么是哈希冲突,而在了解哈希冲突之前我们还要知道什么是哈希才行; 什么是哈希? Hash,一般翻译为“散列”,也有直接音译为“哈希”的,这就是把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值(哈希值);这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 所有散列函数都有如下一个基本特性**:根据同一散列函数计算出的散列值如果不同,那么输入值肯定也不同。但是,根据同一散列函数计算出的散列值如果相同,输入值不一定相同**。 什么是哈希冲突? 当两个不同的输入值,根据同一散列函数计算出相同的散列值的现象,我们就把它叫做碰撞(哈希碰撞)。 HashMap的数据结构 在Java中,保存数据有两种比较简单的数据结构:数组和链表。数组的特点是:寻址容易,插入和删除困难;链表的特点是:寻址困难,但插入和删除容易;所以我们将数组和链表结合在一起,发挥两者各自的优势,使用一种叫做链地址法的方式可以解决哈希冲突: 这样我们就可以将拥有相同哈希值的对象组织成一个链表放在hash值所对应的bucket下,但相比于hashCode返回的int类型,我们HashMap初始的容量大小DEFAULT_INITIAL_CAPACITY = 1 << 4(即2的四次方16)要远小于int类型的范围,所以我们如果只是单纯的用hashCode取余来获取对应的bucket这将会大大增加哈希碰撞的概率,并且最坏情况下还会将HashMap变成一个单链表,所以我们还需要对hashCode作一定的优化 hash()函数 上面提到的问题,主要是因为如果使用hashCode取余,那么相当于参与运算的只有hashCode的低位,高位是没有起到任何作用的,所以我们的思路就是让hashCode取值出的高位也参与运算,进一步降低hash碰撞的概率,使得数据分布更平均,我们把这样的操作称为扰动,在JDK 1.8中的hash()函数如下: static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);// 与自己右移16位进行异或运算(高低位异或) } 这比在JDK 1.7中,更为简洁,相比在1.7中的4次位运算,5次异或运算(9次扰动),在1.8中,只进行了1次位运算和1次异或运算(2次扰动); JDK1.8新增红黑树 通过上面的链地址法(使用散列表)和扰动函数我们成功让我们的数据分布更平均,哈希碰撞减少,但是当我们的HashMap中存在大量数据时,加入我们某个bucket下对应的链表有n个元素,那么遍历时间复杂度就为O(n),为了针对这个问题,JDK1.8在HashMap中新增了红黑树的数据结构,进一步使得遍历复杂度降低至O(logn); 总结 简单总结一下HashMap是使用了哪些方法来有效解决哈希冲突的: 使用链地址法(使用散列表)来链接拥有相同hash值的数据;使用2次扰动函数(hash函数)来降低哈希冲突的概率,使得数据分布更平均;引入红黑树进一步降低遍历的时间复杂度,使得遍历更快; **能否使用任何类作为 Map 的 key? **可以使用任何类作为 Map 的 key,然而在使用之前,需要考虑以下几点: 如果类重写了 equals() 方法,也应该重写 hashCode() 方法。 类的所有实例需要遵循与 equals() 和 hashCode() 相关的规则。 如果一个类没有使用 equals(),不应该在 hashCode() 中使用它。 用户自定义 Key 类最佳实践是使之为不可变的,这样 hashCode() 值可以被缓存起来,拥有更好的性能。不可变的类也可以确保 hashCode() 和 equals() 在未来不会改变,这样就会解决与可变相关的问题了。 为什么HashMap中String、Integer这样的包装类适合作为K? 答:String、Integer等包装类的特性能够保证Hash值的不可更改性和计算准确性,能够有效的减少Hash碰撞的几率 都是final类型,即不可变性,保证key的不可更改性,不会存在获取hash值不同的情况 内部已重写了equals()、hashCode()等方法,遵守了HashMap内部的规范(不清楚可以去上面看看putValue的过程),不容易出现Hash值计算错误的情况; 如果使用Object作为HashMap的Key,应该怎么办呢? 答:重写hashCode()和equals()方法 重写hashCode()是因为需要计算存储数据的存储位置,需要注意不要试图从散列码计算中排除掉一个对象的关键部分来提高性能,这样虽然能更快但可能会导致更多的Hash碰撞; 重写equals()方法,需要遵守自反性、对称性、传递性、一致性以及对于任何非null的引用值x,x.equals(null)必须返回false的这几个特性,目的是为了保证key在哈希表中的唯一性; HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标 答:hashCode()方法返回的是int整数类型,其范围为-(2 ^ 31)~(2 ^ 31 - 1),约有40亿个映射空间,而HashMap的容量范围是在16(初始化默认值)~2 ^ 30,HashMap通常情况下是取不到最大值的,并且设备上也难以提供这么多的存储空间,从而导致通过hashCode()计算出的哈希值可能不在数组大小范围内,进而无法匹配存储位置; 那怎么解决呢? HashMap自己实现了自己的hash()方法,通过两次扰动使得它自己的哈希值高低位自行进行异或运算,降低哈希碰撞概率也使得数据分布更平均; 在保证数组长度为2的幂次方的时候,使用hash()运算之后的值与运算(&)(数组长度 - 1)来获取数组下标的方式进行存储,这样一来是比取余操作更加有效率,二来也是因为只有当数组长度为2的幂次方时,h&(length-1)才等价于h%length,三来解决了“哈希值与数组大小范围不匹配”的问题; HashMap 的长度为什么是2的幂次方 为了能让 HashMap 存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀,每个链表/红黑树长度大致相同。这个实现就是把数据存到哪个链表/红黑树中的算法。 这个算法应该如何设计呢? 我们首先可能会想到采用%取余的操作来实现。但是,重点来了:“取余(%)操作中如果除数是2的幂次则等价于与其除数减一的与(&)操作(也就是说 hash%length==hash&(length-1)的前提是 length 是2的 n 次方;)。” 并且 采用二进制位操作 &,相对于%能够提高运算效率,这就解释了 HashMap 的长度为什么是2的幂次方。 那为什么是两次扰动呢? 答:这样就是加大哈希值低位的随机性,使得分布更均匀,从而提高对应数组存储下标位置的随机性&均匀性,最终减少Hash冲突,两次就够了,已经达到了高位低位同时参与运算的目的; HashMap 与 HashTable 有什么区别? 线程安全: HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过 synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!); 效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它; 对Null key 和Null value的支持: HashMap 中,null 可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为 null。但是在 HashTable 中 put 进的键值只要有一个 null,直接抛NullPointerException。 **初始容量大小和每次扩充容量大小的不同 **: ①创建时如果不指定容量初始值,Hashtable 默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap 默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。②创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为2的幂次方大小。也就是说 HashMap 总是使用2的幂作为哈希表的大小,后面会介绍到为什么是2的幂次方。 底层数据结构: JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。 推荐使用:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使用,推荐在单线程环境下使用 HashMap 替代,如果需要多线程使用则用 ConcurrentHashMap 替代。 如何决定使用 HashMap 还是 TreeMap? 对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。 HashMap 和 ConcurrentHashMap 的区别 ConcurrentHashMap对整个桶数组进行了分割分段(Segment),然后在每一个分段上都用lock锁进行保护,相对于HashTable的synchronized锁的粒度更精细了一些,并发性能更好,而HashMap没有锁机制,不是线程安全的。(JDK1.8之后ConcurrentHashMap启用了一种全新的方式实现,利用CAS算法。) HashMap的键值对允许有null,但是ConCurrentHashMap都不允许。 ConcurrentHashMap 和 Hashtable 的区别? ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的方式上不同。 底层数据结构: JDK1.7的 ConcurrentHashMap 底层采用 分段的数组+链表 实现,JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。Hashtable 和 JDK1.8 之前的 HashMap 的底层数据结构类似都是采用 数组+链表 的形式,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的; 实现线程安全的方式(重要): ① 在JDK1.7的时候,ConcurrentHashMap(分段锁) 对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。(默认分配16个Segment,比Hashtable效率提高16倍。) 到了 JDK1.8 的时候已经摒弃了Segment的概念,而是直接用 Node 数组+链表+红黑树的数据结构来实现,并发控制使用 synchronized 和 CAS 来操作。(JDK1.6以后 对 synchronized锁做了很多优化) 整个看起来就像是优化过且线程安全的 HashMap,虽然在JDK1.8中还能看到 Segment 的数据结构,但是已经简化了属性,只是为了兼容旧版本;② Hashtable(同一把锁) :使用 synchronized 来保证线程安全,效率非常低下。当一个线程访问同步方法时,其他线程也访问同步方法,可能会进入阻塞或轮询状态,如使用 put 添加元素,另一个线程不能使用 put 添加元素,也不能使用 get,竞争会越来越激烈效率越低。 两者的对比图: HashTable: JDK1.7的ConcurrentHashMap: JDK1.8的ConcurrentHashMap(TreeBin: 红黑二叉树节点 Node: 链表节点): 答:ConcurrentHashMap 结合了 HashMap 和 HashTable 二者的优势。HashMap 没有考虑同步,HashTable 考虑了同步的问题。但是 HashTable 在每次同步执行时都要锁住整个结构。 ConcurrentHashMap 锁的方式是稍微细粒度的。 ConcurrentHashMap 底层具体实现知道吗?实现原理是什么? JDK1.7 首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。 在JDK1.7中,ConcurrentHashMap采用Segment + HashEntry的方式进行实现,结构如下: 一个 ConcurrentHashMap 里包含一个 Segment 数组。Segment 的结构和HashMap类似,是一种数组和链表结构,一个 Segment 包含一个 HashEntry 数组,每个 HashEntry 是一个链表结构的元素,每个 Segment 守护着一个HashEntry数组里的元素,当对 HashEntry 数组的数据进行修改时,必须首先获得对应的 Segment的锁。 该类包含两个静态内部类 HashEntry 和 Segment ;前者用来封装映射表的键值对,后者用来充当锁的角色;Segment 是一种可重入的锁 ReentrantLock,每个 Segment 守护一个HashEntry 数组里得元素,当对 HashEntry 数组的数据进行修改时,必须首先获得对应的 Segment 锁。 JDK1.8 在JDK1.8中,放弃了Segment臃肿的设计,取而代之的是采用Node + CAS + Synchronized来保证并发安全进行实现,synchronized只锁定当前链表或红黑二叉树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升N倍。 结构如下: 如果该节点是TreeBin类型的节点,说明是红黑树结构,则通过putTreeVal方法往红黑树中插入节点;如果binCount不为0,说明put操作对数据产生了影响,如果当前链表的个数达到8个,则通过treeifyBin方法转化为红黑树,如果oldVal不为空,说明是一次更新操作,没有对元素个数产生影响,则直接返回旧值;如果插入的是一个新节点,则执行addCount()方法尝试更新元素个数baseCount; 辅助工具类 Array 和 ArrayList 有何区别? Array 可以存储基本数据类型和对象,ArrayList 只能存储对象。Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。Array 内置方法没有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。 对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。 如何实现 Array 和 List 之间的转换? Array 转 List: Arrays. asList(array) ;List 转 Array:List 的 toArray() 方法。 comparable 和 comparator的区别? comparable接口实际上是出自java.lang包,它有一个 compareTo(Object obj)方法用来排序comparator接口实际上是出自 java.util 包,它有一个compare(Object obj1, Object obj2)方法用来排序 一般我们需要对一个集合使用自定义排序时,我们就要重写compareTo方法或compare方法,当我们需要对某一个集合实现两种排序方式,比如一个song对象中的歌名和歌手名分别采用一种排序方法的话,我们可以重写compareTo方法和使用自制的Comparator方法或者以两个Comparator来实现歌名排序和歌星名排序,第二种代表我们只能使用两个参数版的Collections.sort(). 方法如何比较元素? TreeSet 要求存放的对象所属的类必须实现 Comparable 接口,该接口提供了比较元素的 compareTo()方法,当插入元素时会回调该方法比较元素的大小。TreeMap 要求存放的键值对映射的键必须实现 Comparable 接口从而根据键对元素进 行排 序。 Collections 工具类的 sort 方法有两种重载的形式, 第一种要求传入的待排序容器中存放的对象比较实现 Comparable 接口以实现元素的比较; 第二种不强制性的要求容器中的元素必须可比较,但是要求传入第二个参数,参数是Comparator 接口的子类型(需要重写 compare 方法实现元素的比较),相当于一个临时定义的排序规则,其实就是通过接口注入比较元素大小的算法,也是对回调模式的应用(Java 中对函数式编程的支持)。

剑曼红尘 2020-03-24 14:41:57 0 浏览量 回答数 0

回答

Kotlin的简介 Kotlin是由JetBrains公司(IDEA开发者)所开发的编程语言,其名称来自于开发团队附近的科特林岛。 多平台开发 JVM :Android; Server-Side Javascript:前端 Native(beta) :开发原生应用 windows、macos、linux Swift与Kotlin非常像 http://nilhcem.com/swift-is-like-kotlin/ kotlin发展历程 image.png java发展历程 image.png JVM语言的原理 image.png JVM规范与java规范是相互独立的 只要生成的编译文件匹配JVM字节码规范,任何语言都可以由JVM编译运行. Kotlin也是一种JVM语言,完全兼容java,可以与java相互调用;Kotlin语言的设计受到Java、C#、JavaScript、Scala、Groovy等语言的启发 kotlin的特性 下面不会罗列kotlin中具体的语法,会介绍我认为比较重要的特性,以及特性背后的东西。 类型推断 空类型设计 函数式编程 类型推断 image.png 类型推断是指编程语言中在编译期自动推导出值的数据类型。推断类型的能力让很多编程任务变得容易,让程序员可以忽略类型标注的同时仍然允许类型检查。 在开发环境中,我们往往写出表达式,然后可以用快捷键来生成变量声明,往往都是很准的,这说明了编译器其实是可以很准确的推断出来类型的。编程语言所具备的类型推断能力可以把类型声明的任务由开发者转到了编译器. java中声明变量的方式是类型写在最前面,后面跟着变量名,这就迫使开发者在声明变量时就要先思考变量的类型要定义成什么,而在一些情况下比如使用集合、泛型类型的变量,定义类型就会变得比较繁琐。 Kotlin中声明变量,类型可以省略,或者放到变量名后面,这可以降低类型的权重,从必选变为可选,降低开发者思维负担。java10中也引入了类型推断。 Javascript中声明变量也是用关键字var,但是还是有本质区别的,Kotlin中的类型推断并不是变成动态类型、弱类型,类型仍然是在编译期就已经决定了的,Kotlin仍然是静态类型、强类型的编程语言。javascript由于是弱类型语言,同一个变量可以不经过强制类型转换就被赋不同数据类型的值, 编程语言的一个趋势就是抽象程度越来越高,编译器做更多的事情。 空类型设计 空类型的由来 image.png 托尼·霍尔(Tony Hoare),图灵奖得主 托尼·霍尔是ALGOL语言的设计者,该语言在编程语言发展历史上非常重要,对其他编程语言产生重大影响,大多数近代编程语言(包括C语言)皆使用类似ALGOL的语法。他在一次大会上讨论了null应用的设计: “我把 null 引用称为自己的十亿美元错误。它的发明是在1965 年,那时我用一个面向对象语言( ALGOL W )设计了第一个全面的引用类型系统。我加入了null引用设计,仅仅是因为实现起来非常容易。它导致了数不清的错误、漏洞和系统崩溃,可能在之后 40 年中造成了十亿美元的损失。” null引用存在的问题 以java为例,看null引用的设计到底存在哪些问题 空指针问题NPE 编译时不能对空指针做出检查,运行时访问null对象就会出现错误,这个就是工程中常见的空指针异常。 null本身没有语义,会存在歧义 值未被初始化 值不存在 也许表示一种状态 逻辑上有漏洞 Java中,null可以赋值给任何引用,比如赋值给String类型变量,String a = null,但是null并不是String类型: a instanceof String 返回的是false,这个其实是有些矛盾的。所以当持有一个String类型的变量,就存在两种情况,null或者真正的String. 解决NPE的方式 防御式代码 在访问对象前判空,但会有冗余代码;会规避问题,而隐藏真正的问题 抛出异常给调用方处理 方法中传参传入的空值、无效值,抛出受检查异常给上层调用方 增加注解 Android中可以增加@NonNull注解,编译时做额外检查 空状态对象设计模式 空状态对象是一个实现接口但是不做任何业务逻辑的对象,可以取代判空检查;这样的空状态对象也可以在数据不可用的时候提供默认的行为 java8 Optional类 java8中引入了Optional类,来解决广泛存在的null引用问题.官方javadoc文档介绍 A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value. Additional methods that depend on the presence or absence of a contained value are provided, such as orElse() (return a default value if value not present) and ifPresent() (execute a block of code if the value is present). 来看一下是如何实现的。 举一个访问对象读取熟悉的例子 java 8 之前 : image.png java 8: image.png 总结: 1.用Optional还是会比较繁琐,这个也说明了设计一个替代null的方案还是比较难的。 optional的耗时大约是普通判空的数十倍,主要是涉及泛型、使用时多创键了一个对象的创建;数据比较大时,会造成性能损失。 java8 引入Optional的意义在于提示调用者,用特殊类型包装的变量可能为空,在使用取出时需要判断 Kotlin的空类型设计 Kotlin中引入了可空类型和不可空类型的区分,可以区分一个引用可以容纳null,还是不能容纳null。 String vs String? String 类型表示变量不能为空,String?则表示变量可以为空 String?含义是String or null.这两种是不同的类型. 比如: var a:String = “abc” //ok var a:String = null //不允许 var b :String? = null //ok a=b // 不允许 String?类型的值不能给String类型的值赋值 这样就将类型分成了可空类型和不可能类型,每一个类型都有这样的处理;Kotlin中访问非空类型变量永远不会出现空指针异常。 同样上面的例子,采用Kotlin去写,就会简洁很多 image.png 编程范式-函数式编程 编程范式是什么? 编程范式是程序员看待程序和写程序的观点 主要的类型 非结构化编程 结构化编程 面向对象编程 命令式编程 函数式编程 这些类型并不是彼此互斥的,而是按照不同的维度做的划分,一种编程语言可能都支持多个编程范式 非结构化编程 第一代的高级语言往往是非结构化编程 比如 BASIC语言 每一行的代码前面都有一个数字作为行号,通常使用GOTO的跳跃指令来实现判断和循环. 看一下下面这段代码是做什么的: image.png 实际上做的是:程序在屏幕上显示数字 1 到 10 及其对应的平方 采用这种方式写程序,大量的使用goto实现逻辑的跳转,代码一长,可读性和维护性就比较差了,形成“面条式代码” 结构化编程 采用顺序、分支、循环结构来表达,禁用或者少用GOTO; 并用子程序来组织代码,采用自顶向下的方式来写程序 代表语言是C语言 实现同样的逻辑: image.png 可见采用结构化编程,代码的逻辑会更清晰。 面向对象编程 思想: 将计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。 特性: 封装性、继承性、多态性。 命令式编程 把计算机程序视为一系列的命令集合 主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。 “先做这,再做那”,强调“怎么做” 实现: 用变量来储存数据,用语句来执行指令,改变变量状态。 基本所有的常见的编程语言都具有此范式 函数式编程 声明式语法,描述要什么,而不是怎么做 类似于SQL语句 语言: kotlin swift python javascript scala 函数是第一等公民 可以赋值给变量,可作为参数传入另一个函数,也可作为函数的返回值 纯函数 y=f(x) 只要输入相同,返回值不变 没有副作用:不修改函数的外部状态 举个栗子 公司部门要进行outing,去哪里是个问题,要考虑多个因素,比如花费、距离、天数等等,有多个备选地点进行选择。 定义一个数据类: image.png 要进行筛选了,分别用sql,kotlin,java来实现 找出花费低于2000元的outing地点信息 SQL image.png Kotlin image.png java 7 image.png 可见kotin的写法还是比较接近于sql的思想的,声明式的写法,而不管具体如何实现;其中的:place->place.money<2000 就是函数,可以作为参数传递给fliter这个高阶函数;而且这个函数没有副作用,不改变外部状态。 再来一个复杂一点的: 找出花费低于5000元,时间不多于4天,按照距离排序的outing地点名称 SQL image.png Kotlin: image.png java 7 image.png 由此可见用kotlin的函数式写法,会更简洁,逻辑也更清晰,这段代码的目标一目了然,这种清晰在于实现了业务逻辑与控制逻辑的分离,业务逻辑就是由函数实现的,比如place->place.money<500,而控制逻辑是由filter,sorterBy等高阶函数实现的。 而java的传统写法是基于对数据的操作,避免不了遍历的操作,业务逻辑与控制逻辑交织在了一起,这段代码的目的就不是那么容易清晰看到的了。 总结 kotlin是实用的现代编程语言,吸收了众多编程语言的优点,支持类型推断、空类型安全、函数式编程、DSL等特性,非常值得学习和使用。

问问小秘 2020-04-30 16:33:40 0 浏览量 回答数 0

问题

10个迷惑新手的Cocoa,Objective-c开发难点和问题? 400 报错

爱吃鱼的程序员 2020-05-31 00:44:29 0 浏览量 回答数 1

回答

原版英文链接:点击这里 作者 | Md Kamaruzzaman 译者 | 无明 策划 | 小智 基础设施:条条道路通云端 对于云厂商来说,2019 年是硕果累累的一年。不仅初创公司在使用云计算,那些很注重安全的“保守派”公司(如政府机构、医疗保健机构、银行、保险公司,甚至是美国五角大楼)也在迁移到云端。这种趋势在 2020 年将会继续,大大小小的公司都将(或者至少有计划)迁移到云端。Gartner 公司最近发布了一个数字: 如果你是一个还在考虑要不要迁移到云端的决策者,不妨重新审视一下你的策略。如果你是一个独立开发者,并且还没使用过云基础设施,那么完全可以在 2020 年尝试一下。很多大型的云厂商(如亚马逊、微软、谷歌)都提供了免费的体验机会。谷歌在这方面做得特别大方,它提供了价值 300 美元的一年免费服务。 策划注:阿里、腾讯、华为等国内云厂商同样有免费云服务试用产品。 云平台:亚马逊领头,其他跟上 作为第一大云厂商,亚马逊在 2019 年可谓风生水起。凭借其丰富的产品组合,亚马逊将把它的优势延续到 2020 年。Canalys 发布的 2019 年第三季度报告指出,大型云厂商(AWS、Azure、GCP)占据 56% 的市场份额,其中 AWS 独享 32.6%。 其他云厂商也在努力缩短与 AWS 之间的差距。微软把主要目标转向了大型企业。最近,微软打败了亚马逊,从美国五角大楼拿到了一个 100 亿美元的大单子。这个单子将提升 Azure 的声誉,同时削弱 AWS 的士气。 谷歌一直在推动 CNCF,实现云计算运维的标准化。谷歌的长期目标是让云迁移变得更容易,方便企业从 AWS 迁移到 GCP。IBM 之前斥资 360 亿美元收购了 RedHat,也想要在云计算市场占有一席之地。 在亚太地区,阿里云市场规模超过了 AWS、Azure 的总和,全球排名第三。中国国内腾讯云等企业的增长势头也十分迅猛。 2020 年将出现更多的并购。当然,很多初创公司将会带来新的想法和创新,例如多云服务。因为竞争激烈,这些公司只能从降价和推出更多的创新产品来获取利润。 容器化:Kubernetes 将会更酷 在容器编排领域,虽然一度出现了“三足鼎立”(Kubernetes、Docker Swarm 和 Mesos),但 Kubernetes 最终脱颖而出,成为绝对的赢家。云是一个分布式系统,而 Kubernetes 是它的 OS(分布式的 Linux)。2019 年北美 KubeCon+CloudNativeCon 大会的参会者达到了 12000 名,比 2018 年增长了 50%。以下是过去 4 年参会人数的增长情况。 在 2020 年,Kubernetes 不仅不会后退,只会变得越来越强,你完全可以把赌注压在 Kubernetes 身上。另外值得一提的是,Migrantis 最近收购了 Docker Enterprise,不过收购数额不详。 几年前,人们张口闭口说的都是 Docker,而现在换成了 Kubernetes。Docker 在它的全盛时期未能盈利,反而在优势渐退几年之后才尝试变现。这再次说明,在现代技术世界,时机就是一切。 软件架构:微服务将成为主流 谷歌趋势表明,微服务架构范式在 2019 年持续增长了一整年。 随着软件行业整体逐步迁移到云端,微服务也将成为占主导地位的架构范式。微服务架构崛起的一个主要原因是它与云原生完美契合,可以实现快速的软件开发。我在之前的一篇博文中解释了微服务架构的基本原则及其优势和劣势。 https://towardsdatascience.com/microservice-architecture-a-brief-overview-and-why-you-should-use-it-in-your-next-project-a17b6e19adfd 我假设现在也存在一种回归到单体架构的趋势,因为在很多情况下,微服务架构有点过头了,而且做好微服务架构设计其实很难。微服务架构有哪些好的实践?在之前的另一篇博文中,我也给出了一些大概,希望对读者有用。 https://towardsdatascience.com/effective-microservices-10-best-practices-c6e4ba0c6ee2 编程语言(整体):Python 将吞噬世界 机器学习、数据分析、数据处理、Web 开发、企业软件开发,甚至是拼接黑洞照片,Python 的影子无处不在。 在著名的编程语言排行榜网站 TIOBE 上,Python 位居最流行编程语言第三位,仅次于 Java 和 C 语言。 更有意思的是,在 2019 年,Python 的流行度翻了一番(从 5% 到 10%)。 Python 的崛起将在 2020 年延续,并缩短与 Java 和 C 语言之间的差距。另一门无所不在的编程语言 JavaScript 正面临下行的风险。为什么 Python 的势头会如此强劲?因为它的入手门槛低,有一个优秀的社区在支持,并受到数据科学家和新生代开发者的喜爱。 编程语言(企业方面):Java 将占主导 之前的 TIOBE 网站截图显示,Java 仍然是一门占主导地位的编程语言,并将在 2020 年继续保持这种地位。JVM 是 Java 的基石,其他编程语言(如 Kotlin、Scala、Clojure、Groovy)也将 JVM 作为运行时。最近,Oracle 修改了 JVM 的许可协议。 新的许可协议意味着使用 Java、Kotlin、Scala 或其他 JVM 编程语言的公司需要向 Oracle 支付大额费用。所幸的是,OpenJDK 让 JVM 继续免费。另外,还有其他一些公司为 JVM 提供企业支持。 因为体积和速度方面的问题,基于 JVM 的编程语言并不适合用在今天的无服务器环境中。Oracle 正在推动 GraalVM 计划,旨在让 Java 变得更加敏捷和快速,让它更适合用在无服务器环境中。因为除了 Java,没有其他编程语言可以提供企业级的稳定性和可靠性,所以 Java 将在 2020 年继续占主导地位。 企业版 Java:Spring 继续发力 曾几何时,在企业开发领域,Spring 和 JavaEE 之间存在着白热化的竞争。但因为 Oracle 在 JavaEE 方面没有作为,在竞争中惨败,这导致了“MicroProfile”计划的形成,并最终促成了 JakartaEE。 虽然所有的政策和活动都是围绕 JavaEE 展开,但 Spring 事实上已经赢得了这场企业 JVM 之争。2020 年,Spring 将成为 JVM 生态系统的头牌。 有两个正在进展中的项目,它们旨在减小 Java 的体积,让它更适合用在无服务器环境中。 其中一个是 Micronaut(https://micronaut.io/)。 另一个是 Quarkus(https://quarkus.io/)。 这两个项目都使用了 GraalVM,它们在 2020 年将会得到 Java 社区更多的关注。 编程语言:后起之秀的突破 2000 年代,编程语言的发展出现了停滞。大多数人认为没有必要再去开发新的编程语言,Java、C 语言、C++、JavaScript 和 Python 已经可以满足所有的需求。但是,谷歌的 Go 语言为新编程语言大门打开了一扇大门。在过去十年出现了很多有趣的编程语言,比如 Rust、Swift、Kotlin、TypeScript。导致这种情况的一个主要原因是已有的编程语言无法充分利用硬件优势(例如多核、更快的网络、云)。另一个原因是现代编程语言更加关注开发者经济,即实现更快速更容易的开发。在 Stackoverflow 提供的一份开发者报告中,排名靠前的现代编程语言如下所示(Rust 连续 4 年名列第一)。 在之前的一篇博文中,我深入探讨了现代编程语言,对比 Rust 和 Go 语言,并说明了为什么现在是采用这些语言的好时机。 https://towardsdatascience.com/back-to-the-metal-top-3-programming-language-to-develop-big-data-frameworks-in-2019-69a44a36a842 最近,微软宣布他们在探索使用 Rust 来开发更安全的软件。 亚马逊最近也宣布要赞助 Rust。 谷歌宣布将 Kotlin 作为 Android 官方开发语言,所以,在 JVM 领域,Kotlin 成了 Java 的主要竞争对手。 Angular 使用 TypeScript 代替 JavaScript,将其作为主要的编程语言,其他 JavaScript 框架(如 React 和 Vue)也开始为 TypeScript 提供更多的支持。 这种趋势将在 2020 年延续下去,很多巨头公司将会深入了解新一代编程语言(如 Rust、Swift、TypeScript、Kotlin),它们会站出来公开表示支持。 Web:JavaScript 继续占主导地位 曾几何时,JavaScript 并不被认为是一门强大的编程语言。在当时,前端内容主要通过后端框架在服务器端进行渲染。2014 年,AngularJS 的出现改变了这种局面。从那个时候开始,更多的 JavaScript 框架开始涌现(Angular 2+、React、Vue、Meteor),JavaScript 已然成为主流的 Web 开发语言。随着 JavaScript 框架不断创新以及微服务架构的崛起,JavaScript 框架在 2020 年将继续主导前端开发。 JavaScript 框架:React 闪耀 虽然 React 是在 AngularJS 之后出现的,但在过去十年对 Web 开发产生了巨大的影响,这也让 Facebook 在与 Google+ 的竞争中打了一场胜战。React 为前端开发带来了一些新的想法,比如事件溯源、虚拟 DOM、单向数据绑定、基于组件的开发,等等。它对开发者社区产生了重大影响,以至于谷歌放弃了 AngularJS,并借鉴 React 的想法推出了彻底重写的 Angular 2+。React 是目前为止最为流行的 JavaScript 框架,下图显示了相关的 NPM 下载统计信息。 为了获得更好的并发和用户体验,Facebook 宣布完全重写 React 的核心算法,推出了 React-Fiber 项目。 2020 年,React 仍然是你开发新项目的首选 Web 框架。其他框架(如 Angular/Angular 2+ 或 Vue)呢?Angular 仍然是一个不错的 Web 开发框架,特别适合企业开发。我敢肯定谷歌在未来几年会在 Angular 上加大投入。Vue 是另一个非常流行的 Web 框架,由中国的巨头公司阿里巴巴提供支持。如果你已经在使用 Angular 或 Vue,就没必要再迁移到 React 了。 App 开发:原生应用 在移动 App 开发方面,有关混合应用开发的炒作有所消停。混合开发提供了更快的开发速度,因为只需要一个开发团队,而不是多个。但原生应用提供了更好的用户体验和性能。另外,混合应用需要经过调整才能使用一些高级特性。对于企业来说,原生应用仍然是首选的解决方案,这种趋势将在 2020 年延续。Airbnb 在一篇博文中非常详细地说明了为什么他们要放弃混合应用开发平台 React Native。 https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a 尽管 Facebook 尝试改进 React Native,谷歌也非常努力地推动混合 App 开发平台 Flutter,但它们仍然只适合用于原型、POC、MVP 或轻量级应用的开发。所以,原生应用在 2020 年仍将继续占主导地位。 在原生应用开发方面,谷歌和苹果分别将 Kotlin 和 Swift 作为各自平台主要的编程语言。谷歌最近再次重申了对 Kotlin 的支持,这对于 Kotlin 用户来说无疑是个好消息。 混合应用开发:React Native 在很多情况下,混合应用是个不错的选择。在这方面也有很多选择:Xamarin、Inoic、React Native 和 Flutter。Facebook 基于成熟的 React 框架推出了 React Native。就像 React 在 Web 框架领域占据主导地位一样,React Native 在混合应用领域也占据着主导地位,如下图所示。 React Native 和 React 有共同的基因,都提供了高度的代码重用性以及“一次开发,到处运行”的能力。React Native 的另一个优势是 Facebook 本身也用它来开发移动应用。谷歌在这个领域起步较晚,但在去年,谷歌的混合应用开发框架 Flutter 获得了不少关注。Flutter 提供了更好的性能,但需要使用另一门不是那么流行的编程语言 Dart。React Native 在 2020 年将继续占主导地位。 API:REST 将占主导地位 REST 是 API 领域事实上的标准,被广泛用在基于 API 的服务间通信上。当然,除了 REST,我们还有其他选择,比如来自谷歌的 gRPC 和来自 Facebook 的 GraphQL。 它们提供了不同的能力。谷歌开发的 gRPC 作为远程过程调用(如 SOAP)的化身,使用 Protobuf 代替 JSON 作为消息格式。Facebook 开发的 GraphQL 作为一个集成层,避免频繁的 REST 调用。gRPC 和 GraphQL 都在各自的领域取得了成功。2020 年,REST 仍然是占主导地位的 API 技术,而 GraphQL 和 gRPC 将作为补充技术。 人工智能:Tensorflow 2.0 将占主导地位 谷歌和 Facebook 也是深度学习 / 神经网络领域的主要玩家。谷歌基于深度学习框架 Theano 推出了 TensorFlow,它很快就成为深度学习 / 神经网络的主要开发库。谷歌还推出了特别设计的 GPU(TPU)来加速 TensorFlow 的计算。 Facebook 在深度学习领域也不甘落后,他们拥有世界上最大的图像和视频数据集合。Facebook 基于另一个深度学习库 Torch 推出了深度学习库 PyTorch。TensorFlow 和 PyTorch 之间有一些区别,前者使用的是静态图进行计算,而 PyTorch 使用的是动态图。使用动态图的好处是可以在运行时纠正自己。另外,PyTorch 对 Python 支持更好,而 Python 是数据科学领域的一门主要编程语言。 随着 PyTorch 变得越来越流行,谷歌也赶紧在 2019 年 10 月推出了 TensorFlow 2.0,也使用了动态图,对 Python 的支持也更好。 2020 年,TensorFlow 2.0 和 PyTorch 将齐头并进。考虑到 TensorFlow 拥有更大的社区,我估计 TensorFlow 2.0 将成为占主导地位的深度学习库。 数据库:SQL是王者,分布式SQL是王后 在炒作 NoSQL 的日子里,人们嘲笑 SQL,还指出了 SQL 的种种不足。有很多文章说 NoSQL 有多么的好,并将要取代 SQL。但等到炒作的潮水褪去,人们很快就意识到,我们的世界不能没有 SQL。以下是最流行的数据库的排名。 可以看到,SQL 数据库占据了前四名。SQL 之所以占主导地位,是因为它提供了 ACID 事务保证,而 ACID 是业务系统最潜在的需求。NoSQL 数据库提供了横向伸缩能力,但代价是不提供 ACID 保证。 互联网公司一直在寻找“大师级数据库”,也就是既能提供 ACID 保证又能像 NoSQL 那样可横向伸缩的数据库。目前有两个解决方案可以部分满足对“大师级数据库”的要求,一个是亚马逊的 Aurora,一个是谷歌的 Spanner。Aurora 提供了几乎所有的 SQL 功能,但不支持横向写伸缩,而 Spanner 提供了横向写伸缩能力,但对 SQL 支持得不好。 2020 年,但愿这两个数据库能够越走越近,或者有人会带来一个“分布式 SQL”数据库。如果真有人做到了,那一定要给他颁发图灵奖。 数据湖:MinIO 将要崛起 现代数据平台非常的复杂。企业一般都会有支持 ACID 事务的 OLTP 数据库(SQL),也会有用于数据分析的 OLAP 数据库(NoSQL)。除此之外,它们还有其他各种数据存储系统,比如用于搜索的 Solr、ElasticSearch,用于计算的 Spark。企业基于数据库构建自己的数据平台,将 OLTP 数据库的数据拷贝到数据湖中。各种类型的数据应用程序(比如 OLAP、搜索)将数据湖作为它们的事实来源。 HDFS 原本是事实上的数据湖,直到亚马逊推出了对象存储 S3。S3 可伸缩,价格便宜,很快就成为很多公司事实上的数据湖。使用 S3 唯一的问题是数据平台被紧紧地绑定在亚马逊的 AWS 云平台上。虽然微软 Azure 推出了 Blob Storage,谷歌也有类似的对象存储,但都不是 S3 的对手。 对于很多公司来说,MinIO 或许是它们的救星。MinIO 是一个开源的对象存储,与 S3 兼容,提供了企业级的支持,并专门为云原生环境而构建,提供了与云无关的数据湖。 微软在 Azure Marketplace 是这么描述 MinIO 的:“为 Azure Blog Storage 服务提供与亚马逊 S3 API 兼容的数据访问”。如果谷歌 GCP 和其他云厂商也提供 MinIO,那么我们将会向多云迈出一大步。 大数据批处理:Spark 将继续闪耀 现如今,企业通常需要基于大规模数据执行计算,所以需要分布式的批处理作业。Hadoop 的 Map-Reduce 是第一个分布式批处理平台,后来 Spark 取代了 Hadoop 的地位,成为真正的批处理之王。Spark 是怎样提供了比 Hadoop 更好的性能的?我之前写了另一篇文章,对现代数据平台进行了深入分析。 https://towardsdatascience.com/programming-language-that-rules-the-data-intensive-big-data-fast-data-frameworks-6cd7d5f754b0 Spark 解决了 Hadoop Map-Reduce 的痛点,它将所有东西放在内存中,而不是在完成每一个昂贵的操作之后把数据保存在存储系统中。尽管 Spark 重度使用 CPU 和 JVM 来执行批处理作业,但这并不妨碍它成为 2020 年批处理框架之王。我希望有人能够使用 Rust 开发出一个更加高效的批处理框架,取代 Spark,并为企业省下大量的云资源费用。 大数据流式处理:Flink 是未来 几年前,实现实时的流式处理几乎是不可能的事情。一些微批次处理框架(比如 Spark Streaming)可以提供“几近”实时的流式处理能力。不过,Flink 改变了这一状况,它提供了实时的流式处理能力。 2019 年之前,Flink 未能得到足够的关注,因为它无法撼动 Spark。直到 2019 年 1 月份,中国巨头公司阿里巴巴收购了 Data Artisan(Flink 背后的公司)。 在 2020 年,企业如果想要进行实时流式处理,Flink 应该是不二之选。不过,跟 Spark 一样,Flink 同样重度依赖 CPU 和 JVM,并且需要使用大量的云资源。 字节码:WebAssembly将被广泛采用 我从 JavaScript 作者 Brandon Eich 的一次访谈中知道了 WebAssembly 这个东西。现代 JavaScript(ES5 之后的版本)是一门优秀的编程语言,但与其他编程语言一样,都有自己的局限性。最大的局限性是 JavaScript 引擎在执行 JavaScript 时需要读取、解析和处理“抽象语法树”。另一个问题是 JavaScript 的单线程模型无法充分利用现代硬件(如多核 CPU 或 GPU)。正因为这些原因,很多计算密集型的应用程序(如游戏、3D 图像)无法运行在浏览器中。 一些公司(由 Mozilla 带领)开发了 WebAssembly,一种底层字节码格式,让任何一门编程语言都可以在浏览器中运行。目前发布的 WebAssembly 版本可以支持 C++、Rust 等。 WebAssembly 让计算密集型应用程序(比如游戏和 AutoCAD)可以在浏览器中运行。不过,WebAssembly 的目标不仅限于此,它还要让应用程序可以在浏览器之外运行。WebAssembly 可以被用在以下这些“浏览器外”的场景中。 移动设备上的混合原生应用。没有冷启动问题的无服务器计算。在服务器端执行不受信任的代码。 我预测,2020 年将是 WebAssembly 取得突破的一年,很多巨头公司(包括云厂商)和社区将会拥抱 WebAssembly。 代码:低代码 / 无代码将更进一步 快速的数字化和工业 4.0 革命意味着软件开发者的供需缺口巨大。由于缺乏开发人员,很多企业无法实现它们的想法。为了降低进入软件开发的门槛,可以尝试无代码(No Code)或低代码(Low Code)软件开发,也就是所谓的 LCNC(Low-Code No-Code)。它已经在 2019 年取得了一些成功。 LCNC 的目标是让没有编程经验的人也能开发软件,只要他们想要实现自己的想法。 虽然我对在正式环境中使用 LCNC 框架仍然心存疑虑,但它为其他公司奠定了良好的基础,像亚马逊和谷歌这样的公司可以基于这个基础构建出有用的产品,就像 AWS Lambda 的蓬勃发展是以谷歌 App Engine 为基础。 2020 年,LCNC 将会获得更多关注。

茶什i 2019-12-26 11:57:03 0 浏览量 回答数 0

问题

【精品问答】python技术1000问(1)

问问小秘 2019-12-01 21:57:48 454222 浏览量 回答数 19

问题

史上有哪些程序员实用工具网站?

问问小秘 2020-03-14 23:11:50 4148 浏览量 回答数 2

问题

如何用Python在笔记本电脑上分析100GB数据?

珍宝珠 2020-02-18 12:56:20 1 浏览量 回答数 0

问题

【Java学习全家桶】1460道Java热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:15 27612 浏览量 回答数 19

回答

回 3楼(莫有) 的帖子 您好, 请问您使用的系统是哪种Linux发行版呢?是CentOS 6吗? ------------------------- 回 5楼(莫有) 的帖子 您好, 好的,等我找到合适的测试机,再为您在CentOS7 系统里测试ipv6的隧道设置喔。 ------------------------- 回 5楼(莫有) 的帖子 您好, 为您写了这个CentOS 7的配置帖子,希望对您有帮助喔: https://bbs.aliyun.com/read.php?tid=285557 ------------------------- 回 10楼(非洲小犀牛) 的帖子 您好, 如果您的是Linux系统,可能需要先为系统启用ipv6的功能喔。请看这里的例子: https://bbs.aliyun.com/read/285557.html ------------------------- 回 12楼(猎马网) 的帖子 您好, 欢迎来到阿里云论坛。 IPv6测试不能通过的原因是什么呢?您在 http://ipv6-test.com/validate.php 里测试您的站点访问结果是什么呢? ------------------------- 回 14楼(猎马网) 的帖子 您好, 如本例中的,添加IPv6隧道地址的默认网关命令,应该是: netsh interface ipv6 add route ::/0 IP6Tunnel 2001:470:18:401::1 请问,您在做第5步时,是否有运行如上边类似的命令吗? ------------------------- 回 16楼(猎马网) 的帖子 您好, 您可以查看“网络连接”里对应的连接属性,估计可以直接修改的哩。 ------------------------- 回 19楼(猎马网) 的帖子 您好, 我在测试机里使用wget测试,好象正常: root@los:~/test4# wget -6 http://www.iliema.com/ converted 'http://www.iliema.com/' (ANSI_X3.4-1968) -> 'http://www.iliema.com/' (UTF-8) --2016-08-11 22:28:41--   http://www.iliema.com/ Resolving www.iliema.com (www.iliema.com)... 2001:470:1f14:b5f::2 Connecting to www.iliema.com (www.iliema.com)|2001:470:1f14:b5f::2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 77636 (76K) [text/html] Saving to: 'index.html.3' ------------------------- 回 20楼(猎马网) 的帖子 您好, 应该可以如IPv4那样,多个域名指到相同的IPv6地址。 ------------------------- 回 24楼(很快) 的帖子 您好, 请问您的nginx web是安装在Windows还是Linux的系统上? ------------------------- 回 26楼(喵咪喵) 的帖子 您好, 欢迎来到阿里云论坛。 申请到IPv6的隧道地址后,还需要在系统里配置的,以让这个IPv6的地址能被外网的用户访问到喔。 ------------------------- 回 29楼(不断学习) 的帖子 您好, 请问您使用的操作系统是WIndows 2012吗? 请问您执行的netsh命令是和操作说明那里一样的吗? ------------------------- 回 31楼(喵咪喵) 的帖子 您好, 应该不影响,如果前两项检查测试通过,最后一条(IPv6-only)测试不通过,应该是可以的。 ------------------------- 回 34楼(wolfing5210) 的帖子 您好, 我在Linux系统上,能ping通您的IPv6地址: root@los:~# ping6 2001:470:35:102a::2 PING 2001:470:35:102a::2(2001:470:35:102a::2) 56 data bytes 64 bytes from 2001:470:35:102a::2: icmp_seq=1 ttl=119 time=225 ms 64 bytes from 2001:470:35:102a::2: icmp_seq=2 ttl=119 time=226 ms 如果您要测试,要具备两个条件, a. 在Windows系统里,应该是使用 ping -6 的参数 b. 发出测试的系统是启用了IPv6 ------------------------- 回 37楼(小成123456) 的帖子 您好, 抱歉延时回复。 请问您在系统里,执行 ipconfig /all 后,能看到输出信息中包含的ipv6 tunel信息吗? ------------------------- 回 39楼(呢你) 的帖子 您好, 抱歉给您带来不便。 请问苹果审核拒绝的原因是什么,是不能连接到ipv6地址吗? 请问您创建的ipv6隧道地址,测试时能从外网成功访问吗? ------------------------- 回 41楼(呢你) 的帖子 您好, 80端口测试是正常的,但好象web返回了错误。 建议您咨询一下您的 APP 程序员。 root@los:~/test# curl [2001:470:18:95c::2] -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' J BossWeb/2.0.1.GA - Error report ------------------------- 回 44楼(nyanko桑) 的帖子 您好, 那请问您在例子中,第5步执行的命令是哪些呢? ------------------------- 回 45楼(小成123456) 的帖子 您好, 域名AAAA解析与IPv6隧道地址设置并不直接相关,如果您的IPv6隧道地址设置正确,从外网应该能ping通这个新设置的IPv6隧道地址。 ------------------------- 回 48楼(nyanko桑) 的帖子 您好, 好象命令看起来没有问题,您是从 HE 隧道地址设置网站里直接复制的,对吗? 那执行命令时,是否回显的结果是“确定”,还是有别的错误信息提示呢? ------------------------- 回 50楼(持名) 的帖子 您好, 那就奇怪了。 建议您回过头梳理一下,看看是否缺了哪个步骤或环境有哪些特殊的地方。 ------------------------- 回 52楼(nyanko桑) 的帖子 您好, 或许将原命令中的“add”(添加)改为“del”(删除)后,可以试试。  我个人猜测的。 ------------------------- 回 54楼(nyanko桑) 的帖子 您好, 好哩,到时如还没有解决问题,可通过站内信,发来临时的ECS登录信息,我为您看看喔。 ------------------------- 回 56楼(nyanko桑) 的帖子 您好, 申请到的IPv6隧道地址是不变的呀,除非您删除了。 ------------------------- 回 58楼(nyanko桑) 的帖子 您好, 好哩,祝愿您的APP能通过苹果的审核。 如还有疑问,欢迎跟帖。 ------------------------- 回 60楼(゛温ゝ先生) 的帖子 您好, 您在站内信里提到说“网络有重名”,现在系统里没成功添加ipv6地址吗? ------------------------- 回 61楼(陈cc123) 的帖子 您好, 一般AAA记录里,主机记录填写的是从HE申请到的IPv6隧道地址。 更新:应该是“记录值”里填写从he申请到的ipv6隧道地址。 ------------------------- 回 65楼(陈cc123) 的帖子 您好, 对不起,之前我的说法有错误。 按阿里云解析面板中,“主机记录”应该是您需要设置的网站访问地址,如我这里想设置 ipv6.anqun.org 的ipv6地址,“主机记录”里填写“ipv6”,而“记录值”里填写IPv6隧道地址:2001:470:18:401::2 ------------------------- 回 67楼(陈cc123) 的帖子 您好, 那请问您提交给 http://ipv6-test.com/ 测试的网址是什么呢? ------------------------- 回 69楼(陈cc123) 的帖子 您好, 页面 http://ipv6-test.com/validate.php 里提交的网址应该是一个域名网址,应该不能直接提交IPv6地址去测试的喔。 您可以在您的域名控制面板添加一条AAA记录的呀。 ------------------------- 回 72楼(陈cc123) 的帖子 您好, 能否使用如 netstat -noa | grep 80 的命令,来查看当前Web服务是否在ipv6地址监听使用呢? ------------------------- 回 74楼(陈cc123) 的帖子 您好, 图中没有显示IPv6相关的8080端口使用情况喔, 或许您可以运行 netstat -noa | grep 8080 再次确认一下。 ------------------------- 回 78楼(陈cc123) 的帖子 您好, 是的,不好意思,我忘记了您的系统是Windows,不是linux,所以不能直接用grep的命令。 现在从外网测试,您的tomcat站点是可以从ipv6地址访问了,但或许您将web从8080换到常用的80端口,方便访问。 root@los:~/test# curl [2001:470:18:ab3::2]:8080 -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' Apache Tomcat/7.0.54 ------------------------- 回 80楼(陈cc123) 的帖子 您好, 如果您提交给苹果审核就是带8080的IPv6地址,那可保持现状。 能否说一下具体您审核网址?如果按上边的测试结果来看,您的IPv6隧道地址是(曾)正常工作。 ------------------------- 回 82楼(陈cc123) 的帖子 您好, 现在从外网测试您给的网址,正常。 root@los:~/test# curl -6 'http://www.91mcgj.cn:8080' -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' Apache Tomcat/7.0.54 root@los:~/test# curl 'http://www.91mcgj.cn:8080' -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' Apache Tomcat/7.0.54 ------------------------- 回 84楼(陈cc123) 的帖子 您好, 可能那个检测的站点,只能检测默认80端口的吧,具体到您这里,您是要写明8080端口的,所以那个测试网址可能不适用喔。 ------------------------- 回 87楼(xiaopao888) 的帖子 您好, 欢迎来到阿里云论坛。 能否请问在“命令提示符”里执行以下的命令,看输出结果有没有关于ipv6的80地址监听呢? netstat -noa | find "80" ------------------------- 回 88楼(莫尼玛) 的帖子 您好, 欢迎来到阿里云论坛。 如果您使用自己的环境来测试,需要确认您的环境是否支持ipv6使用环境喔,如您的telnet程序是否支持ipv6,您的网络是否支持ipv6。 我拿一个美国的vps来测试,也是可以成功连接到您的ipv6隧道地址: root@los:~/test# curl [2001:470:18:aa8::2] -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' Microsoft Internet Information Services 8 ------------------------- 回 91楼(xiaopao888) 的帖子 您好, 如果web没有在iPv6的网络接口上监听,请尝试调整一下web的配置文件喔,如让它在所有的可用网络接口里监听。 ------------------------- 回 93楼(莫尼玛) 的帖子 您好, 请问您在tcp 8300里提供的服务是web的吗? 如果是web服务,测试不成功喔: root@los:~# curl [2001:470:18:aa8::2:8300] -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' root@los:~# ------------------------- 回 97楼(莫尼玛) 的帖子 您好, 好象用telnet测试8300 tcp 端口,不成功喔: root@los:~# telnet -6 2001:470:18:aa8::2 8300 Trying 2001:470:18:aa8::2... telnet: Unable to connect to remote host: Connection refused root@los:~# telnet -6 2001:470:18:aa8::2 80 Trying 2001:470:18:aa8::2... Connected to 2001:470:18:aa8::2. Escape character is '^]'. Connection closed by foreign host. ------------------------- 回 100楼(莫尼玛) 的帖子 您好, 如果您的socket程序默认不是在所有的端口上监听使用,是需要调整一下的喔。 或您使用 netstat -noa 的命令,查看一下都有哪些8300的端口在使用。 ------------------------- 回 102楼(莫尼玛) 的帖子 您好, 0.0.0.0 可能代表是IPv4的所有网络接口,不包括IPv6的啊。 请看这个云友以下的这个贴图,最后一行代表是IPv6的所有网络接口: ------------------------- 回 105楼(莫尼玛) 的帖子 您好, 好的,请稍等。 8310可以,8300也可以。 root@los:~# telnet -6 ht.yulesy.cn 8310 Trying 2001:470:18:aa8::2... Connected to ht.yulesy.cn. Escape character is '^]'. root@los:~# telnet -6 ht.yulesy.cn 8300 Trying 2001:470:18:aa8::2... Connected to ht.yulesy.cn. Escape character is '^]'. ------------------------- 回 109楼(涛涛~) 的帖子 您好, 如果您需要通过http访问位于两个不同服务器上的文件,或许是需要为这两个服务器都配置ipv6隧道地址喔。 ------------------------- 回 110楼(陌祥伟) 的帖子 您好, 我现在没测试机,不能具体为您查看输出结果, 您用 ipconfig 查看到的信息页面内容是怎么样的呢? ------------------------- 回 113楼(陌祥伟) 的帖子 您好, 请问您提到的“本地ping和telnet端口是通的”,是ping ipv6和telnet ipv6隧道地址都正常吗? ------------------------- 回 115楼(陌祥伟) 的帖子 您好, 我这里为您测试,也是ping6不通, 或许您需要再检查一下是否有防火墙或其它缺漏的环节没留意到: --- 2001:470:23:70d::2 ping statistics --- 65 packets transmitted, 0 received, 100% packet loss, time 64000ms ------------------------- 回 119楼(leyuwei) 的帖子 您好, 请问您的ipv6隧道地址是 2001:470:18:ecc::2 吗? 我从外网测试,返回是403的错误页: root@los:~# wget -6 http://[2001:470:18:ecc::2]:8080 converted 'http://[2001:470:18:ecc::2]:8080' (ANSI_X3.4-1968) -> 'http://[2001:470:18:ecc::2]:8080' (UTF-8) --2017-01-07 01:27:05--  http://[2001:470:18:ecc::2]:8080/ Connecting to [2001:470:18:ecc::2]:8080... connected. HTTP request sent, awaiting response... 403 Forbidden 2017-01-07 01:27:09 ERROR 403: Forbidden. root@los:~# curl -6 'http://www.dlmunews.club:8080' <p align='center'>▒▒▒▒▒▒▒▒▒▒▒▒ַ▒▒▒▒▒޲▒ϣ▒▒▒▒▒▒ô▒▒▒▒▒▒▒▒°ɣ▒</p> <p align='center'>▒▒▒▒▒ִ▒▒▒▒ˣ▒▒▒▒▒▒޾▒Ҫ▒▒ȡһЩ▒ֶ▒▒ˣ▒</p> <br/> <p align='center'>403 FORBIDDEN</p> <p align='center'>▒▒▒▒▒▒˼▒▒▒▒▒▒▒뿴▒▒▒ҵ▒▒▒▒ӣ▒</p>root@los:~# ------------------------- 回 118楼(陌祥伟) 的帖子 您好, 我去找个Windows 2008的系统为您测试一下喔。 请等待。 ------------------------- Re:回 118楼(陌祥伟) 的帖子 您好, 我找个测试机(用的是Windows 2008 SP2 32位中文版公共镜像),重复操作了一次,好象正常哩: C:\Users\Administrator>netsh interface ipv6 show interface Idx  Met   MTU   状态          名称 ---  ---  -----  -----------  -------------------   1   50 4294967295  connected    Loopback Pseudo-Interface 1 15   10   1280  connected    IP6Tunnel 10   10   1500  connected    本地连接 22   50   1280  disconnected  本地连接* 12 23   50   1280  disconnected  本地连接* 13 11   10   1500  connected    本地连接 2 C:\Users\Administrator>ping -6 2001:470:18:401::2 正在 Ping 2001:470:18:401::2 从 2001:470:18:401::2 具有 32 字节的数据: 来自 2001:470:18:401::2 的回复: 时间<1ms 来自 2001:470:18:401::2 的回复: 时间<1ms 2001:470:18:401::2 的 Ping 统计信息:     数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位):     最短 = 0ms,最长 = 0ms,平均 = 0ms Control-C ^C C:\Users\Administrator>ping -6 ipv6.google.com 正在 Ping ipv6.l.google.com [2404:6800:4008:800::200e] 从 2001:470:18:401::2 具 有 32 字节的数据: 来自 2404:6800:4008:800::200e 的回复: 时间=401ms 来自 2404:6800:4008:800::200e 的回复: 时间=400ms ------------------------- 回 122楼(leyuwei) 的帖子 您好, 在我使用的测试机里,能访问到您提供的网址内容喔,祝您通过APP的IPv6审核。 root@los:~/test# curl -6 'http://www.dlmunews.club:8080/dlmunews/test.html' test IPV6root@los:~/test# ------------------------- 回 125楼(陌祥伟) 的帖子 您好, 抱歉没有留意您的ECS网络类型, 弹性公网IP,看介绍说是一种NatIP,我不确定这与“经典网络”里的公网IP是否有一些使用限制情景, 建议您发工单咨询一下阿里云官方工程师: https://workorder.console.aliyun.com/ 本帖里的例子ECS是“经典网络”,并不是“专有网络”或“弹性公网IP”的使用场景喔。 ------------------------- 回 131楼(dearvitamin) 的帖子 您好, 测试得知,经典网络中的站点可以,专用网络中的站点不可以访问到喔。 root@los:~/test# curl -6 'http://www.spl258.com' -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' 斯普林游戏 root@los:~/test# curl -6 'http://www.longm258.com' -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' ------------------------- 回 133楼(vinny1024) 的帖子 您好, 欢迎来到阿里云论坛。 本例子里的Web是IIS,并不是apache喔。 请问您在apache的配置文件里,已经设置监听使得ipv6的地址和端口了吗? ------------------------- 回 136楼(raolan123) 的帖子 您好, 已有的云友反馈,不能按例子中的方法在”专有网络“中成功设置ipv6隧道地址。 ------------------------- 回 138楼(ekuns) 的帖子 您好, 欢迎来到阿里云论坛。 操作步骤,Windows 2012和Windows 2008应该是大致相同的。 请问您是否曾按帖子里的步骤,在Windows 2008里测试了呢? 如果您在Windows 2008里测试失败,我为您找个测试机来实践一下喔。 ------------------------- 回 140楼(poplanchong) 的帖子 您好, 如果是ipv6-only,可能还需要DNS解析之类支持的。 ------------------------- 回 142楼(poplanchong) 的帖子 您好, 欢迎来到阿里云论坛。 如果可以ping通ipv6的隧道地址,那么说明配置应该是成功的。 但如果您设置ipv6隧道地址目的是为了通过苹果的APP审核,还是要看苹果公司的判断结果喔。 祝您成功。 ------------------------- 回 144楼(poplanchong) 的帖子 您好, 很高兴听到您的APP已经通过苹果公司的审核。 我没有向苹果公司提交过APP审核,并没有实践的经验。所以我也不确定为什么苹果公司先后不同审核结果的原因。 您前后向苹果公司提交过几个网址用于审核? ------------------------- 回 146楼(没办法抽奖) 的帖子 您好, 我在测试机里, 可以ping通您提到的网关,但您的隧道地址ping不通喔, 是不是哪一步没有操作完整? root@los:~/test5# ping6 2001:470:1f04:a9e::2 PING 2001:470:1f04:a9e::2(2001:470:1f04:a9e::2) 56 data bytes --- 2001:470:1f04:a9e::2 ping statistics --- 41 packets transmitted, 0 received, 100% packet loss, time 39999ms root@los:~/test5# ping6 2001:470:1f04:a9e::1 PING 2001:470:1f04:a9e::1(2001:470:1f04:a9e::1) 56 data bytes 64 bytes from 2001:470:1f04:a9e::1: icmp_seq=1 ttl=56 time=53.5 ms 64 bytes from 2001:470:1f04:a9e::1: icmp_seq=2 ttl=56 time=53.8 ms ------------------------- 回 147楼(poplanchong) 的帖子 您好,   如此,我也不确定具体的原因了。不过,APP审核通过了,终究是件好事,是不是呢? ------------------------- 回 150楼(没办法抽奖) 的帖子 晚上好, 请问您的ECS操作系统是Windows 2012的吗? ------------------------- 回 152楼(l_zhaowei) 的帖子 您好, 请问您新购的ECS实例带宽类型是“专有网络”的吗? ------------------------- 回 153楼(l_zhaowei) 的帖子 您好, 暂时没有在“专有网络”实现IPv6隧道地址的方案喔,抱歉。 ------------------------- 回 157楼(鸿儒网络) 的帖子 您好, 看您的截图,或许需要先着重看一下,为什么“80端口不显示IPV6”, 请问您的站点绑定属性中,是否有IPv6的地址可以选择使用呢? ------------------------- 回 159楼(aeria) 的帖子 您好, 欢迎来到阿里云论坛。 请问您运行 netstat 的命令,可以查看到tomcat在ipv6的80端口上也有监听使用吗? ------------------------- 回 161楼(aeria) 的帖子 您好, 能贴一下您的tomcat配置文件 server.xml 的内容吗(监听那个环节的)? ------------------------- 回 164楼(aeria) 的帖子 您好, 或许您可以查看一下这个问答里提到的“authbind”: http://serverfault.com/questions/605684/tomcat-java-not-listening-on-ipv6 ------------------------- 回 167楼(aeria) 的帖子 您好, 那我去找个测试机,为您测试一下。 您的环境,是Windows 2012 + Tomcat 8 吗? ------------------------- 回 170楼(aeria) 的帖子 您好, 为您写了这个帖子,不知道是否对您有用: 《用ipv6隧道地址访问tomcat 站点内容》 - https://bbs.aliyun.com/read/312055.html ------------------------- 回 172楼(bingo_vc) 的帖子 您好, 欢迎来到阿里云论坛。 如果您的站点不需要域名访问,直接用ipv6隧道地址访问,应该也是可以的喔。 ------------------------- 回 174楼(clks) 的帖子 您好, 现在为您测试,可以访问得到页面喔: --2017-04-09 06:25:52--   http://www.meihaojiawodecheng.cn/ Resolving www.meihaojiawodecheng.cn (www.meihaojiawodecheng.cn)... 2001:470:18:352::2, 116.62.37.108 Connecting to www.meihaojiawodecheng.cn (www.meihaojiawodecheng.cn)|2001:470:18:352::2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 2241 (2.2K) [text/html] Saving to: 'index.html.3' ------------------------- 回 176楼(clks) 的帖子 您好, 在浏览器里,输入如 http://[2001:470:18:352::2]/ 的地址后,应该就能显示到站点内容了,有时可能需要刷新多几下。 ------------------------- 回 178楼(自由2017) 的帖子 您好, 抱歉延时回复。 请问您的ECS实例带宽类型是哪种,是“经典网络”还是“专有网络”呢? ------------------------- 回 179楼(l_zhaowei) 的帖子 您好, 如果ECS实例是“专有网络”的,或许可以参考这个帖子里的例子试试喔: https://bbs.aliyun.com/read/312196.html ------------------------- 回 182楼(l_zhaowei) 的帖子 您好, 有“经典网络”的选项,据云友们反馈,好象一些较早之前注册和使用的阿里云账户还可以在新购的ECS配置里选择“经典网络”的网络类型。 ------------------------- 回 183楼(lbmjsls) 的帖子 您好, 欢迎来到阿里云论坛。 是的,可以,您可以用一个已经有ICP备案的子域名来操作,如果您认为不会对您的业务带来负面影响的话。 ------------------------- 回 186楼(l_zhaowei) 的帖子 您好, 目前收到的反馈来看,并不是所有的阿里云账号可以选购到“经典网络”。 我并不清楚阿里云的具体购物车规则哩。 ------------------------- 回 188楼(自由2017) 的帖子 您好, 如果ECS实例是“专有网络”的,或许可以参考这个帖子里的例子试试喔: https://bbs.aliyun.com/read/312196.html ------------------------- 回 190楼(自由2017) 的帖子 您好, 已经站内信您喔。 ------------------------- 回 192楼(lbmjsls) 的帖子 您好, 都可以ping通,但返回的延时可能有些高。 root@los:~/test5# ping6 thls.qian178.com PING thls.qian178.com(lbmjsls-1-pt.tunnel.tserv20.hkg1.ipv6.he.net) 56 data bytes 64 bytes from lbmjsls-1-pt.tunnel.tserv20.hkg1.ipv6.he.net: icmp_seq=1 ttl=121 time=624 ms 64 bytes from lbmjsls-1-pt.tunnel.tserv20.hkg1.ipv6.he.net: icmp_seq=2 ttl=121 time=622 ms --- thls.qian178.com ping statistics --- 3 packets transmitted, 2 received, 33% packet loss, time 2000ms rtt min/avg/max/mdev = 622.017/623.254/624.492/1.467 ms root@los:~/test5# ping6 qian178.com PING qian178.com(lbmjsls-2-pt.tunnel.tserv20.hkg1.ipv6.he.net) 56 data bytes 64 bytes from lbmjsls-2-pt.tunnel.tserv20.hkg1.ipv6.he.net: icmp_seq=2 ttl=121 time=564 ms 64 bytes from lbmjsls-2-pt.tunnel.tserv20.hkg1.ipv6.he.net: icmp_seq=3 ttl=121 time=563 ms ------------------------- 回 194楼(龙阁商务) 的帖子 您好, 欢迎来到阿里云论坛。 如果前两项测试通,那就可以了呀。 您是对哪里还不满意呢? ------------------------- 回 196楼(龙阁商务) 的帖子 您好, 苹果审核不限次数的吧? 期待您的审核结果喔。 ------------------------- 回 198楼(cloud_lee) 的帖子 您好, 在国外的IPv6环境中的服务器为您测试IPv6访问,是可以的喔: --2017-04-17 07:40:56--   http://www.zxwol.com/ Resolving www.zxwol.com (www.zxwol.com)... 2001:470:18:5cf::2 Connecting to www.zxwol.com (www.zxwol.com)|2001:470:18:5cf::2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 135046 (132K) [text/html] Saving to: 'index.html.15' ------------------------- 回 204楼(龙阁商务) 的帖子 您好, 现在测试,可以访问喔。 --2017-04-18 03:48:45--   http://myjcb.hqzh168.com/ Resolving myjcb.hqzh168.com (myjcb.hqzh168.com)... 2001:470:a:ba4::2 Connecting to myjcb.hqzh168.com (myjcb.hqzh168.com)|2001:470:a:ba4::2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 34431 (34K) [text/html] Saving to: 'index.html.16' ------------------------- 回 206楼(hsy-ios) 的帖子 您好, 欢迎来到阿里云论坛。 现在看起来,您的ipv6隧道地址可以ping得通喔: PING 2001:470:18:600::2(2001:470:18:600::2) 56 data bytes 64 bytes from 2001:470:18:600::2: icmp_seq=1 ttl=121 time=557 ms 64 bytes from 2001:470:18:600::2: icmp_seq=2 ttl=121 time=567 ms 64 bytes from 2001:470:18:600::2: icmp_seq=3 ttl=121 time=574 ms ------------------------- 回 208楼(hsy-ios) 的帖子 您好, 请问是哪个ipv6地址呢? ------------------------- 回 210楼(hsy-ios) 的帖子 您好, --2017-04-20 22:41:23--  http://[2001:470:18:600::2]/ Connecting to [2001:470:18:600::2]:80... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: https://m.wnchebao.com/ [following] converted 'https://m.wnchebao.com/' (ANSI_X3.4-1968) -> 'https://m.wnchebao.com/' (UTF-8) --2017-04-20 22:41:24--   https://m.wnchebao.com/ Resolving m.wnchebao.com (m.wnchebao.com)... 2001:470:18:600::2 Connecting to m.wnchebao.com (m.wnchebao.com)|2001:470:18:600::2|:443... connected. HTTP request sent, awaiting response... 404 Not Found 2017-04-20 22:41:27 ERROR 404: Not Found. ------------------------- 回 212楼(鸿儒网络) 的帖子 您好, 感谢您的经验分享喔。 如有更多的用户遇到类似的“延迟生效”现象,将添加相应的提示信息喔。 ------------------------- 回 214楼(北极星图图) 的帖子 您好, 如果tomcat没有在ipv6的网络地址上监听,您可以详细查看一下tomcat的配置文件喔, 这里有一个例子可以参考一下: https://bbs.aliyun.com/read/312055.html ------------------------- 回 215楼(潘飞虎) 的帖子 您好, 测试的话,您的ipv6隧道地址可以ping通,但ipv6的80连接超时,建议检查web服务的配置喔: PING 2001:470:18:6ae::2(2001:470:18:6ae::2) 56 data bytes 64 bytes from 2001:470:18:6ae::2: icmp_seq=1 ttl=121 time=564 ms 64 bytes from 2001:470:18:6ae::2: icmp_seq=2 ttl=121 time=565 ms --- 2001:470:18:6ae::2 ping statistics --- 3 packets transmitted, 2 received, 33% packet loss, time 1999ms rtt min/avg/max/mdev = 564.291/565.080/565.870/1.090 ms root@los:~/test5# wget -6 http://[2001:470:18:6ae::2] converted 'http://[2001:470:18:6ae::2]' (ANSI_X3.4-1968) -> 'http://[2001:470:18:6ae::2]' (UTF-8) --2017-04-26 14:02:36--  http://[2001:470:18:6ae::2]/ Connecting to [2001:470:18:6ae::2]:80... failed: Connection timed out. Retrying. ------------------------- 回 216楼(hzyt) 的帖子 您好, 欢迎来到阿里云论坛。 请问您ECS实例带宽类型是哪种呢,是“专有网络”吗? ------------------------- 回 220楼(潘飞虎) 的帖子 您好, 请问您的apache配置文件,如 httpd.conf 中,是否有监听ipv6的网络地址呢(如[::])? ------------------------- 回 221楼(永超科技) 的帖子 您好, 请问是否您多次运行了相同的netsh配置命令呢? ------------------------- 回 224楼(beijixingtu) 的帖子 您好, 现在访问您的站点,在ipv6访问中,应该是可以看到内容(或许是部分)的: ------------------------- 回 226楼(四眼鱼) 的帖子 您好, 抱歉延时回复, 请问您的ECS实例使用提“经典网络”的网络类型吗? ------------------------- 回 228楼(这是高科技) 的帖子 您好, 因为目前阿里云的“专有网络”类型的ECS实例限制,不能成功配置和使用6in4的IPv6隧道地址的。 使用外部的IPv6地址的VPS,虽然可以尝试,但也不一定能100%解决苹果APP上架的困扰。 ------------------------- 回 229楼(潘飞虎) 的帖子 您好, 可能还需要看具体的原因,苹果有没有具体说是因为什么而拒绝呢?还是因为IPv6的访问可用性吗? IPv6的DNS并不是必须的,如果您也想设置IPv6的DNS,可以参考这个帖子:《用HE提供的免费DNS解析服务通过IPv6 DNS检测》 - https://bbs.aliyun.com/read/313524.html? ------------------------- 回 233楼(潘飞虎) 的帖子 您好, 嗯,或许您还可以具体说说,中国目前的公共互联网还没有实现IPv6,所以对于中国的APP很为难。 ------------------------- 回 234楼(beijixingtu) 的帖子 您好, 是的,如果可以,可以附上说明,目前中国的公共互联网没有实现IPv6,一般用户无法直接在IPv6的环境里完成完整测试。 ------------------------- 回 237楼(潘飞虎) 的帖子 您好, 苹果要求目前国内还没有完整布置的IPv6环境,是有些让普通人摸不着头脑。 那您现在的工作环境中,有具备测试条件吗?如Mac电脑和苹果手机。 ------------------------- 回 239楼(潘飞虎) 的帖子 您好, 文档中提到,即使是用Mac模拟ipv6的网络,但带宽的出口还是ipv4的。 或许您可以尝试建一个可访问ipv6的wifi环境试试,如网上看到有一些无线路由器或许可以“独特”地构建出来。 ------------------------- 回 240楼(xunchengweidao) 的帖子 您好, 欢迎来到阿里云论坛。 或许您当前使用的nginx没有编译对ipv6的支持喔。 ------------------------- 回 244楼(feng_li) 的帖子 您好, 欢迎来到阿里云论坛。 很乐意,为您ping6测试: PING www.ymygo.com(wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net) 56 data bytes 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=1 ttl=121 time=430 ms 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=2 ttl=121 time=429 ms 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=3 ttl=121 time=430 ms 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=4 ttl=121 time=430 ms ------------------------- 回 246楼(feng_li) 的帖子 您好, 现在再次测试,还是能ping得通。 配置了ipv6的隧道地址,仅是说您的系统(服务器)可以通过隧道地址交换ipv6的数据,如能ping6通或浏览ipv6的网站。但这并不代表着您的APP一定可以支持ipv6的访问喔。建议您再对照着苹果对于APP的 IPv6 设计指导,看看是否有其它原因: https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html PING www.ymygo.com(wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net) 56 data bytes 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=1 ttl=121 time=434 ms 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=2 ttl=121 time=434 ms ------------------------- 回 248楼(爱爱莫能助) 的帖子 您好, 欢迎来到阿里云论坛。 在系统里配置ipv6的命令在he的站点上有提供现成的喔。 ------------------------- 回 251楼(天下才子) 的帖子 您好, 为您查看,现在可以在浏览器里看到内容喔: ------------------------- 回 255楼(居然要昵称) 的帖子 您好, 欢迎来到阿里云论坛。 请问,如 ping ::1  会有哪些信息提示呢? ------------------------- 回 254楼(天下才子) 的帖子 您好, 请问您家里的宽带是哪家的呢,是中国电信的吗? ------------------------- 回 259楼(新飞) 的帖子 您好, 最后一项检测的对象是ipv6 dns server,这是与域名的解析DNS地址相关, 如果您需要,可能需要将域名的DNS地址更改为国外支持ipv6的。 ------------------------- 回 260楼(robin_tian) 的帖子 您好, 欢迎来到阿里云论坛, 看起来,http可以访问喔(但首页会提示404出错): converted 'http://api2.ihyoo.com' (ANSI_X3.4-1968) -> 'http://api2.ihyoo.com' (UTF-8) --2017-05-15 16:03:04--   http://api2.ihyoo.com/ Resolving api2.ihyoo.com (api2.ihyoo.com)... 2001:470:18:d6::2 Connecting to api2.ihyoo.com (api2.ihyoo.com)|2001:470:18:d6::2|:80... connected. HTTP request sent, awaiting response... 404 Not Found 2017-05-15 16:03:06 ERROR 404: Not Found. ------------------------- 回 264楼(天下才子) 的帖子 您好, 如果在您的电脑上不能访问ipv6的网站,可以尝试通过这个在线网站测试一下(可能要用代理): www.ipv6proxy.net ------------------------- 回 267楼(jsrabbit) 的帖子 您好, 欢迎来到阿里云论坛。 看您的几个截图,出现了两个IPv6地址,2001:da8:20d:400::8be0:dd58 和 2001:470:18:b5::2, 如果 2001:470:18:b5::2 是正确的,现在测试是可以访问到80端口端的喔: converted 'http://[2001:470:18:b5::2]' (ANSI_X3.4-1968) -> 'http://[2001:470:18:b5::2]' (UTF-8) --2017-05-17 13:50:44--  http://[2001:470:18:b5::2]/ Connecting to [2001:470:18:b5::2]:80... connected. HTTP request sent, awaiting response... 200 OK Length: 107908 (105K) [text/html] Saving to: 'index.html' index.html                       100%[=========================================================>] 105.38K  20.0KB/s   in 5.3s ------------------------- 回 269楼(jsrabbit) 的帖子 您好, 个人觉得 IPv6 DNS Server 设置与否,影响不大。但您有空,也可以换一家支持IPv6的国外DNS商,如 dns.he.net。 ------------------------- 回 270楼(eric984) 的帖子 来自河源的朋友, 欢迎来到阿里云论坛。 如之前有云友提到,将HE提供的示例命令中,将公网IP换成私网IP,或许就可以了喔。 ------------------------- 回 273楼(通通优品) 的帖子 您好, 欢迎来到阿里云论坛。 请问您在HE里提交的IP地址是什么呢? 一般是提交ECS实例的公网IP地址,并不是内网IP地址喔。 ------------------------- 回 275楼(通通优品) 的帖子 您好, 那能否再检查一下您的安全组规则设置呢(有没有过滤80端口)? 如果可以,或许您可以先尝试在规则里开放所有的访问,对比一下结果。 ------------------------- 回 277楼(通通优品) 的帖子 您好, 如果您多次尝试运行命令来绑定ipv6隧道地址,需要确认最后ipv6隧道地址是能从外网ping6通的喔,同时可以查看一下路由表是否正确。 ------------------------- 回 280楼(大男人主义) 的帖子 您好, 欢迎来到阿里云论坛。 祝您的APP能成功上架喔。 ------------------------- 回 282楼(仙人掌有刺) 的帖子 您好, 从现在的测试结果来看,好象您的域名AAAA解析没有生效或失败: converted 'http://m.dnanren.cn' (ANSI_X3.4-1968) -> 'http://m.dnanren.cn' (UTF-8) --2017-05-25 10:30:51--   http://m.dnanren.cn/ Resolving m.dnanren.cn (m.dnanren.cn)... failed: Name or service not known. wget: unable to resolve host address 'm.dnanren.cn' ------------------------- 回 284楼(葫芦娃警长) 的帖子 您好, 抱歉给您带来不便。 域名AAAA记录和ipv4的A记录是不互相影响的喔。 如果ping -6 外网的地址不通,那有可能是路由没配置好喔。 ------------------------- 回 287楼(中广巨力) 的帖子 您好, 欢迎来到阿里云论坛。 现在好象我无法ping通您的ipv6隧道地址喔: PING 2001:470:1f10:124::2(2001:470:1f10:124::2) 56 data bytes --- 2001:470:1f10:124::2 ping statistics --- 13 packets transmitted, 0 received, 100% packet loss, time 11997ms ------------------------- 回 290楼(中广巨力) 的帖子 您好, 欢迎来到阿里云论坛。 一般不需要重新申请第二个隧道地址喔。 建议您检查一下ipv6的路由情况。 ------------------------- 回 292楼(中广巨力) 的帖子 您好, 抱歉延时回复。 如果您ping -6 不通隧道地址的网关,可以检查一下ECS实例的安全组是否有限制访问: https://help.aliyun.com/document_detail/25471.html ------------------------- 回 294楼(yan555) 的帖子 您好, 欢迎来到阿里云论坛。 请问您在系统中执行的是哪些命令, 执行命令后,有哪些回显的信息呢? ------------------------- 回 298楼(lsfoo) 的帖子 您好, 欢迎来到阿里云论坛。 例子中是ipv6隧道地址,是需经ipv4传送的,所以,建议您在安全组里允许所有的协议和端口,对比测试一下喔。 ------------------------- 回 300楼(华邦云12138) 的帖子 您好, 提示有重名,有可能是多次执行命令后提示的。 可删除之前添加的,或第二次执行命令时,跳过这一步。 ------------------------- 回 301楼(华邦云12138) 的帖子 您好, 建议您检查实例的安全组规则, 如果可以,建议放行全部的协议和端口: https://help.aliyun.com/document_detail/25471.html ------------------------- 回 305楼(华邦云12138) 的帖子 您好, 抱歉延时回复。 能否截图,看看您的安全组规则呢? ------------------------- 回 306楼(笔墨kk) 的帖子 您好, 欢迎来到阿里云论坛。 在图中看到的信息,虚拟的IPv6网络接口是“断开”状态的喔。 请问您具体执行了哪些命令呢? ------------------------- 回 310楼(笔墨kk) 的帖子 您好, 看命令的内容,是HE网站上提供的。 如果您使用的专有网络,需要注意将命令中的公网IP换成系统的内网IP喔。 ------------------------- 回 312楼(笔墨kk) 的帖子 您好, 可以先试试哩,替换一下IP后试试。 ------------------------- 回 314楼(华邦云12138) 的帖子 您好, 如广东的中国电信用户,应该也可以直接ping -6 的吧, 如现在我尝试的: 正在 Ping 2001:470:18:b07::2 具有 32 字节的数据: 请求超时。 来自 2001:470:18:b07::2 的回复: 时间=994ms 来自 2001:470:18:b07::2 的回复: 时间=996ms 来自 2001:470:18:b07::2 的回复: 时间=959ms 2001:470:18:b07::2 的 Ping 统计信息:     数据包: 已发送 = 4,已接收 = 3,丢失 = 1 (25% 丢失), 往返行程的估计时间(以毫秒为单位):     最短 = 959ms,最长 = 996ms,平均 = 983ms ------------------------- 回 317楼(笔墨kk) 的帖子 您好, 创建IPv6隧道地址时,是需要提交公网IP的喔。 只不过,是在创建好隧道地址后的命令中,替换喔。 ------------------------- 回 320楼(笔墨kk) 的帖子 您好, 很高兴听到您已经在系统中成功配置了ipv6隧道地址。 ------------------------- 回 322楼(笔墨kk) 的帖子 您好, 这个需要满足一些条件的,如您家里用来ping的系统是什么呢,有没有启用ipv6?您家里的路由器是否支持ipv6? 如在我自己的电脑里能ping -6 通您的隧道地址: 正在 Ping yongchun.gosob.com [2001:470:18:cce::2] 具有 32 字节的数据: 来自 2001:470:18:cce::2 的回复: 时间=3291ms 请求超时。 来自 2001:470:18:cce::2 的回复: 时间=676ms 来自 2001:470:18:cce::2 的回复: 时间=913ms ------------------------- 回 321楼(miazhang) 的帖子 您好, 欢迎来到阿里云论坛。 现在从外网的机子测试,能ping6通您的隧道地址喔。 论坛在Chrome和Firefox里,是无法上传图片,但如UC可以。 PING 2001:470:18:b61::2(2001:470:18:b61::2) 56 data bytes 64 bytes from 2001:470:18:b61::2: icmp_seq=1 ttl=121 time=610 ms 64 bytes from 2001:470:18:b61::2: icmp_seq=2 ttl=121 time=602 ms 64 bytes from 2001:470:18:b61::2: icmp_seq=3 ttl=121 time=601 ms 64 bytes from 2001:470:18:b61::2: icmp_seq=4 ttl=121 time=602 ms ------------------------- 回 326楼(笔墨kk) 的帖子 您好, 嗯,一般情况来说,能ping -6 得通ipv6隧道地址,那说明您的设置生效了喔。 如果不信,那可以重装ECS系统后,再ping -6 一下,看能否通。 ------------------------- 回 328楼(笔墨kk) 的帖子 您好, 好哩,祝您的APP上架成功喔。 ------------------------- 回 329楼(miazhang) 的帖子 您好, 请问执行以下命令,会有什么样的显示结果呢? netstat -noa | find ":80" ------------------------- 回 333楼(miazhang) 的帖子 您好, 如果这是全部的信息输出, 是喔,您的Web服务没有在ipv6的网络接口上监听使用喔。 ------------------------- 回 334楼(leodoo) 的帖子 您好, 欢迎来到阿里云论坛。 1. HE的隧道地址是6in4,好象是理解为将ipv6的数据包通过ipv4来传送。如果您的应用服务需要使用ipv6地址来通讯,是需要在ipv6的网络接口上监听 3. 从外网测试,可以访问您的站点喔: converted 'http://5656k.com' (ANSI_X3.4-1968) -> 'http://5656k.com' (UTF-8) --2017-06-15 10:24:13--   http://5656k.com/ Resolving 5656k.com (5656k.com)... 2001:470:18:cf4::2 Connecting to 5656k.com (5656k.com)|2001:470:18:cf4::2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: 'index.html.5' ------------------------- Re:回 338楼(miazhang) 的帖子 您好, 如果是 dig,应该是dig域名而不是网址吧? ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46629 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ; www.xueshupa.net.              IN      AAAA ;; ANSWER SECTION: www.xueshupa.net.       600     IN      AAAA    2001:470:18:b61::2 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 25716 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ; http://www.xueshupa.net.       IN      AAAA ;; Query time: 5013 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Thu Jun 15 23:22:35 CST 2017 ;; MSG SIZE  rcvd: 52 ------------------------- 回 340楼(超级蜜蜂) 的帖子 您好, 欢迎来到阿里云论坛。 现在我测试,可以喔: --2017-06-20 21:20:37--   https://www.zgzbsc.vip/Diamond/frontgoods/index Resolving www.zgzbsc.vip (www.zgzbsc.vip)... 2001:470:18:1141::2 Connecting to www.zgzbsc.vip (www.zgzbsc.vip)|2001:470:18:1141::2|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: 'index' ------------------------- 回 342楼(miazhang) 的帖子 您好, 抱歉听到您的APP被苹果拒审, 如在开始讨论的,苹果并不要求APP服务器一定要有IPv6的地址,但强调APP软件本身要使用ipv6-only的设计规范,如要使用域名来引用地址,要使用新的函数,不能将ipv4的地址写死,等等。 建议您下一步的排查重心放在APP软件本身上。 ------------------------- 回 344楼(超级蜜蜂) 的帖子 您好, 抱歉听到您的APP被苹果拒审, 如在开始讨论的,苹果并不要求APP服务器一定要有IPv6的地址,但强调APP软件本身要使用ipv6-only的设计规范,如要使用域名来引用地址,要使用新的函数,不能将ipv4的地址写死,等等。 建议您下一步的排查重心放在APP软件本身上。 ------------------------- 回 347楼(hornsun.tech) 的帖子 您好, 欢迎来到阿里云论坛。 服务器 执行 netstat -nao | find "80"时 没看到有[::]:80端 -> 请问您有没检查Web的设置,是否有监听使用ipv6的地址呢? 按照提示,安全组规则也增加了公网的入网规则 -> 请问您添加的规则是怎么样的呢? ------------------------- 回 348楼(24k壮士) 的帖子 您好, 欢迎来到阿里云论坛。 现在测试,不能ping6通您的隧道地址喔。 ING zgzzhds.com(AyinAy7-1-pt.tunnel.tserv25.sin1.ipv6.he.net) 56 data bytes --- zgzzhds.com ping statistics --- 12 packets transmitted, 0 received, 100% packet loss, time 10997ms ------------------------- 回 351楼(很赞) 的帖子 您好, 欢迎来到阿里云论坛。 是的,因为SLB的服务器用户不能配置隧道地址,而ECS是在SLB后边。 ------------------------- 回 353楼(很赞) 的帖子 您好, 按苹果的指导文档来看,要求的是APP软件本身能兼容ipv6-only的网络环境,并不是要求APP服务器有ipv6的地址。 所以,重心应该是在app软件本身的设计和构建上哩。 ------------------------- 回 355楼(aaa.a) 的帖子 您好, 欢迎来到阿里云论坛。 现在测试,可以ping得通喔: PING 2001:470:35:7ee::2(2001:470:35:7ee::2) 56 data bytes 64 bytes from 2001:470:35:7ee::2: icmp_seq=1 ttl=120 time=555 ms 64 bytes from 2001:470:35:7ee::2: icmp_seq=2 ttl=120 time=555 ms 64 bytes from 2001:470:35:7ee::2: icmp_seq=3 ttl=120 time=555 ms ------------------------- 回 357楼(miazhang) 的帖子 您好, ipv6 dns server,请参考这个例子:《用HE提供的免费DNS解析服务通过IPv6 DNS检测》 - https://bbs.aliyun.com/read/313524.html? ------------------------- 回 359楼(xl_young) 的帖子 您好, 欢迎来到阿里云论坛。 请问您的实例安全组是否允许所以协议通过呢? ------------------------- 回 361楼(xl_young) 的帖子 您好, 能否截图看看安全组规则的内容? ------------------------- 您好,欢迎来到阿里云论坛。可以ping6通,wget返回404错误信息:--2017-08-01 12:24:03--  http://api.qingyun100.com/Resolving api.qingyun100.com (api.qingyun100.com)... 2001:470:18:490::2, 139.196.40.67Connecting to api.qingyun100.com (api.qingyun100.com)|2001:470:18:490::2|:80... connected.HTTP request sent, awaiting response... 404 Not Found2017-08-01 12:24:03 ERROR 404: Not Found. ------------------------- 回 365楼(菜鸟017) 的帖子 您好, 欢迎来到阿里云论坛。 从外围的服务器来测试的话,提示403禁止访问喔: --2017-08-09 09:35:44--   http://tangxianqipai1.zai0312.com:90/ Resolving tangxianqipai1.zai0312.com (tangxianqipai1.zai0312.com)... 2001:470:18:695::2 Connecting to tangxianqipai1.zai0312.com (tangxianqipai1.zai0312.com)|2001:470:18:695::2|:90... connected. HTTP request sent, awaiting response... 403 Forbidden 2017-08-09 09:35:45 ERROR 403: Forbidden. ------------------------- 回 368楼(菜鸟017) 的帖子 您好, 当时,我是使用境外的IPv6机子来为您测试的喔。 ------------------------- 回 369楼(菜鸟017) 的帖子 您好, 这个可能是测试时,所使用的DNS域名服务器不支持ipv6吧。 一般这个不太紧要的,因为国内的DNS服务器,一般没有IPv6地址的,除非您使用国外的。 ------------------------- 回 372楼(菜鸟017) 的帖子 您好, 目前的情况,可能阿里云没有为ECS配置可公众访问的IPv6地址呢。 阿里云的公共DNS服务器,目前好象也没有IPv6地址。 ------------------------- 回 374楼(菜鸟017) 的帖子 您好, 如果是在Windows 2012,删除之前存在的“ip6tunnel”虚拟接口, 或许可以试试以下这个命令: netsh int ipv6 delete interface "ip6tunnel" ------------------------- 回 377楼(菜鸟017) 的帖子 您好, 很高兴听到您已经解决了问题, 有空时,请多来阿里云论坛逛逛喔。 ------------------------- 回 380楼(sheldonlin) 的帖子 您好, 欢迎来到阿里云论坛。 能否贴出您在Windows里执行的命令? ------------------------- 您好,可能需要检查web服务是否也在ipv6的网络地址里监听80端口: --2017-08-20 09:37:23--  (try: 2)   http://kambuzz.com/ Connecting to kambuzz.com (kambuzz.com)|2001:470:18:8f2::2|:80... failed: Connection re fused. liujia@hk2:~/test6$ ping6 2001:470:18:8f2::2 PING 2001:470:18:8f2::2(2001:470:18:8f2::2) 56 data bytes 64 bytes from 2001:470:18:8f2::2: icmp_seq=1 ttl=127 time=311 ms 64 bytes from 2001:470:18:8f2::2: icmp_seq=2 ttl=127 time=310 ms ------------------------- 回 386楼(sheldonlin) 的帖子 您好, 是的。 好象没有80端口的监听使用情况喔。 执行以下的命令,再看看: netstat -noa | find ":80" ------------------------- 回 388楼(sheldonlin) 的帖子 您好, 您是想让您的站点能从ipv6的网络里访问到页面内容吗? 从您的命令输出结果来看,好象并没有web进程喔。 关于苹果对于ipv6-only的要求,请看这个指导文档: https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1 ------------------------- 回 391楼(sheldonlin) 的帖子 您好, 那您在运行tomcat后,执行 netstat -noa | find ":8080" 后,有哪些输出结果呢? ------------------------- 回 394楼(sheldonlin) 的帖子 您好, 请尝试检查实例的安全组规则,看是否有阻止外网访问8080端口: https://help.aliyun.com/document_detail/25471.html ------------------------- 回 398楼(sheldonlin) 的帖子 您好, 总结得不错。 现在测试,是可以从外网的ipv6测试机访问的: liujia@hk2:~/test6$ wget -6 kambuzz.com:8080 --2017-08-21 10:51:58--   http://kambuzz.com:8080/ Resolving kambuzz.com (kambuzz.com)... 2001:470:18:8f2::2 Connecting to kambuzz.com (kambuzz.com)|2001:470:18:8f2::2|:8080... connected. HTTP request sent, awaiting response... 200 Length: unspecified [text/html] index.html: Permission denied 如果您的实例是Linux系统的,建议在后台长驻运行一个ping6的命令,如 ping6 ipv6.google.com ,以让您的ipv6隧道地址保持激活的状态,避免如20分钟后ipv6隧道地址ping6不通。 ------------------------- 回 400楼(sheldonlin) 的帖子 您好, 有时您的IPv6隧道地址ping不通, 在ping通时,可以访问到页面的内容,如: ------------------------- 回 402楼(sheldonlin) 的帖子 您好, 不确定具体的原因,但您可以尝试更换到其它的中转服务器,如美国的,看看会不会比目前的香港好些。 ------------------------- 回 405楼(sheldonlin) 的帖子 您好, ping6了几分钟后,可以ping通了。 liujia@hk2:~$ ping6 2001:470:c:67a::2 PING 2001:470:c:67a::2(2001:470:c:67a::2) 56 data bytes 64 bytes from 2001:470:c:67a::2: icmp_seq=232 ttl=123 time=313 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=233 ttl=123 time=313 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=234 ttl=123 time=313 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=235 ttl=123 time=313 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=236 ttl=123 time=315 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=237 ttl=123 time=387 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=238 ttl=123 time=387 ms --- 2001:470:c:67a::2 ping statistics --- 238 packets transmitted, 7 received, 97% packet loss, time 238848ms rtt min/avg/max/mdev = 313.431/335.021/387.851/33.233 ms ------------------------- 回 407楼(sheldonlin) 的帖子 您好, 测试的ping值差不多喔: PING 2001:470:18:94d::2(2001:470:18:94d::2) 56 data bytes 64 bytes from 2001:470:18:94d::2: icmp_seq=1 ttl=127 time=325 ms 64 bytes from 2001:470:18:94d::2: icmp_seq=2 ttl=127 time=325 ms 64 bytes from 2001:470:18:94d::2: icmp_seq=3 ttl=127 time=325 ms 64 bytes from 2001:470:18:94d::2: icmp_seq=4 ttl=127 time=325 ms 64 bytes from 2001:470:18:94d::2: icmp_seq=5 ttl=127 time=325 ms ------------------------- 回 409楼(觅约) 的帖子 您好, 欢迎来到阿里云论坛。 现在测试,访问正常喔: liujia@hk2:~/test6$ wget -6 app.miyueta.com:9088 --2017-08-28 18:25:36--   http://app.miyueta.com:9088/ Resolving app.miyueta.com (app.miyueta.com)... 2001:19f0:6001:213:5400:ff:fe77:5183 Connecting to app.miyueta.com (app.miyueta.com)|2001:19f0:6001:213:5400:ff:fe77:5183|:9088... connected. HTTP request sent, awaiting response... 200 OK Length: 52 [text/html] ------------------------- Re:回 411楼(ios——ot) 的帖子 您好, 我现在从外网为您ping6测试,可ping通,但有丢包。 liujia@hk2:~$ ping6 admin.allti.com.cn PING admin.allti.com.cn(wbnahqs-1-pt.tunnel.tserv25.sin1.ipv6.he.net) 56 data bytes 64 bytes from wbnahqs-1-pt.tunnel.tserv25.sin1.ipv6.he.net: icmp_seq=4 ttl=124 time=566 ms 64 bytes from wbnahqs-1-pt.tunnel.tserv25.sin1.ipv6.he.net: icmp_seq=5 ttl=124 time=545 ms 64 bytes from wbnahqs-1-pt.tunnel.tserv25.sin1.ipv6.he.net: icmp_seq=13 ttl=124 time=539 ms --- admin.allti.com.cn ping statistics --- 16 packets transmitted, 3 received, 81% packet loss, time 15087ms rtt min/avg/max/mdev = 539.496/550.382/566.125/11.400 ms ------------------------- 回 415楼(ios——ot) 的帖子 您好, 有可能。换别的中转服务器,如美国的来对比看看。 ------------------------- 回 437楼(卡乐) 的帖子 版主回复: 没看到相应的安全性评估。 个人想,是这样的:如果您的数据传送开始时,已经是加密的,如https,那隧道转发的服务器也不能读取到数据内容吧? 且,隧道转发的服务商,he.net应该是一家有信誉的公司。 再者,这里的隧道地址设置,目的是帮助APP上架,如果您的APP上架后,可停用隧道地址。 ------------------------- 回 439楼(卡乐) 的帖子 版主回复: 反方向操作哩,如在系统里禁用/删除隧道地址(如netsh int ipv6 delete interface "ip6tunnel")。 ------------------------- 回 443楼(阿凯十三郎) 的帖子 版主回复: 或许您需要检查一下ECS实例的安全组,看是放行了ipv6隧道地址服务器的访问。 目前测试来看,您的ipv6隧道地址从外网是ping6不通的。 --2018-01-25 10:41:07--   http://www.cjnmw.xyz/ Resolving www.cjnmw.xyz (www.cjnmw.xyz)... 2001:470:18:f02::2 Connecting to www.cjnmw.xyz (www.cjnmw.xyz)|2001:470:18:f02::2|:80... failed: Connection timed out. Retrying. liujia@hk2:~/test7$ ping6 2001:470:18:f02::2 PING 2001:470:18:f02::2(2001:470:18:f02::2) 56 data bytes --- 2001:470:18:f02::2 ping statistics --- 21 packets transmitted, 0 received, 100% packet loss, time 20154ms liujia@hk2:~/test7$ ping6 2001:470:18:f02::1 PING 2001:470:18:f02::1(2001:470:18:f02::1) 56 data bytes 64 bytes from 2001:470:18:f02::1: icmp_seq=1 ttl=64 time=1.41 ms 64 bytes from 2001:470:18:f02::1: icmp_seq=2 ttl=64 time=1.40 ms --- 2001:470:18:f02::1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.404/1.409/1.415/0.037 ms ------------------------- 回 448楼(阿凯十三郎) 的帖子 版主回复: 从您的ECS实例能ping通隧道地址服务器的IP,但不代表从隧道地址的服务器能ping通(访问)您的ECS实例喔。 ------------------------- 回 449楼(阿凯十三郎) 的帖子 版主回复: 是哩,看起来,外网已经能通过隧道地址访问到您的apache里了。 您调整了ECS实例的安全组规则吗? ------------------------- 回 452楼(阿凯十三郎) 的帖子 版主回复: 据网友反馈:域名本身的 ipv6 DNS Server 并不重要。 ------------------------- 回 455楼(纪念青春) 的帖子 版主回复: 请试试: netsh int ipv6 delete interface "ip6tunnel" ------------------------- 回 458楼(老黄000001) 的帖子 您好, 图中信息,显示IPv6隧道地址断开状态, 请问您在之前配置隧道地址的命令中,包含的IP是ECS实例的公网IP还是内网IP? 一般来说,应该在命令中写内网IP的,即您图中的看到的172.18.132.2 ------------------------- 回 460楼(尜淇专版) 的帖子 您好, 在He.net里申请隧道地址时,请填写ECS实例的公网IP地址喔。 ------------------------- 回 462楼(潮约) 的帖子 您好, 使用VPC网络的ECS实例,在配置隧道地址时,是需要绑定内网IP,因为公网IP不是在系统里。 如果配置隧道地址时,绑定了内网IP,也无法正常使用的话,建议检查ECS实例安全组规则或Windows防火墙,如将隧道地址服务器的IPv4加到白名单中。

dongshan8 2019-12-02 02:58:04 0 浏览量 回答数 0

回答

回 3楼(莫有) 的帖子 您好, 请问您使用的系统是哪种Linux发行版呢?是CentOS 6吗? ------------------------- 回 5楼(莫有) 的帖子 您好, 好的,等我找到合适的测试机,再为您在CentOS7 系统里测试ipv6的隧道设置喔。 ------------------------- 回 5楼(莫有) 的帖子 您好, 为您写了这个CentOS 7的配置帖子,希望对您有帮助喔: https://bbs.aliyun.com/read.php?tid=285557 ------------------------- 回 10楼(非洲小犀牛) 的帖子 您好, 如果您的是Linux系统,可能需要先为系统启用ipv6的功能喔。请看这里的例子: https://bbs.aliyun.com/read/285557.html ------------------------- 回 12楼(猎马网) 的帖子 您好, 欢迎来到阿里云论坛。 IPv6测试不能通过的原因是什么呢?您在 http://ipv6-test.com/validate.php 里测试您的站点访问结果是什么呢? ------------------------- 回 14楼(猎马网) 的帖子 您好, 如本例中的,添加IPv6隧道地址的默认网关命令,应该是: netsh interface ipv6 add route ::/0 IP6Tunnel 2001:470:18:401::1 请问,您在做第5步时,是否有运行如上边类似的命令吗? ------------------------- 回 16楼(猎马网) 的帖子 您好, 您可以查看“网络连接”里对应的连接属性,估计可以直接修改的哩。 ------------------------- 回 19楼(猎马网) 的帖子 您好, 我在测试机里使用wget测试,好象正常: root@los:~/test4# wget -6 http://www.iliema.com/ converted 'http://www.iliema.com/' (ANSI_X3.4-1968) -> 'http://www.iliema.com/' (UTF-8) --2016-08-11 22:28:41--   http://www.iliema.com/ Resolving www.iliema.com (www.iliema.com)... 2001:470:1f14:b5f::2 Connecting to www.iliema.com (www.iliema.com)|2001:470:1f14:b5f::2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 77636 (76K) [text/html] Saving to: 'index.html.3' ------------------------- 回 20楼(猎马网) 的帖子 您好, 应该可以如IPv4那样,多个域名指到相同的IPv6地址。 ------------------------- 回 24楼(很快) 的帖子 您好, 请问您的nginx web是安装在Windows还是Linux的系统上? ------------------------- 回 26楼(喵咪喵) 的帖子 您好, 欢迎来到阿里云论坛。 申请到IPv6的隧道地址后,还需要在系统里配置的,以让这个IPv6的地址能被外网的用户访问到喔。 ------------------------- 回 29楼(不断学习) 的帖子 您好, 请问您使用的操作系统是WIndows 2012吗? 请问您执行的netsh命令是和操作说明那里一样的吗? ------------------------- 回 31楼(喵咪喵) 的帖子 您好, 应该不影响,如果前两项检查测试通过,最后一条(IPv6-only)测试不通过,应该是可以的。 ------------------------- 回 34楼(wolfing5210) 的帖子 您好, 我在Linux系统上,能ping通您的IPv6地址: root@los:~# ping6 2001:470:35:102a::2 PING 2001:470:35:102a::2(2001:470:35:102a::2) 56 data bytes 64 bytes from 2001:470:35:102a::2: icmp_seq=1 ttl=119 time=225 ms 64 bytes from 2001:470:35:102a::2: icmp_seq=2 ttl=119 time=226 ms 如果您要测试,要具备两个条件, a. 在Windows系统里,应该是使用 ping -6 的参数 b. 发出测试的系统是启用了IPv6 ------------------------- 回 37楼(小成123456) 的帖子 您好, 抱歉延时回复。 请问您在系统里,执行 ipconfig /all 后,能看到输出信息中包含的ipv6 tunel信息吗? ------------------------- 回 39楼(呢你) 的帖子 您好, 抱歉给您带来不便。 请问苹果审核拒绝的原因是什么,是不能连接到ipv6地址吗? 请问您创建的ipv6隧道地址,测试时能从外网成功访问吗? ------------------------- 回 41楼(呢你) 的帖子 您好, 80端口测试是正常的,但好象web返回了错误。 建议您咨询一下您的 APP 程序员。 root@los:~/test# curl [2001:470:18:95c::2] -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' J BossWeb/2.0.1.GA - Error report ------------------------- 回 44楼(nyanko桑) 的帖子 您好, 那请问您在例子中,第5步执行的命令是哪些呢? ------------------------- 回 45楼(小成123456) 的帖子 您好, 域名AAAA解析与IPv6隧道地址设置并不直接相关,如果您的IPv6隧道地址设置正确,从外网应该能ping通这个新设置的IPv6隧道地址。 ------------------------- 回 48楼(nyanko桑) 的帖子 您好, 好象命令看起来没有问题,您是从 HE 隧道地址设置网站里直接复制的,对吗? 那执行命令时,是否回显的结果是“确定”,还是有别的错误信息提示呢? ------------------------- 回 50楼(持名) 的帖子 您好, 那就奇怪了。 建议您回过头梳理一下,看看是否缺了哪个步骤或环境有哪些特殊的地方。 ------------------------- 回 52楼(nyanko桑) 的帖子 您好, 或许将原命令中的“add”(添加)改为“del”(删除)后,可以试试。  我个人猜测的。 ------------------------- 回 54楼(nyanko桑) 的帖子 您好, 好哩,到时如还没有解决问题,可通过站内信,发来临时的ECS登录信息,我为您看看喔。 ------------------------- 回 56楼(nyanko桑) 的帖子 您好, 申请到的IPv6隧道地址是不变的呀,除非您删除了。 ------------------------- 回 58楼(nyanko桑) 的帖子 您好, 好哩,祝愿您的APP能通过苹果的审核。 如还有疑问,欢迎跟帖。 ------------------------- 回 60楼(゛温ゝ先生) 的帖子 您好, 您在站内信里提到说“网络有重名”,现在系统里没成功添加ipv6地址吗? ------------------------- 回 61楼(陈cc123) 的帖子 您好, 一般AAA记录里,主机记录填写的是从HE申请到的IPv6隧道地址。 更新:应该是“记录值”里填写从he申请到的ipv6隧道地址。 ------------------------- 回 65楼(陈cc123) 的帖子 您好, 对不起,之前我的说法有错误。 按阿里云解析面板中,“主机记录”应该是您需要设置的网站访问地址,如我这里想设置 ipv6.anqun.org 的ipv6地址,“主机记录”里填写“ipv6”,而“记录值”里填写IPv6隧道地址:2001:470:18:401::2 ------------------------- 回 67楼(陈cc123) 的帖子 您好, 那请问您提交给 http://ipv6-test.com/ 测试的网址是什么呢? ------------------------- 回 69楼(陈cc123) 的帖子 您好, 页面 http://ipv6-test.com/validate.php 里提交的网址应该是一个域名网址,应该不能直接提交IPv6地址去测试的喔。 您可以在您的域名控制面板添加一条AAA记录的呀。 ------------------------- 回 72楼(陈cc123) 的帖子 您好, 能否使用如 netstat -noa | grep 80 的命令,来查看当前Web服务是否在ipv6地址监听使用呢? ------------------------- 回 74楼(陈cc123) 的帖子 您好, 图中没有显示IPv6相关的8080端口使用情况喔, 或许您可以运行 netstat -noa | grep 8080 再次确认一下。 ------------------------- 回 78楼(陈cc123) 的帖子 您好, 是的,不好意思,我忘记了您的系统是Windows,不是linux,所以不能直接用grep的命令。 现在从外网测试,您的tomcat站点是可以从ipv6地址访问了,但或许您将web从8080换到常用的80端口,方便访问。 root@los:~/test# curl [2001:470:18:ab3::2]:8080 -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' Apache Tomcat/7.0.54 ------------------------- 回 80楼(陈cc123) 的帖子 您好, 如果您提交给苹果审核就是带8080的IPv6地址,那可保持现状。 能否说一下具体您审核网址?如果按上边的测试结果来看,您的IPv6隧道地址是(曾)正常工作。 ------------------------- 回 82楼(陈cc123) 的帖子 您好, 现在从外网测试您给的网址,正常。 root@los:~/test# curl -6 'http://www.91mcgj.cn:8080' -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' Apache Tomcat/7.0.54 root@los:~/test# curl 'http://www.91mcgj.cn:8080' -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' Apache Tomcat/7.0.54 ------------------------- 回 84楼(陈cc123) 的帖子 您好, 可能那个检测的站点,只能检测默认80端口的吧,具体到您这里,您是要写明8080端口的,所以那个测试网址可能不适用喔。 ------------------------- 回 87楼(xiaopao888) 的帖子 您好, 欢迎来到阿里云论坛。 能否请问在“命令提示符”里执行以下的命令,看输出结果有没有关于ipv6的80地址监听呢? netstat -noa | find "80" ------------------------- 回 88楼(莫尼玛) 的帖子 您好, 欢迎来到阿里云论坛。 如果您使用自己的环境来测试,需要确认您的环境是否支持ipv6使用环境喔,如您的telnet程序是否支持ipv6,您的网络是否支持ipv6。 我拿一个美国的vps来测试,也是可以成功连接到您的ipv6隧道地址: root@los:~/test# curl [2001:470:18:aa8::2] -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' Microsoft Internet Information Services 8 ------------------------- 回 91楼(xiaopao888) 的帖子 您好, 如果web没有在iPv6的网络接口上监听,请尝试调整一下web的配置文件喔,如让它在所有的可用网络接口里监听。 ------------------------- 回 93楼(莫尼玛) 的帖子 您好, 请问您在tcp 8300里提供的服务是web的吗? 如果是web服务,测试不成功喔: root@los:~# curl [2001:470:18:aa8::2:8300] -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' root@los:~# ------------------------- 回 97楼(莫尼玛) 的帖子 您好, 好象用telnet测试8300 tcp 端口,不成功喔: root@los:~# telnet -6 2001:470:18:aa8::2 8300 Trying 2001:470:18:aa8::2... telnet: Unable to connect to remote host: Connection refused root@los:~# telnet -6 2001:470:18:aa8::2 80 Trying 2001:470:18:aa8::2... Connected to 2001:470:18:aa8::2. Escape character is '^]'. Connection closed by foreign host. ------------------------- 回 100楼(莫尼玛) 的帖子 您好, 如果您的socket程序默认不是在所有的端口上监听使用,是需要调整一下的喔。 或您使用 netstat -noa 的命令,查看一下都有哪些8300的端口在使用。 ------------------------- 回 102楼(莫尼玛) 的帖子 您好, 0.0.0.0 可能代表是IPv4的所有网络接口,不包括IPv6的啊。 请看这个云友以下的这个贴图,最后一行代表是IPv6的所有网络接口: ------------------------- 回 105楼(莫尼玛) 的帖子 您好, 好的,请稍等。 8310可以,8300也可以。 root@los:~# telnet -6 ht.yulesy.cn 8310 Trying 2001:470:18:aa8::2... Connected to ht.yulesy.cn. Escape character is '^]'. root@los:~# telnet -6 ht.yulesy.cn 8300 Trying 2001:470:18:aa8::2... Connected to ht.yulesy.cn. Escape character is '^]'. ------------------------- 回 109楼(涛涛~) 的帖子 您好, 如果您需要通过http访问位于两个不同服务器上的文件,或许是需要为这两个服务器都配置ipv6隧道地址喔。 ------------------------- 回 110楼(陌祥伟) 的帖子 您好, 我现在没测试机,不能具体为您查看输出结果, 您用 ipconfig 查看到的信息页面内容是怎么样的呢? ------------------------- 回 113楼(陌祥伟) 的帖子 您好, 请问您提到的“本地ping和telnet端口是通的”,是ping ipv6和telnet ipv6隧道地址都正常吗? ------------------------- 回 115楼(陌祥伟) 的帖子 您好, 我这里为您测试,也是ping6不通, 或许您需要再检查一下是否有防火墙或其它缺漏的环节没留意到: --- 2001:470:23:70d::2 ping statistics --- 65 packets transmitted, 0 received, 100% packet loss, time 64000ms ------------------------- 回 119楼(leyuwei) 的帖子 您好, 请问您的ipv6隧道地址是 2001:470:18:ecc::2 吗? 我从外网测试,返回是403的错误页: root@los:~# wget -6 http://[2001:470:18:ecc::2]:8080 converted 'http://[2001:470:18:ecc::2]:8080' (ANSI_X3.4-1968) -> 'http://[2001:470:18:ecc::2]:8080' (UTF-8) --2017-01-07 01:27:05--  http://[2001:470:18:ecc::2]:8080/ Connecting to [2001:470:18:ecc::2]:8080... connected. HTTP request sent, awaiting response... 403 Forbidden 2017-01-07 01:27:09 ERROR 403: Forbidden. root@los:~# curl -6 'http://www.dlmunews.club:8080' <p align='center'>▒▒▒▒▒▒▒▒▒▒▒▒ַ▒▒▒▒▒޲▒ϣ▒▒▒▒▒▒ô▒▒▒▒▒▒▒▒°ɣ▒</p> <p align='center'>▒▒▒▒▒ִ▒▒▒▒ˣ▒▒▒▒▒▒޾▒Ҫ▒▒ȡһЩ▒ֶ▒▒ˣ▒</p> <br/> <p align='center'>403 FORBIDDEN</p> <p align='center'>▒▒▒▒▒▒˼▒▒▒▒▒▒▒뿴▒▒▒ҵ▒▒▒▒ӣ▒</p>root@los:~# ------------------------- 回 118楼(陌祥伟) 的帖子 您好, 我去找个Windows 2008的系统为您测试一下喔。 请等待。 ------------------------- Re:回 118楼(陌祥伟) 的帖子 您好, 我找个测试机(用的是Windows 2008 SP2 32位中文版公共镜像),重复操作了一次,好象正常哩: C:\Users\Administrator>netsh interface ipv6 show interface Idx  Met   MTU   状态          名称 ---  ---  -----  -----------  -------------------   1   50 4294967295  connected    Loopback Pseudo-Interface 1 15   10   1280  connected    IP6Tunnel 10   10   1500  connected    本地连接 22   50   1280  disconnected  本地连接* 12 23   50   1280  disconnected  本地连接* 13 11   10   1500  connected    本地连接 2 C:\Users\Administrator>ping -6 2001:470:18:401::2 正在 Ping 2001:470:18:401::2 从 2001:470:18:401::2 具有 32 字节的数据: 来自 2001:470:18:401::2 的回复: 时间<1ms 来自 2001:470:18:401::2 的回复: 时间<1ms 2001:470:18:401::2 的 Ping 统计信息:     数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位):     最短 = 0ms,最长 = 0ms,平均 = 0ms Control-C ^C C:\Users\Administrator>ping -6 ipv6.google.com 正在 Ping ipv6.l.google.com [2404:6800:4008:800::200e] 从 2001:470:18:401::2 具 有 32 字节的数据: 来自 2404:6800:4008:800::200e 的回复: 时间=401ms 来自 2404:6800:4008:800::200e 的回复: 时间=400ms ------------------------- 回 122楼(leyuwei) 的帖子 您好, 在我使用的测试机里,能访问到您提供的网址内容喔,祝您通过APP的IPv6审核。 root@los:~/test# curl -6 'http://www.dlmunews.club:8080/dlmunews/test.html' test IPV6root@los:~/test# ------------------------- 回 125楼(陌祥伟) 的帖子 您好, 抱歉没有留意您的ECS网络类型, 弹性公网IP,看介绍说是一种NatIP,我不确定这与“经典网络”里的公网IP是否有一些使用限制情景, 建议您发工单咨询一下阿里云官方工程师: https://workorder.console.aliyun.com/ 本帖里的例子ECS是“经典网络”,并不是“专有网络”或“弹性公网IP”的使用场景喔。 ------------------------- 回 131楼(dearvitamin) 的帖子 您好, 测试得知,经典网络中的站点可以,专用网络中的站点不可以访问到喔。 root@los:~/test# curl -6 'http://www.spl258.com' -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' 斯普林游戏 root@los:~/test# curl -6 'http://www.longm258.com' -so - | grep -iPo '(?<=<title>)(.*)(?=</title>)' ------------------------- 回 133楼(vinny1024) 的帖子 您好, 欢迎来到阿里云论坛。 本例子里的Web是IIS,并不是apache喔。 请问您在apache的配置文件里,已经设置监听使得ipv6的地址和端口了吗? ------------------------- 回 136楼(raolan123) 的帖子 您好, 已有的云友反馈,不能按例子中的方法在”专有网络“中成功设置ipv6隧道地址。 ------------------------- 回 138楼(ekuns) 的帖子 您好, 欢迎来到阿里云论坛。 操作步骤,Windows 2012和Windows 2008应该是大致相同的。 请问您是否曾按帖子里的步骤,在Windows 2008里测试了呢? 如果您在Windows 2008里测试失败,我为您找个测试机来实践一下喔。 ------------------------- 回 140楼(poplanchong) 的帖子 您好, 如果是ipv6-only,可能还需要DNS解析之类支持的。 ------------------------- 回 142楼(poplanchong) 的帖子 您好, 欢迎来到阿里云论坛。 如果可以ping通ipv6的隧道地址,那么说明配置应该是成功的。 但如果您设置ipv6隧道地址目的是为了通过苹果的APP审核,还是要看苹果公司的判断结果喔。 祝您成功。 ------------------------- 回 144楼(poplanchong) 的帖子 您好, 很高兴听到您的APP已经通过苹果公司的审核。 我没有向苹果公司提交过APP审核,并没有实践的经验。所以我也不确定为什么苹果公司先后不同审核结果的原因。 您前后向苹果公司提交过几个网址用于审核? ------------------------- 回 146楼(没办法抽奖) 的帖子 您好, 我在测试机里, 可以ping通您提到的网关,但您的隧道地址ping不通喔, 是不是哪一步没有操作完整? root@los:~/test5# ping6 2001:470:1f04:a9e::2 PING 2001:470:1f04:a9e::2(2001:470:1f04:a9e::2) 56 data bytes --- 2001:470:1f04:a9e::2 ping statistics --- 41 packets transmitted, 0 received, 100% packet loss, time 39999ms root@los:~/test5# ping6 2001:470:1f04:a9e::1 PING 2001:470:1f04:a9e::1(2001:470:1f04:a9e::1) 56 data bytes 64 bytes from 2001:470:1f04:a9e::1: icmp_seq=1 ttl=56 time=53.5 ms 64 bytes from 2001:470:1f04:a9e::1: icmp_seq=2 ttl=56 time=53.8 ms ------------------------- 回 147楼(poplanchong) 的帖子 您好,   如此,我也不确定具体的原因了。不过,APP审核通过了,终究是件好事,是不是呢? ------------------------- 回 150楼(没办法抽奖) 的帖子 晚上好, 请问您的ECS操作系统是Windows 2012的吗? ------------------------- 回 152楼(l_zhaowei) 的帖子 您好, 请问您新购的ECS实例带宽类型是“专有网络”的吗? ------------------------- 回 153楼(l_zhaowei) 的帖子 您好, 暂时没有在“专有网络”实现IPv6隧道地址的方案喔,抱歉。 ------------------------- 回 157楼(鸿儒网络) 的帖子 您好, 看您的截图,或许需要先着重看一下,为什么“80端口不显示IPV6”, 请问您的站点绑定属性中,是否有IPv6的地址可以选择使用呢? ------------------------- 回 159楼(aeria) 的帖子 您好, 欢迎来到阿里云论坛。 请问您运行 netstat 的命令,可以查看到tomcat在ipv6的80端口上也有监听使用吗? ------------------------- 回 161楼(aeria) 的帖子 您好, 能贴一下您的tomcat配置文件 server.xml 的内容吗(监听那个环节的)? ------------------------- 回 164楼(aeria) 的帖子 您好, 或许您可以查看一下这个问答里提到的“authbind”: http://serverfault.com/questions/605684/tomcat-java-not-listening-on-ipv6 ------------------------- 回 167楼(aeria) 的帖子 您好, 那我去找个测试机,为您测试一下。 您的环境,是Windows 2012 + Tomcat 8 吗? ------------------------- 回 170楼(aeria) 的帖子 您好, 为您写了这个帖子,不知道是否对您有用: 《用ipv6隧道地址访问tomcat 站点内容》 - https://bbs.aliyun.com/read/312055.html ------------------------- 回 172楼(bingo_vc) 的帖子 您好, 欢迎来到阿里云论坛。 如果您的站点不需要域名访问,直接用ipv6隧道地址访问,应该也是可以的喔。 ------------------------- 回 174楼(clks) 的帖子 您好, 现在为您测试,可以访问得到页面喔: --2017-04-09 06:25:52--   http://www.meihaojiawodecheng.cn/ Resolving www.meihaojiawodecheng.cn (www.meihaojiawodecheng.cn)... 2001:470:18:352::2, 116.62.37.108 Connecting to www.meihaojiawodecheng.cn (www.meihaojiawodecheng.cn)|2001:470:18:352::2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 2241 (2.2K) [text/html] Saving to: 'index.html.3' ------------------------- 回 176楼(clks) 的帖子 您好, 在浏览器里,输入如 http://[2001:470:18:352::2]/ 的地址后,应该就能显示到站点内容了,有时可能需要刷新多几下。 ------------------------- 回 178楼(自由2017) 的帖子 您好, 抱歉延时回复。 请问您的ECS实例带宽类型是哪种,是“经典网络”还是“专有网络”呢? ------------------------- 回 179楼(l_zhaowei) 的帖子 您好, 如果ECS实例是“专有网络”的,或许可以参考这个帖子里的例子试试喔: https://bbs.aliyun.com/read/312196.html ------------------------- 回 182楼(l_zhaowei) 的帖子 您好, 有“经典网络”的选项,据云友们反馈,好象一些较早之前注册和使用的阿里云账户还可以在新购的ECS配置里选择“经典网络”的网络类型。 ------------------------- 回 183楼(lbmjsls) 的帖子 您好, 欢迎来到阿里云论坛。 是的,可以,您可以用一个已经有ICP备案的子域名来操作,如果您认为不会对您的业务带来负面影响的话。 ------------------------- 回 186楼(l_zhaowei) 的帖子 您好, 目前收到的反馈来看,并不是所有的阿里云账号可以选购到“经典网络”。 我并不清楚阿里云的具体购物车规则哩。 ------------------------- 回 188楼(自由2017) 的帖子 您好, 如果ECS实例是“专有网络”的,或许可以参考这个帖子里的例子试试喔: https://bbs.aliyun.com/read/312196.html ------------------------- 回 190楼(自由2017) 的帖子 您好, 已经站内信您喔。 ------------------------- 回 192楼(lbmjsls) 的帖子 您好, 都可以ping通,但返回的延时可能有些高。 root@los:~/test5# ping6 thls.qian178.com PING thls.qian178.com(lbmjsls-1-pt.tunnel.tserv20.hkg1.ipv6.he.net) 56 data bytes 64 bytes from lbmjsls-1-pt.tunnel.tserv20.hkg1.ipv6.he.net: icmp_seq=1 ttl=121 time=624 ms 64 bytes from lbmjsls-1-pt.tunnel.tserv20.hkg1.ipv6.he.net: icmp_seq=2 ttl=121 time=622 ms --- thls.qian178.com ping statistics --- 3 packets transmitted, 2 received, 33% packet loss, time 2000ms rtt min/avg/max/mdev = 622.017/623.254/624.492/1.467 ms root@los:~/test5# ping6 qian178.com PING qian178.com(lbmjsls-2-pt.tunnel.tserv20.hkg1.ipv6.he.net) 56 data bytes 64 bytes from lbmjsls-2-pt.tunnel.tserv20.hkg1.ipv6.he.net: icmp_seq=2 ttl=121 time=564 ms 64 bytes from lbmjsls-2-pt.tunnel.tserv20.hkg1.ipv6.he.net: icmp_seq=3 ttl=121 time=563 ms ------------------------- 回 194楼(龙阁商务) 的帖子 您好, 欢迎来到阿里云论坛。 如果前两项测试通,那就可以了呀。 您是对哪里还不满意呢? ------------------------- 回 196楼(龙阁商务) 的帖子 您好, 苹果审核不限次数的吧? 期待您的审核结果喔。 ------------------------- 回 198楼(cloud_lee) 的帖子 您好, 在国外的IPv6环境中的服务器为您测试IPv6访问,是可以的喔: --2017-04-17 07:40:56--   http://www.zxwol.com/ Resolving www.zxwol.com (www.zxwol.com)... 2001:470:18:5cf::2 Connecting to www.zxwol.com (www.zxwol.com)|2001:470:18:5cf::2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 135046 (132K) [text/html] Saving to: 'index.html.15' ------------------------- 回 204楼(龙阁商务) 的帖子 您好, 现在测试,可以访问喔。 --2017-04-18 03:48:45--   http://myjcb.hqzh168.com/ Resolving myjcb.hqzh168.com (myjcb.hqzh168.com)... 2001:470:a:ba4::2 Connecting to myjcb.hqzh168.com (myjcb.hqzh168.com)|2001:470:a:ba4::2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 34431 (34K) [text/html] Saving to: 'index.html.16' ------------------------- 回 206楼(hsy-ios) 的帖子 您好, 欢迎来到阿里云论坛。 现在看起来,您的ipv6隧道地址可以ping得通喔: PING 2001:470:18:600::2(2001:470:18:600::2) 56 data bytes 64 bytes from 2001:470:18:600::2: icmp_seq=1 ttl=121 time=557 ms 64 bytes from 2001:470:18:600::2: icmp_seq=2 ttl=121 time=567 ms 64 bytes from 2001:470:18:600::2: icmp_seq=3 ttl=121 time=574 ms ------------------------- 回 208楼(hsy-ios) 的帖子 您好, 请问是哪个ipv6地址呢? ------------------------- 回 210楼(hsy-ios) 的帖子 您好, --2017-04-20 22:41:23--  http://[2001:470:18:600::2]/ Connecting to [2001:470:18:600::2]:80... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: https://m.wnchebao.com/ [following] converted 'https://m.wnchebao.com/' (ANSI_X3.4-1968) -> 'https://m.wnchebao.com/' (UTF-8) --2017-04-20 22:41:24--   https://m.wnchebao.com/ Resolving m.wnchebao.com (m.wnchebao.com)... 2001:470:18:600::2 Connecting to m.wnchebao.com (m.wnchebao.com)|2001:470:18:600::2|:443... connected. HTTP request sent, awaiting response... 404 Not Found 2017-04-20 22:41:27 ERROR 404: Not Found. ------------------------- 回 212楼(鸿儒网络) 的帖子 您好, 感谢您的经验分享喔。 如有更多的用户遇到类似的“延迟生效”现象,将添加相应的提示信息喔。 ------------------------- 回 214楼(北极星图图) 的帖子 您好, 如果tomcat没有在ipv6的网络地址上监听,您可以详细查看一下tomcat的配置文件喔, 这里有一个例子可以参考一下: https://bbs.aliyun.com/read/312055.html ------------------------- 回 215楼(潘飞虎) 的帖子 您好, 测试的话,您的ipv6隧道地址可以ping通,但ipv6的80连接超时,建议检查web服务的配置喔: PING 2001:470:18:6ae::2(2001:470:18:6ae::2) 56 data bytes 64 bytes from 2001:470:18:6ae::2: icmp_seq=1 ttl=121 time=564 ms 64 bytes from 2001:470:18:6ae::2: icmp_seq=2 ttl=121 time=565 ms --- 2001:470:18:6ae::2 ping statistics --- 3 packets transmitted, 2 received, 33% packet loss, time 1999ms rtt min/avg/max/mdev = 564.291/565.080/565.870/1.090 ms root@los:~/test5# wget -6 http://[2001:470:18:6ae::2] converted 'http://[2001:470:18:6ae::2]' (ANSI_X3.4-1968) -> 'http://[2001:470:18:6ae::2]' (UTF-8) --2017-04-26 14:02:36--  http://[2001:470:18:6ae::2]/ Connecting to [2001:470:18:6ae::2]:80... failed: Connection timed out. Retrying. ------------------------- 回 216楼(hzyt) 的帖子 您好, 欢迎来到阿里云论坛。 请问您ECS实例带宽类型是哪种呢,是“专有网络”吗? ------------------------- 回 220楼(潘飞虎) 的帖子 您好, 请问您的apache配置文件,如 httpd.conf 中,是否有监听ipv6的网络地址呢(如[::])? ------------------------- 回 221楼(永超科技) 的帖子 您好, 请问是否您多次运行了相同的netsh配置命令呢? ------------------------- 回 224楼(beijixingtu) 的帖子 您好, 现在访问您的站点,在ipv6访问中,应该是可以看到内容(或许是部分)的: ------------------------- 回 226楼(四眼鱼) 的帖子 您好, 抱歉延时回复, 请问您的ECS实例使用提“经典网络”的网络类型吗? ------------------------- 回 228楼(这是高科技) 的帖子 您好, 因为目前阿里云的“专有网络”类型的ECS实例限制,不能成功配置和使用6in4的IPv6隧道地址的。 使用外部的IPv6地址的VPS,虽然可以尝试,但也不一定能100%解决苹果APP上架的困扰。 ------------------------- 回 229楼(潘飞虎) 的帖子 您好, 可能还需要看具体的原因,苹果有没有具体说是因为什么而拒绝呢?还是因为IPv6的访问可用性吗? IPv6的DNS并不是必须的,如果您也想设置IPv6的DNS,可以参考这个帖子:《用HE提供的免费DNS解析服务通过IPv6 DNS检测》 - https://bbs.aliyun.com/read/313524.html? ------------------------- 回 233楼(潘飞虎) 的帖子 您好, 嗯,或许您还可以具体说说,中国目前的公共互联网还没有实现IPv6,所以对于中国的APP很为难。 ------------------------- 回 234楼(beijixingtu) 的帖子 您好, 是的,如果可以,可以附上说明,目前中国的公共互联网没有实现IPv6,一般用户无法直接在IPv6的环境里完成完整测试。 ------------------------- 回 237楼(潘飞虎) 的帖子 您好, 苹果要求目前国内还没有完整布置的IPv6环境,是有些让普通人摸不着头脑。 那您现在的工作环境中,有具备测试条件吗?如Mac电脑和苹果手机。 ------------------------- 回 239楼(潘飞虎) 的帖子 您好, 文档中提到,即使是用Mac模拟ipv6的网络,但带宽的出口还是ipv4的。 或许您可以尝试建一个可访问ipv6的wifi环境试试,如网上看到有一些无线路由器或许可以“独特”地构建出来。 ------------------------- 回 240楼(xunchengweidao) 的帖子 您好, 欢迎来到阿里云论坛。 或许您当前使用的nginx没有编译对ipv6的支持喔。 ------------------------- 回 244楼(feng_li) 的帖子 您好, 欢迎来到阿里云论坛。 很乐意,为您ping6测试: PING www.ymygo.com(wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net) 56 data bytes 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=1 ttl=121 time=430 ms 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=2 ttl=121 time=429 ms 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=3 ttl=121 time=430 ms 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=4 ttl=121 time=430 ms ------------------------- 回 246楼(feng_li) 的帖子 您好, 现在再次测试,还是能ping得通。 配置了ipv6的隧道地址,仅是说您的系统(服务器)可以通过隧道地址交换ipv6的数据,如能ping6通或浏览ipv6的网站。但这并不代表着您的APP一定可以支持ipv6的访问喔。建议您再对照着苹果对于APP的 IPv6 设计指导,看看是否有其它原因: https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html PING www.ymygo.com(wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net) 56 data bytes 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=1 ttl=121 time=434 ms 64 bytes from wsbl-1-pt.tunnel.tserv22.tyo1.ipv6.he.net: icmp_seq=2 ttl=121 time=434 ms ------------------------- 回 248楼(爱爱莫能助) 的帖子 您好, 欢迎来到阿里云论坛。 在系统里配置ipv6的命令在he的站点上有提供现成的喔。 ------------------------- 回 251楼(天下才子) 的帖子 您好, 为您查看,现在可以在浏览器里看到内容喔: ------------------------- 回 255楼(居然要昵称) 的帖子 您好, 欢迎来到阿里云论坛。 请问,如 ping ::1  会有哪些信息提示呢? ------------------------- 回 254楼(天下才子) 的帖子 您好, 请问您家里的宽带是哪家的呢,是中国电信的吗? ------------------------- 回 259楼(新飞) 的帖子 您好, 最后一项检测的对象是ipv6 dns server,这是与域名的解析DNS地址相关, 如果您需要,可能需要将域名的DNS地址更改为国外支持ipv6的。 ------------------------- 回 260楼(robin_tian) 的帖子 您好, 欢迎来到阿里云论坛, 看起来,http可以访问喔(但首页会提示404出错): converted 'http://api2.ihyoo.com' (ANSI_X3.4-1968) -> 'http://api2.ihyoo.com' (UTF-8) --2017-05-15 16:03:04--   http://api2.ihyoo.com/ Resolving api2.ihyoo.com (api2.ihyoo.com)... 2001:470:18:d6::2 Connecting to api2.ihyoo.com (api2.ihyoo.com)|2001:470:18:d6::2|:80... connected. HTTP request sent, awaiting response... 404 Not Found 2017-05-15 16:03:06 ERROR 404: Not Found. ------------------------- 回 264楼(天下才子) 的帖子 您好, 如果在您的电脑上不能访问ipv6的网站,可以尝试通过这个在线网站测试一下(可能要用代理): www.ipv6proxy.net ------------------------- 回 267楼(jsrabbit) 的帖子 您好, 欢迎来到阿里云论坛。 看您的几个截图,出现了两个IPv6地址,2001:da8:20d:400::8be0:dd58 和 2001:470:18:b5::2, 如果 2001:470:18:b5::2 是正确的,现在测试是可以访问到80端口端的喔: converted 'http://[2001:470:18:b5::2]' (ANSI_X3.4-1968) -> 'http://[2001:470:18:b5::2]' (UTF-8) --2017-05-17 13:50:44--  http://[2001:470:18:b5::2]/ Connecting to [2001:470:18:b5::2]:80... connected. HTTP request sent, awaiting response... 200 OK Length: 107908 (105K) [text/html] Saving to: 'index.html' index.html                       100%[=========================================================>] 105.38K  20.0KB/s   in 5.3s ------------------------- 回 269楼(jsrabbit) 的帖子 您好, 个人觉得 IPv6 DNS Server 设置与否,影响不大。但您有空,也可以换一家支持IPv6的国外DNS商,如 dns.he.net。 ------------------------- 回 270楼(eric984) 的帖子 来自河源的朋友, 欢迎来到阿里云论坛。 如之前有云友提到,将HE提供的示例命令中,将公网IP换成私网IP,或许就可以了喔。 ------------------------- 回 273楼(通通优品) 的帖子 您好, 欢迎来到阿里云论坛。 请问您在HE里提交的IP地址是什么呢? 一般是提交ECS实例的公网IP地址,并不是内网IP地址喔。 ------------------------- 回 275楼(通通优品) 的帖子 您好, 那能否再检查一下您的安全组规则设置呢(有没有过滤80端口)? 如果可以,或许您可以先尝试在规则里开放所有的访问,对比一下结果。 ------------------------- 回 277楼(通通优品) 的帖子 您好, 如果您多次尝试运行命令来绑定ipv6隧道地址,需要确认最后ipv6隧道地址是能从外网ping6通的喔,同时可以查看一下路由表是否正确。 ------------------------- 回 280楼(大男人主义) 的帖子 您好, 欢迎来到阿里云论坛。 祝您的APP能成功上架喔。 ------------------------- 回 282楼(仙人掌有刺) 的帖子 您好, 从现在的测试结果来看,好象您的域名AAAA解析没有生效或失败: converted 'http://m.dnanren.cn' (ANSI_X3.4-1968) -> 'http://m.dnanren.cn' (UTF-8) --2017-05-25 10:30:51--   http://m.dnanren.cn/ Resolving m.dnanren.cn (m.dnanren.cn)... failed: Name or service not known. wget: unable to resolve host address 'm.dnanren.cn' ------------------------- 回 284楼(葫芦娃警长) 的帖子 您好, 抱歉给您带来不便。 域名AAAA记录和ipv4的A记录是不互相影响的喔。 如果ping -6 外网的地址不通,那有可能是路由没配置好喔。 ------------------------- 回 287楼(中广巨力) 的帖子 您好, 欢迎来到阿里云论坛。 现在好象我无法ping通您的ipv6隧道地址喔: PING 2001:470:1f10:124::2(2001:470:1f10:124::2) 56 data bytes --- 2001:470:1f10:124::2 ping statistics --- 13 packets transmitted, 0 received, 100% packet loss, time 11997ms ------------------------- 回 290楼(中广巨力) 的帖子 您好, 欢迎来到阿里云论坛。 一般不需要重新申请第二个隧道地址喔。 建议您检查一下ipv6的路由情况。 ------------------------- 回 292楼(中广巨力) 的帖子 您好, 抱歉延时回复。 如果您ping -6 不通隧道地址的网关,可以检查一下ECS实例的安全组是否有限制访问: https://help.aliyun.com/document_detail/25471.html ------------------------- 回 294楼(yan555) 的帖子 您好, 欢迎来到阿里云论坛。 请问您在系统中执行的是哪些命令, 执行命令后,有哪些回显的信息呢? ------------------------- 回 298楼(lsfoo) 的帖子 您好, 欢迎来到阿里云论坛。 例子中是ipv6隧道地址,是需经ipv4传送的,所以,建议您在安全组里允许所有的协议和端口,对比测试一下喔。 ------------------------- 回 300楼(华邦云12138) 的帖子 您好, 提示有重名,有可能是多次执行命令后提示的。 可删除之前添加的,或第二次执行命令时,跳过这一步。 ------------------------- 回 301楼(华邦云12138) 的帖子 您好, 建议您检查实例的安全组规则, 如果可以,建议放行全部的协议和端口: https://help.aliyun.com/document_detail/25471.html ------------------------- 回 305楼(华邦云12138) 的帖子 您好, 抱歉延时回复。 能否截图,看看您的安全组规则呢? ------------------------- 回 306楼(笔墨kk) 的帖子 您好, 欢迎来到阿里云论坛。 在图中看到的信息,虚拟的IPv6网络接口是“断开”状态的喔。 请问您具体执行了哪些命令呢? ------------------------- 回 310楼(笔墨kk) 的帖子 您好, 看命令的内容,是HE网站上提供的。 如果您使用的专有网络,需要注意将命令中的公网IP换成系统的内网IP喔。 ------------------------- 回 312楼(笔墨kk) 的帖子 您好, 可以先试试哩,替换一下IP后试试。 ------------------------- 回 314楼(华邦云12138) 的帖子 您好, 如广东的中国电信用户,应该也可以直接ping -6 的吧, 如现在我尝试的: 正在 Ping 2001:470:18:b07::2 具有 32 字节的数据: 请求超时。 来自 2001:470:18:b07::2 的回复: 时间=994ms 来自 2001:470:18:b07::2 的回复: 时间=996ms 来自 2001:470:18:b07::2 的回复: 时间=959ms 2001:470:18:b07::2 的 Ping 统计信息:     数据包: 已发送 = 4,已接收 = 3,丢失 = 1 (25% 丢失), 往返行程的估计时间(以毫秒为单位):     最短 = 959ms,最长 = 996ms,平均 = 983ms ------------------------- 回 317楼(笔墨kk) 的帖子 您好, 创建IPv6隧道地址时,是需要提交公网IP的喔。 只不过,是在创建好隧道地址后的命令中,替换喔。 ------------------------- 回 320楼(笔墨kk) 的帖子 您好, 很高兴听到您已经在系统中成功配置了ipv6隧道地址。 ------------------------- 回 322楼(笔墨kk) 的帖子 您好, 这个需要满足一些条件的,如您家里用来ping的系统是什么呢,有没有启用ipv6?您家里的路由器是否支持ipv6? 如在我自己的电脑里能ping -6 通您的隧道地址: 正在 Ping yongchun.gosob.com [2001:470:18:cce::2] 具有 32 字节的数据: 来自 2001:470:18:cce::2 的回复: 时间=3291ms 请求超时。 来自 2001:470:18:cce::2 的回复: 时间=676ms 来自 2001:470:18:cce::2 的回复: 时间=913ms ------------------------- 回 321楼(miazhang) 的帖子 您好, 欢迎来到阿里云论坛。 现在从外网的机子测试,能ping6通您的隧道地址喔。 论坛在Chrome和Firefox里,是无法上传图片,但如UC可以。 PING 2001:470:18:b61::2(2001:470:18:b61::2) 56 data bytes 64 bytes from 2001:470:18:b61::2: icmp_seq=1 ttl=121 time=610 ms 64 bytes from 2001:470:18:b61::2: icmp_seq=2 ttl=121 time=602 ms 64 bytes from 2001:470:18:b61::2: icmp_seq=3 ttl=121 time=601 ms 64 bytes from 2001:470:18:b61::2: icmp_seq=4 ttl=121 time=602 ms ------------------------- 回 326楼(笔墨kk) 的帖子 您好, 嗯,一般情况来说,能ping -6 得通ipv6隧道地址,那说明您的设置生效了喔。 如果不信,那可以重装ECS系统后,再ping -6 一下,看能否通。 ------------------------- 回 328楼(笔墨kk) 的帖子 您好, 好哩,祝您的APP上架成功喔。 ------------------------- 回 329楼(miazhang) 的帖子 您好, 请问执行以下命令,会有什么样的显示结果呢? netstat -noa | find ":80" ------------------------- 回 333楼(miazhang) 的帖子 您好, 如果这是全部的信息输出, 是喔,您的Web服务没有在ipv6的网络接口上监听使用喔。 ------------------------- 回 334楼(leodoo) 的帖子 您好, 欢迎来到阿里云论坛。 1. HE的隧道地址是6in4,好象是理解为将ipv6的数据包通过ipv4来传送。如果您的应用服务需要使用ipv6地址来通讯,是需要在ipv6的网络接口上监听 3. 从外网测试,可以访问您的站点喔: converted 'http://5656k.com' (ANSI_X3.4-1968) -> 'http://5656k.com' (UTF-8) --2017-06-15 10:24:13--   http://5656k.com/ Resolving 5656k.com (5656k.com)... 2001:470:18:cf4::2 Connecting to 5656k.com (5656k.com)|2001:470:18:cf4::2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: 'index.html.5' ------------------------- Re:回 338楼(miazhang) 的帖子 您好, 如果是 dig,应该是dig域名而不是网址吧? ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46629 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ; www.xueshupa.net.              IN      AAAA ;; ANSWER SECTION: www.xueshupa.net.       600     IN      AAAA    2001:470:18:b61::2 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 25716 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ; http://www.xueshupa.net.       IN      AAAA ;; Query time: 5013 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Thu Jun 15 23:22:35 CST 2017 ;; MSG SIZE  rcvd: 52 ------------------------- 回 340楼(超级蜜蜂) 的帖子 您好, 欢迎来到阿里云论坛。 现在我测试,可以喔: --2017-06-20 21:20:37--   https://www.zgzbsc.vip/Diamond/frontgoods/index Resolving www.zgzbsc.vip (www.zgzbsc.vip)... 2001:470:18:1141::2 Connecting to www.zgzbsc.vip (www.zgzbsc.vip)|2001:470:18:1141::2|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: 'index' ------------------------- 回 342楼(miazhang) 的帖子 您好, 抱歉听到您的APP被苹果拒审, 如在开始讨论的,苹果并不要求APP服务器一定要有IPv6的地址,但强调APP软件本身要使用ipv6-only的设计规范,如要使用域名来引用地址,要使用新的函数,不能将ipv4的地址写死,等等。 建议您下一步的排查重心放在APP软件本身上。 ------------------------- 回 344楼(超级蜜蜂) 的帖子 您好, 抱歉听到您的APP被苹果拒审, 如在开始讨论的,苹果并不要求APP服务器一定要有IPv6的地址,但强调APP软件本身要使用ipv6-only的设计规范,如要使用域名来引用地址,要使用新的函数,不能将ipv4的地址写死,等等。 建议您下一步的排查重心放在APP软件本身上。 ------------------------- 回 347楼(hornsun.tech) 的帖子 您好, 欢迎来到阿里云论坛。 服务器 执行 netstat -nao | find "80"时 没看到有[::]:80端 -> 请问您有没检查Web的设置,是否有监听使用ipv6的地址呢? 按照提示,安全组规则也增加了公网的入网规则 -> 请问您添加的规则是怎么样的呢? ------------------------- 回 348楼(24k壮士) 的帖子 您好, 欢迎来到阿里云论坛。 现在测试,不能ping6通您的隧道地址喔。 ING zgzzhds.com(AyinAy7-1-pt.tunnel.tserv25.sin1.ipv6.he.net) 56 data bytes --- zgzzhds.com ping statistics --- 12 packets transmitted, 0 received, 100% packet loss, time 10997ms ------------------------- 回 351楼(很赞) 的帖子 您好, 欢迎来到阿里云论坛。 是的,因为SLB的服务器用户不能配置隧道地址,而ECS是在SLB后边。 ------------------------- 回 353楼(很赞) 的帖子 您好, 按苹果的指导文档来看,要求的是APP软件本身能兼容ipv6-only的网络环境,并不是要求APP服务器有ipv6的地址。 所以,重心应该是在app软件本身的设计和构建上哩。 ------------------------- 回 355楼(aaa.a) 的帖子 您好, 欢迎来到阿里云论坛。 现在测试,可以ping得通喔: PING 2001:470:35:7ee::2(2001:470:35:7ee::2) 56 data bytes 64 bytes from 2001:470:35:7ee::2: icmp_seq=1 ttl=120 time=555 ms 64 bytes from 2001:470:35:7ee::2: icmp_seq=2 ttl=120 time=555 ms 64 bytes from 2001:470:35:7ee::2: icmp_seq=3 ttl=120 time=555 ms ------------------------- 回 357楼(miazhang) 的帖子 您好, ipv6 dns server,请参考这个例子:《用HE提供的免费DNS解析服务通过IPv6 DNS检测》 - https://bbs.aliyun.com/read/313524.html? ------------------------- 回 359楼(xl_young) 的帖子 您好, 欢迎来到阿里云论坛。 请问您的实例安全组是否允许所以协议通过呢? ------------------------- 回 361楼(xl_young) 的帖子 您好, 能否截图看看安全组规则的内容? ------------------------- 您好,欢迎来到阿里云论坛。可以ping6通,wget返回404错误信息:--2017-08-01 12:24:03--  http://api.qingyun100.com/Resolving api.qingyun100.com (api.qingyun100.com)... 2001:470:18:490::2, 139.196.40.67Connecting to api.qingyun100.com (api.qingyun100.com)|2001:470:18:490::2|:80... connected.HTTP request sent, awaiting response... 404 Not Found2017-08-01 12:24:03 ERROR 404: Not Found. ------------------------- 回 365楼(菜鸟017) 的帖子 您好, 欢迎来到阿里云论坛。 从外围的服务器来测试的话,提示403禁止访问喔: --2017-08-09 09:35:44--   http://tangxianqipai1.zai0312.com:90/ Resolving tangxianqipai1.zai0312.com (tangxianqipai1.zai0312.com)... 2001:470:18:695::2 Connecting to tangxianqipai1.zai0312.com (tangxianqipai1.zai0312.com)|2001:470:18:695::2|:90... connected. HTTP request sent, awaiting response... 403 Forbidden 2017-08-09 09:35:45 ERROR 403: Forbidden. ------------------------- 回 368楼(菜鸟017) 的帖子 您好, 当时,我是使用境外的IPv6机子来为您测试的喔。 ------------------------- 回 369楼(菜鸟017) 的帖子 您好, 这个可能是测试时,所使用的DNS域名服务器不支持ipv6吧。 一般这个不太紧要的,因为国内的DNS服务器,一般没有IPv6地址的,除非您使用国外的。 ------------------------- 回 372楼(菜鸟017) 的帖子 您好, 目前的情况,可能阿里云没有为ECS配置可公众访问的IPv6地址呢。 阿里云的公共DNS服务器,目前好象也没有IPv6地址。 ------------------------- 回 374楼(菜鸟017) 的帖子 您好, 如果是在Windows 2012,删除之前存在的“ip6tunnel”虚拟接口, 或许可以试试以下这个命令: netsh int ipv6 delete interface "ip6tunnel" ------------------------- 回 377楼(菜鸟017) 的帖子 您好, 很高兴听到您已经解决了问题, 有空时,请多来阿里云论坛逛逛喔。 ------------------------- 回 380楼(sheldonlin) 的帖子 您好, 欢迎来到阿里云论坛。 能否贴出您在Windows里执行的命令? ------------------------- 您好,可能需要检查web服务是否也在ipv6的网络地址里监听80端口: --2017-08-20 09:37:23--  (try: 2)   http://kambuzz.com/ Connecting to kambuzz.com (kambuzz.com)|2001:470:18:8f2::2|:80... failed: Connection re fused. liujia@hk2:~/test6$ ping6 2001:470:18:8f2::2 PING 2001:470:18:8f2::2(2001:470:18:8f2::2) 56 data bytes 64 bytes from 2001:470:18:8f2::2: icmp_seq=1 ttl=127 time=311 ms 64 bytes from 2001:470:18:8f2::2: icmp_seq=2 ttl=127 time=310 ms ------------------------- 回 386楼(sheldonlin) 的帖子 您好, 是的。 好象没有80端口的监听使用情况喔。 执行以下的命令,再看看: netstat -noa | find ":80" ------------------------- 回 388楼(sheldonlin) 的帖子 您好, 您是想让您的站点能从ipv6的网络里访问到页面内容吗? 从您的命令输出结果来看,好象并没有web进程喔。 关于苹果对于ipv6-only的要求,请看这个指导文档: https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1 ------------------------- 回 391楼(sheldonlin) 的帖子 您好, 那您在运行tomcat后,执行 netstat -noa | find ":8080" 后,有哪些输出结果呢? ------------------------- 回 394楼(sheldonlin) 的帖子 您好, 请尝试检查实例的安全组规则,看是否有阻止外网访问8080端口: https://help.aliyun.com/document_detail/25471.html ------------------------- 回 398楼(sheldonlin) 的帖子 您好, 总结得不错。 现在测试,是可以从外网的ipv6测试机访问的: liujia@hk2:~/test6$ wget -6 kambuzz.com:8080 --2017-08-21 10:51:58--   http://kambuzz.com:8080/ Resolving kambuzz.com (kambuzz.com)... 2001:470:18:8f2::2 Connecting to kambuzz.com (kambuzz.com)|2001:470:18:8f2::2|:8080... connected. HTTP request sent, awaiting response... 200 Length: unspecified [text/html] index.html: Permission denied 如果您的实例是Linux系统的,建议在后台长驻运行一个ping6的命令,如 ping6 ipv6.google.com ,以让您的ipv6隧道地址保持激活的状态,避免如20分钟后ipv6隧道地址ping6不通。 ------------------------- 回 400楼(sheldonlin) 的帖子 您好, 有时您的IPv6隧道地址ping不通, 在ping通时,可以访问到页面的内容,如: ------------------------- 回 402楼(sheldonlin) 的帖子 您好, 不确定具体的原因,但您可以尝试更换到其它的中转服务器,如美国的,看看会不会比目前的香港好些。 ------------------------- 回 405楼(sheldonlin) 的帖子 您好, ping6了几分钟后,可以ping通了。 liujia@hk2:~$ ping6 2001:470:c:67a::2 PING 2001:470:c:67a::2(2001:470:c:67a::2) 56 data bytes 64 bytes from 2001:470:c:67a::2: icmp_seq=232 ttl=123 time=313 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=233 ttl=123 time=313 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=234 ttl=123 time=313 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=235 ttl=123 time=313 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=236 ttl=123 time=315 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=237 ttl=123 time=387 ms 64 bytes from 2001:470:c:67a::2: icmp_seq=238 ttl=123 time=387 ms --- 2001:470:c:67a::2 ping statistics --- 238 packets transmitted, 7 received, 97% packet loss, time 238848ms rtt min/avg/max/mdev = 313.431/335.021/387.851/33.233 ms ------------------------- 回 407楼(sheldonlin) 的帖子 您好, 测试的ping值差不多喔: PING 2001:470:18:94d::2(2001:470:18:94d::2) 56 data bytes 64 bytes from 2001:470:18:94d::2: icmp_seq=1 ttl=127 time=325 ms 64 bytes from 2001:470:18:94d::2: icmp_seq=2 ttl=127 time=325 ms 64 bytes from 2001:470:18:94d::2: icmp_seq=3 ttl=127 time=325 ms 64 bytes from 2001:470:18:94d::2: icmp_seq=4 ttl=127 time=325 ms 64 bytes from 2001:470:18:94d::2: icmp_seq=5 ttl=127 time=325 ms ------------------------- 回 409楼(觅约) 的帖子 您好, 欢迎来到阿里云论坛。 现在测试,访问正常喔: liujia@hk2:~/test6$ wget -6 app.miyueta.com:9088 --2017-08-28 18:25:36--   http://app.miyueta.com:9088/ Resolving app.miyueta.com (app.miyueta.com)... 2001:19f0:6001:213:5400:ff:fe77:5183 Connecting to app.miyueta.com (app.miyueta.com)|2001:19f0:6001:213:5400:ff:fe77:5183|:9088... connected. HTTP request sent, awaiting response... 200 OK Length: 52 [text/html] ------------------------- Re:回 411楼(ios——ot) 的帖子 您好, 我现在从外网为您ping6测试,可ping通,但有丢包。 liujia@hk2:~$ ping6 admin.allti.com.cn PING admin.allti.com.cn(wbnahqs-1-pt.tunnel.tserv25.sin1.ipv6.he.net) 56 data bytes 64 bytes from wbnahqs-1-pt.tunnel.tserv25.sin1.ipv6.he.net: icmp_seq=4 ttl=124 time=566 ms 64 bytes from wbnahqs-1-pt.tunnel.tserv25.sin1.ipv6.he.net: icmp_seq=5 ttl=124 time=545 ms 64 bytes from wbnahqs-1-pt.tunnel.tserv25.sin1.ipv6.he.net: icmp_seq=13 ttl=124 time=539 ms --- admin.allti.com.cn ping statistics --- 16 packets transmitted, 3 received, 81% packet loss, time 15087ms rtt min/avg/max/mdev = 539.496/550.382/566.125/11.400 ms ------------------------- 回 415楼(ios——ot) 的帖子 您好, 有可能。换别的中转服务器,如美国的来对比看看。 ------------------------- 回 437楼(卡乐) 的帖子 版主回复: 没看到相应的安全性评估。 个人想,是这样的:如果您的数据传送开始时,已经是加密的,如https,那隧道转发的服务器也不能读取到数据内容吧? 且,隧道转发的服务商,he.net应该是一家有信誉的公司。 再者,这里的隧道地址设置,目的是帮助APP上架,如果您的APP上架后,可停用隧道地址。 ------------------------- 回 439楼(卡乐) 的帖子 版主回复: 反方向操作哩,如在系统里禁用/删除隧道地址(如netsh int ipv6 delete interface "ip6tunnel")。 ------------------------- 回 443楼(阿凯十三郎) 的帖子 版主回复: 或许您需要检查一下ECS实例的安全组,看是放行了ipv6隧道地址服务器的访问。 目前测试来看,您的ipv6隧道地址从外网是ping6不通的。 --2018-01-25 10:41:07--   http://www.cjnmw.xyz/ Resolving www.cjnmw.xyz (www.cjnmw.xyz)... 2001:470:18:f02::2 Connecting to www.cjnmw.xyz (www.cjnmw.xyz)|2001:470:18:f02::2|:80... failed: Connection timed out. Retrying. liujia@hk2:~/test7$ ping6 2001:470:18:f02::2 PING 2001:470:18:f02::2(2001:470:18:f02::2) 56 data bytes --- 2001:470:18:f02::2 ping statistics --- 21 packets transmitted, 0 received, 100% packet loss, time 20154ms liujia@hk2:~/test7$ ping6 2001:470:18:f02::1 PING 2001:470:18:f02::1(2001:470:18:f02::1) 56 data bytes 64 bytes from 2001:470:18:f02::1: icmp_seq=1 ttl=64 time=1.41 ms 64 bytes from 2001:470:18:f02::1: icmp_seq=2 ttl=64 time=1.40 ms --- 2001:470:18:f02::1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.404/1.409/1.415/0.037 ms ------------------------- 回 448楼(阿凯十三郎) 的帖子 版主回复: 从您的ECS实例能ping通隧道地址服务器的IP,但不代表从隧道地址的服务器能ping通(访问)您的ECS实例喔。 ------------------------- 回 449楼(阿凯十三郎) 的帖子 版主回复: 是哩,看起来,外网已经能通过隧道地址访问到您的apache里了。 您调整了ECS实例的安全组规则吗? ------------------------- 回 452楼(阿凯十三郎) 的帖子 版主回复: 据网友反馈:域名本身的 ipv6 DNS Server 并不重要。 ------------------------- 回 455楼(纪念青春) 的帖子 版主回复: 请试试: netsh int ipv6 delete interface "ip6tunnel" ------------------------- 回 458楼(老黄000001) 的帖子 您好, 图中信息,显示IPv6隧道地址断开状态, 请问您在之前配置隧道地址的命令中,包含的IP是ECS实例的公网IP还是内网IP? 一般来说,应该在命令中写内网IP的,即您图中的看到的172.18.132.2 ------------------------- 回 460楼(尜淇专版) 的帖子 您好, 在He.net里申请隧道地址时,请填写ECS实例的公网IP地址喔。 ------------------------- 回 462楼(潮约) 的帖子 您好, 使用VPC网络的ECS实例,在配置隧道地址时,是需要绑定内网IP,因为公网IP不是在系统里。 如果配置隧道地址时,绑定了内网IP,也无法正常使用的话,建议检查ECS实例安全组规则或Windows防火墙,如将隧道地址服务器的IPv4加到白名单中。

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