■出售外链〓提升排名┿【QQ:1012189958】 1号站 1号站平台 1号站娱乐 一号站平台 拉菲娱乐 拉菲2 拉菲娱乐 万达平台 万达平台 万达平台 万达平台 万达娱乐 万达娱乐 万达娱乐 东森平台 东森平台 东森平台 东森娱乐 东森娱乐 东森娱乐 杏彩平台 杏彩平台 杏彩平台 杏彩平台 杏彩娱乐 杏彩娱乐 杏彩娱乐 杏彩娱乐 杏彩娱乐 凤凰平台 凤凰平台 凤凰平台 凤凰平台 凤凰平台 凤凰娱乐 凤凰娱乐 凤凰娱乐 凤凰娱乐 凤凰娱乐 娱乐天地 娱乐天地 娱乐天地 娱乐天地 娱乐天地 娱乐天地 娱乐天地 娱乐天地 娱乐天地 娱乐天地 娱乐天地 娱乐天地 娱乐天地 世爵平台 世爵平台 世爵平台 世爵平台 翡翠平台 世爵娱乐 世爵娱乐 世爵娱乐 世爵娱乐 翡翠平台 翡翠平台 翡翠平台 翡翠娱乐 翡翠娱乐 畅博娱乐 畅博娱乐 畅博娱乐 畅博娱乐 畅博娱乐 畅博娱乐 畅博娱乐 畅博娱乐 畅博娱乐 畅博娱乐 华宇平台 华宇平台 华宇平台 华宇平台 华宇平台 华宇平台 华宇平台

万达娱乐_万达平台官方网站-万达用户登陆中心

网易考拉海购Dubbok框架优化详解

2017-11-29 13:01 网络整理

  开抢了!双11创业者优选服务!

摘要:微服务化是当前电商产品演化的必然趋势,网易考拉海购通过微服务化打破了业务爆发增长的架构瓶颈。本文结合网易考拉海购引用的开源Dubbo框架,分享支持考拉微服务工作的基本原理。文章分析了使用Dubbo过程中遇到的问题,讲解了团队所做的一些问题修复和功能集成工作,在此基础上最终形成了考拉内部持续维护升级的Dubbok框架。

本文背景还要从网易考拉海购(下文简称“考拉”)微服务化说起,现在任何大型的互联网应用,尤其是电商应用从Monolithic单体应用走向微服务化已经是必然趋势。微服务化是一个比较宽泛的概念,涉及到一个产品生命周期的多个方面,首先它作为一个指导原则指引业务划分、架构解耦等;技术层面实施微服务需要开发测试阶段、运行阶段、发布阶段、部署阶段等一系列基础框架的支撑。我们在享受服务化易扩展易部署等便利性的同时,也面临新的问题,如数据一致性、分布式调用链路追踪、异常定位、日志采集等。

本文将集中在支撑微服务交互、运行的基础框架讲解上,即考拉当前使用的Dubbok框架,Dubbok由阿里开源Dubbo框架的优化和功能改进而来。当前开源上可选用的微服务框架主要有Dubbo、Spring Cloud等,鉴于Dubbo完备的功能和文档且在国内被众多大型互联网公司选用,考拉自然也选择了Dubbo作为服务化的基础框架。其实相比于Dubbo,Spring Cloud可以说是一个更完备的微服务解决方案,它从功能性上是Dubbo的一个超集,个人认为从选型上对于一些中小型企业Spring Cloud可能是一个更好的选择。提起Spring Cloud,一些开发的第一印象是http+JSON的rest通信,性能上难堪重用,其实这也是一种误读。微服务选型要评估以下几点:内部是否存在异构系统集成的问题;备选框架功能特性是否满足需求;http协议的通信对于应用的负载量会否真正成为瓶颈点(Spring Cloud也并不是和http+JSON强制绑定的,如有必要Thrift、protobuf等高效的RPC、序列化协议同样可以作为替代方案);社区活跃度、团队技术储备等。作为已经没有团队持续维护的开源项目,选择Dubbo框架内部就必须要组建一个维护团队,先不论你要准备要集成多少功能做多少改造,作为一个支撑所有工程正常运转的基础组件,问题的及时响应与解答、重大缺陷的及时修复能力就已足够重要。

下文将选取Dubbo高性能RPC通信原理、服务注册发现特性、依赖隔离、启动与停机等几个方面阐述Dubbok的工作原理和相关改进工作。

一、高性能RPC

Dubbo作为一个分布式通信框架,最基本的职责就是完成跨进程的远程调用(RPC)。以下是RPC基本流程图:

RPC工作原理(图片来自网络)

RPC基本原理非常简单,那么Dubbo是如何实现高效的RPC通信的呢,和其他分布式通信组件关注点一样,主要集中在以下几点的优化:

1.协议栈: Dubbo支持自定义RPC协议,冗余字段少、通信性能高; 序列化协议支持hessian2、Dubbo自定义序列化等高性能协议; Dubbo支持序列化协议解码在业务线程(Netty3编码自动在业务线程执行);

Dubbo RPC通信协议栈2.线程模型:

依赖Netty3的非阻塞线程模型,支持I/O、业务逻辑线程分离,通过Handler链处理请求。

Netty基本线程模型

Dubbo业务线程与netty3 IO线程交互

这里特别强调Netty3,是因为Netty4在线程模型、buffer缓冲区等方面做了重大的设计和性能改进,包括Inbound、Outbound事件强制在I/O线程发起、buffer通过缓冲池减少分配释放、DirectBuffer实现缓冲区零复制等。Netty这块升级相对是一个高风险的点,明面上的API兼容性改造是小,如对Netty4工作原理认识不足,新的线程模型、buffer缓冲池等带来的非预期性能下降、内存泄露等问题相对更难定位与跟踪。

讲到线程模型,实现上密切相关的Dubbo网络连接模型必须要提一下。Dubbo默认是所有服务共享单一的TCP长连接的(这也是为什么服务接口不适合传输大负载值,即容易阻塞其他服务的调用)。为响应慢或重要的服务接口考虑,Dubbo支持设置多TCP连接,此时连接数和线程池数默认是绑定的,即每连接对应一个线池,consumer、provider都执行这个策略,从线程隔离的角度讲是合理的,但不注意也容易造成线程占用资源过多,尤其是对于消费端基本无线程阻塞的情况下可能是一个设计缺陷。

3.缓冲区:

为您推荐