dubbo技术分享
来源:互联网 发布:淘宝推荐进口零食店 编辑:程序博客网 时间:2024/06/14 13:57
0 dubbo是一个分布式部署框架
1 soa面向服务部署方式
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来
2 soa的进化过程
通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡。
(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。
此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。 并通过在消费方获取服务提供方地址列表,实现软负载均衡和Failover,降低对F5硬件负载均衡器的依赖,也能减少部分成本。
(2)当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。
(3)接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。
3 dubbo的节点
•节点角色说明:
•Provider:暴露服务的服务提供方
•Consumer:调用远程服务的服务消费方。
•Registry:服务注册与发现的注册中心。
•Monitor:统计服务的调用次调和调用时间的监控中心。
•Container:服务运行容器。
•调用关系说明:
•服务容器负责启动,加载,运行服务提供者。
•服务提供者在启动时,向注册中心注册自己提供的服务。
•服务消费者在启动时,向注册中心订阅自己所需的服务。
•注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
•服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
•服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
4 dubbo的用法
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载
服务提供者
import com.alibaba.dubbo.rpc.config.ApplicationConfig;import com.alibaba.dubbo.rpc.config.RegistryConfig;import com.alibaba.dubbo.rpc.config.ProviderConfig;import com.alibaba.dubbo.rpc.config.ServiceConfig;import com.xxx.XxxService;import com.xxx.XxxServiceImpl;// 服务实现XxxService xxxService = new XxxServiceImpl();// 当前应用配置ApplicationConfig application = new ApplicationConfig();application.setName("xxx");// 连接注册中心配置RegistryConfig registry = new RegistryConfig();registry.setAddress("10.20.130.230:9090");registry.setUsername("aaa");registry.setPassword("bbb");// 服务提供者协议配置ProtocolConfig protocol = new ProtocolConfig();protocol.setName("dubbo");protocol.setPort(12345);protocol.setThreads(200);// 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口// 服务提供者暴露服务配置ServiceConfig<XxxService> service = new ServiceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏service.setApplication(application);service.setRegistry(registry); // 多个注册中心可以用setRegistries()service.setProtocol(protocol); // 多个协议可以用setProtocols()service.setInterface(XxxService.class);service.setRef(xxxService);service.setVersion("1.0.0");// 暴露及注册服务service.export();
服务消费者
import com.alibaba.dubbo.rpc.config.ApplicationConfig;import com.alibaba.dubbo.rpc.config.RegistryConfig;import com.alibaba.dubbo.rpc.config.ConsumerConfig;import com.alibaba.dubbo.rpc.config.ReferenceConfig;import com.xxx.XxxService;// 当前应用配置ApplicationConfig application = new ApplicationConfig();application.setName("yyy");// 连接注册中心配置RegistryConfig registry = new RegistryConfig();registry.setAddress("10.20.130.230:9090");registry.setUsername("aaa");registry.setPassword("bbb");// 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接// 引用远程服务ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏reference.setApplication(application);reference.setRegistry(registry); // 多个注册中心可以用setRegistries()reference.setInterface(XxxService.class);reference.setVersion("1.0.0");// 和本地bean一样使用xxxServiceXxxService xxxService = reference.get(); // 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用
阅读全文
0 0
- dubbo技术分享
- dubbo源码分享-provider
- 技术篇之Dubbo
- 技术分享
- 技术分享
- 技术分享
- 分享技术,分享快乐
- 分享一个Migo2.0企业级电商项目Demo ssm redis mysql dubbo 分布式部署 涵盖大量电商技术
- 学习技术,分享技术
- 分布式技术Dubbo+Zookeeper总结
- 对于Dubbo框架的一些小分享
- dubbo学习过程、使用经验分享及实现原理简单介绍,dubbo经验分享
- dubbo学习过程、使用经验分享及实现原理简单介绍,dubbo经验分享
- dubbo学习过程、使用经验分享及实现原理简单介绍,dubbo经验分享
- 品味人生,分享技术!
- 技术网站分享
- 技术博客分享
- flex技术分享学习
- size和sizeof的区别
- AI challenger 场景分类 train test 多层cnn
- Java数据结构与算法解析(八)——伸展树
- 二叉树前序、中序、后序遍历非递归写法的透彻解析
- Centos7的firewall简单配置
- dubbo技术分享
- 【R笔记】R机器学习(二)——非线性回归
- HDU
- socketserver的简单使用
- Laravel 5.5设置跨域访问
- 数据库——Oracle中常见的日期类型及日期函数
- spring mvc项目从简入奢全过程记录(二):最简明的MVC
- Hadoop/Spark推荐系统(四)——推荐链接
- LeetCode.143 Reorder List