1.SOA架构
SOA是service-oriented Architecture 面向服务的架构样式
主要原因:在分布式的环境中,软件开发将各种实现的功能都会以服务的形式提供给用户或者其他服务.
企业级应用的开发采用面向服务的体系架构来达到灵活多变,可复用性高的需求
从服务,基于服务开发和服务的结果来看,面向服务是一种思考方式.
SOA更多应用于互联网项目开发
互联网多采用SOA架构的原因:在互联网高速发展的同时,网站应用的规模不可避免的不断扩大,最早的单一应用架构以及常规的垂直引用架构早已无法应付,分布式服务架构以及流动式计算架构势在必行,迫切的需要一个治理系统来确保架构有条不紊的演进.
面向服务的架构SOA是一个组件模型,它将应用程序的不同功能单元(称为服务) 通过这些服务之间定义良好的接口和契约联系起来.
2.Dubbox简介
Dubbox是一个分布式服务框架前身是阿里巴巴开源项目Dubbo
Dubbo2014年停止维护,2017年九月重新开始维护
在其期间当当网在Dubbo的基础上进行优化,并继续维护,为了与原有的Dubbo区分,故将其改名为Dubbox.
Dubbox是一个远程服务调用的分布式框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA的服务治理
如果没有分布式的需求,其实是不需要用的.只有在分布式的时候,才有Dubbox这样的分布式服务框架的需求.
关于RPC(Remote Procedure Call Protocol):远程调用协议,它是一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议.RPC协议会假定某些传输协议的存在,如TCP协议,为通信程序之间携带数据.
3.Dubbox的特性:
1.透明化远程方法调用:就像调用本地方法一样调用远程方法,只需要简单配置,没有任何API侵入
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点.
3.服务自动注册与发现,不需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者.
注:Dubbox和Dubbo不同的是,为其实现了一些新的功能,包括REST(Representational State Transfer)风格,即资源表述性状态转移.
REST调用也使得Dubbox可以对当今特别流行的"微服务"架构提供基础性支持.
4.Dubbox工作核心
Dubbox的核心要点
调用方式RPC
服务注册Zookeeper
服务发现Zookeeper
序列化/反序列化(dubbo/hessian2/fastjson/Kryo/FST等):Dubbox传输的java类需要进行序列化
负载均衡
节点角色说明:
provider:暴露服务的服务提供方
Consumer:调用远程服务的服务消费方
Registry:服务注册与发现的注册中心
Monitor:统计服务的调用次数和调用时间的监控中心
Container:服务运行容器.
调用关系说明:
0.服务容器负责启动,加载,运行服务提供者
1.服务提供者在启动时,向注册中心注册自己提供的服务
2.服务消费者在启动时,向注册中心订阅自己所需的服务
3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用(注:这里是不经过注册中心的,而是Dubbox的框架)
5.服务消费者和提供者,在内存中累积调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
Dubbox默认请求时间是1000ms,请求三次.所以在需要较多业务加载的情况下,可以设置请求超时时间.
5.注册中心
官方推荐使用Zookeeper注册中心.注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小.
Zookeeper是Apache Hadoop的子项目,是一个树形的目录服务,支持变更推送,适合作为Dubbox服务的注册中心,工业强度较高,可用于生产环境.
注:调用服务通过Dubbox内部组件Container来完成
Dubbox是类似于一个服务组件,需要依赖的中间件只有Zookeeper,因此Dubbox环境搭建比较简单,只需要Zookeeper或Zookeeper集群环境即可.
6.安装Zookeeper(演示安装包版本为:zookeeper-3.4.6.tar.gz)
第一步:安装jdk(需要jdk环境)
详细步骤略
第二部将Zookeeper的压缩包上传到linux中
Alt+P 进入SFTP ,输入put d:\zookeeper-3.4.6.tar.gz 上传
或者使用第三方filezilla皆可
第三步:解压安装包
tar -zxvf zookeeper-3.4.6.tar.gz
第四步:进入zookeeper-3.4.6目录,创建data文件夹
mkdir data
第五步:进入conf目录,把zoo_sample.cfg改名为 zoo.cfg
cd conf
mv zoo_sample.cfg zoo.cfg
第六步:打开zoo.cfg,修改data属性:dataDir=/root/zookeeper-3.4.6/data
vi zoo.cfg
启动命令
关闭命令
查看状态命令
./zkServer.sh start
./zkServer.sh stop
./zkServer.sh status
Dubbox的jar包没有部署到maven的中央仓库中,因此在使用是需要手动的将Dubbox的jar包安装到自己的本地仓库
7.使用demo简单说明
本文使用ssm框架
在pom.xml中配置相关依赖
dubbo
Zookeeper
Zookeeper客户端等()
在service层配置注册服务
注:此时在service层如果引入扫描service注解@service为dubbo提供的
dubbo:annotation用于扫描@service注解
在web层配置
zookeeper端口是默认的2181
20881为dubbo消费者和提供者通信的端口(多个dubbo服务启动时,需要修改端口号)