ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

服务框架dubbo和zookeeper

2021-09-21 12:05:48  阅读:141  来源: 互联网

标签:xml dubbo 服务 框架 service web zookeeper maven


一、Dubbo框

1、分布式系统中的相关概念

(1)大型互联网项目架构目标

a、互联网项目:日常被使用的互联网项目,对所有网名都是公开的,用户群体为广大的网民

特点:用户多;流量大、并发高;海量数据;易受攻击;功能繁琐;变更快

目标::

高性能:提供快速的访问体验

高可用:网站服务一直可以正常访问

可伸缩:通过硬件增加/减少,提高/降低处理能力

高可扩展:系统间耦合低,方便的通过新增/移除方式,增加/减少新的功能/模块

安全性:提供网站安全访问和数据加密,安全存储等策略

敏捷性:随需应变,快速响应

b、 传统项目:用户群体为企业的用户

c、衡量网站性能的指标

请求数肯定大于等于连接数量

 (2)集群和分布式

集群:很多“人”一起,干一样的事

        》一个业务模块,部署在多台服务器上

分布式:很多“人”一起,干不一样的事,这些不一样的事,合起来是一件大事

        》一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上

集群和分布式,一般是同时运行的,不是分开使用的

特点:

高性能

高可用

可伸缩:任何一个集群,如果不够用,可以直接增加集群提高效率

高可扩展:那个模块(集群)不行了,把这个模块替换掉,对其他模块没有任何影响

(3)架构演进

a、单体架构:业务和模块不进行拆分,但是这个整体(app)是可以搭建集群的,部署在一个tomcat(一个集群里面)叫做单机单体架构;部署在多个集群叫做多机架构

 b、垂直架构:

 c、分布式架构:

 

d、SOA架构:不直接调用,通过中介帮忙调用

 e、微服务架构:

 二、Dubbo:内部已经集成了rpc,不用太过于关注rpc

1、Dubbo概述:Apache Dubbo

(1)概念

(2)架构

上图说明

0 把服务启动,服务启动之后,就会注册到服务中心,把服务调用的ip、端口,以及服务调用的一些路径放到注册中心

2: consumer想要去调用服务,首先需要去发现服务,想要去调用刚刚provider提供的服务,就去注册中心要,把ip、端口地址拿到,这就是服务发现,此时consumer拿到了服务的路径

3:notify就是要一次给一次

4:invoke:rpc的过程,服务调用,不用过于关心,dubbo内部自动实行

5:monitor服务监控,比如某个服务调用了多少次

上图除了rpc是异步,其他都是同步.

2、Dubbo快速入门:

(1)zookeeper的安装

zookeeper:dubbo官方提供的注册中心的软件

 

(2)spring和springMVC

a、创建

用maven的方式构建

创建一个空的项目:new- project -empty project-改名-finish-project(jdk选择1.8)

设置maven:file-setting-maven-setting(选择本地maven的settings地址即可)

新建两个模块:new-module-改名

b、web项目用来启动,增加tomcat插件,还有导入一些坐标

c、service项目;类似于jar包, service不用导入tomcat,导入其他的坐标 

d、新建类实现方法和实现类

写接口的实现类

 新增配置文件,增加包扫描 

写contoller类,controller写在web里面,是一个web项目,所以首先pom里面的package要改成war

少了webapp目录,增加创建webapp目录,增减wed-inf和web-xml,在web.xml中导入需要的配置文件(网上找吧包括dubbo和springmvc)

此时会飘红,在pom.xml中导入dubbo-service依赖

 仍然飘红,在springmvc.xml中导入

 上面这张图首先开启驱动,然后扫描com.itheima.controller

因为service项目是被依赖的,所以需要先安装,dubbo-service上右键-run maven -install;安装完成之后启动web项目:dubbo-web右键-run maven - tomcat7:run

执行结果:

 

上述web和service不是分布式,因为web可以提供外部访问服务,而service不能提供服务,因为是一个jar项目,不能提供服务,都是单体的项目

(3)服务提供者

改造上面非分布式的服务,为分布式

a、pom.xml中导入坐标,之前已经导入过了

 b、将pom.xml中package改成war,package不能启动服务,改成war意味着将来可以独立启动

 加war,就需要加tomcat插件,

 b、完成service中代码的改造:不需要当到spring的idc文件中,把服务,对外发布,将访问的地址注册到注册中心中

项目怎么知道注册中心在哪,需要去配置文件中配置(引入dubbo的配置信心,进行配置)

 c、新增webapp,在xml中配置干掉srpingmvc的配置

d、运行:maven run

(4)服务消费者

a、注释掉之前对service的依赖

此时会报错,因为找不到这个包,两种(1、创建一个本地的接口让代码编译通过),先看第一种

b、删掉spring配置文件的加载,只剩下springmvc

c、因为此时本地注入会失效,改为远程注入

@Referebce远程注入的功能:(1)从zookeeper(注册中心)获取userService的访问url;(2)进行远程调用rpc (3)将结果封装为一个代理对象,给变量赋值

 d、修改springmvc文件的配置

e、检查web.xml没有问题

f、运行:访问正常

 web和service的端口需要不同,因为是部署在同一个机子上的两个服务;部署到多个机子上就没有问题

 优化:接口和方法都很多的情况下,web和service声明称相同的就会很麻烦,可以声明一个公共的接口

 a、new-module:

b、new package

c、复制userservice,删除web和service中的接口userservice

d、修改配置文件

 

被依赖的需要进行安装,安装完成之后才会生效,安装新增的这个模块,方法如上面讲过的 

 e、service和web都启动成功了,再运行

3、Dubbo高级特性

(1)dubbo-admin管理平台安装

安装步骤:

(2)dubblo-admin使用

启动服务后,刷新,可以查看一些基础的信息

 dubbo本机会占用一个端口,默认是20880,可以在配置文件中修改,多个服务的端口需要是不同的 

(3)序列化

两台机器上部署的两个服务,如果通信呢?序列化为流的数据,通信会建立流的管道,user对象要想被序列化,需要实现serializable接口,消费者拿到数据后,在转换为user对象

 

 

 被依赖的java工程有改动一定要先重新maven install

(4)地址缓存

注册中心挂了,服务是否可以正常访问:可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心;当服务提供者地址发生变化时,注册中心会通知服务消费者,如果注册中心的ip和端口号等改变了,则需要重新写入缓存;如果zookeeper挂了,在访问新的地址,则访问不成功

 验证:关闭之前打开的zookeeper服务,再访问之前的地址,访问成功

 (5)超时

 使用timeout属性配置超时时间,默认值1000,单位毫秒

 eg:

 运行:输出3s就开始报错,因为有两个线程,单线程只会输出1和2

超市时间在服务的生产方和服务的消费方都是可以生效的,一般建议配置在服务的提供者

(6)重试

网络抖动:网络抖了一下,突然断了又突然连上

 (7)多版本

  (8)负载均衡

 注意端口不能冲突,权重的值可以自己分配 

(9)集群容错

 不写,默认就是failover

 (10)服务降级:

eg:

 运行结果:没有任何打印结果,因为上述代码屏蔽了web服务

标签:xml,dubbo,服务,框架,service,web,zookeeper,maven
来源: https://blog.csdn.net/xuruhua/article/details/120390860

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有