微服务dubbo技术实践之一

举报
tea_year 发表于 2023/12/12 22:37:48 2023/12/12
【摘要】 1,课程回顾 zk 无单点故障分布式协调框架 应用场景 (naming注册中心 管理配置文件 管理集群(java例子模拟) 分布式锁 消息队列........) zk 集群搭建 选举原理(启动选举,运行时leader宕机选举 ) zk 数据类型 4种 zk ACL(access control list)节点访问控制权限 scheme : id : permission world anyo...

1,课程回顾

zk 无单点故障分布式协调框架 应用场景 (naming注册中心 管理配置文件 管理集群(java例子模拟) 分布式锁 消息队列........)

zk 集群搭建 选举原理(启动选举,运行时leader宕机选举 )

zk 数据类型 4种

zk ACL(access control list)节点访问控制权限 scheme : id : permission

world anyone crwda

ip ip地址/主机名称

auth user

digest user

zk java API (对节点的CRUD 节点内容添加,修改)

zk 管理集群(java例子模拟)

2,本章重点

dubbo的简介,使用场景

dubbo拆分SSM项目

3,具体内容

官网:

https://dubbo.apache.org/zh/

https://dubbo.incubator.apache.org/zh/overview/what/overview/

https://dubbo.incubator.apache.org/zh/docsv2.7/user/preface/background/

引言:

     分布式服务:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题  

     集群服务:同一个业务部署在多台机器上,提高系统可用性

3.1 简介:

    Dubbo是阿里巴巴内部的SOA(server oriented architectrue)服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里系公司使用。 Dubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。

3.2 开发团队:

      Dubbo共有六个开发人员参与开发和测试,每一个开发人员都是很有经验,团队合作很默契,开发过程也很有节奏,有完善质量保障流程。

 梁飞 (开发人员/产品管理)

 刘昊旻 (开发人员/过程管理)

 刘超 (开发人员/用户支持)

 李鼎 (开发人员/用户支持)

 陈雷 (开发人员/质量保障)

 闾刚 (开发人员/开源运维)


 

3.3 适用场景:

         1,当网站变大后,不可避免的需要拆分应用进行服务化,以提高开发效率,调优性能,节省关键竞争资源等。 

 

  2,当服务越来越多时,服务的URL地址信息就会爆炸式增长,配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。 

 

 3,当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。 

 

4,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?等等…… 

 

3.4 设计思路,依赖及性能,应用情况

框架具有极高的扩展性,采用微核+插件体系,并且文档齐全,很方便二次开发,适应性极强。Dubbo运行JDK1.5之上,缺省依赖javassist、netty、spring等包,但不是必须依赖,通过配置Dubbo可不依赖任何三方库运行。 Dubbo通过长连接减少握手,通过NIO及线程池在单连接上并发拼包处理消息,通过二进制流压缩数据,比常规HTTP等短连接协议更快。在阿里巴巴内部,每天支撑2000多个服务,30多亿访问量,最大单机支撑每天近1亿访问量。 


在阿里内部,除淘系以外的其它阿里子公司,都在使用Dubbo,包括:中文主站,国际主站,AliExpress,阿里云,阿里金融,阿里学院,良无限,来往等等。 

 

开源后,已被:去哪儿,京东,吉利汽车,方正证劵,海尔,焦点科技,中润四方,华新水泥,海康威视,等公司广泛使用,并不停的有新公司加入,社区讨论及贡献活跃,得到用户很高的评价。

3.5 架构:


 

 


 

调用关系说明

 服务容器负责启动,加载,运行服务提供者。

 服务提供者在启动时,向注册中心注册自己提供的服务。

 服务消费者在启动时,向注册中心订阅自己所需的服务。

 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

3.6 maven父子工程实现ssm版dubbo


3.6.1 创建父工程

比过去新加jar:

<!-- 新加jar -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>2.5.7</version>

</dependency>

<dependency>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

<version>3.4.6</version>

</dependency>

<dependency>

<groupId>com.101tec</groupId>

<artifactId>zkclient</artifactId>

<version>0.10</version>

</dependency>

<!-- 新加jar -->

3.6.2 拆分项目,创建子工程


3.6.3 配置dubbo

生产者:

<!-- 提供方应用信息,用于计算依赖关系 -->

<dubbo:application name="demo-provider"/>


<!-- 使用multicast广播注册中心暴露服务地址 -->

<!-- <dubbo:registry address="multicast://192.168.1.104:1234"/>

-->

<dubbo:registry protocol="zookeeper" address="192.168.23.91:2181"/>

<!-- 用dubbo协议在20880端口暴露服务 -->

<dubbo:protocol name="dubbo" port="20880"/>


<!-- 和本地bean一样实现服务 -->

<bean id="demoService" class="com.aaa.ssm.service.NewsServiceImpl"/>


<!-- 声明需要暴露的服务接口 -->

<dubbo:service interface="com.aaa.ssm.service.NewsService" ref="demoService"/>

消费者:

<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->

<dubbo:application name="dubbo-consumer" />

<!-- 使用multicast广播注册中心暴露发现服务地址 -->

<!-- <dubbo:registry address="multicast://192.168.1.104:1234"/>

--><dubbo:registry protocol="zookeeper" address="192.168.23.91:2181"/>

<!-- 用dubbo协议在20880端口暴露服务 -->

<dubbo:protocol name="dubbo" port="20880"/>

<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->

<dubbo:reference id="deptService" check="false" interface="com.aaa.ssm.service.NewsService"/>

3.6.4 配置项目,启动tomcat,运行测试




4,知识点总结

5,本章面试题




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。