• 关于

    用户线均衡器不可用

    的搜索结果

回答

微服务 (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

问题

springcloud 微服务分布式 vue activiti工作流 前后分离 集成代码生成器

游客egqjd4t7mlyom 2019-12-01 19:53:36 59 浏览量 回答数 0

问题

springcloud vue activiti工作流 前后分离 集成代码生成器 微服务分布式

游客q6uipubrszn5g 2019-12-01 19:55:22 6156 浏览量 回答数 7

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

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

问题

spring cloud 微服务分布式 vue.js html 前后分离 集成代码生成器 shiro

游客ydre72cd7ywew 2019-12-01 19:51:28 66 浏览量 回答数 0

问题

spring cloud springboot 框架源码 activiti工作流 前后分离

游客ydre72cd7ywew 2019-12-01 19:57:42 15 浏览量 回答数 0

问题

spring cloud springboot 框架源码 activiti工作流 前后分离

游客q6uipubrszn5g 2019-12-01 19:56:47 21 浏览量 回答数 0

问题

springcloud vue.js 微服务分布式 前后分离 activiti工作流

游客ydre72cd7ywew 2019-12-01 19:59:33 11 浏览量 回答数 0

问题

spring cloud 微服务 分布式 Activiti6 工作流 vue.js html

游客ydre72cd7ywew 2019-12-01 21:49:22 8 浏览量 回答数 0

问题

springcloud 项目源码 Activiti6 工作 微服务 分布式 vue.js html

游客ydre72cd7ywew 2019-12-01 19:54:54 22 浏览量 回答数 0

问题

springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html

游客ydre72cd7ywew 2019-12-01 19:52:32 34 浏览量 回答数 0

问题

springcloud 微服务 分布式 Activiti6 工作流 vue.js html 项目源码

游客ydre72cd7ywew 2019-12-01 20:00:15 13 浏览量 回答数 0

问题

springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html

游客egqjd4t7mlyom 2019-12-01 19:58:16 35 浏览量 回答数 0

问题

Nginx性能为什么如此吊

小柒2012 2019-12-01 21:20:47 15038 浏览量 回答数 3

问题

【archsummit 回顾】阿里云章文嵩:构建大型云计算平台分布式技术的实践

云课堂 2019-12-01 21:03:36 14448 浏览量 回答数 9

回答

误删文件后恢复数据 本文档主要以CentOS7操作系统为例,介绍如何使用开源工具Extundelete快速恢复被误删除掉的数据。 前提条件 使用本教程进行操作前,请确保您已经注册了阿里云账号。如还未注册,请先完成账号注册。 背景信息 在日常使用中有时难免会出现数据被误删除的情况,该如何快速、有效地恢复数据呢?在阿里云上恢复数据有多种方式,例如: 通过ECS管理控制台回滚已创建的快照、恢复自定义镜像等方式。 购买多台ECS,实现业务的负载均衡和高可用。详情请参见负载均衡。 使用对象存储OSS,存储静态网页和海量图片、视频等重要数据。详情请参见对象存储 OSS(Object Storage Service)。 在Linux下,基于开源的数据恢复工具有很多,常见的有debugfs、R-Linux、ext3grep、extundelete等,比较常用的有ext3grep和extundelete,这两个工具的恢复原理基本一样,只是extundelete功能更加强大。使用阿里云的云服务器时,如果您不小心误删除数据,并且Linux系统也没有与Windows系统下回收站类似的功能,您可以方便快速安装extundelete工具。 extundelete工具能够利用inode信息结合日志去查询该inode所在的block位置,以此查找和恢复所需的数据。该工具最给力的一点就是支持ext3/ext4双格式分区恢复,基于整个磁盘的恢复功能较为强大。 在数据被误删除后,首先要做的是卸载被删除数据所在的磁盘或磁盘分区。因为将文件删除后,仅仅是将文件的inode结点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据块被新的数据覆盖后,误删除的数据就无法恢复。所以,以只读模式挂载磁盘可以尽量降低数据块中数据被覆盖的风险,提高恢复数据成功的几率。 说明 在实际线上恢复过程中,切勿将extundelete安装到您误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖,切记操作前做好快照备份。 本教程适用的对象是: 磁盘中文件误删除的用户,且未对磁盘进行过写入等操作 网站访问量小、少量ECS实例的用户 需安装的软件及版本:e2fsprogs-devel e2fsprogs gcc-c++ make(编译器等)Extundelete-0.2.4。 说明 extundelete需要libext2fs版本1.39或更高版本来运行,但是对于ext4支持,请确保您有e2fsprogs版本1.41或更新版本(可以通过运行命令dumpe2fs并记录其输出的版本)。 以上版本是写文档时的软件版本。您下载的版本可能与此不同。 操作步骤 使用开源工具Extundelete快速恢复被误删的数据的操作步骤如下: 步骤一:部署extundelete工具 步骤二:使用extundelete模拟数据误删除后恢复的过程 步骤一:部署extundelete工具 运行以下命令,部署extundelete工具: wget http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2 yum -y install bzip2 e2fsprogs-devel e2fsprogs gcc-c++ make #安装相关依赖和库 tar -xvjf extundelete-0.2.4.tar.bz2 cd extundelete-0.2.4 #进入程序目录 ./configure #如下图表示安装成功 部署extundelete工具 make && make install 这个时候会出现src目录,该目录下有个extundelete可执行文件以及相应路径,其实默认文件安装路径为usr/local/bin,下面模拟删除后恢复数据的操作就在usr/local/bin目录下进行。 步骤二:使用extundelete模拟数据误删除后恢复的过程 完成以下操作,使用extundelete模拟数据误删除后恢复的过程: 检查ECS现有的磁盘和可用分区,并对/dev/vdb进行分区和格式化。具体操作,请参见格式化和挂载数据盘。 fdisk -l 检查磁盘和分区情况 将分区后的磁盘挂载到/zhuyun目录下,然后在/zhuyun下新建测试文件hello,并写入内容test。 mkdir /zhuyun #新建zhuyun目录 mount /dev/vdb1 /zhuyun #将磁盘挂载到zhuyun目录下 echo test > hello #写入测试文件 记录文件hello的md5值。md5sum命令用于生成和校验删除前和恢复后两个文件的md5值。 md5sum hello 记录文档的md5值 模拟删除hello文件。 rm -rf hello cd ~ fuser -k /zhuyun #结束使用某分区的进程树(确认没有资源占用的话,可以跳过此步) 卸载数据盘。 umount /dev/vdb1 #任何的文件恢复工具,在使用前,均要将要恢复的分区卸载或挂载为只读,防止数据被覆盖使用 使用extundelete工具恢复文件。 extundelete --inode 2 /dev/vdb1 #为查找某i节点中的内容,使用2则说明为整个分区搜索,如果需要进入目录搜索,只须要指定目录I节点即可。这是可以看到删除的文件名和inode 恢复文件 /usr/local/bin/extundelete --restore-inode 12 /dev/vdb1 #恢复删除的文件 这个时候会在执行命令的同级目录下出现RECOVERED_FILES目录。 生成恢复后的文件 通过md5sum命令查看恢复后RECOVERED_FILES文件的md5值。 md5sum RECOVERED_FILES 查看删除前的hello和恢复后的RECOVERED_FILES两个文件的md5值是否一致,如果一致,则数据恢复成功。

1934890530796658 2020-03-25 18:35:05 0 浏览量 回答数 0

回答

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

回答

线网络优化是通过对现已运行的网络进行话务数据分析、现场测试数据采集、参数分析、硬件检查等手段,找出影响网络质量的原因,并且通过参数的修改、网络结构的调整、设备配置的调整和采取某些技术手段(采用MRP的规划办法等),确保系统高质量的运行,使现有网络资源获得最佳效益,以最经济的投入获得最大的收益。 二 GSM无线网络优化的常规方法 网络优化的方法很多,在网络优化的初期,常通过对OMC-R数据的分析和路测的结果,制定网络调整的方案。在采用图1的流程经过几个循环后,网络质量有了大幅度的提高。但仅采用上述方法较难发现和解决问题,这时通常会结合用户投诉和CQT测试办法来发现问题,结合信令跟踪分析法、话务统计分析法及路测分析法,分析查找问题的根源。在实际优化中,尤其以分析OMC-R话务统计报告,并辅以七号信令仪表进行A接口或Abis接口跟踪分析,作为网络优化最常用的手段。网络优化最重要的一步是如何发现问题,下面就是几种常用的方法: 1.话务统计分析法:OMC话务统计是了解网络性能指标的一个重要途径,它反映了无线网络的实际运行状态。它是我们大多数网络优化基础数据的主要根据。通过对采集到的参数分类处理,形成便于分析网络质量的报告。通过话务统计报告中的各项指标(呼叫成功率、掉话率、切换成功率、每时隙话务量、无线信道可用率、话音信道阻塞率和信令信道的可用率、掉话率及阻塞率等),可以了解到无线基站的话务分布及变化情况,从而发现异常,并结合其它手段,可分析出网络逻辑或物理参数设置的不合理、网络结构的不合理、话务量不均、频率干扰及硬件故障等问题。同时还可以针对不同地区,制定统一的参数模板,以便更快地发现问题,并且通过调整特定小区或整个网络的参数等措施,使系统各小区的各项指标得到提高,从而提高全网的系统指标。 2.DT (驱车测试):在汽车以一定速度行驶的过程中,借助测试仪表、测试手机,对车内信号强度是否满足正常通话要求,是否存在拥塞、干扰、掉话等现象进行测试。通常在DT中根据需要设定每次呼叫的时长,分为长呼(时长不限,直到掉话为止)和短呼(一般取60秒左右,根据平均用户呼叫时长定)两种(可视情况调节时长),为保证测试的真实性,一般车速不应超过40公里/小时。路测分析法主要是分析空中接口的数据及测量覆盖,通过DT测试,可以了解:基站分布、覆盖情况,是否存在盲区;切换关系、切换次数、切换电平是否正常;下行链路是否有同频、邻频干扰;是否有小岛效应;扇区是否错位;天线下倾角、方位角及天线高度是否合理;分析呼叫接通情况,找出呼叫不通及掉话的原因,为制定网络优化方案和实施网络优化提供依据。 3.CQT (呼叫质量测试或定点网络质量测试):在服务区中选取多个测试点,进行一定数量的拨打呼叫,以用户的角度反映网络质量。测试点一般选择在通信比较集中的场合,如酒店、机场、车站、重要部门、写字楼、集会场所等。它是DT测试的重要补充手段。通常还可完成DT所无法测试的深度室内覆盖及高楼等无线信号较复杂地区的测试,是场强测试方法的一种简单形式。 4.用户投诉:通过用户投诉了解网络质量。尤其在网络优化进行到一定阶段时,通过路测或数据分析已较难发现网络中的个别问题,此时通过可能无处不在的用户通话所发现的问题,使我们进一步了解网络服务状况。结合场强测试或简单的CQT测试,我们就可以发现问题的根源。该方法具有发现问题及时,针对性强等特点。 5.信令分析法:信令分析主要是对有疑问的站点的A接口、Abis接口的数据进行跟踪分析。通过对A接口采集数据分析,可以发现切换局数据不全(遗漏切换关系)、信令负荷、硬件故障(找出有问题的中继或时隙)及话务量不均(部分数据定义错误、链路不畅等原因)等问题。通过对Abis接口数据进行收集分析,主要是对测量仪表记录的LAY3信令进行分析,同时根据信号质量分布图、频率干扰检测图、接收电平分布图,结合对信令信道或话音信道占用时长等的分析,可以找出上、下行链路路径损耗过大的问题,还可以发现小区覆盖情况、一些无线干扰及隐性硬件故障等问题。 6.自动路测系统分析:采用安装于移动车辆上的自动路测终端,可以全程监测道路覆盖及通信质量。由于该终端能够将大量的信令消息和测量报告自动传回监控中心,可以及时发现问题,并对出现问题的地点进行分析,具有很强的时效性。所采用的方法同5。 在实际工作中,这几种方法都是相辅相成、互为印证的关系。GSM无线网络优化就是利用上述几种方法,围绕接通率、掉话率、拥塞率、话音质量和切换成功率及超闲小区、最坏小区等指标,通过性能统计测试→数据分析→制定实施优化方案→系统调整→重新制定优化目标→性能统计测试的螺旋式循环上升,达到网络质量明显改善的目的。 三 现阶段GSM无线网络优化方法 随着网络优化的深入进行,现阶段GSM无线网络优化的目标已越来越关注于用户对网络的满意程度,力争使网络更加稳定和通畅,使网络的系统指标进一步提高,网络质量进一步完善。 网络优化的工作流程具体包括五个方面:系统性能收集、数据分析及处理、制定网络优化方案、系统调整、重新制定网络优化目标。在网络优化时首先要通过OMC-R采集系统信息,还可通过用户申告、日常CQT测试和DT测试等信息完善问题的采集,了解用户对网络的意见及当前网络存在的缺陷,并对网络进行测试,收集网络运行的数据;然后对收集的数据进行分析及处理,找出问题发生的根源;根据数据分析处理的结果制定网络优化方案,并对网络进行系统调整。调整后再对系统进行信息收集,确定新的优化目标,周而复始直到问题解决,使网络进一步完善。 通过前述的几种系统性收集的方法,一般均能发现问题的表象及大部分问题产生的原因。 数据分析与处理是指对系统收集的信息进行全面的分析与处理,主要对电测结果结合小区设计数据库资料,包括基站设计资料、天线资料、频率规划表等。通过对数据的分析,可以发现网络中存在的影响运行质量的问题。如频率干扰、软硬件故障、天线方向角和俯仰角存在问题、小区参数设置不合理、无线覆盖不好、环境干扰、系统忙等。数据分析与处理的结果直接影响到网络运行的质量和下一步将采取的措施,因此是非常重要的一步。当然可以看出,它与第一步相辅相成,难以严格区分界限。 制定网络优化方案是根据分析结果提出改善网络运行质量的具体实施方案。 系统调整即实施网络优化,其基本内容包括设备的硬件调整(如天线的方位、俯仰调整,旁路合路器等)、小区参数调整、相邻小区切换参数调整、频率规划调整、话务量调整、天馈线参数调整、覆盖调整等或采用某些技术手段(更先进的功率控制算法、跳频技术、天线分集、更换电调或特型天线、新增微蜂窝、采用双层网结构、增加塔放等)。 测试网络调整后的结果。主要包括场强覆盖测试、干扰测试、呼叫测试和话务统计。 根据测试结果,重新制定网络优化目标。在网络运行质量已处于稳定、良好的阶段,需进一步提高指标,改善网络质量的深层次优化中出现的问题(用户投诉的处理,解决局部地区话音质量差的问题,具体事件的优化等等)或因新一轮建设所引发的问题。 四 网络优化常见问题及优化方案 建立在用户感知度上的网络优化面对的必然是对用户投诉问题的处理,一般有如下几种情况: 1.电话不通的现象 信令建立过程 在手机收到经PCH(寻呼信道)发出的pagingrequest(寻呼请求)消息后,因SDCCH拥塞无法将pagingresponse(寻呼响应)消息发回而导致的呼损。 对策:可通过调整SDCCH与TCH的比例,增加载频,调整BCC(基站色码)等措施减少SDCCH的拥塞。 因手机退出服务造成不能分配占用SDCCH而导致的呼损。 对策:对于盲区造成的脱网现象,可通过增加基站功率,增加天线高度来增加基站覆盖;对于BCCH频点受干扰造成的脱网现象,可通过改频、调整网络参数、天线下倾角等参数来排除干扰。 鉴权过程 因MSC与HLR、BSC间的信令问题,或MSC、HLR、BSC、手机在处理时失败等原因造成鉴权失败而导致的呼损。 对策:由于在呼叫过程中鉴权并非必须的环节,且从安全角度考虑也不需要每次呼叫都鉴权,因此可以将经过多少次呼叫后鉴权一次的参数调大。 加密过程 因MSC、BSC或手机在加密处理时失败导致呼损。 对策:目前对呼叫一般不做加密处理。 从手机占上SDCCH后进而分配TCH前 因无线原因(如RadioLinkFailure、硬件故障)使SDCCH掉话而导致的呼损。 对策:通过路测场强分析和实际拨打分析,对于无线原因造成的如信号差、存在干扰等问题,采取相应的措施解决;对于硬件故障,采用更换相应的单元模块来解决。 话音信道分配过程 因无线分配TCH失败(如TCH拥塞,或手机已被MSC分配至某一TCH上,因某种原因占不上TCH而导致链路中断等原因)而导致的呼损。 对策:对于TCH拥塞问题,可采用均衡话务量,调整相关小区服务范围的参数,启用定向重试功能等措施减少TCH的拥塞;对于占不上TCH的情况,一般是硬件故障,可通过拨打测试或分析话务统计中的CALLHOLDINGTIME参数进行故障定位,如某载频CALLHOLDINGTIME值小于10秒,则可断定此载频有故障。另外严重的同频干扰(如其它基站的BCCH与TCH同频)也会造成占不上TCH信道,可通过改频等措施解决。 2.电话难打现象 一般现象是较难占线、占线后很容易掉线等。这种情况首先应排除是否是TCH溢出的原因,如果TCH信道不足,则应增加信道板或通过增加微蜂窝或小区裂变的形式来解决。 排除以上原因后,一般可以考虑是否是有较强的干扰存在。可以是相邻小区的同邻频干扰或其它无线信号干扰源,或是基站本身的时钟同步不稳。这种问题较为隐蔽,需通过仔细分析层三信令和周围基站信息才能得出结论。 3. 掉话现象 掉话的原因几乎涉及网络优化的所有方面内容,尤其是在路测时发生的掉话,需要仔细分析。在路测时,需要对发生掉话的地段做电平和切换参数等诸多方面的分析。如果电平足够,多半是因为切换参数有问题或切入的小区无空闲信道。对话务较忙小区,可以让周围小区分担部分话务量。采用在保证不存在盲区的情况下,调整相关小区服务范围的参数,包括基站发射功率、天线参数(天线高度、方位角、俯仰角)、小区重选参数、切换参数及小区优先级设置的调整,以达到缩小拥塞小区的范围,并扩大周围一些相对较为空闲小区的服务范围。通过启用DirectedRetry(定向重试)功能,缓解小区的拥塞状况。上述措施仍不能满足要求的话,可通过实施紧急扩容载频的方法来解决。 对大多采用空分天线远郊或近郊的基站,如果主、分集天线俯仰角不一致,也极易造成掉话。如果参数设置无误,则可能是有些点信号质量较差。对这些信号质量较差而引起的掉话,应通过硬件调整的方式增加主用频点来解决。 4. 局部区域话音质量较差 在日常DT测试中,经常发现有很多微小的区域内,话音质量相当差、干扰大,信号弱或不稳定以及频繁切换和不断接入。这些地方往往是很多小区的交叠区、高山或湖面附近、许多高楼之间等。同样这种情况对全网的指标影响不明显,小区的话务统计报告也反映不出。这种现象一方面是由于频带资源有限,基站分布相对集中,频点复用度高,覆盖要求严格,必然不可避免的会产生局部的频率干扰。另一方面是由于在高层建筑林立的市区,手机接收的信号往往是基站发射信号经由不同的反射路径、散射路径、绕射路径的叠加,叠加的结果必然造成无线信号传播中的各种衰落及阴影效应,称之为多径干扰。此外,无线网络参数设置不合理也会造成上述现象。 在测试中RXQUAL的值反映了话音质量的好坏,信号质量实际是指信号误码率, RXQUAL=3(误码率:0.8%至1.6%),RXQUAL=4(误码率:1.6%至3.2%),当网络采用跳频技术时,由于跳频增益的原因,RXQUAL=3时,通话质量尚可,当RXQUAL≥6时,基本无法通话。 根据上述情况,通过对这些小区进行细致的场强覆盖测试和干扰测试,对场强覆盖测试数据进行分析,统计出RXLEV/RXQUAL之间对照表,如果某个小区域RXQUAL为6和7的采样统计数高而RXLEV大于-85dBm的采样数较高,一般可以认为该区域存在干扰。并在Neighbor-List中可分析出同频、邻频干扰频点。 5.多径干扰 如果直达路径信号(主信号)的接收电平与反射、散射等信号的接收电平差小于15dB,而且反射、散射等信号比主信号的时延超过4~5个GSM比特周期(1个比特周期=3.69μs),则可判断此区域存在较强的多径干扰。 多径干扰造成的衰落与频点及所在位置有关。多径衰落可通过均衡器采用的纠错算法得以改善,但这种算法只在信号衰落时间小于纠错码字在交织中分布占用的时间时有效。 采用跳频技术可以抑制多径干扰,因为跳频技术具有频率分集和干扰分集的特性。频率分集可以避免慢速移动的接收设备长时间处于阴影效应区,改善接收质量;而且可以充分利用均衡器的优点。干扰分集使所有的移动及基站接收设备所受干扰等级平均化。使产生干扰的几率大为减小,从而降低干扰程度。 采用天线分集和智能天线阵,对信号的选择性增强,也能降低多径干扰。 适当调整天线方位角,也可减小多径干扰。 若无线网络参数设置不合理,也会影响通话质量。如在DT测试中常常发现切换前话音质量较差,即RXQUAL较大(如5、6、7),而切换后,话音质量变得很好,RXQUAL很小(如0、1),而反方向行驶通过此区域时话音质量可能很好(RXQUAL为0、1),因为占用的服务小区不同。对于这种情况,是由于基于话音质量切换的门限值设置不合理。减小RXQUAL的切换门限值,如原先从RXQUAL≥4时才切换,改为RXQUAL≥3时就切换,可以提高许多区域的通话质量。因此,根据测试情况,找出最佳的切换地点,设置最佳切换参数,通过调整切换门限参数控制切换次数,通过修改相邻小区的切换关系提高通话质量。总之,根据场强测试可以优化系统参数。 值得一提的是,由于竞争的激烈及各运营商的越来越深化的要求,某些地方的运营商为完成任务,达到所谓的优化指标,随意调整放大一些对网络统计指标有贡献的参数,使网络看起来“质量很高”。然而,用户感觉到的仍是网络质量不好,从而招致更多用户的不满,这是不符合网络优化的宗旨的。 总之,网络优化是一项长期、艰巨的任务,进行网络优化的方法很多,有待于进一步探讨和完善。好在现在国内两大运营商都已充分认识到了这一点,网络质量也得到了迅速的提高,同时网络的经济效益也得到了充分发挥,既符合用户的利益又满足了运营商的要求,毫无疑问将是持续的双赢局面。 答案来源于网络

养狐狸的猫 2019-12-02 02:18:17 0 浏览量 回答数 0

回答

前言概述 本文介绍了使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖、一键部署、本地调试以及压测评估, 全方位展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。 1.1 DEMO 概述 image 通过上传一个猫或者狗的照片, 识别出这个照片里面的动物是猫还是狗 DEMO 示例效果入口: http://sz.mofangdegisn.cn DEMO 示例工程地址: https://github.com/awesome-fc/cat-dog-classify 开通服务 免费开通函数计算, 按量付费,函数计算有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 1.2 解决方案 image 如上图所示, 当多个用户通过对外提供的 url 访问推理服务时候,每秒的请求几百上千都没有关系, 函数计算平台会自动伸缩, 提供足够的执行实例来响应用户的请求, 同时函数计算提供了完善的监控设施来监控您的函数运行情况。 1.3. Serverless 方案与传统自建服务方案对比 1.3.1 卓越的工程效率 自建服务 函数计算 Serverless 基础设施 需要用户采购和管理 无 开发效率 除了必要的业务逻辑开发,需要自己建立相同线上运行环境, 包括相关软件的安装、服务配置、安全更新等一系列问题 只需要专注业务逻辑的开发, 配合 FUN 工具一键资源编排和部署 学习上手成本 可能使用 K8S 或弹性伸缩( ESS ),需要了解更多的产品、名词和参数的意义 会编写对应的语言的函数代码即可 1.3.2 弹性伸缩免运维 自建服务 函数计算 Serverless 弹性高可用 需要自建负载均衡 (SLB),弹性伸缩,扩容缩容速度较 FC 慢 FC系统固有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维 监控报警查询 ECS 级别的 metrics 提供更细粒度的函数执行情况,每次访问函数执行的 latency 和日志等, 更加完善的报警监控机制 1.3.3 更低的成本 函数计算 (FC) 固有自动伸缩和负载均衡功能,用户不需要购买负载均衡 (SLB) 和弹性伸缩。 具有明显波峰波谷的用户访问场景(比如只有部分时间段有请求,其他时间甚至没有请求),选择按需付费,只需为实际使用的计算资源付费。 对于明显波峰波谷或者稀疏调用具有低成本优势, 同时还保持了弹性能力,以后业务规模做大以后并没有技术切换成本,同时财务成本增长配合预付费也能保持平滑。 部分请求持续平稳的场景下,可以配合预付费解决按需付费较高单价问题。函数计算成本优化最佳实践文档。 假设有一个在线计算服务,由于是CPU 密集型计算, 因此在这里我们将平均 CPU 利用率作为核心参考指标对成本,以一个月为周期,10台 C5 ECS 的总计算力为例,总的计算量约为 30% 场景下, 各解决方案 CPU 资源利用率使用情况示意图大致如下: image 由上图预估出如下计费模型: 函数计算预付费 3CU 一个月: 246.27 元, 计算能力等价于 ECS 计算型 C5 ECS 计算型 C5 (2vCPU,4GB)+云盘: 包月219 元,按量: 446.4 元 包月10 Mbps 的 SLB: 526.52 元(这里做了一定的流量假设), 弹性伸缩免费 饱和使用下,函数计算按量付费的一台机器成本约为按量付费 C5 ECS 的2 倍 平均CPU使用率 计算费用 SLB 总计 函数计算组合付费 >=80% 738+X(246.273+X) 无 <= 738+X 按峰值预留ECS <=30% 2190(10219) 526.52 >=2716.52 弹性伸缩延迟敏感 <=50% 1314(102193/5) 526.52 >= 1840.52 弹性伸缩成本敏感 <=70% 938.57 (102193/7) 526.52 >= 1465.09 注: 这里假设函数逻辑没有公网下行流量费用, 即使有也是一致的, 这里成本比较暂不参与 延时敏感,当 CPU 利用率大于等于 50% 就需要开始进行扩容,不然更来不及应对峰值 成本敏感,当 CPU 利用率大约 80% 即开始进行扩容, 能容受一定几率的超时或者5XX 上表中, 其中函数计算组合付费中的 X 为按需付费的成本价,假设按需付费的计算量占整个计算量的 10%,假设 CPU 利用率为100%, 对应上表,那么需要 3 台 ECS 的计算能力即可。因此 FC 按量付费的成本 X = 3 ️ 446.4 ️ 10% ️ 2 = 267.84 ( FC 按量付费是按量 ECS 的2倍),这个时候函数计算组合付费总计 1005.8 元。 在这个模型预估里面, 只要 FC 按量付费占整个计算量小于 20%, 即使不考虑 SLB, 单纯考虑计算成本, 都是有一定优势的。 1.3.4. 小结 基于函数计算进行 AI 推理等 CPU 密集型的主要优势: 上手简单, 只专注业务逻辑开发, 极大提高工程开发效率。 自建方案有太多学习和配置成本,如针对不同场景,ESS 需要做各种不同的参数配置 系统环境的维护升级等 免运维,函数执行级别粒度的监控和告警。 毫秒级弹性扩容,保证弹性高可用,同时能覆盖延迟敏感和成本敏感类型。 在 CPU 密集型的计算场景下, 通过设置合理的组合计费模式, 在如下场景中具有成本优势: 请求访问具有明显波峰波谷, 其他时间甚至没有请求 有一定稳定的负载请求, 但是有部分时间段请求量突变剧烈 打包代码ZIP包和部署函数 FUN 操作简明视频教程 开通服务 免费开通函数计算, 按量付费,函数计算有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 2.1 安装第三方包到本地并上传到NAS 2.1.1 安装最新的Fun 安装版本为8.x 最新版或者10.x 、12.x nodejs 安装 funcraf 2.1.2 Clone 工程 & Fun 一键安装第三方库到本地 git clone https://github.com/awesome-fc/cat-dog-classify.git 复制 .env_example 文件为 .env, 并且修改 .env 中的信息为自己的信息 执行 fun install -v, fun 会根据 Funfile 中定义的逻辑安装相关的依赖包 image root@66fb3ad27a4c: ls .fun/nas/auto-default/classify model python root@66fb3ad27a4c: du -sm .fun 697 .fun 根据 Funfile 的定义: 将第三方库下载到 .fun/nas/auto-default/classify/python 目录下 本地 model 目录移到 .fun/nas/auto-default/model 目录下 安装完成后,从这里我们看出, 函数计算引用的代码包解压之后已经达到了 670 M, 远超过 50M 代码包限制, 解决方案是 NAS 详情可以参考: 挂载NAS访问,幸运的是 FUN 工具一键解决了 nas 的配置和文件上传问题。 2.1.3. 将下载的依赖的第三方代码包上传到 NAS fun nas init fun nas info fun nas sync fun nas ls nas://classify:/mnt/auto/ 依次执行这些命令,就将本地中的 .fun/nas/auto-default 中的第三方代码包和模型文件传到 NAS 中, 依次看下这几个命令的做了什么事情: fun nas init: 初始化 NAS, 基于您的 .env 中的信息获取(已有满足条件的nas)或创建一个同region可用的nas fun nas info: 可以查看本地 NAS 的目录位置, 对于此工程是 $(pwd)/.fun/nas/auto-default/classify fun nas sync: 将本地 NAS 中的内容(.fun/nas/auto-default/classify)上传到 NAS 中的 classify 目录 fun nas ls nas:///mnt/auto/: 查看我们是否已经正确将文件上传到了 NAS 登录 NAS 控制台 https://nas.console.aliyun.com 和 VPC 控制台 https://vpc.console.aliyun.com可以观察到在指定的 region 上有 NAS 和相应的 vpc 创建成功 2.2 本地调试函数 在 template.yml 中, 指定了这个函数是 http 类型的函数, 所以根据 fun 的提示: Tips for next step Invoke Event Function: fun local invokeInvoke Http Function: fun local startBuild Http Function: fun buildDeploy Resources: fun deploy 执行 fun local start, 本地就会启动一个 http server 来模拟函数的执行, 然后我们 client 端可以使用 postman, curl 或者浏览器, 比如对于本例: image image 2.3 部署函数到FC平台 本地调试OK 后,我们接下来将函数部署到云平台: 修改 template.yml LogConfig 中的 Project, 任意取一个不会重复的名字即可,有两处地方需要更改,然后执行 fun deploy 注意: template.yml 注释的部分为自定义域名的配置, 如果想在 fun deploy 中完成这个部署工作: 先去域名解析, 比如在示例中, 将域名 sz.mofangdegisn.cn 解析到 123456.cn-hangzhou.fc.aliyuncs.com, 对应的域名、accountId 和 region 修改成自己的 去掉 template.yml 中的注释, 修改成自己的域名 执行 fun deploy 这个时候如果没有自定义域名, 直接通过浏览器访问http trigger 的url, 比如 https://123456.cn-shenzhen.fc.aliyuncs.com/2016-08-15/proxy/classify/cat-dog/ 会被强制下载. 原因:https://help.aliyun.com/knowledge_detail/56103.html#HTTP-Trigger-compulsory-header image 登录控制台https://fc.console.aliyun.com,可以看到service 和函数已经创建成功,并且 service 也已经正确配置。 image 在这里,我们发现第一次打开页面访问函数的时候,执行环境实例冷启动时间非常长, 如果是一个在线AI推理服务,对响应时间非常敏感,冷启动引起的毛刺对于这种类型的服务是不可接受的,接下来,本文讲解如何利用函数计算的预留模式来消除冷启动带来的负面影响。 使用预留模式消除冷启动毛刺 函数计算具有动态伸缩的特性, 根据并发请求量,自动弹性扩容出执行环境来执行环境,在这个典型的深度学习示例中,import keras 消耗的时间很长 , 在我们设置的 1 G 规格的函数中, 并发访问的时候耗时10s左右, 有时甚至20s+ start = time.time() from keras.models import model_from_json print("import keras time = ", time.time()-start) 3.1 函数计算设置预留 预留操作简明视频教程 在 FC 控制台,发布版本,并且基于该版本创建别名 prod,并且基于别名 prod 设置预留, 操作过程请参考:https://help.aliyun.com/document_detail/138103.html 将该函数的 http trigger 和自定义域名的设置执行 prod 版本 image image 一次压测结果 imageimage 从上面图中我们可以看出,当函数执行的请求到来时,优先被调度到预留的实例中被执行, 这个时候是没有冷启动的,所以请求是没有毛刺的, 后面随着测试的压力不断增大(峰值TPS 达到 1184), 预留的实例不能满足调用函数的请求, 这个时候函数计算就自动进行按需扩容实例供函数执行,此时的调用就有冷启动的过程, 从上面我们可以看出,函数的最大 latency 时间甚至达到了 32s,如果这个web AP是延时敏感的,这个 latency 是不可接受的。 总结 函数计算具有快速自动伸缩扩容能力 预留模式很好地解决了冷启动中的毛刺问题 开发简单易上手,只需要关注具体的代码逻辑, Fun 工具助您一键式部署运用 函数计算具有很好监控设施, 您可以可视化观察您函数运行情况, 执行时间、内存等信息

1934890530796658 2020-03-27 18:21:48 0 浏览量 回答数 0

问题

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

轩墨 2019-12-01 22:06:08 2089 浏览量 回答数 0

回答

在阿里云上恢复数据有多种方式,例如: 通过阿里云控制台回滚备份好的快照,自定义镜像恢复等方式。 购买多台ECS,实现业务的负载均衡,高可用。 利用对象存储 OSS(Object Storage Service),存储静态网页和海量图片、视频等重要数据。 本文档主要以CentOS7操作系统为例,介绍如何使用开源工具Extundelete快速恢复被误删除掉的数据。 在Linux下,基于开源的数据恢复工具有很多,常见的有debugfs、R-Linux、ext3grep、extundelete等,比较常用的有ext3grep和extundelete,这两个工具的恢复原理基本一样,只是extundelete功能更加强大。 Extundelete是基于linux的开源数据恢复软件。在使用阿里云的云服务器时,如果您不小心误删除数据,并且Linux系统也没有与Windows系统下回收站类似的功能,您可以方便快速安装此工具。 Extundelete能够利用inode信息结合日志去查询该inode所在的block位置,以次来查找和恢复所需的数据,该工具最给力的一点就是支持ext3/ext4双格式分区恢复,基于整个磁盘的恢复功能较为强大。 注意事项 在数据被误删除后,第一时间要做的是卸载被删除数据所在的磁盘或磁盘分区。因为将文件删除后,仅仅是将文件的inode结点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据块被新的数据覆盖后,这些数据就真的丢失了,恢复工具也回力无天。所以,以只读模式挂载磁盘可以尽量降低数据块中数据被覆盖的风险,以提高恢复数据成功的几率。 注:在实际线上恢复过程中,切勿将extundelete安装到您误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖,切记操作前做好快照备份。 适用对象 磁盘中文件误删除的用户,且未对磁盘进行过写入等操作 网站访问量小、少量 ECS 实例的用户 使用方法 需安装的软件及版本:e2fsprogs-devel e2fsprogs gcc-c++ make(编译器等)Extundelete-0.2.4 注:extundelete需要libext2fs版本1.39或更高版本来运行,但是对于ext4支持,请确保您有e2fsprogs版本1.41或更新版本(可以通过运行命令“dumpe2fs”并记录其输出的版本) 说明:以上版本是写文档时的软件版本。您下载的版本可能与此不同。 部署extundelete工具 wget  http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2 yum -y install  bzip2  e2fsprogs-devel  e2fsprogs  gcc-c++  make    #安装相关依赖和库 tar -xvjf extundelete-0.2.4.tar.bz2 cd extundelete-0.2.4                                #进入程序目录 ./configure                                         #如下图表示安装成功 make && make install 这个时候会出现src目录,下面有个extundelete可执行文件以及相应路径,如下图,其实默认文件安装在usr/local/bin下面,下面演示就在usr/local/bin目录下。 使用extundelete,模拟数据误删除然后恢复的过程 1.检查ECS现有的磁盘和可用分区,并对/dev/vdb进行分区,格式化,此处不在介绍磁盘分区格式化方式,如果不会的话可以点击此文档查看操作方式“格式化和挂载数据盘”。 fdisk -l 2.将分区后的磁盘挂载到/zhuyun目录下,然后在/zhuyun下面新建测试文件hello,写入test。 mkdir /zhuyun                                #新建zhuyun目录 mount /dev/vdb1 /zhuyun                      #将磁盘挂载到zhuyun目录下 echo test > hello                            #写入测试文件 3.记录文件MD5值,md5sum命令用于生成和校验删除前和恢复后俩个文件的md5值。 md5sum hello 4.模拟删除hello文件。 rm -rf hello cd ~ fuser -k /zhuyun                     #结束使用某分区的进程树(确认没有资源占用的话,可以跳过此步) 5.卸载数据盘。 umount /dev/vdb1                     #任何的文件恢复工具,在使用前,均要将要恢复的分区卸载或挂载为只读,防止数据被覆盖使用 6.使用Extundelete工具恢复文件。 extundelete --inode 2 /dev/vdb1 #为查找某i节点中的内容,使用2则说明为整个分区搜索,如果需要进入目录搜索,只须要指定目录I节点即可。这是可以看到删除的文件名和inode /usr/local/bin/extundelete --restore-inode 12 /dev/vdb1 #恢复删除的文件 这个时候会在执行命令的同级目录下出现RECOVERED_FILES目录,查看是否恢复。 通过md5值查看,前后俩个文件,一样说明恢复成功。 注: --restore-inode 12 # --restore-inode 按指定的I节点恢复 --extundelete --restore-all # --restore-all 全部恢复 望采纳,谢谢🙏

元芳啊 2019-12-02 00:09:28 0 浏览量 回答数 0

回答

前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类应用,告别刀耕火种, 直接上云会扫清硬件采购、 技术等各种障碍,以阿里云为例: image 这是一个非常典型的解决方案, 对象存储 OSS 可以支持海量视频存储,采集上传的视频被转码以适配各种终端,CDN 加速终端设备播放视频的速度。此外还有一些内容安全审查需求, 比如鉴黄、鉴恐等。 而在视频点播解决方案中, 视频转码是最消耗计算力的一个子系统,虽然您可以使用云上专门的转码服务,但在很多情况下,您会选择自己搭建转码服务。比如: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性? 您有并发处理大量视频的需求。 您有很多超大的视频需要批量快速处理完, 比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完。 您有更高级的自定义处理需求,比如视频转码完成后, 需要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。 自定义视频处理流程中可能会有多种操作组合, 比如转码、加水印和生成视频首页 GIF。后续为视频处理系统增加新需求,比如调整转码参数,希望新功能发布上线对在线服务无影响。 您的需求只是简单的转码需求,或是一些极其轻量的需求,比如获取 OSS 上视频前几帧的 GIF、获取视频或者音频的时长,自己搭建成本更低。 各种格式的音频转换或者各种采样率自定义、音频降噪等功能 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务可以直接读取源文件处理,而不需要将它们再迁移到 OSS 上。 如果您的视频处理系统有上述需求,或者您期望实现一个 弹性、高可用、低成本、免运维、灵活支持任意处理逻辑 的视频处理系统,那么本文则是您期待的最佳实践方案。 Serverless 自定义音视频处理 在介绍具体方案之前, 先介绍两款产品: 函数计算 :阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询、性能监控、报警等功能。 函数工作流:函数工作流(Function Flow,以下简称 FnF)是一个用来协调多个分布式任务执行的全托管云服务。您可以用顺序,分支,并行等方式来编排分布式任务,FnF 会按照设定好的步骤可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。 免费开通函数计算,按量付费,函数计算有很大的免费额度。 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。 函数计算可靠的执行任意逻辑, 逻辑可以是利用 FFmpeg 对视频任何处理操作, 也可以更新视频 meta 数据到数据库等。函数工作流对相应的函数进行编排, 比如第一步的函数是转码, 第二步的函数是转码成功后,将相应 meta 数据库写入数据库等。 至此,您应该初步理解了函数计算的自定义处理能力 + 函数工作流编排能力几乎满足您任何自定义处理的需求,接下来,本文以一个具体的示例展示基于函数计算和函数工作流打造的一个弹性高可用的 Serverless 视频处理系统,并与传统方案进行性能、成本和工程效率的对比。 Simple 视频处理系统 假设您是对视频进行单纯的处理, 架构方案图如下: image 如上图所示, 用户上传一个视频到 OSS, OSS 触发器自动触发函数执行, 函数调用 FFmpeg 进行视频转码, 并且将转码后的视频保存回 OSS。 OSS 事件触发器, 阿里云对象存储和函数计算无缝集成。您可以为各种类型的事件设置处理函数,当 OSS 系统捕获到指定类型的事件后,会自动调用函数处理。例如,您可以设置函数来处理 PutObject 事件,当您调用 OSS PutObject API 上传视频到 OSS 后,相关联的函数会自动触发来处理该视频。 Simple 视频处理系统示例工程地址 强大的监控系统: 您可以直接基于示例工程部署您的 Simple 音视频处理系统服务, 但是当您想要处理超大视频(比如 test_huge.mov ) 或者对小视频进行多种组合操作的时候, 您会发现函数会执行失败,原因是函数计算的执行环境有最大执行时间为 10 分钟的限制,如果最大的 10 分钟不能满足您的需求, 您可以选择: 对视频进行分片 -> 转码 -> 合成处理, 详情参考:fc-fnf-video-processing, 下文会详细介绍; 联系函数计算团队(钉钉群号: 11721331) 或者提工单: 适当放宽执行时长限制; 申请使用更高的函数内存 12G(8vCPU) 为了突破函数计算执行环境的限制(或者说加快大视频的转码速度), 进行各种复杂的组合操作, 此时引入函数工作流 FnF 去编排函数实现一个功能强大的视频处理工作流系统是一个很好的方案。 视频处理工作流系统 image 如上图所示, 假设用户上传一个 mov 格式的视频到 OSS,OSS 触发器自动触发函数执行, 函数调用 FnF,会同时进行 1 种或者多种格式的转码(由您触发的函数环境变量DST_FORMATS 参数控制)。 所以您可以实现如下需求: 一个视频文件可以同时被转码成各种格式以及其他各种自定义处理,比如增加水印处理或者在 after-process 更新信息到数据库等。 当有多个文件同时上传到 OSS,函数计算会自动伸缩, 并行处理多个文件, 同时每次文件转码成多种格式也是并行。 结合 NAS + 视频切片, 可以解决超大视频(大于 3G )的转码, 对于每一个视频,先进行切片处理,然后并行转码切片,最后合成,通过设置合理的切片时间,可以大大加速较大视频的转码速度。 所谓的视频切片,是将视频流按指定的时间间隔,切分成一系列分片文件,并生成一个索引文件记录分片文件的信息 视频处理工作流系统示例工程地址 示例效果: gif 函数计算 + 函数工作流 Serverless 方案 VS 传统方案 卓越的工程效率 自建服务 函数计算 + 函数工作流 Serverless 基础设施 需要用户采购和管理 无 开发效率 除了必要的业务逻辑开发,需要自己建立相同线上运行环境, 包括相关软件的安装、服务配置、安全更新等一系列问题 只需要专注业务逻辑的开发, 配合 FUN 工具一键资源编排和部署 并行&分布式视频处理 需要很强的开发能力和完善的监控系统来保证稳定性 通过 FnF 资源编排即可实现多个视频的并行处理以及单个大视频的分布式处理,稳定性和监控交由云平台 学习上手成本 除了编程语言开发能力和熟悉 FFmpeg 以外,可能使用 K8S 或弹性伸缩( ESS ),需要了解更多的产品、名词和参数的意义 会编写对应的语言的函数代码和熟悉 FFmpeg 使用即可 项目上线周期 在具体业务逻辑外耗费大量的时间和人力成本,保守估计大约 30 人天,包括硬件采购、软件和环境配置、系统开发、测试、监控报警、灰度发布系统等 预计 3 人天, 开发调试(2人天)+ 压测观察(1 人天) 弹性伸缩免运维,性能优异 自建服务 函数计算 + 函数工作流 Serverless 弹性高可用 需要自建负载均衡 (SLB),弹性伸缩,扩容缩容速度较 FC 慢 FC系统固有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维,视频处理工作流系统 (FnF + FC) 压测;性能优异, 详情见下面的转码性能表 监控报警查询 ECS 或者容器级别的 metrics 提供更细粒度的 FnF 流程执行以及函数执行情况, 同时可以查询每次函数执行的 latency 和日志等, 更加完善的报警监控机制 函数计算 + 函数工作流 Serverless 方案转码性能表 实验视频为是 89s 的 mov 文件 4K 视频: 4K.mov,云服务进行 mov -> mp4 普通转码需要消耗的时间为 188s, 将这个参考时间记为 T 视频切片时间 FC转码耗时 性能加速百分比 45s 160s 117.5% 25s 100s 188% 15s 70s 268.6% 10s 45s 417.8% 5s 35s 537.1% 性能加速百分比 = T / FC转码耗时 从上表可以看出,设置的视频切片时间越短, 视频转码时间越短, 函数计算可以自动瞬时调度出更多的计算资源来一起完成这个视频的转码, 转码性能优异。 更低的成本 具有明显波峰波谷的视频处理场景(比如只有部分时间段有视频处理请求,其他时间很少甚至没有视频处理请求),选择按需付费,只需为实际使用的计算资源付费。 没有明显波峰波谷的视频处理场景,可以使用预付费(包年包月),成本仍然具有竞争力。 函数计算成本优化最佳实践文档。 假设有一个基于 ECS 搭建的视频转码服务,由于是 CPU 密集型计算, 因此在这里将平均 CPU 利用率作为核心参考指标对评估成本,以一个月为周期,10 台 C5 ECS 的总计算力为例, 总的计算量约为 30% 场景下, 两个解决方案 CPU 资源利用率使用情况示意图大致如下: image 由上图预估出如下计费模型: 函数计算预付费 3CU 一个月: 246.27 元, 计算能力等价于 ECS 计算型 C5 ECS 计算型 C5 (2vCPU,4GB)+云盘: 包月219 元 函数计算按量付费占整个计算量的占比 <= 10%,费用约为 3×864×10% = 259.2 元,(3G 规格的函数满负载跑满一个月费用为:0.00011108×3×30×24×3600 = 863.8,详情查看计费) ITEM 平均CPU利用率 计算费用 总计 函数计算组合付费 >=80% 998(246.27×3+259.2) <= 998 按峰值预留ECS <=30% 2190(10*219) >=2190 在这个模型预估里面,可以看出 FC 方案具有很强的成本竞争力,在实际场景中, 基于 ECS 自建的视频转码服务 CPU 利用甚至很难达到 20%, 理由如下: 可能只有部分时间段有视频转码请求 为了用户体验,视频转码速度有一定的要求,可能一个视频转码就需要 10 台 ECS 并行处理来转码, 因此只能预备很多 ECS 因此,在实际场景中, FC 在视频处理上的成本竞争力远强于上述模型。 即使和云厂商视频转码服务单价 PK, 该方案仍有很强的成本竞争力 我们这边选用点播视频中最常用的两个格式(mp4、flv)之间进行相互转换,经实验验证, 函数内存设置为3G,基于该方案从 mp4 转码为 flv 的费用概览表: 实验视频为是 89s 的 mp4 和 flv 格式的文件视频, 测试视频地址: 480P.mp4 720P.mp4 1080P.mp4 4K.mp4 480P.flv 720P.flv 1080P.flv 4K.flv 测试命令: ffmpeg -i test.flv test.mp4 和 ffmpeg -i test.flv test.mp4 mp4 转 flv: 分辨率 bitrate 帧率 FC 转码耗费时间 FC 转码费用 某云视频处理费用 成本下降百分比 标清 640480 889 kb/s 24 11.2s 0.003732288 0.032 88.3% 高清 1280720 1963 kb/s 24 20.5s 0.00683142 0.065 89.5% 超清 19201080 3689 kb/s 24 40s 0.0133296 0.126 89.4% 4K 38402160 11185 kb/s 24 142s 0.04732008 0.556 91.5% flv 转 mp4: 分辨率 bitrate 帧率 FC 转码耗费时间 FC 转码费用 某云视频处理费用 成本下降百分比 标清 640480 712 kb/s 24 34.5s 0.01149678 0.032 64.1% 高清 1280720 1806 kb/s 24 100.3s 0.033424 0.065 48.6% 超清 19201080 3911 kb/s 24 226.4s 0.0754455 0.126 40.1% 4K 38402160 15109 kb/s 24 912s 0.30391488 0.556 45.3% 成本下降百分比 = (某云视频处理费用 - FC 转码费用)/ 云视频处理费用 某云视频处理,计费使用普通转码,转码时长不足一分钟,按照一分钟计算,这里计费采用的是 2 min,即使采用 1.5 min 计算, 成本下降百分比基本在10%以内浮动 从上表可以看出, 基于函数计算 + 函数工作流的方案在计算资源成本上对于计算复杂度较高的 flv 转 mp4 还是计算复杂度较低的 mp4 转 flv, 都具有很强的成本竞争力。 根据实际经验, 往往成本下降比上表列出来的更加明显, 理由如下: 测试视频的码率较高, 实际上很多场景绝大部分都是标清或者流畅视频的转码场景, 码率也比测试视频低,这个时候计算量变小, FC 执行时间短, 费用会降低, 但是通用的云转码服务计费是不变的. 很多视频分辨率在通用的云转码服务是计费是有很大损失的, 比如转码的视频是 856480 或者 1368768, 都会进入云转码服务的下一档计费单价, 比如856480 进入 1280720 高清转码计费档,1368768 进入 19201080 超清转码计费档, 单价基本是跨越式上升, 但是实际真正的计算量增加可能还不到30%, 而函数计算则是真正能做到按计算量付费. 操作部署 免费开通函数计算,按量付费,函数计算有很大的免费额度。 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 详情见各自示例工程的 README Simple 视频处理系统示例工程地址 视频处理工作流系统示例工程地址 总结 基于函数计算 FC 和函数工作流 FnF 的弹性高可用视频处理系统天然继承了这两个产品的优点: 无需采购和管理服务器等基础设施,只需专注视频处理业务逻辑的开发,大幅缩短项目交付时间和人力成本 提供日志查询、性能监控、报警等功能快速排查故障 以事件驱动的方式触发响应用户请求 免运维,毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,性能优异 成本极具竞争力 相比于通用的转码处理服务: 超强自定义,对用户透明, 基于 FFmpeg 或者其他音视频处理工具命令快速开发相应的音视频处理逻辑 原有基于 FFmpeg 自建的音视频处理服务可以一键迁移 弹性更强, 可以保证有充足的计算资源为转码服务,比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完 各种格式的音频转换或者各种采样率自定义、音频降噪等功能, 比如专业音频处理工具 aacgain 和 mp3gain 可以和 serverless 工作流完成更加复杂、自定义的任务编排,比如视频转码完成后,记录转码详情到数据库,同时自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力 更多的方式的事件驱动, 比如可以选择 OSS 自动触发(丰富的触发规则), 也可以根据业务选择 MNS 消息(支持 tag 过滤)触发 在大部分场景下具有很强的成本竞争力相比于其他自建服务: 毫秒级弹性伸缩,弹性能力超强,支持大规模资源调用,可弹性支持几万核.小时的计算力,比如 1 万节课半个小时完成转码 只需要专注业务逻辑代码即可,原生自带事件驱动模式,简化开发编程模型,同时可以达到消息(即音视频任务)处理的优先级,可大大提高开发运维效率 函数计算采用 3AZ 部署, 安全性高,计算资源也是多 AZ 获取, 能保证每个用户需要的算力峰值 开箱即用的监控系统, 如上面 gif 动图所示,可以多维度监控函数的执行情况,根据监控快速定位问题,同时给用户提供分析能力, 比如视频的格式分布, size 分布等 在大部分场景下具有很强的成本竞争力, 因为在函数计算是真正的按量付费(计费粒度在百毫秒), 可以理解为 CPU 的利用率为 100% 最后一一回答一下之前列出的问题: Q1: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性? A: 如工程示例所示,在虚拟机/容器平台上基于 FFmpeg 的服务可以轻松切换到函数计算, FFmpeg 相关命令可以直接移值到函数计算,改造成本较低, 同时天然继承了函数计算弹性高可用性特性。 Q2:您的需求只是简单的转码需求,或是一些极其轻量的需求,比如获取 OSS 上视频前几帧的 GIF 等。 自己搭建成本更低。 A: 函数计算天生就是解决这些自定义问题, 你的代码你做主, 代码中快速执行几个 FFmpeg 的命令即可完成需求。典型示例: fc-oss-ffmpeg Q3: 您有更高级的自定义处理需求,比如视频转码完成后, 需要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案),after-process 中可以做一些自定义的操作, 您还可以基于此流程再做一些额外处理等, 比如: 再增加后续流程 最开始增加 pre-process Q4: 您有并发同时处理大量视频的需求。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案), 当有多个文件同时上传到 OSS, 函数计算会自动伸缩, 并行处理多个文件。详情可以参考 视频处理工作流系统 (FnF + FC) 压测 Q5:您有很多超大的视频需要批量快速处理完, 比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完。A: 详情可以参考视频处理工作流系统 (FnF + FC) 压测, 可以通过控制分片的大小, 可以使得每个大视频都有足够多的计算资源参与转码计算, 大大提高转码速度。 Q6: 自定义视频处理流程中可能会有多种操作组合, 比如转码、加水印和生成视频首页 GIF,后续为视频处理系统增加新需求,比如调整转码参数,希望新功能发布上线对在线服务无影响。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案), FnF 只负责编排调用函数, 因此只需要更新相应的处理函数即可,同时函数有 version 和 alias 功能, 更好地控制灰度上线, 函数计算版本管理 Q7: 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务可以直接读取源文件处理,而不需要将他们再迁移到 OSS 上。 A: 函数计算可以挂载 NAS, 直接对 NAS 中的文件进行处理

1934890530796658 2020-03-27 18:21:36 0 浏览量 回答数 0

问题

某政务网站性能优化

猫饭先生 2019-12-01 21:25:38 1412 浏览量 回答数 0

问题

网站技术职位之我见:报错

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