关于mse:MSE-Nacos-配置变更审计平台使用指南

配置审计平台简介Nacos[1]作为一款业界支流的微服务注册核心和配置核心,治理着企业外围的配置资产,因为配置变更的平安和稳固诉求越来越高,因而咱们提供了平安和可追溯性保障机制。 配置变更的路径次要包含控制台手动公布和应用 Nacos SDK 客户端等形式,为了配置变更的安全性,咱们须要对这两种变更进行变更操作的告诉和追溯;其中既包含这些变更操作的变更责任人、责任机器的追踪,也包含变更操作对于相干方的告诉和告警。 配置变更审计平台外围指标从变更内容方面,配置变更动作可分为配置的公布、删除、导入、批改等;从变更渠道划分,Nacos 配置变更可分为 在控制台进行的手动操作、应用 Nacos SDK 进行的操作。配置变更产生之后,咱们须要进行变更的具体审计,其中次要包含出现配置的变更细节、变更之后的音讯告诉。 由此可见,配置变更的指标次要是在配置变更后进行相应的附加解决,来晋升配置的可靠性、精准性,从而晋升零碎整体的安全性、可用性。 为了提供给用户一个欠缺的配置变更审计平台,咱们在审计平台中提出了以下几个配置变更的审计点: 配置变更操作责任人审计:在 MSE 中增加配置变更的操作责任人的信息,不便客户追溯配置变更的具体执行者;而对于未开启鉴权,未留下用户信息的用户,MSE Nacos 会将配置变更的起源 IP 记录下来,并且将其裸露给用户,从而保障整个审计链路的完整性和可追溯性;配置变更影响面审计:当有多个微服务利用监听该配置时,咱们须要记录下有哪些利用和机器监听了该配置,当配置内容发生变化,咱们须要将其推送行为、推送胜利与否、是否影响业务等信息在变更审计平台上出现给用户;配置变更内容审计:对所公布配置的内容进行记录,便于用户追溯配置历史的版本,以及每个历史版本的更新日期、所属利用、变更内容;配置变更告诉和告警:在配置变更(含公布、批改、导入、删除操作)之后,配置应用水位的实时监控以及配置应用水位超过阈值之后的告警,可能保障用户的及时感知配置的变动状况。配置变更审计平台原理如下图所示,配置变更审计平台会将用户的变更操作残缺记录,并且通过配置操作人追溯、推送轨迹、配置历史版本审查、变更告诉及告警等性能向用户透出。 例如,当用户组织内,某变更操作执行人 A 发动“配置变更 1”操作时,MSE 会将其操作内容和影响面做残缺的记录,如“A 执行了配置变更1操作,变更内容为 XXX,该配置监听者及可能的受影响者为 C”。这些信息会通过配置操作人追溯大盘、配置操作影响面追溯大盘等,对立汇总到变更的审计人 E;同时,审计人 E 也能够通过配置应用水位监控观测到配置核心以后的整体应用状况,当配置的使用量超出既定阈值时,MSE 会通过告警信息等形式将危险透出给配置变更审计者。 由此,当用户组织外部的变更审计人须要对该变更进行审计和追溯时,便能够通过 MSE 配置变更审计平台,残缺地看到该变更发行工夫点、操作人、操作内容、影响面等各种信息,便于其进行团队和研发进度治理,界定危险责任。 配置操作人追溯MSE Nacos 配置变更操作人追溯作为配置变更平台最次要的性能,用户能够在该追溯界面查看看到历次配置变更的详情和变更操作的责任人信息。 如下图所示,该性能在记录和出现配置的操作细节时,对于展现内容设置了多个优先级: 1.当变更的操作起源为用户手动在 MSE 控制台进行公布变更时,配置变更责任人的内容为用户的账号信息,其中: 若用户应用阿里云主账号登录,则记录并出现主账号的 UID;若用户应用其所属的子账号登录,则记录并出现登录应用的子账号的 UID。2.当变更的操作起源为用户应用 Nacos 的 Client 来进行配置的增删改查等操作时,MSE 会判断操作源是否携带身份信息: 如果该操作源携带了身份信息,则将其辨认并展现进去;否则,MSE 会自动识别该操作源的起源 IP 并展现在配置操作人追溯列表中,便于配置审计人更加精确和全面地履行审计职责。 配置变更推送轨迹同时,MSE Nacos 配置变更审计平台也出现了配置核心的推送轨迹。如下图所示,在推送轨迹页面,用户能够通过推送轨迹查问某配置相干的变更事件,也能够依据 IP 查问所有和该 IP 地址相干的推送轨迹。其中配置核心配置变更和公布的各种具体问题都在推送轨迹界面有所展现,例如: 配置公布异样;配置批改完发现某台机器不失效;须要查看配置核心变更及推送事件。 其中,变更事件、DataId、Group 别离示意别离示意本次配置变更事件类型、该配置变更事件的配置、该配置变更事件的配置所属分组。在“详情”列能够看到详情图标能够看到本次变更事件详细信息,点击详情列跳转按钮能够切换到配置维度查问的入口查问以后配置在该工夫点的推送事件。 配置监控大盘及告警同时,MSE Nacos 也提供了变更之后的配置监控页面,次要监测指标包含: ...

February 29, 2024 · 2 min · jiezi

关于mse:MSE-自治服务帮你快速定位解决-Dubbo-重复订阅导致-RPC-服务注册失败问题

背景Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,具备易用、超大规模微服务实际、云原生基础设施适配、安全性等特点。然而不正确的 Dubbo 应用姿态可能会导致 Dubbo 利用以及 ZooKeeper 注册核心呈现稳定性问题。近期,一线上客户公布时,因为 Dubbo Reference 反复初始化,导致 ZooKeeper 呈现不可用,服务注册订阅失败,造成业务大面积故障。ZooKeeper 出现异常日志↓ 残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1223192?utm_content=g_10... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

June 12, 2023 · 1 min · jiezi

关于mse:流控验证太麻烦不敢上生产MSE-有办法

影响服务稳定性的因素有很多,其中比拟常见但又往往容易被忽视的就是面向流量的稳定性,流控是保障服务稳定性的重要伎俩。然而,咱们发现大量客户仅仅在开发环境和预发环境中测试流控,却在生产环境中鲜有应用。依据深刻的交换,发现问题次要在二方面:• 第一:对于首次公布的服务,因为无奈准确预测实在流量的大小,往往无奈给出正当的限流条件,这给流控的施行带来了很大的挑战。• 第二:对于曾经上线的服务,间接对正在运行的业务进行流控可能会导致业务宕机或申请谬误,进而影响用户体验。局部领有能力的客户,会在测试环境中模仿生产环境中流量,从而验证流控的正确性,进而在生产环境中施行。这最大的问题是验证老本较高,验证流程较长,而且测试环境无奈齐全还原生产环境中流量状况。 残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1208126?utm_content=g_10... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

June 1, 2023 · 1 min · jiezi

关于mse:MSE-自治服务帮你快速定位解决-Dubbo-重复订阅导致-RPC-服务注册失败问题

背景Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,具备易用、超大规模微服务实际、云原生基础设施适配、安全性等特点。然而不正确的 Dubbo 应用姿态可能会导致 Dubbo 利用以及 ZooKeeper 注册核心呈现稳定性问题。近期,一线上客户公布时,因为 Dubbo Reference 反复初始化,导致 ZooKeeper 呈现不可用,服务注册订阅失败,造成业务大面积故障。 ZooKeeper 出现异常日志↓ 并且 ZooKeeper 集群继续不可用,无奈自愈。 起因剖析Dubbo Reference 是 Dubbo 框架中服务提供者在调用者中的代理实现,在初始化 Dubbo Reference 的时候会将 consumer 自身注册在订阅的服务的 consumer 列表中,如果在一个利用中实例化了多个同一个接口的 Dubbo Reference,那么 ZooKeeper 中对应的被订阅的服务 consumer 列表中也会存在多个因为此利用订阅产生的 Znode 节点,这些 Znode 节点的 Path 除了 timestamp 字段都是统一的。 Dubbo 自身通过这种形式示意实在的订阅关系,然而在客户端不正确的应用的状况下,就可能导致 Dubbo 利用自身以及 ZooKeeper 的稳定性问题。 https://github.com/apache/dubbo/issues/4587例如在 Dubbo 2.7.9 之前的版本中在利用中初始化多个雷同接口的 Dubbo Reference, 可能会导致内存溢出的问题。 对于 ZooKeeper 集群,在之前 jute.maxbuffer 调优文章中剖析过在 ZooKeeper Server 之间数据同步的时候会严格依据 jute.maxbuffer 的限度进行 Server 之间用于同步的数据包大小的校验,如果数据包超过限度会导致 Follower 和 Leader 之间断连。对于因为谬误应用,利用一直初始化同一个接口的 Dubbo Reference,在利用解体之后,利用创立的大量的长期节点会导致 ZooKeeper 集群继续解体。 ...

May 30, 2023 · 1 min · jiezi

关于mse:MSE-ZooKeeper-数据导入导出功能上线

背景MSE 提供了托管版的 ZooKeeper,领有比自建开源 ZooKeeper 稳定性更高的SLA,同时管控面提供了丰盛的服务自治性能。赶在2022年的岁末,MSE ZooKeeper 上线了一个十分实用的性能-数据导入导出性能,彻底解决了困恼用户长期以来无奈自助解决数据的问题。通过浏览本文,你能够疾速取得以下知识点和能力:• ZooKeeper 的长久化文件原理• 什么场景下会应用到导入导出性能• 如何在 MSE 下面应用导入导出性能 残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1132321?utm_content=g_10... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

May 22, 2023 · 1 min · jiezi

关于mse:流控验证太麻烦不敢上生产MSE-有办法

影响服务稳定性的因素有很多,其中比拟常见但又往往容易被忽视的就是面向流量的稳定性,流控是保障服务稳定性的重要伎俩。然而,咱们发现大量客户仅仅在开发环境和预发环境中测试流控,却在生产环境中鲜有应用。依据深刻的交换,发现问题次要在二方面: 第一:对于首次公布的服务,因为无奈准确预测实在流量的大小,往往无奈给出正当的限流条件,这给流控的施行带来了很大的挑战。第二:对于曾经上线的服务,间接对正在运行的业务进行流控可能会导致业务宕机或申请谬误,进而影响用户体验。局部领有能力的客户,会在测试环境中模仿生产环境中流量,从而验证流控的正确性,进而在生产环境中施行。这最大的问题是验证老本较高,验证流程较长,而且测试环境无奈齐全还原生产环境中流量状况。咱们能够演绎以上的问题为一点:如何在不影响生产业务的状况下,小老本验证流控能力,进而在生产环境中施行流控。 在不验证的状况下,间接在生产环境中失效流控规定,很有可能让解决劫难的方法成为劫难自身,例如流控规定配置谬误、流控没有达到预期、流控无端失效导致业务宕机等等,这些问题在生产环境中是齐全无奈承受的。 那么有什么方法可能在生产环境中小老本、疾速地验证流控能力?可能在生产环境中确定配置的流量防护策略是否正当?一个简略的思路就是只对线上一部分的流量进行流控验证,即在可控范畴内做流控验证。 基于这一想法,咱们应用微服务引擎(MSE)中热点参数防护的性能,提出了一种正当的解决方案:首先在生产环境中进行可控范畴内的流控能力验证、确定流控合理配置,进而在生产环境中启用流控。 MSE微服务治理简介:微服务治理核心无侵入加强支流Spring Cloud、Apache Dubbo和Istio等开源微服务框架,提供丰盛的服务治理和流量防护性能,将中间件与业务解耦,领有如下性能:无损上线、无损下线、全链路灰度、流量管制、离群实例摘除等。 01 验证思路咱们将会依照以下程序验证所提出计划的可行性: 搭建根底场景用于模仿生产环境。配置相应的流控规定,用于能力验证。流量测试。 02 根底场景搭建咱们应用MSE服务治理中热点参数防护性能来实现生产环境可控的流控能力验证。 本文以常见的长链路调用场景为例,介绍生产环境下进行可控范畴内的流控能力验证的过程,搭建的具体流程不再介绍,可详见MSE产品help文档[1]。 模仿场景应用如下后端场景,后端共有3个服务:利用A、利用B、利用C。这3个服务之间通过MSE Nacos注册核心实现服务发现。客户能够通过客户端后者HTML来拜访后端服务。客户的申请达到网关后,调用链路为 :用户>MSE云原生网关>A>B>C。 阐明:咱们的要求是对于指定带标签的流量,任何配置相应流控规定的利用都应起到流控作用。对于从网关到利用A的流量,因携带标签,热点参数防护性能能够失效。然而对于利用A至利用B的流量,会失落流量中的标签,咱们须要额定标签透传的性能,能力保障利用B失去携带标签的流量,从而使得热点参数防护性能能够失效。 名词解释: MSE云原生网关:MSE云原生网关是兼容K8s Ingress规范的下一代网关产品,反对ACK容器和Nacos等多种服务发现形式,反对多种认证登录形式疾速构建平安防线。更多信息,请参见云原生网关概述[2]带标签申请:申请中的header带指定kv标签透传申请:失常的RPC申请,即利用A到利用B的申请是不会携带前置申请的header信息。如果是标签透传,前置申请中指定header将会携带后续的申请中03流控配置咱们心愿仅仅对线上可控范畴内的流量进行流控验证,比方用户等级比拟低的申请流量,或者是外部用户的测试流量,从而在不会对线上的服务造成影响的前提下足够地验证流控能力。 咱们模仿如上场景,标识特定的流量申请header中退出key为limit,value为true的参数值,特定的流量会被流控规定所管制最大申请范畴,并且保障失常的申请流量不会受到任何影响。 而后咱们对利用A、利用B退出热点参数防护,用于后续计划可行性验证。该操作对header含有limit:true的申请进行流控,为了成果显著,设定流控失效的qps阈值为20(即qps超过20时,申请将会被回绝)。 在MSE服务治理中,为利用配置热点参数防护的具体过程如下。 3.1 利用A流控规定配置1.咱们只需在mse服务治理页面配置如下热点参数防护能力,就能实现针对特定流量的流控配置。 在利用a中顺次抉择 抉择流量 > 流量防护 > 热点参数防护(HTTP申请) > 新增热点参数防护。 2.为接口/a退出如下配置防护规定。 3.针对指定的申请配置流控规定,比方下图所示header值为limit且value为true的流量会被以后配置的流控规定管制最大的QPS阈值20。 3.2 利用B流控规定配置利用B依照利用A一样配置。 1.在利用b中顺次抉择 抉择流量 > 流量防护 > 热点参数防护(HTTP申请) > 新增热点参数防护。2.为接口/b退出如下配置防护规定。 3.针对指定的申请配置流控规定,比方下图所示header值为limit且value为true的流量会被以后配置的流控规定管制最大的QPS阈值20。 04 流量测试在配置实现后,为了模仿生产环境,咱们将会顺次发送失常申请、被标记申请,测验流控对失常申请和被标记申请是否失效。 咱们首先依据如下步骤,获取入口地址: 登录MSE网关治理控制台,并在顶部菜单栏抉择地区。在左侧导航栏,抉择云原生网关 > 网关列表,单击指标网关名称。在左侧导航栏,单击根本概览。在网关入口页签,查看SLB的入口地址(ip)。在获取入口地址之后,咱们将会对/a接口顺次进行如下流量测试。 4.1 失常申请无流控1.向/a接口继续发送无标签的申请。2.可在输入中发现申请没有任何限度,均是失常返回,返回如下。 A[192.168.0.98] -> B[192.168.0.57] -> C[192.168.0.56] 4.2 被标记申请利用A流控失效1.向/a接口继续发送含标签申请(header含有limit:true)。2.当qps超过20时,申请呈现限流信息,限流信息如下。 Blocked by Sentinel (flow limiting)4.3 被标记申请利用B无流控1.敞开A服务的流控限度。2.向/a接口继续发送含标签申请(header含有limit:true)。3.可在输入中发现申请没有任何限度,均是失常返回,返回如下。 ...

May 12, 2023 · 1 min · jiezi

关于mse:MSE标签路由支持JDK-11吗

mse标签路由在jdk 11中是受反对的。因而,您能够在应用jdk 11时应用mse标签路由。然而,请留神确保您的实现版本与您应用的jdk兼容,以获得最佳性能和稳定性。 残缺内容请点击下方链接查看: https://developer.aliyun.com/ask/498334 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

April 27, 2023 · 1 min · jiezi

关于mse:如何轻松应对偶发异常

在之前的文章中,咱们曾经介绍了如何通过 MSE 提供的无损高低线和全链路灰度这两个性能来打消变更态的危险,置信您曾经可能在变更时得心应手。然而在利用运行过程中忽然遇到流量洪峰、黑产刷单、内部依赖故障、慢 SQL 等偶发异样时,您如何可能持续轻松应答呢? 本文将通过介绍 MSE 微服务治理在三月的最新性能来告诉您答案。文章次要分为三局部,首先是 MSE 微服务治理的简介,而后是 MSE 全面打消变更态危险的回顾 ,最初是如何借助 MSE 微服务治理轻松应答线上偶发异样。 MSE 微服务治理简介首先看一下微服架构的总览,置信读者敌人们对微服务都不生疏。在 JAVA 中比拟支流的微服务框架就是 Dubbo 和 Spring Cloud,同时当初也有很多公司采纳 Go、Rust 这些语言去构建本人的微服务。下图中浅绿色的这一部分都是纯开源的内容,除了微服务框架自身外,还蕴含了服务注册发现、服务配置核心、负载平衡等一系列的组件。 大家也发现,在微服务施行的过程中,随着微服务的增多、调用链路的复杂化,出问题和故障的可能性都在减少,问题定位的难度也成倍回升。比如说在可观测畛域,须要应用到利用监控、链路追踪、日志治理等性能,能力释怀地将利用部署到线上,免得呈现问题无奈定位。 更进一步,微服务自身更须要引入微服务治理。在开发态,须要通过服务 mock、服务测试、服务元数据等治理性能去保障微服务的疾速迭代;在变更态,须要借助无损高低线和全链路灰度性能去保障公布时的稳定性,以及业务的连续性;在运行态,微服务可能遇到各式各样的偶发异样,须要借助治理性能去实现流量的自愈,保障咱们的业务稳固、流畅地运行。很难设想一个线上的微服务利用没有治理是个什么场景,能够说是无治理、不生产。 随着应用微服务架构的公司越来越多,大家也都意识到微服务治理十分重要,然而在施行微服务治理的过程中,大家还是遇到了比拟多的痛点和难点。咱们总结了一下,企业在施行微服务的过程中遇到的三类问题,别离是稳固、老本和平安。 1.首先是稳固的问题 微服务在公布的过程中特地容易呈现问题,每次公布都得熬夜以避开业务高峰期,而且还是免不了呈现业务中断。当遇到难得的业务爆发式增长时,利用因为无奈承载流量顶峰导致整体宕机,错失了业务暴发的机会。在呈现一些偶发异样的时候,利用没有欠缺的防护和治愈伎俩,可能会因为偶发的小异样,一直的滚雪球,最终去拖垮咱们整个集群和整个服务。遇到偶发问题的无奈精确定位和彻底解决,只能重启形式躲避,从而使得咱们微服务的隐患越积越多,危险越来越大。2.第二是老本的问题 微服务治理性能在开源没有欠缺的解决方案,这个时候可能是须要去招聘大量精通微服务的人才,能力自建一套微服务治理体系,然而也无奈笼罩残缺的治理场景。这会使得人力老本十分高。引入了微服务之后,根本都会有一些麻利开发、疾速迭代的诉求。在这个过程中,须要保护多套环境以维持一个并行开发迭代的需要,这会使得机器老本十分高。传统的开发模式,当须要引入一个治理性能降级的时候,须要先降级根底组件,再对所有的利用进行代码革新,顺次公布能力实现降级,革新的周期长、危险大。这会使得工夫老本十分高。3.最初是平安的问题 常常会有一些开源的框架的安全漏洞被裸露进去,这个时候须要对依赖进行降级以修复 Bug,走一次残缺的公布能力实现,老本高,时效性差。零信赖平安的解决方案正在被越来越多的公司采纳,去保障整体的业务平安。不仅是在流量入口层对业务进行平安的保障,在利用间的外部调用也须要有残缺的鉴权和保障机制。那么 MSE微服务治理是怎么去解决这三个问题的? MSE 的微服务治理基于开源的 OpenSergo 规范实现了无侵入的微服务治理。对于使用者来说降级老本是零,业务是齐全无侵入感知的。 目前曾经能够做到是五分钟接入,半小时内就学会残缺的应用,保障微服务利用在变更态和运行时的稳定性。因为 OpenSergo 是全面开源规范,不会有任何的厂商绑定的问题。 从上图中能够看出,微服务利用能够通过 Java Agent 或 Sidecar 的形式接入MSE 微服务治理。在接入治理后,能够通过 MSE 微服引擎的管制面配置治理规定的配置。利用收到规定之后会实时失效,及时地爱护利用。 全面打消变更态危险的回顾当初来回顾一下,变更态存在哪些问题,以及 MSE 是如何全面打消变更态危险的。 首先问大家一个问题,当你的代码没有问题的时候,是不是在公布的过程中就肯定不会影响到业务?答案其实是否定的,因为这个时候可能会遇到无损高低线的问题。 为什么会呈现无损下线问题?第一个起因是服务消费者无奈实时感知到服务提供者曾经下线了,仍旧会去调用一个曾经下线的地址,从而呈现一个影响业务的报错。同时服务提供者也可能会在申请解决到一半的时候就间接进行了,从而导致业务报错,甚至呈现数据不统一的问题。 为什么会呈现无损上线的问题?一个新启动的节点,有可能在还没齐全启动前就注册到注册核心了,进而导致这时候过去的流量无奈被正确处理导致报错;另一种状况是,尽管利用启动实现了,然而还没有解决大流量的能力,可能间接被大流量压垮,须要先进行预热,能力解决大流量的申请。除此之外,目前 K8s 的普及率曾经十分高了,如果微服务的生命周期没有与 K8s 生命周期做一个的 readiness 对齐的话,公布过程也容易呈现无损上线问题。 当然更广泛的状况是,谁都不敢拍着胸脯保障我的代码没有问题。如果没有稳固的灰度机制,对只有两个节点的利用来说,公布一台就会影响 50% 的业务。发现 bug 之后须要回顾,可怕的是回滚的速度还十分慢,甚至回滚的时候还呈现了更大的问题。 ...

March 28, 2023 · 2 min · jiezi

关于mse:统一观测丨使用-Prometheus-监控云原生网关我们该关注哪些指标

Metrics 指标在可观测体系的利用可观测体系的概念由来已有,随着散布式微服务迅猛发展,对可观测体系的依赖也越来越深,可观测体系通常包含 Metrics、Tracing、Logging 三类数据,再外加报警机制,即可形成残缺的监控报警机制,业界对可观测也有系统性阐明,如下: 回到咱们日常问题排查,根本门路大抵分为 Detect(检测)、Troubleshoot(问题初步定位)、Pinpoint(精确定位)三个阶段,其别离对应可观测的三局部内容:Metrics、Traces、Logs,置信读到这里您曾经了解 Metrics 指标的重要性了,它是咱们发现问题的首要伎俩。 Metrics 指标的分类咱们心愿应用指标来检测问题,首先咱们要定义各种指标,指标的定义多种多样,不同的业务利用也都会有其合乎本身要求的一些指标,但咱们依然能够对指标做一些粗粒度的分类,如下: 其中最受关注的无疑是外围业务指标,其重要性毋庸置疑,例如所有业务都会具备的三大外围指标:QPS、成功率、RT,其次是根底指标与其余指标。所以任何利用肯定要保障外围业务指标精确与实时。同时,搭配根底指标能力对问题发现实现事倍功半的成果,尤其是程序运行期的一些问题。 Metrics 指标在网关场景的利用聚焦于网关的可观测场景,网关的职责是高效的将合乎某组个性的流量转发给指标服务,外围次要在于对网络流量的解决,三大外围指标:QPS、成功率、RT 仍然是反映服务外围运行状况的外围指标。 值得阐明的是,在网关场景中三大指标并不能齐全实在反映网关理论运行状况,三大指标异样抖动经常跟后端服务抖动相干。因而,理论观测中咱们将网关分为 Downstream 指标(观测 Client 侧的指标汇合)、Upstream 指标(观测上游 Service 服务维度的指标汇合)、路由指标(观测路由转发规定维度的指标汇合)。同时,网关作为流量入口还有一些功能性指标,如解压缩 GZip、认证鉴权 Authz 等指标。 理论利用中还会有其余网络指标如接手、发送的数据量等,限于篇幅就不进行赘述。 MSE 云原生网关在可观测体系的实际在虚拟化期间的微服务架构下,业务通常采纳流量网关 + 微服务网关两层架构,流量网关负责南北向流量调度和平安防护,微服务网关负责东西向流量调度和服务治理。而在容器和 K8s 主导的云原生时代,Ingress 成为 K8s 生态的网关规范,赋予了网关新使命,使流量网关 + 微服务网关合二为一成为可能。MSE 云原生网关正是在这种背景下诞生,其基于阿里开源 Higress[1] 构建,在能力不打折的状况下将两层网关二合一,不仅能够节俭 50% 的资源部署老本,还极大升高运维及应用老本。 MSE 云原生网关[2]与阿里云利用实时监控服务 ARMS、Prometheus 监控深度集成,在网关场景下提供 Metrics、Tracing、Logging 残缺可观测体系,为用户带来一站式可观测体系能力,升高可观测的应用门槛。 接下来咱们简要介绍下 Metrics 指标在 MSE 云原生网关的理论利用。 MSE 云原生网关 Metrics 指标大盘介绍根底指标对于 CPU、Memory 等根底指标建设了独立指标大盘“资源监控”,不便一键查看网关以后的资源应用状况。 外围指标对于外围的业务指标也构建了独立指标大盘,包含“全局看板”、“业务 TOP 榜”、“拜访核心”、“灰度比照看板”。 全局看板“全局看板”提供网关整体的指标大盘,帮忙用户从全局视角查看网关以后的运行状况。 ...

February 21, 2023 · 2 min · jiezi

关于mse:音视频MSE

MSEMSE全称是媒体源扩大 API(Media Source Extensions API), 提供了实现无插件且基于 Web 的流媒体的性能。应用 MSE,媒体串流可能通过 JavaScript 创立,并且能通过应用 <audio> 和 <video> 元素进行播放。 MSE 使咱们能够把通常的单个媒体文件的 src 值替换成援用 MediaSource对象(一个蕴含行将播放的媒体文件的筹备状态等信息的容器),以及援用多个SourceBuffer对象(代表多个组成整个串流的不同媒体块)的元素。MSE 让咱们可能依据内容获取的大小和频率,或是内存占用详情(例如什么时候缓存被回收),进行更加精准地管制。 它是基于它可扩大的 API 建设自适应比特率流客户端(例如DASH 或 HLS 的客户端)的根底。 浏览器反对兼容 MSE 的各种媒体容器,但采纳 H.264 视频编码、AAC 音频编码和 MP4 容器的格局是十分常见的,且肯定兼容。 如果没有准确的管制工夫、媒体品质和内存开释等需要,应用 <video> 和 <source> 是一个更加简略但够用的计划。 浏览器是否反对MSEif('MediaSource' in window) { //}MIME 格局是否被客户端录制var canRecord = MediaRecorder.isTypeSupported(mimeType)编码格局是受浏览器限度的: WEB APIMediaSourcenew MediaSource()属性activeSourceBuffersvar myActiveSourceBuffers = mediaSource.activeSourceBuffers;duration用来获取或者设置以后媒体展现的时长。 mediaSource.duration = 5.5; // 5.5 secondsvar myDuration = mediaSource.duration;readyStateclosed: 以后源并未附着到一个 media 元素上。open: 以后源已附着到一个 media 元素并筹备好接管 SourceBuffer 对象。ended: 以后源已附着到一个 media 元素,但流已被MediaSource.endOfStream()完结。办法MediaSource.addSourceBuffer()MediaSource 的 addSourceBuffer() 办法会依据给定的 MIME 类型创立一个新的 SourceBuffer 对象,而后会将它追加到 MediaSource 的 SourceBuffers 列表中。 ...

July 15, 2022 · 1 min · jiezi

关于mse:MSE-微服务治理发布企业版助力企业构建完整微服务治理体系

作者:十眠、流士 微服务(MicroServices) 架构是一把双刃剑,随着微服务架构复杂化,在大规模之下,再小的问题都会牵一发而动全身,因而微服务架构带来的效率、稳定性问题很可能会远大于微服务自身带来的架构红利。 近日,阿里云 MSE 微服务治理重磅公布企业版,微服务治理能力笼罩从流量防护到流量隔离与复原,从开发联调到公布上线等各个场景,帮忙企业疾速构建残缺微服务治理体系。 MSE 微服务治理心愿可能帮忙企业客户打造永远在线的业务。 微服务治理是微服务革新深刻到肯定阶段之后的必经之路随着微服务技术的倒退,微服务的概念早已深入人心,越来越多的企业开始抉择微服务架构来开发本人的业务利用,因为微服务架构能够让业务的迭代更加高效。软件架构的外围挑战是解决业务快速增长带来的零碎复杂性问题,当咱们照着微服务架构将业务进行解耦的过程中,微服务利用的数量会逐渐增多,调用的链路也变得越来越长,服务和服务之间的调用和依赖关系也变得更加简单。 在这个过程中,如果咱们不对咱们的微服务进行失当的治理,那么因为微服务间简单的依赖关系,会导致再小的技术问题被放大,引发的效率、稳定性问题可能会远大于微服务架构自身带来的架构红利。在企业进行微服务化到肯定水平后,微服务治理是企业必然要面对的一个阶段。 云原生场景下微服务治理复杂度进一步晋升随着企业微服务化过程的逐步深刻,微服务的云原生化逐渐进入深水区,在这个微服务深入的过程中,大家也逐步意识到微服务治理的复杂度,上面咱们将微服务治理要解决的问题简略分成三个方面,别离是效率,稳固和老本。 效率• 在开发阶段,咱们须要思考的是,业务利用上云之后,如何让本地开发的利用很好的部署云上的业务进行联调。通常咱们的微服务不可能在本地残缺地部署一整套零碎,所以本地开发的利用只是整个微服务链路的一小部分,这包含咱们的流量须要可能轻松的从云上疏导到本地,便于咱们做开发调试,或者咱们在本地可能很不便的调用云上部署的微服务进行联调。这在微服务上云之后,变的比原来在本身机房进行开发联调更加艰难。 • 在线上运维方面,咱们通常须要频繁的对微服务进行变更,这些变更通常就会引发一系列的问题,例如在白天高峰期做公布,通常都会导致业务流量呈现损失,咱们的研发人员不得不抉择在早晨业务低峰期做变更。 • 微服务框架通常会引入服务治理的逻辑,而这些逻辑通常会以 SDK 的形式被业务代码所依赖,而这些逻辑的变更和降级,都须要每一个微服务业务通过批改代码的形式来实现,这样的变更造成了十分大的降级老本。 • 进入云原生体系之后,以 Kubernetes 为主的云原生体系强调集群之间的灵便调度型,以 POD 为单位任意的调度资源,在被调度后 POD 的 IP 也将相应的发生变化,传统的治理策略都会面临生效的问题,如何能让服务治理体系更加适应云原生体系,也是咱们须要解决的问题。 稳固• 稳固大于所有,在微服务上云之后,业务高可用是咱们必须要解决的问题,因而通常会在同一个地区的多个可用区内进行部署。当然,咱们的业务不仅须要在同一个地区里保障高可用,也须要思考一个地区呈现问题的时候,保障业务的高可用,这时咱们就须要思考业务实现同城双活,甚至是异地多活,这对咱们来说都是须要思考的问题。 • 微服务之间的调用也须要更加的平安可信,近期层出不穷的安全漏洞,肯定水平上也反馈出以后上云阶段在平安方面暴露出的问题还是十分多,每次安全漏洞呈现之后,中间件 SDK 的降级也是困扰业务多年的问题;同时,一些敏感的数据,即便在数据库层做了十分多的权限管控,因为微服务被授予了数据拜访的较高权限,如果微服务的调用被歹意共计,也可能会造成敏感数据的泄露。微服务之间的调用须要更加牢靠可信。 老本• 当咱们在业务面临极速增长的流量时,迫切的须要疾速的弹性,补充更多的资源以承载业务的顶峰;当咱们进入业务低峰的时候,又心愿可能放大容量,节俭资源,因而云产品提供的疾速灵便的弹性机制,是微服务上云之后一项急需的能力。 自研微服务治理的挑战复电科技有思考过自研微服务治理,复电科技架构师 汤长征 同学也参加过 Dubbo 的开源社区,微服务治理研发对于复电科技来说并不是十分艰难的事件,然而自研微服务治理组件还是存在以下必不可少的老本问题。 • 接入老本高• 保护老本高• 性能繁多,不灵便,可扩展性低• 可定位性变差 上文尽管 cue 到了复电科技,其实不仅仅是复电科技,这些问题是云上企业思考如何实现微服务治理过程中都要面临的问题。 思考到对生产利用进行微服务治理,微服务框架通常会引入服务治理的逻辑,而这些逻辑通常会以 SDK 的形式被业务代码所依赖,而这些逻辑的变更和降级,都须要每一个微服务业务通过批改代码的形式来实现,这样的变更造成了十分大的接入与降级老本。同时须要对开源的服务框架做治理性能的研发,就意味着须要出人力对微服务治理的组件进行治理与运维,同时自建会使得性能十分贴近业务,也意味着性能将会做得比拟薄比拟繁多,将来的可扩展性就显得比拟弱。同时全链路灰度的实现技术细节也是十分之多,动静路由,节点打标,流量打标,分布式链路追踪,技术的实现老本高。因为 Dubbo、Spring Cloud 等服务框架自身的复杂性,同时随着微服务数量逐渐增多,链路越来越长,相干的微服务治理问题的定位与解决也成了让人头疼的问题。复电科技示意如果有 Spring Cloud Alibaba、Dubbo 等业余的团队反对,微服务化深刻也会变得更加从容。 MSE 微服务治理助力企业构建残缺微服务治理体系MSE 服务治理以无侵入的形式提供了全链路灰度、流量防护、离群实例摘除、金丝雀公布、微服务治理流量可观测等外围能力,相比自建提供了丰盛的差异化能力,能力笼罩开发态、测试态、运行态的微服务全生命周期,无缝反对市面上近五年来全副 Spring Cloud 跟 Dubbo 框架,以更经济的形式、更高效的门路帮忙企业在云上疾速构建起残缺微服务治理体系,无效晋升微服务利用的开发效率和线上稳定性。 MSE 微服务治理企业版重磅公布阿里云 MSE 微服务治理在原有根底版、专业版之上,推出了企业版,提供微服务利用以及罕用网关的流量管控与容错能力,从流量管制、并发管制、熔断降级、自适应爱护、热点防控等多个维度来保障业务的稳定性,帮忙用户很好地应答流量激增或是服务依赖不稳固问题。 ...

April 15, 2022 · 1 min · jiezi

使用Opencv构建一个简单的图像相似检测器(MSE、SSIM)

摘要: 本文使用opencv。numpy等简单的工具库,根据mse及ssim两种算法来评估两张图像的相似度,便于理解与实践。介绍作为人类,我们通常非常善于发现图像中的差异。例如,常见的游戏——两张图像找不同。现在让我们玩下这个游戏吧,首先让我们看看上面的图像,三十秒内看看是否能够从中找出有什么不同的地方。答案:水果、冰淇淋和饮料的颜色发生了明显改变,窗帘、太阳也发生了改变,这是不是很简单呢?如果有补充的答案,请在留言处给出哦!这类问题对于人类来说看起来是一件轻而易举的事情,但是,对于计算机来说,这可不是一件容易的事儿。这是由于计算机只能从我们训练它的模型中学习,才最终具有这类能力。目前有很多很好的模型可以对批量图像进行分类,比如TensorFlow和Keras等开源工具。借助于这类开源工具库,计算机视觉领域的研究得以高发展。现在我们也可以借助于这类工具箱创建非常复杂的模型以及解决比较复杂的问题,例如kaggle:Animals-10,该数据集包含数十种不同类型动物的图像以及非动物图像。所要做的就是创建一个模型来预测图片是哪种类型的动物。MSE和SSIM然而,上述任务较为简单,比如常见的手写体数字识别MNIST等,一般也都能取得很高的精度。在这里,我想增加一点难度,创建一个图像分类器,以分辨出两个图像的相似程度。并且,不依赖任何复杂的工具库,如TensorFlow、Keras等。本文采用传统的机器学习方法,这里从中选取两种方法,用于查找图像是否与另一个图像相似。这两种方法分别为均方误差(MSE)、结构相似度指数(SSIM)。上述公式看起来非常复杂,但不要害怕。借助于NumPy,可以相当容易地计算出MSE;另外,由于SSIM是Sci-Kit图像库的内置方法的一部分,因此也可以很容易地计算出SSIM。在进行编码之前,这里先对这两种方法予以简单的说明。MSE将计算正在比较的两个图像的每个像素之间的均方误差。而SSIM做的事情与MSE恰好相反,寻找像素值的相似之处。 也就是,如果两个图像中的像素排列相似或具有相似的像素密度值。MSE方法遇到的一个的问题是其结果往往具有任意大的值,因此很难给出标准的评判标准。一般而言,MSE越高,表明两张图像的相似程度越低。如果图像之间的MSE值是随机值,则很难说明二者是否相似。另一方面,SSIM将所有内容归一化到-1~1的范围内(很难得到小于0的分数)。得分为1表示二者非常相似,得分为-1表示二者非常不同。基于此,SSIM相较于MSE而言是一个更好的衡量指标。实现现在使用代码实现上述想法:加载必要的库:本文使用常见的图像处理工具箱OpenCV实现图像的读取和编辑。如果你对其它图像处理工具箱熟悉,你也可以使用自己熟悉的工具箱完成此类操作,比如matplotlibden。编写MSE公式:使用Numpy操作起来很简单吧!由于SSIM已经通过skimage导入,因此无需进行手动编码。现在创建一个比较函数,该函数的输入为两个图像,分别计算二者的MSE和SSIM,并展示计算结果。下面的三个步骤可以使用for循环一次完成,但是为了更容易地理解,这里不使用for循环编写代码,将其分解为三个部分:首先,加载保存在目录中的图像。其次,必须确保它们的大小相同,否则会出现尺寸不匹配的错误。问题是对其进行尺寸变换操作会导致图像失真,所以在找到比较合适的尺寸数字之前,可以尝试快速搜索方法,尺寸大小按照一定的规律设置,不断实验以找到最终比较合适的尺寸。接下来我们再实现一个功能,以便于看到测试图像是什么样子的。现在通过比较两个一样的图像来测试并查看MSE和SSIM是否正常工作。如果它有效,那么我们应该得到MSE值为0和SSIM值为1的结果。从中可以看到,代码正确,结果与猜想的一致!现在计算机就可以判断比较的两张图像是否相同了。为简单起见,我将三张狗的图像与自己以及三张猫的图像进行比较。下面看看两种算法的性能比较。正如所看到的那样,MSE的值变化很大,因此该值很难说明其表达的意思是什么。但从SSIM的结果看出,可以看到狗2和狗3相对于其他狗的图像最为相似。从视觉上来讲,我同意这个结果,因为两只狗的耳朵非常像。但我还会认为狗1和狗3会有更高的SSIM值,因为二者的姿势也很相似。实际上,在图像没有进行灰度处理之前,狗2和狗3在鼻子区域周围有类似的白色毛皮,而狗1没有。这很可能是狗2和3具有比狗1更高的SSIM值的原因。对于猫来说,这就有点困难。猫1和猫2具有相似的形状,并且图像是从相似的距离拍摄的,但猫2和猫3具有相似的皮毛颜色。这里我想进行的测试只有两个:一个是狗和猫的相似性,第二个是每个动物与原始源代码附带的门图的相似性。正如所预料的那样,狗和猫是相似的,这点与与无生命的物体相比呈鲜明的对比,如侏罗纪公园入口门。狗和猫对门的图像具有较高的SSIM值,唯一原因在于图像都经过了尺寸缩放和灰度处理。在调整图像大小和重新配置时,OpenCV并不是最好的。一般而言,TensorFlow是最好的,TensorFlow也最适合批量图像。之后,我也将使用TensorFlow处理kaggle Animal-10数据集,来实现一个完整的图像分类器。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

January 22, 2019 · 1 min · jiezi

谈起音视频,前端能做些什么

@(音视频)[Audio|Video|MSE]音视频随着互联网的发展,对音视频的需求越来越多,然而音视频无乱是播放还是编解码,封装对性能要求都比较高,那现阶段的前端再音视频领域都能做些什么呢。[TOC]音频或视频的播放html5 audio提起音视频的播放,我萌首先想到的是HTMLMediaElement,video播放视频,audio播放音频。举个栗子:<audio controls autoplay loop=“true” preload=“auto” src=“audio.mp3”></audio>controls指定浏览器渲染成html5 audio.autoplay属性告诉浏览器,当加载完的时候,自动播放.loop属性循环播放.preload当渲染到audio元素时,便加载音频文件.移动端的浏览器并不支持autoplay和preload 属性,即不会自动加载音频文件,只有通过一些事件触发,比如touch、click事件等触发加载然后播放.媒体元素还有一些改变音量,某段音频播放完成事件等,请阅读HTMLMediaElement.当然如果你的网页是跑在WebView中,可以让客户端设置一些属性实现预加载和自动播放。AudioContext虽然使用html5的audio可以播放音频,但是正如你看到存在很多问题,同时我萌不能对音频的播放进行很好的控制,比如说从网络中获取到音频二进制数据,有的时候我萌想顺序播放多段音频,对于使用audio元素也是力不从心,处理起来并不优雅。举个栗子:function queuePlayAudio(sounds) { let index = 0; function recursivePlay(sounds, index) { if(sounds.length == index) return; sounds[index].play(); sounds[index].onended = recursivePlay.bind(this, sounds, ++index); }}监听audio元素的 onended 事件,顺序播放。为了更好的控制音频播放,我萌需要AudioContext.AudioContext接口表示由音频模块连接而成的音频处理图,每个模块对应一个AudioNode。AudioContext可以控制它所包含的节点的创建,以及音频处理、解码操作的执行。做任何事情之前都要先创建AudioContext对象,因为一切都发生在这个环境之中。可能理解起来比较晦涩,简单的来说,AudioContext 像是一个工厂,对于一个音频的播放,从音源到声音控制,到链接播放硬件的实现播放,都是由各个模块负责处理,通过connect 实现流程的控制。现在我萌便能实现音频的播放控制,比如从网络中获取。利用AJAX中获取 arraybuffer类型数据,通过解码,然后把音频的二进制数据传给AudioContext创建的BufferSourceNode,最后通过链接 destination 模块实现音频的播放。 export default class PlaySoundWithAudioContext { constructor() { if(PlaySoundWithAudioContext.isSupportAudioContext()) { this.duration = 0; this.currentTime = 0; this.nextTime = 0; this.pending = []; this.mutex = false; this.audioContext = new (window.AudioContext || window.webkitAudioContext)(); } } static isSupportAudioContext() { return window.AudioContext || window.webkitAudioContext; } play(buffer) { var source = this.audioContext.createBufferSource(); source.buffer = buffer; source.connect(this.audioContext.destination); source.start(this.nextTime); this.nextTime += source.buffer.duration; } addChunks(buffer) { this.pending.push(buffer); let customer = () => { if(!this.pending.length) return; let buffer = this.pending.shift(); this.audioContext.decodeAudioData(buffer, buffer => { this.play(buffer); console.log(buffer) if(this.pending.length) { customer() } }, (err) => { console.log(‘decode audio data error’, err); }); } if(!this.mutex) { this.mutex = true; customer() } } clearAll() { this.duration = 0; this.currentTime = 0; this.nextTime = 0; }}AJAX调用function xhr() { var XHR = new XMLHttpRequest(); XHR.open(‘GET’, ‘//example.com/audio.mp3’); XHR.responseType = ‘arraybuffer’; XHR.onreadystatechange = function(e) { if(XHR.readyState == 4) { if(XHR.status == 200) { playSoundWithAudioContext.addChunks(XHR.response); } } } XHR.send();}使用Ajax播放对于小段的音频文件还行,但是一大段音频文件来说,等到下载完成才播放,不太现实,能否一边下载一边播放呢。这里就要利用 fetch 实现加载stream流。fetch(url).then((res) => { if(res.ok && (res.status >= 200 && res.status <= 299)) { readData(res.body.getReader()) } else { that.postMessage({type: constants.LOAD_ERROR}) }})function readData(reader) { reader.read().then((result) => { if(result.done) { return; } console.log(result); playSoundWithAudioContext.addChunks(result.value.buffer); })}简单的来说,就是fetch的response返回一个readableStream接口,通过从中读取流,不断的喂给audioContext 实现播放,测试发现移动端不能顺利实现播放,pc端浏览器可以。PCM audio实现audioContext播放时,我萌需要解码,利用decodeAudioDataapi实现解码,我萌都知道,一般音频都要压缩成mp3,aac这样的编码格式,我萌需要先解码成PCM数据才能播放,那PCM 又是什么呢?我萌都知道,声音都是由物体振动产生,但是这样的声波无法被计算机存储计算,我萌需要使用某种方式去刻画声音,于是乎便有了PCM格式的数据,表示麦克风采集声音的频率,采集的位数以及声道数,立体声还是单声道。Media Source ExtensionsMedia Source Extensions可以动态的给Audio和Video创建stream流,实现播放,简单的来说,可以很好的播放进行控制,比如再播放的时候实现 seek 功能什么的,也可以在前端对某种格式进行转换进行播放,并不是支持所有的格式的。通过将数据append进SourceBuffer中,MSE把这些数据存进缓冲区,解码实现播放。这里简单的举个使用MSE播放 audio的栗子:export default class PlaySoundWithMSE{ constructor(audio) { this.audio = audio; if(PlaySoundWithMSE.isSupportMSE()) { this.pendingBuffer = []; this._mediaSource = new MediaSource(); this.audio.src = URL.createObjectURL(this._mediaSource); this._mediaSource.addEventListener(‘sourceopen’, () => { this.sourcebuffer = this._mediaSource.addSourceBuffer(‘audio/mpeg’); this.sourcebuffer.addEventListener(‘updateend’, this.handleSourceBufferUpdateEnd.bind(this)); }) } } addBuffer(buffer) { this.pendingBuffer.push(buffer); } handleSourceBufferUpdateEnd() { if(this.pendingBuffer.length) { this.sourcebuffer.appendBuffer(this.pendingBuffer.shift()); } else { this._mediaSource.endOfStream(); } } static isSupportMSE() { return !!window.MediaSource; }}HTML5 播放器谈起html5播放器,你可能知道bilibili的flv.js,它便是依赖Media Source Extensions将flv编码格式的视频转包装成mp4格式,然后实现播放。从流程图中可以看到,IOController实现对视频流的加载,这里支持fetch的 stream能力,WebSocket等,将得到的视频流,这里指的是flv格式的视频流,将其转封装成MP4格式,最后将MP4格式的数据通过appendBuffer将数据喂给MSE,实现播放。未来上面谈到的都是视频的播放,你也看到,即使播放都存在很多限制,MSE的浏览器支持还不多,那在视频的编码解码这些要求性能很高的领域,前端能否做一些事情呢? 前端性能不高有很多原因,在浏览器这样的沙盒环境下,同时js这种动态语言,性能不高,所以有大佬提出把c++编译成js ,然后提高性能,或许你已经知道我要说的是什么了,它就是ASM.js,它是js的一种严格子集。我萌可以考虑将一些视频编码库编译成js去运行提高性能,其中就不得不提到的FFmpeg,可以考虑到将其编译成asm,然后对视频进行编解码。写在最后我萌可以看到,前端对音视频的处理上由于诸多原因,可谓如履薄冰,但是在视频播放上,随着浏览器的支持,还是可以有所作为的。招纳贤士今日头条长期大量招聘前端工程师,可选北京、深圳、上海、厦门等城市。欢迎投递简历到 tcscyl@gmail.com / yanglei.yl@bytedance.com ...

November 17, 2018 · 2 min · jiezi