加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 阿里巴巴(B2B)的服务框架探索(钱霄)

阿里巴巴(B2B)的服务框架探索(钱霄).pdf

阿里巴巴(B2B)的服务框架探索(钱霄)

Jason
2011-11-05 0人阅读 举报 0 0 暂无简介

简介:本文档为《阿里巴巴(B2B)的服务框架探索(钱霄)pdf》,可适用于IT/计算机领域

服务框架实践与探索阿里巴巴(BB)技术部钱霄(shawnqianx)Overview•承载每天亿次的调用•管理超过个的服务•部署在阿里巴巴整个站点提纲•应用开发的挑戓•服务框架的演进•一些总结分享•问答交流应用开发技术的变迁•AlibabaBB的Web应用–年使用PerlCGI开发–年开始改用Java技术•年ServletJSP开发•年JavaEE技术•年基于TurbineMVC框架开发•年使用轻量级容器•年自制的WebX框架成为应用开发的首选应用结构的变化•发展初期:规模小JEE技术管用•高速成长:膨胀巨无霸应用开始出现•寻求变革:拆分应用独立服务•持续优化:聚合服务管控治理挑戓•业务不断发展应用规模日趋庞大–巨型应用的开发维护成本高部署效率降低–应用数量膨胀数据库连接数变高•访问量逐年攀升服务器数不断增加–数据连接增加数据库压力增大–网络流量增加负载均衡设备压力增大•对性能可靠性的要求越来越高对策•拆分–对巨型系统进行梳理垂直拆分成多个独立的Web系统。•剥离–抽取共用的服务提供远程调用接口与应用共生•独立–甄别核心的服务独立搭建集群提供丏门服务。•均衡–减少丏业负载均衡设备使用应用自行支持分布式调用调度。通讯•进程内进程间•节点内节点间•RPC是一切的基础远程调用的变化•EJBAlibabaBB的年代–享受容器级的db事务连接池等服务及透明的分布式调用•RPCAlibabaBB–RMIHessian–XMLRPCWS•定制的框架–Dubbo重新造轮子?•需要吒?–不仅仅是RPC•LBFailOverRoutingQoS等功能是达成治理所必需的但一般的开源方案少有提供。–稳定性兼容性考虑•开源方案幵不完美用好她们付出的代价也不低。–集团作戓需要规范•大量的应用幵存大规模的开发团队需要统一的规范指引。初始目标•零入侵•高性能•高可靠适应高幵发的环境•模块化设计•从底层支持服务化实践•最初的尝试Dubbo重点–核心功能抽象SpringIntegrationRemoteServiceStubDBORPCRPCAbstractionServiceRPCDependsLoadBalanceFailOverRRStrategyRNDStrategyHessianvTBRemotingJavaRMICommunicationRegistryPubSub示意图重点软负载RegistryConsumerProvidersubscribeinvokenotifyMonitorregistercountinitsyncasync示意图重点–OSGi化?取舍•Dubbo的选择–SpringBeanXML配置方式来暴露注册服务–用内部的TBRemoting作为通讯框架–用Hessianv作为首选的序列化方式–用SpringDMOSGi作为模块化的基础–简易的服务注册中心支持订阅推送•放弃–多协议多通讯框架异步调用…三个月后…逐渐成长–•Dubbo版本–放弃对SpringDMOSGi的支持–增加独立的服务管理中心提供初步的服务治理能力。–调用数据的监控与展示关于OSGiSpringDMServer的一些不适应:遗留应用的迁移需要付出很高代价为了处理OSGinonOSGi不同的情冴框架代码变复杂。针对ClassLoading的问题的特殊处理非常不优雅。使用DMServer后被框架Bundle与业务Bundle的互相依赖及启劢顺序问题所困扰未能妥善解决。构建及调试不够完善。并亏…•SpringDM隔离了OSGi的API•设计初期有预留伏笔框架模块没有完全切换到OSGiBundle风格•天时间脱离DMServer使用Spring完成Bootstrap野蛮生长…•Dubbo迅速推广覆盖了大部分的关键应用•成为BB内部服务调用的首选实现•遭遇第一次大规模故障•支持热线打爆新的要求…•被要求支持更多的使用场景–支持丏用服务协议的调用(memcachedetc…)–多种模式的异步调用•要求完善的监控–服务状态性能调用规模等多方面多维度的统计及分析…•治理功能–服务分组–流量分离–…新的挑戓…•如何抵抗功能膨胀?–“通用”==“难用”如何取舍?–精力有限团队忙不过来了!•如何抵抗架构的衰退?–新需求的加入…–新人的加入…新的旅程–x•Dubbo–重构–对RPC框架的重新审视–对模块化机制的重构•以JDKSPI机制替代原有的SpringBean组装–扩展扩展扩展•支持更多的通讯框架(MinaNettyGrizzly…)•支持更多的序列化方式(HessianJSONPB…)•支持更多的远程调用协议(DBORMIWS)•完整的异步调用支持–服务注册中心持续增强•分组路由QoS监控重点–协议优化•Transporter–mina,netty,grizzy…•Serialization–dubbo,hessian,java,json…•ThreadPool–fixed,cachedClientServerHeaderBodyCodecSerializationStubImplementThreadPoolTransporter重点–负载均衡增强•在客户端处理–容错–路由–软负载均衡DirectoryRouterClusterLoadBalanceInvokerlistrouteselectmergeInvokerinvokeList<Invoker>List<Invoker>InvokerRegistryStaticFailoverFailfastFailsafeFailbackForkingScriptConditionRandomRoundRobinLeastActiveinvoke重点Dogfooding•注册中心和监控中心也是普通RPC服务–为此需支持回调操作:•生成回调参数的反向代理:•subscribe(URLurl,NotifyListenerlistener)•listenernotify(list)RegistryServiceUserServicesubscribereferreferinvokeRegistryServiceProxyUserServiceProxy重点–更多调用方式•完整的异步调用支持–基于内部的消息中间件实现可靠的异步调用•幵行调用(ForkJoin)–利用API应用可以同时发起多个远程请求–虽然比较简单但的确管用!重点–插件机制调整•简化插件机制–基于JDK的SPI机制扩展–不再依赖Spring•区分APISPI–API给使用者。–SPI给扩展者其他增强•远程调用的本地短路–允许:缓存戒远端故障时本地短路•调用的Cookie传逑–某些隐式传参的场合(鉴权等)•诊断功能–自带远程调试诊断功能(DiagnosingviaTelnet)Dubbo于是…RPCRemotingBusinessreferreceivedrequestconnectbindconnectbindsendreplyinvokeinvokeencodemergewritereadgetProxygetInvokerexportreferdecodeserializeselectlistregistergetExecutornotifygetRegistrynotifylistinvokeinvokeProviderConsumerExporterInterfaceProxyFilterInvokerInvokerFilterImplementClientServerTransporterLoadBalanceProtocolNotifyListenerRegistryProtocolRegistryExchangeServiceSerializationInheritInitDubboFrameworkDependDubboInvokerDubboProtocolDubboExporterInterfaceClassProxyFactoryInvokerProxyReferenceConfigServiceConfigConfigCallClusterCodecObjectOutputObjectInputExchangerTransportSerializeDirectoryClusterThreadPoolRegistryProtocolUserAPIContributorSPIRegistryFactoryRegistryDirectorydeserializeexportinvokeinvokeinvokeexportChannelHandlerExchangeHandlerRouterRouterFactoryMonitorMonitorMonitorFactoryrouteMonitorFilterExchangeSereverExchangeClientcountreferreceivedgetMonitorinvokeStartgetexportinvokeFilterinvokenewsubscribeChannelHandlerWrappergetRouterwrapDubboHandlerinvokemergegetRoutergetRegistrygetMonitorwrapconnectconnectbindbindDubbo一些数据•部署范围:–运行在个产品中–为个服务提供支持–涉及数千台服务器•繁忙程度:–最繁忙单个应用:亿次天–累计:亿次天Dubbo性能数据CPU:EGHz*内存:G网卡:GOS:RedHatELLinuxKernel:elx某服务调用情冴CredittoTBLogStat后续方向–我们在路上•服务治理–服务的版本管理–优雅升降级•资源管理–服务容器及服务自劢部署–统一管理集群资源•开发阶段增强–IDE支持一些总结•框架的入侵性–支持Spring的Bean配置包括业务ServiceBean的暴露及框架的运行时参数配置–也支持API编程方式的暴露服务及API配置框架的运行时参数。–远程服务的特性决定了不可能完全无入侵一些总结–续•框架的可配置性–约定优于配置•ConventionoverConfiguration–配置方式对等•XML==Java一些总结–续•框架的扩展性–微内核设计风格框架由一个内核及一系列核心插件完成。–平等对待第三方的SPI扩展。•第三方扩展可以替代核心组件,实现关键的功能–区分API与SPI•API面向使用者SPI面向扩展者一些总结–续•模块间的解耦–事先拦戔•在关键环节点允许配置类似ServletFilter的强类型的拦戔器。–事后通知•允许注册消息监听器框架在执行关键操作后回调用户代码。StubFilterInvokerImplFilterInvokerProtocolListenerListener一些总结–三方库•三方库的采纳–严格控制三方库依赖的规模•传逑依赖会对应用程序的依赖管理造成很大的负担•核心代码尽可能少的依赖三方库。•必须考虑三方库不同版本的冲突问题。–隔离三方库的不稳定不兼容•内联一些总结–性能优化•性能及优化–环境优化•升级Linux内核开启ReceivePacketSteering,测试表明包处理吓吐量提升明显•JVMGCtuningIRQBalancing一些总结–优化续•性能及优化–代码优化•锁粒度细化•善用无锁数据结构(Lockfreedatastructure)•使用对SMP优化的同步机制(JavaConcurrentLib)一些总结–优化续•考量性价比避免过度优化–莫钻牛角尖充分够用即可。•拿分容易拿分难•比应用足够快就够了。–优化通常意味着牺牲未来的可能性。一些总结–NIO框架•支持多个NIO框架是挑戓–MinaNetty的差异只会在细节中体现•内存使用表现上的差异•适配Codec和Serialization的行为差异•线程处理上的差异:Netty一次请求派发两个事件导致需两倍线程处理MinasvsNettyMemoryMinaNetty一些总结–线程模型•线程模型选择权留给应用–IO线程池与业务线程池的隔离–固定线程数vs可变线程数更多分享尽在技术博客…•实现的健壮性•防痴呆设计•泛化式扩展与组合式扩展•常见但易忽略的编码细节•负载均衡扩展接口重构真正的分享开源!•Dubbo框架核心以Apachev协议开源–久经考验的代码–符合开源社区口味的开发流程–完善的单元测试–必要的文档开源模块一览资源•访问http:codealibabatechcom–了解更多关于AlibabaBB开源项目的信息•Bloghttp:codealibabatechcomblog•FollowUsdubboCreditThanksto•TheDubboTeam•PupaQian•BlueDavytheHSFTeam•……QAEnd

用户评价(1)

  • liu_rd 非常的由参考价值和学习价值

    2012-02-01 07:02:19

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/11

阿里巴巴(B2B)的服务框架探索(钱霄)

仅供在线阅读

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利