行业新闻

  我们对此为什么会有耐心?像小程序一样,小程序会给它两三年的时间变成一个生态,对这样一个功能当然不需要两三年的时间,但是我们仍然会花好几个月的时间去不断打磨它,并尝试。我们确实觉得虽然用户现在没有这个习惯,但是将来视频一定会取代照片的交流,取代照片的发送,变成更多被采用的载体,因为视频所包含的信息量要比照片大的多。

  新华社西昌12月25日电 (李国利、李潇帆) 12月25日零时53分,我国在西昌卫星发射中心用长征三号丙运载火箭,成功将通信技术试验卫星三号发射升空,卫星进入预定轨道。

  中国云服务市场2018年继续保持高速发展,一方面,“从买到租”的云服务理念已逐渐被市场认可和接受;另一方面,以人工智能为代表的众多新兴技术,已经将云作为重要的支撑平台。企业在数字化转型过程中,通讯云已成为不可或缺的重要力量。

  2017年6月1日起,《互联网新闻信息服务管理规定》(国家互联网信息办公室令第1号)实施。根据《规定》,通过互联网站、应用程序、论坛、博客、微博客、公众账号、即时通信工具、网络直播等形式向社会公众提供互联网新闻信息服务,应当取得互联网新闻信息服务许可。

  对用户来说,这个工具像他的老朋友一样。我们并不愿意破坏这个老朋友跟你之间的关系。

  利好消息:广电网络 高鸿股份 张江高科 和顺电气 西部创业 锦州港 中兴通讯 山东黄金 东方通信 春兴精工 康得新 邦讯技术 科大讯飞 新海宜 富春股份 天邦股份 第一创业 大富科技 东方电子 广电电气 万方发展 海信家电

  除这类综合性通信专业服务企业外,多数第三方通信服务商规模较小、业务种类单一,主要凭借地域优势为运营商提供本地化服务,综合竞争能力较弱,这类企业的市场份额将随着行业竞争的加剧而逐步萎缩。

  ★★★★★华脉科技:5G频谱资源基本确定 华脉科技冲击涨停★★★★★华脉科技股东及高管拟合计减持不超4.82%股份★★★★★美思德股票(603041)行情怎么样?美思德有限公司好不好?

  门头沟区通信资质新办资质代办哪家专业新注册的工程建筑公司转让,建筑劳务公司转让,总包资质转让,建筑分包劳务分包资质转让,可全国施工,特别是外地客户,我们会尽量减少您飞来飞去的宝贵时间,前期后期为您一站式服务,帮助您全权代理,帮助您的公司走向更大的舞台,祝您公司一臂之力,走向成功。

  手机端APP是可以记录你在做什么。比如说走在路上拍一个照片发出去,这是你在做什么,我走在路上看到这个东西我给它拍一个照片,但是在电脑前只能说我在做什么,我在整理我的照片,把昨天的照片发到电脑里去。这是有本质的不同。很早以前我说过一句话,人是环境的反应器,你遇到什么样的环境,你就会有什么样的反应。

  资质代办公司的选择直接关系到代办资质证书的结果,一个成熟的、专业的代理公司可以有足够的精力来高效,快速地完成消防资质代办的工作。此外,当选择资质代办机构时,资质代办费用也是企业需要注意的方面。安全生产许可证办理流程 一.取得试生产许可证(试生产批文)需要所需要的工作流程 可行性研究报告安全预评价、环评 (有资质的安全评价机构)、职业卫生预评价、安全设施设计专篇 (设计院)、消防建审报告(消防部门)、安全设施竣工验收报告(静态验收)试生产批复文件。 二.取得生产许可证之前需要做以下准备工作 消防的验收报告(消防部门) 特种设备的验收报告(锅检所) 防雷检测报告(气象局) 重大危险源备案(安监1局) 应急预案备案(安监1局) 注:在备案前必须编写《安全生产事故应急预案》,经过应急专家组评审合格后方可备案 职业卫生“三同时”备案 安全设施“三同时”备案

  3. 流水线:可视化编排、灵活触发、分层分级的持续交付流水线,配备自研高并发调度系统,多重门禁自动拦截质量问题,任务健康度标识价值流阻塞点,移动APP随时随地交付,有效助力企业不中断业务升级,产品分钟级、高质发布。

  9月20日,成立8年的美团正式在香港上市。9点30分,代号为“03690”的美团股票开始交易。美团IPO发行价定在每股69港元,扣除相关发行开支后共计募集资金325.6亿港元(约合41.5亿美元)。美团开盘价为每股72.9港元,较 ...

  原标题:全球实时通信云服务商声网Agora获7000万美元C轮融资

  3)负责制定集团单位互联网专线、电路租用需求方案的编制及实施;

  原标题:深入剖析通信层和 RPC 调用的异步化:应用场景、实践及技术难点

  《Netty 进阶之路》、《分布式服务框架原理与实践》作者李林锋深入剖析通信层和 RPC 调用的异步化。李林锋在 InfoQ 上开设了 Netty 专题持续出稿,感兴趣的同学可以持续关注。后台回复关键词:Netty,可以获取专栏链接。

  随着业务分布式架构的发展,系统间的系统调用日趋复杂,以电商的商品购买为例,前台界面的购买操作涉及到底层上百次服务调用,形成复杂的调用链,示例如下:

  对于一些逻辑上不存在互相依赖关系的服务,可以通过异步 RPC 调用,实现服务的并行调用,通过并行调用来降低服务调用总耗时,以手游购买道具流程为例,消费次数限制鉴权、账户余额鉴权和下载记录鉴权三个服务可以通过异步的方式并行调用,来降低游戏道具购买的耗时:

  对于一些业务场景,服务调用耗时与消息本身、调用的资源对象有关系,例如上传和下载接口,如果下载的资源较多则耗时就会相应的增加。对于这类场景,接口的调用超时时间比较难配置,如果配置过大,服务端自身响应慢之后会拖垮调用方,如果配置过小,万一遇到一个需要较长耗时的 RPC 调用就会超时。通过异步 RPC 调用,就不用再担心调用方业务线程被阻塞,超时时间可以相应配置大一些,减少超时导致的失败。

  对于大部分的第三方服务调用,都需要采用防御性编程,防止因为第三方故障导致自身不能正常工作。如果采用同步 RPC 方式调用第三方服务,一旦第三方服务的处理耗时增加,就会导致客户端调用线程被阻塞,当超时时间配置不合理时,系统很容易被阻塞。通过异步化的 RPC 调用,可以防止被第三方服务端阻塞,Hystrix 的第三方故障隔离就是采用类似机制,只不过它底层创建了线程池,通过 Hystrix 的线程池将第三方服务调用与业务线程做了隔离,实现了非侵入式的故障隔离。

  对于一个同步串行化调用的系统,大量的业务线程都在等待服务端返回响应,系统的 CPU 使用率很低,但是性能却无法有效提升,这个问题几乎是所有采用同步 RPC 调用的业务都遇到的一个通病。要想充分利用 CPU 资源,需要让业务线程尽可能的跑满 CPU,而不是经常性的处于同步等待状态。采用异步 RPC 调用之后,在单位时间内业务线程可以接收并处理更多的请求消息,更充分的利用 CPU 资源,提升系统的吞吐量。

  根据一些公开的测试数据,一些业务采用异步 RPC 替换同步 RPC 调用之后,综合性能提升 2-3 倍 +。

  Servlet 异步是指 Servlet 3 规范中提供了对异步处理 Servlet 请求的支持,可以把 HTTP 协议处理线程和业务逻辑执行线程隔离开:

  SpringMVC 3.2+ 版本基于 Servlet3 做了封装,以简化业务使用。它的工作原理如下所示:

  以 DeferredResult 为例,它的异步处理流程如下所示:

  Apache ServiceComb 是一个开箱即用、高性能、兼容流行生态、支持多语言的一站式开源微服务解决方案。它同时支持同步和异步服务调用,下面一起分析下它的异步化服务调用机制。

  异步化接口,消费端不需要同步等待服务提供端返回响应,不会产生阻塞。

  与传统流程不同的,所有功能都在 eventloop 中执行,并不会进行线程切换。

  只要有任务,线程就不会停止,会一直执行任务,可以充分利用 cpu 资源,也不会产生多余的线程切换,去无谓地消耗 cpu。

  通过代码示例可以看出,ServiceComb 的 Reactive 工作模式采用了 JDK8 的 CompletableFuture 作为异步编程模型,利用 CompletableFuture 可以方便的对多个异步操作结果做编排,以及做级联异步操作,功能强大,使用灵活。

  纯 Reactive 模式的使用约束:所有在 eventloop 中执行的逻辑,不允许有任何的阻塞动作,包括不限于 wait、sleep、巨大循环、同步查询 DB 等等。实际上就是如果业务的微服务采用了 Reactive,则需要做全栈异步,否则会阻塞 eventloop 线程,导致消息收发出现问题。如果业务的微服务想做异步化,但是由于数据库、缓存等原因无法实现全栈异步,则可以采用后面介绍的混合 Reactive 模式。

  可能导致同步阻塞的业务逻辑放到独立的线程池中执行,纯 Reactive 模式所有业务逻辑都在 eventloop 线程中执行(与 I/O 线程相同)。

  对于 ServiceComb,无论服务端定义的接口是同步还是异步的,消费端都可以采用异步的方式调用它,对具体细节感兴趣的读者可以到 ServiceComb 官网下载 Demo 示例学习。

  ServiceComb 通过线程绑定技术来减少锁竞争,提升性能:

  将 ListenableFuture 加入到 Future 列表中之后,同步获取响应(在 gRPC 线程池中阻塞,非业务调用方线程):

  除了将 ListenableFuture 加入到 Futures 中由 gRPC 的线程池执行异步回调,也可以自定义线程池执行异步回调,代码示例如下:

  构造响应 StreamObserver,通过响应式编程,处理正常和异常回调,接口定义如下:

  将响应 StreamObserver 作为入参传递到异步服务调用中,该方法返回空,程序继续向下执行,不阻塞当前业务线程,代码如下所示:

  下面分析下基于 Reactive 方式异步调用的代码实现,把响应 StreamObserver 对象作为入参传递到异步调用中,代码如下:

  通过源码分析可以发现,Reactive 风格的异步调用,相比于 Future 模式,没有任何同步阻塞点,无论是业务线程还是 gRPC 框架的线程都不会同步等待,相比于 Future 异步模式,Reactive 风格的调用异步化更彻底一些。

  客户端发送 N 个请求,服务端返回 N 个或者 M 个响应,利用该特性,可以充分利用 HTTP/2.0 的多路复用功能,在某个时刻,HTTP/2.0 链路上可以既有请求也有响应,实现了全双工通信(对比单行道和双向车道),示例如下:

  通过在循环中调用 requestObserver 的 onNext 方法,发送请求消息,代码如下所示:

  gRPC 服务调用支持同步和异步方式,同时也支持普通的 RPC 和 streaming 模式,可以最大程度的满足业务的需求。

  对于 streaming 模式,可以充分利用 HTTP/2.0 协议的多路复用功能,实现在一条 HTTP 链路上并行双向传输数据,有效的解决了 HTTP/1.X 的数据单向传输问题,在大幅减少 HTTP 连接的情况下,充分利用单条链路的性能,可以媲美传统的 RPC 私有长连接协议:更少的链路、更高的性能:

  gRPC 的网络 I/O 通信基于 Netty 构建,服务调用底层统一使用异步方式,同步调用是在异步的基础上做了上层封装。因此,gRPC 的异步化是比较彻底的,对于提升 I/O 密集型业务的吞吐量和可靠性有很大的帮助。

  当采用异步编程之后,异步抛出的异常传递给调用方会变得非常困难,例如 Runnable, 当异步执行它时,异常需要在 run 方法中捕获和处理,否则会导致线程跑飞,run 方法中的异常是无法回传到调用方的。

  使用 JDK8 的 CompletableFuture 之后,它的常用方法参数基本是 Lambda 表达式,由于函数接口中的方法通常不允许检查期异常,在表达式中发生的异常无法回传给调用方,相比于以前同步调用可以将异常抛给调用方处理的方式有很大差异。

  如果异步的编程模型基于 JDK8 的 CompletableFuture,可以通过 whenComplete 对返回值的异常进行非空判断,当异常非空时,进行异常逻辑处理,相关接口如下:

  也可以通过 exceptionally 方法来处理异步执行发生的异常,相关接口如下所示:

  异步回调(Lambda 表达式)代码块中的异常处理有两种策略:1)一定要通过 exceptionally 方法或者 whenComplete 对异常进行捕获处理,否则会导致 Lambda 表达式异常退出,后续操作被忽略,最终导致业务逻辑跑飞。2)运行期异常,通常是无法抛出来由调用方处理的,需要在发生异常的地方就地捕获和处理。

  异步代码块(Lambda 表达式)中可能会涉及到多种业务逻辑操作,例如:

  不建议直接对异步代码块(Lambda 表达式)整体做超时控制,例如包装出一个支持异步超时的 CompletableFuture,主要原因如下: 超时并不能确保中断当前正在执行的业务逻辑,例如同步 Redis 缓存调用。 如果超时发生时,正好又发起了一次异步 RPC 调用,创建了一个新的 CompletableFuture,外层超时之后,已经创建的 CompletableFuture 异步回调仍然可能会被执行,这会带来各种混乱。 由于异步代码块(Lambda 表达式)中的业务逻辑可能会非常复杂,所以超时之后的补偿操作非常困难。例如充值操作已经成功了,但是外层调用方超时失败了,这会给后续业务的处理带来很多困难,因为超时发生时调用方并不知道异步代码块中的哪些操作被执行,哪些没被执行。

  在传统的同步 RPC 调用时,业务往往通过线程变量来传递上下文,例如:TraceID、会话 Session、IP 等信息。异步化之后,由于潜在的线程切换和线程被多个消息交叉复用,通常不建议继续使用线程变量传递上下文。

  如果是 Lambda 表达式,可以直接引用局部变量,通过变量引用的方式将上下文信息传递到 Lambda 表达式中,后续可以通过方法传参等层层传递下去。

  在所有发生线程切换的地方,显式的进行上下文信息的拷贝和清理,特别需要注意的是隐式线程切换,例如 Hystrix,底层会自己启线程池。

  建议通过调用级的消息上下文来做参数传递,每个上下文都关联一次 RPC 调用,调用完成之后自动清理掉。

  异步化之后,需要排重点查所有使用 ThreadLocal 的地方,通常情况下都会存在问题,需要做改造。

  如果使用的是 JDK8 的 CompletableFuture,它支持对异步操作结果做编排以及级联操作,能够比较好的解决类似 JS 和传统 Future-Listener 的回调地域问题,感兴趣的读者可以体会下 CompletableFuture 的异步化接口。

  李林锋,10 年 Java NIO、平台中间件设计和开发经验,精通 Netty、Mina、分布式服务框架、API Gateway、PaaS 等,《Netty 进阶之路》、《分布式服务框架原理与实践》作者。目前在华为终端应用市场负责业务微服务化、云化、全球化等相关设计和开发工作。联系方式:秒速时时彩计划

行业新闻
2014 paidui.com All rights reserved 浙ICP备17008597号-1
秒速时时彩_首页_秒速时时彩计划_秒速时时彩专业版
网站地图