• 关于

    系统中如何标识消息?

    的搜索结果

问题

系统中如何标识消息?

系统中如何标识消息?...
保持可爱mmm 2020-03-29 00:05:52 2 浏览量 回答数 1

问题

程序员报错QA大分享(1)

程序员报错QA征集第一弹来了哦~包含QA分享一期征集的部分内容,链接附带解决方案,可收藏哦~ npm install安装依赖一直报错?报错https://developer.aliyun.com/ask/301...
问问小秘 2020-06-18 15:46:14 1684 浏览量 回答数 2

回答

在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上 要重 视 它 , 战术上又 要 藐 视 它。先举个例子感受一下千万级到底是什么数量级?现在很流行的优步(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

问题

【精品问答】大数据计算技术1000问

为了方便大数据开发者快速找到相关技术问题和答案,开发者社区策划了大数据计算技术1000问内容,包含Flink、Spark等流式计算(实时计算)、离线计算、Hbase等实践中遇到的技术问...
问问小秘 2019-12-01 21:57:13 6895 浏览量 回答数 2

问题

【精品问答】Java必备核心知识1000+(附源码)

为了方便Java开发者快速找到相关技术问题和答案,开发者社区策划了Java技术1000问内容,包含最基础的如何学Java、实践中遇到的技术问题、RocketMQ面试、Java容器部署实践等维度内容。 我们会以每...
问问小秘 2019-12-01 22:00:28 870 浏览量 回答数 1

回答

概述 当客户端访问目标服务器出现ping丢包或ping不通时,可以通过tracert或mtr等工具进行链路测试来判断问题根源。本文介绍如何通过工具进行链路测试和分析。 详细信息 阿里云提醒您: 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。 本文分别介绍如下链路测试方法。 链路测试工具 测试结果的简要分析 常见的链路异常场景 链路测试步骤 测试完成后的解决方法 链路测试工具 操作系统类型不同,链路测试所使用的工具也有所不同。简要介绍如下。 Linux系统 此处简单介绍两个链路测试工具。 工具一:mtr命令 mtr(My traceroute)几乎是所有Linux发行版本预装的网络测试工具。其将ping和traceroute的功能合并,所以功能更强大。mtr默认发送ICMP数据包进行链路探测。您也可以通过“-u”参数来指定使用UDP数据包进行探测。相对于traceroute只会做一次链路跟踪测试,mtr会对链路上的相关节点做持续探测并给出相应的统计信息。所以,mtr能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。 用法说明 mtr [-BfhvrwctglxspQomniuT46] [--help] [--version] [--report] [--report-wide] [--report-cycles=COUNT] [--curses] [--gtk] [--csv|-C] [--raw] [--xml] [--split] [--mpls] [--no-dns] [--show-ips] [--address interface] [--filename=FILE|-F] [--ipinfo=item_no|-y item_no] [--aslookup|-z] [--psize=bytes/-s bytes] [--order fields] [--report-wide|-w] [--inet] [--inet6] [--max-ttl=NUM] [--first-ttl=NUM] [--bitpattern=NUM] [--tos=NUM] [--udp] [--tcp] [--port=PORT] [--timeout=SECONDS] [--interval=SECONDS] HOSTNAME 常见可选参数说明 --report:以报告模式显示输出。 --split:将每次追踪的结果分别列出来,而非统计整个结果。 --psize:指定ping数据包的大小。 --no-dns:不对IP地址做域名反解析。 --address:主机有多个IP地址时,设置发送数据包的IP地址。 -4:只使用IPv4协议。 -6:只使用IPv6协议。 另外,也可以在mtr运行过程中,输入类似如下的字母来快速切换模式。 ?或h:显示帮助菜单。 d:切换显示模式。 n:启用或禁用DNS域名解析。 u:切换使用ICMP或UDP数据包进行探测。 命令输出示例 返回结果说明 默认配置下,返回结果中各数据列的说明如下。 第一列(Host):节点IP地址和域名。按 n 键可切换显示。 第二列(Loss%):节点丢包率。 第三列(Snt):每秒发送数据包数。默认值是10,可以通过“-c”参数指定。 第四列(Last):最近一次的探测延迟。 第五、六、七列(Avg、Best、Worst):分别是探测延迟的平均值、最小值和最大值。 第八列(StDev):标准偏差。越大说明相应节点越不稳定。 工具二:traceroute命令 traceroute也是几乎所有Linux发行版本预装的网络测试工具,用于跟踪Internet协议(IP)数据包传送到目标地址时经过的路径。traceroute先发送小的具有最大存活时间值(Max_TTL)的UDP探测数据包,然后侦听从网关开始的整个链路上的ICMP TIME_EXCEEDED响应。探测从TTL=1开始,TTL值逐步增加,直至接收到ICMP PORT_UNREACHABLE消息。ICMP PORT_UNREACHABLE消息用于标识目标主机已经被定位,或命令已经达到允许跟踪的最大TTL值。traceroute默认发送UDP数据包进行链路探测。可以通过“-I”参数来指定使用ICMP数据包进行探测。 用法说明 traceroute [-I] [ -m Max_ttl ] [ -n ] [ -p Port ] [ -q Nqueries ] [ -r ] [ -s SRC_Addr ] [ -t TypeOfService ] [ -f flow ] [ -v ] [ -w WaitTime ] Host [ PacketSize ] 常见可选参数说明 -d:使用Socket层级的排错功能。 -f:设置第一个检测数据包的存活数值TTL的大小。 -F:设置不要分段标识。 -g:设置来源路由网关,最多可设置8个。 -i:主机有多个网卡时,使用指定的网卡发送数据包。 -I:使用ICMP数据包替代UDP数据包进行探测。 -m:设置检测数据包的最大存活数值TTL的大小。 -n:直接使用IP地址而非主机名称(禁用DNS反查)。 -p:设置UDP传输协议的通信端口。 -r:忽略普通的Routing Table,直接将数据包发送到目标主机上。 -s:设置本地主机发送数据包的IP地址。 -t:设置检测数据包的TOS数值。 -v:详细显示指令的执行过程。 -w:设置等待远端主机回包时间。 -x:开启或关闭数据包的正确性检验。 命令输出示例 Windows系统 此处简单介绍两个链路测试工具。 工具一:WinMTR(建议优先使用) WinMTR是mtr工具在Windows环境下的图形化实现,但进行了功能简化,只支持部分mtr的参数。WinMTR默认发送ICMP数据包进行探测,无法切换。和mtr一样,相比tracert,WinMTR能避免节点波动对测试结果的影响,所以测试结果更正确。所以在WinMTR可用的情况下,建议优先使用WinMTR进行链路测试。 用法说明 WinMTR无需安装,直接解压运行即可。操作方法非常简单,说明如下。 如下图所示,运行程序后,在 Host 字段输入目标服务器域名或IP,注意不要包含空格。 单击 Start 开始测试。开始测试后,相应按钮变成了 Stop。 运行一段时间后,单击 Stop 停止测试。 其它选项说明如下。 Copy Text to clipboard:将测试结果以文本格式复制到粘贴板。 Copy HTML to clipboard:将测试结果以HTML格式复制到粘贴板。 Export TEXT:将测试结果以文本格式导出到指定文件。 Export HTML:将测试结果以HTML格式导出到指定文件。 Options:可选参数,包括的可选参数如下。 Interval(sec):每次探测的间隔(过期)时间。默认为1秒。 ping size(bytes):ping探测所使用的数据包大小,默认为64字节。 Max hosts in LRU list:LRU列表支持的最大主机数,默认值为128。 Resolve names:通过反查IP地址,以域名显示相关节点。 返回结果说明 默认配置下,返回结果中各数据列的说明如下。 第一列(Hostname):节点的IP或域名。 第二列(Nr):节点编号。 第三列(Loss%):节点丢包率。 第四列(Sent):已发送的数据包数量。 第五列(Recv):已成功接收的数据包数量。 第六、七、八、九列(Best 、Avg、Worst、Last):分别是到相应节点延迟的最小值、平均值、最大值和最后一次值。 工具二:tracert命令行工具 tracert(Trace Route)是Windows自带的网络诊断命令行程序,用于跟踪Internet协议(IP)数据包传送到目标地址时经过的路径。 tracert通过向目标地址发送 ICMP 数据包来确定到目标地址的路由。在这些数据包中,tracert使用了不同的IP“生存期”,即TTL值。由于要求沿途的路由器在转发数据包前必须至少将TTL减少1,因此TTL实际上相当于一个跃点计数器(hop counter)。当某个数据包的TTL达到0时,相应节点就会向源计算机发送一个ICMP超时的消息。 tracert第一次发送TTL为1的数据包,并在每次后续传输时将TTL增加1,直到目标地址响应或达到TTL的最大值。中间路由器发送回来的ICMP超时消息中包含了相应节点的信息。 用法说明 tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name 常见可选参数说明 -d:不要将地址解析为主机名(禁用DNS反解)。 -h:maximum_hops,指定搜索目标地址时的最大跃点数。 -j: host-list,指定沿主机列表的松散源路由。 -w:timeout,等待每个回复的超时时间(以毫秒为单位)。 -R:跟踪往返行程路径(仅适用于IPv6)。 -S:srcaddr,要使用的源地址(仅适用于IPv6)。 -4:强制使用IPv4。 -6:强制使用IPv6。 target_host:目标主机域名或IP地址。 命令输出示例 C:> tracert -d 223.5.5.5 通过最多 30 个跃点跟踪到 223.5.5.5 的路由 1 请求超时。 2 9 ms 3 ms 12 ms 192.168.X.X 3 4 ms 9 ms 2 ms X.X.X.X 4 9 ms 2 ms 1 ms XX.XX.XX.XX 5 11 ms 211.XX.X.XX 6 3 ms 2 ms 2 ms 2XX.XX.1XX.XX 7 2 ms 2 ms 1 ms 42.XX.2XX.1XX 8 32 ms 4 ms 3 ms 42.XX.2XX.2XX 9 请求超时。 10 3 ms 2 ms 2 ms 223.5.5.5 跟踪完成。 测试结果的简要分析 由于mtr(WinMTR)有更高的准确性,本文以其测试结果为例,参考如下要点进行分析。此处分析时以如下示例图为基础。 要点一:网络区域 正常情况下,从客户端到目标服务器的整个链路中会包含如下区域。 客户端本地网络,即本地局域网和本地网络提供商网络。如上图中的区域A。如果该区域出现异常,并且是客户端本地网络中的节点出现异常,则需要对本地网络进行相应的排查分析。如果是本地网络提供商网络出现异常,则需要向当地运营商反馈问题。 运营商骨干网络。如上图中的区域B。如果该区域出现异常,可以根据异常节点的IP查询其所属的运营商,直接向对应运营商进行反馈,或者通过阿里云技术支持,向运营商进行反馈。 目标服务器本地网络,即目标服务器所属提供商的网络。如上图中的区域C。如果该区域出现异常,需要向目标服务器所属的网络运营商反馈问题。 要点二:链路负载均衡 如上图中的区域D。如果中间链路某些部分启用了链路负载均衡,则mtr只会对首尾节点进行编号和探测统计。中间节点只会显示相应的IP或域名信息。 要点三:结合Avg(平均值)和StDev(标准偏差)综合判断 由于链路抖动或其它因素的影响,节点的Best和Worst值可能相差很大。Avg统计了自链路测试以来所有探测的平均值,所以能更好的反应出相应节点的网络质量。而StDev越高,则说明数据包在相应节点的延时值越不相同,即越离散。所以标准偏差值可用于协助判断Avg是否真实反应了相应节点的网络质量。例如,如果标准偏差很大,说明数据包的延迟是不确定的。可能某些数据包延迟很小,例如25ms,而另一些延迟却很大,例如350ms,但最终得到的平均延迟反而可能是正常的。所以,此时Avg并不能很好的反应出实际的网络质量情况。 综上,建议的分析标准如下。 如果StDev很高,则同步观察相应节点的Best和Worst,来判断相应节点是否存在异常。 如果StDev不高,则通过Avg来判断相应节点是否存在异常。 注:上述StDev高或者不高,并没有具体的时间范围标准。而需要根据同一节点其它列的延迟值大小来进行相对评估。比如,如果Avg为30ms,那么,当StDev为25ms,则认为是很高的偏差。而如果Avg为325ms,则StDev同样为25ms,反而认为是不高的偏差。 要点四:Loss%(丢包率)的判断 任一节点的Loss%(丢包率)如果不为零,则说明这一跳网络可能存在问题。导致相应节点丢包的原因通常有如下两种。 运营商基于安全或性能需求,限制了节点的ICMP发送速率,导致丢包。 节点确实存在异常,导致丢包。 结合异常节点及其后续节点的丢包情况,并参考如下内容,判定丢包原因。 如果随后节点均没有丢包,则通常表示异常节点丢包是由于运营商策略限制所致。可以忽略相关丢包。如上图中的第2跳所示。 如果随后节点也出现丢包,则通常说明异常节点确实存在网络异常,导致丢包。如上图中的第5跳所示。 另外,上述两种情况可能同时发生,即相应节点既存在策略限速,又存在网络异常。对于这种情况,如果异常节点及其后续节点连续出现丢包,而且各节点的丢包率不同,则通常以最后几跳的丢包率为准。如上图所示,在第 5、6、7跳均出现了丢包。所以,最终丢包情况,以第7跳的40%作为参考。 要点五:关于延迟 关于延迟,有如下两种场景。 场景一:延迟跳变 如果在某一跳之后延迟明显陡增,则通常判断该节点存在网络异常。如上图所示,从第5跳之后的后续节点延迟明显陡增,则推断是第5跳节点出现了网络异常。不过,高延迟并不一定完全意味着相应节点存在异常。如上图所示,第5跳之后,虽然后续节点延迟明显陡增,但测试数据最终仍然正常到达了目的主机。所以,延迟大也有可能是在数据回包链路中引发的。所以,需要结合反向链路测试一并分析。 场景二:ICMP限速导致延迟增加 ICMP策略限速也可能会导致相应节点的延迟陡增,但后续节点通常会恢复正常。如上图所示,第3跳有100%的丢包率,同时延迟也明显陡增。但随后节点的延迟马上恢复了正常。所以判断该节点的延迟陡增及丢包是由于策略限速所致。 常见的链路异常场景 常见的链路异常场景及测试报告如下。 场景一:目标主机网络配置不当 示例数据如下。 [root@mycentos6 ~]# mtr —no-dns www.google.com My traceroute [v0.75] mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016 Keys: Help Display mode Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. ??? 2. ??? 3. 1XX.X.X.X 0.0% 10 521.3 90.1 2.7 521.3 211.3 4. 11X.X.X.X 0.0% 10 2.9 4.7 1.6 10.6 3.9 5. 2X.X.X.X 80.0% 10 3.0 3.0 3.0 3.0 0.0 6. 2X.XX.XX.XX 0.0% 10 1.7 7.2 1.6 34.9 13.6 7. 1XX.1XX.XX.X 0.0% 10 5.2 5.2 5.1 5.2 0.0 8. 2XX.XX.XX.XX 0.0% 10 5.3 5.2 5.1 5.3 0.1 9. 173.194.200.105 100.0% 10 0.0 0.0 0.0 0.0 0.0 在该示例中,数据包在目标地址出现了100%的丢包。从数据上看是数据包没有到达,其实很有可能是目标服务器相关安全策略(比如防火墙、iptables 等)禁用了ICMP所致,导致目的主机无法发送任何应答。所以,该场景需要排查目标服务器的安全策略配置。 场景二:ICMP限速 示例数据如下。 [root@mycentos6 ~]# mtr --no-dns www.google.com My traceroute [v0.75] mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016 Keys: Help Display mode Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. 63.247.X.X 0.0% 10 0.3 0.6 0.3 1.2 0.3 2. 63.247.X.XX 0.0% 10 0.4 1.0 0.4 6.1 1.8 3. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.7 4. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.1 5. 72.14.233.56 60.0% 10 27.2 25.3 23.1 26.4 2.9 6. 209.85.254.247 0.0% 10 39.1 39.4 39.1 39.7 0.2 7. 64.233.174.46 0.0% 10 39.6 40.4 39.4 46.9 2.3 8. gw-in-f147.1e100.net 0.0% 10 39.6 40.5 39.5 46.7 2.2 在该示例中,在第5跳出现了明显的丢包,但后续节点均未见异常。所以推断是该节点ICMP限速所致。该场景对最终客户端到目标服务器的数据传输不会有影响,所以,分析的时候可以忽略。 场景三:环路 示例数据如下。 [root@mycentos6 ~]# mtr —no-dns www.google.com My traceroute [v0.75] mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016 Keys: Help Display mode Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. 63.247.7X.X 0.0% 10 0.3 0.6 0.3 1.2 0.3 2. 63.247.6X.X 0.0% 10 0.4 1.0 0.4 6.1 1.8 3. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.7 4. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.1 5. 72.14.233.56 0.0% 10 0.0 0.0 0.0 0.0 0.0 6. 72.14.233.57 0.0% 10 0.0 0.0 0.0 0.0 0.0 7. 72.14.233.56 0.0% 10 0.0 0.0 0.0 0.0 0.0 8. 72.14.233.57 0.0% 10 0.0 0.0 0.0 0.0 0.0 9 ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0 在该示例中,数据包在第5跳之后出现了循环跳转,导致最终无法到达目标服务器。这通常是由于运营商相关节点路由配置异常所致。所以,该场景需要联系相应节点归属运营商处理。 场景四:链路中断 示例数据如下。 [root@mycentos6 ~]# mtr —no-dns www.google.com My traceroute [v0.75] mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016 Keys: Help Display mode Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. 63.247.7X.X 0.0% 10 0.3 0.6 0.3 1.2 0.3 2. 63.247.6X.X 0.0% 10 0.4 1.0 0.4 6.1 1.8 3. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.7 4. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.1 5. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0 6. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0 7. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0 8. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0 9 ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0 在该示例中,数据包在第4跳之后就无法收到任何反馈。这通常是由于相应节点中断所致。建议结合反向链路测试做进一步确认。该场景需要联系相应节点归属运营商处理。 链路测试步骤 通常情况下,链路测试步骤如下图所示。 相关步骤的详情说明如下。 步骤一:获取本地网络对应的公网IP 在客户端本地网络内访问淘宝IP地址库,获取本地网络对应的公网IP地址。 步骤二:正向链路测试(ping和mtr) 从客户端向目标服务器做如下测试。 从客户端向目标服务器域名或IP做持续的ping测试,建议至少ping 100个数据包,记录测试结果。 根据客户端操作系统的不同,使用WinMTR或mtr,设置测试目的地址为目标服务器域名或IP,然后进行链路测试,记录测试结果。 步骤三:反向链路测试(ping和mtr) 进入目标服务器系统内部做如下测试。 从目标服务器向步骤一获取的客户端IP做持续的ping测试,建议至少ping 100个数据包,记录测试结果。 根据目标服务器操作系统的不同,使用WinMTR或mtr,设置测试目的地址为客户端的IP地址,然后进行链路测试,记录测试结果。 步骤四:测试结果分析 参阅测试结果的简要分析,对测试结果进行分析。确认异常节点后,访问如下链接或其他可以查询IP归属地的网站,获取该异常节点的归属运营商信息。如果是客户端本地网络相关节点出现异常,则需要对本地网络进行相应排查分析。如果是运营商相关节点出现异常,则需要向运营商反馈问题。查询结果类似如下。 测试完成后的解决方法 当出现ping丢包或ping不通时,首先请参考云服务器ECS网络故障诊断,排查是否为网络故障。 如果确认是因系统中病毒导致使用ping命令测试ECS实例的IP地址间歇性丢包,则可参考使用ping命令测试ECS实例的IP地址间歇性丢包进行处理。 如果是因删除ECS实例的默认安全组规则导致无法ping通ECS实例,可参考删除ECS实例的默认安全组规则导致无法ping通ECS实例进行处理。 如果在Linux系统内核没有禁PING的情况下,是因系统内部防火墙策略设置导致ECS服务器PING不通。可参考Linux系统的ECS中没有禁PING却PING不通的解决方法。
1934890530796658 2020-03-25 23:17:54 0 浏览量 回答数 0

问题

如何通过 Storm 消费 Loghub 日志?

日志服务的LogHub提供了高效、可靠的日志通道功能,您可以通过Logtail、SDK等多种方式来实时收集日志数据。收集日志之后,可以通过Spark Stream、Storm 等各实时系统来消费写入到LogHub...
轩墨 2019-12-01 21:54:54 1635 浏览量 回答数 0

问题

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

阿里极客公益活动: 或许你挑灯夜战只为一道难题 或许你百思不解只求一个答案 或许你绞尽脑汁只因一种未知 那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了 他们用户自己手中的技术来帮助用户成长 本次活动特邀百位阿里技术专家对Java常...
管理贝贝 2019-12-01 20:07:15 27612 浏览量 回答数 19

问题

分布式服务接口的幂等性如何设计(比如不能重复扣款)?【Java问答学堂】52期

面试题 分布式服务接口的幂等性如何设计(比如不能重复扣款)? 面试官心理分析 从这个问题开始,面试官就已经进入了实际的生产问题的面试了。 一个分布式系统中的某个接口࿰...
剑曼红尘 2020-07-08 09:15:27 3 浏览量 回答数 1

问题

OSS 官方帮助文档 在此归类发布 ,常见问题基本能在这里找到答案。

1.OSS API文档 “Date”字段的GMT格式说明? 在OSS API文档中, 使用到 “DATE” 表示时间的字段,必须为HTTP1.1中支持的GMT格式。HTTP1.1协议说明...
asky8 2019-12-01 21:21:14 47894 浏览量 回答数 17

问题

ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?【Java问答学堂】27期

面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么&...
剑曼红尘 2020-05-27 20:28:45 22 浏览量 回答数 1

问题

【Java问答学堂】9期 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?

面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?面试题 es 写入数据的工作原理是什么啊?...
剑曼红尘 2020-04-27 14:35:38 0 浏览量 回答数 1

问题

分库分表之后,id 主键如何处理?【Java问答】43期

面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1...
剑曼红尘 2020-06-23 11:48:33 23 浏览量 回答数 1

问题

程序员报错行为大赏-配置报错

Maven本地仓库配置报错:配置报错  GO语言配置什么的都没问题,但就是LiteIDE配置不好。。。:配置报错  Maven 配置nexus仓库 POM文件报错:配置报错  10个你可能从未用过的PHP函数:配置报错  QT...
问问小秘 2020-06-11 13:18:25 6 浏览量 回答数 1

问题

如何保证缓存与数据库的双写一致性?【Java问答】38期

面试题 如何保证缓存与数据库的双写一致性? 面试官心理分析 你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解...
剑曼红尘 2020-06-16 12:58:57 36 浏览量 回答数 1

问题

词汇表是什么样的?(S-V)

S A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z SASL ...
轩墨 2019-12-01 22:06:08 2089 浏览量 回答数 0

问题

Android SDK如何下载?

Part1 SDK下载 进入MHub控制台下载SDK: https://mhub.console.aliyun.com/#/download。 如果使用Maven库方式不需要下载,方法见2.1中Maven库快...
猫饭先生 2019-12-01 22:04:52 1408 浏览量 回答数 0
阿里云企业服务平台 陈四清的老板信息查询 上海奇点人才服务相关的云产品 爱迪商标注册信息 安徽华轩堂药业的公司信息查询 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 天籁阁商标注册信息 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 北京芙蓉天下的公司信息查询