Dubbo开源

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。本文对于在Alibaba内部使用Dubbo的场景和方案进行的非常详细的介绍,以此可以窥探分布式服务框架的独特的优势和对运维工作的重要性。
展开查看详情

1.DUBBO 开源 梁飞 1

2.什么是 Dubbo ? 分布式服务框架 远程服务调用 Netty /Mina/Grizzly RMI/Hessian/ WebService 服务动态发现 Zookeeper/ Redis 集群软负载均衡 Random/ RoundRobin 集群失败容错 Failover/Failback 服务治理平台 依赖关系与关键路键 服务路由与动态配置 服务降级与资源劣化 权重调节与容量评估 服务授权与黑白名单 服务 SLA 与流程管理 服务测试与 Mock 服务文档与负责人 …… 2

3.分布式服务框架 3 Service Consumer Dubbo Registry Service Provider Dubbo Invoker Dubbo Exporter 2 . 启动时 订阅服务 地址 1 . 启动时 注册服务 地址 4 . 随机 调用一个服务地址,失败重试另一地址 3 . 变更时 推送服务 地址列表 Dubbo M onitor 5 . 后台定时采集服务调用次数和调用时间等信息 长连接 短连接

4.无侵入透明调用 暴露服务: 引用服务: 4 <bean id =" helloService ” class=" com.alibaba.hello.impl.HelloServiceImpl " /> < dubbo:service interface=" com.alibaba.hello.HelloService ” ref=" helloService “ /> < dubbo:reference id=“ helloService “ interface =“ com.alibaba.hello.HelloService ” / > <bean id =“ xxxAction “ class=“ com.alibaba.xxx.XxxAction " > <property name=“ helloService " ref=“ helloService " /> </bean>

5.  高性能远程调用 5

6.高性能线上验证 PC2 鉴权服务 2012-03-11 12 亿 / 天 只用 8 台虚拟机 单机 1.3 亿 / 天

7.服务治理 7 注册中心 前端 集成 核心 服务降级 服务路由 服务测试 服务分层 服务授权 服务文档、负责人、流程 均衡策略 依赖关系 服务质量协定 监控中心 服务调用统计 服务注册与发现 服务编排 服务容量评估 关键路径分析 服务容器 调度中心 资源劣化 动态配置 权重调节 容错策略

8.8

9.服务监控 系统监控 应用监控 业务监控 实时监控 日志采集 海量存储 报警网关 业务 系统 应用 计算平台

10.服务依赖关系

11.降级开关

12.服务分类统计

13.服务响应区间

14.服务生命周期管理 14 治理 下线

15.服务治理定位 15

16.可集成 IT 治理 16 Deployment Runtime Registry Consumer Provider M onitor init async Repository Admin Scheduler sync 10.invoke 11.count 4. download 8.subscribe 9.notify 2. schedule 12.report 6.register 7. route 13. view 1. upload platform application Container Deployer 3. deploy Distributed Service 5. start Elastic Computing IT Governance Service Governance

17.服务架构要解决的问题

18.网站架构发展 18 All in One Vertical Application Distributed Service Elastic Computing 1 ~ 10 10 ~ 1000 1000 ~ 10000 10000 + application service ORM MVC RPC/SOA CLOUD Framework Architecture Cluster

19.服务架构 CAP 取舍 19

20.服务架构关联平台 20 Diamond Config Dubbo /HSF Service Dragoon/CSP M onitor Mecca/T4 Scheduler Ocean/TOP Gateway Napoli/Notify Queue Belfry Task Harbor/PMC Event APP MW OPS Nonda / Sofax Module Galaxy Widget Webx MVC Otter Sync Cobar /TDDL Partition Driud DataSource DATA Aone Process Tair / Redis KV Hummock DDOS TEngine Server OPEN OceanBase Column DW Hadoop MapReduce C TU RiskControl LVS LoadBalance DataX ETL IceBird Analysis

21.为什么要服务化? 21 提升业务建模效率 统一领域模型 规范依赖关系 划分问题边界 提升开发部署效率 降低代码干扰 减少合并冲突 加速项目编译 强契约逻辑复用 方便替换实现 提升线上集群效率 缩小集群规模,小规模增加机器收益最高 分离串行因素,使多数集群并行因子增大 垂直拆分应用,减少瓶颈资源竞争 功能降级,故障隔离

22.Dubbo 开源历程 22 2008 年底 开始规划调研 2009 年初 开发 1.0 版本 2011- 10-20 2.0.7 版本开源 2010-04 重写 2.0 版本

23.谁在用 Dubbo ? ( 内部 ) 1000+ 应用 , 2000+ 服务 10,000,000,000+ 调用 / 天

24.2011 年底 开源 谁在用 Dubbo ? ( 外部 )

25.谁在用 Dubbo ? 为什么这么多人用?

26.优雅的设计 微核 + 插件体系 平等对待第三方 级联最小扩展点 统一的数据模型 增量组合式扩展 声明 API& 过程 SPI 高度可配置 26 Autowiring Cascading Dogfooding

27.服务框架设计原则 27

28.服务框架分层 28 Config Protocol Registry Cluster Monitor Exchange Proxy Serialize Transport RPC Remoting Depend

29.29 RPC Remoting Business refer received request connect bind connect bind send reply invoke invoke encode merge write read getProxy getInvoker export refer decode serialize select list register getExecutor notify getRegistry notify list invoke invoke Provider Consumer Exporter Interface Proxy Filter Invoker Invoker Filter Implement Client Server Transporter LoadBalance Protocol NotifyListener Registry Protocol Registry Exchange Service Serialization Inherit Init Dubbo Framework Depend DubboInvoker DubboProtocol DubboExporter Interface Class ProxyFactory Invoker Proxy ReferenceConfig ServiceConfig Config Call Cluster Codec ObjectOutput ObjectInput Exchanger Transport Serialize Directory Cluster ThreadPool RegistryProtocol User API Contributor SPI RegistryFactory RegistryDirectory deserialize export invoke invoke invoke export ChannelHandler ExchangeHandler Router RouterFactory Monitor Monitor MonitorFactory route MonitorFilter ExchangeSerever ExchangeClient count refer received getMonitor Start get export invoke invoke new subscribe Dispatcher getRouter wrap DubboHandler merge getRouter getRegistry getMonitor wrap connect connect bind bind