Java架构学习(四⼗五)Dubbo基础⽹站演变过程SOA和微服务技术总结微服
务架构模式D。。。
⼀、⽹站演变过程
什么时候使⽤到Dubbo框架?
答:只有在RPC远程调⽤的时候才会使⽤到dubbo框架。
⽹站架构演变过程:
单点项⽬/单点系统架构:MVC这种模式
单点系统中,缺点:如果有⼏百个程序员开发同⼀个项⽬,
会产⽣代码冲突的问题。适合⼩团队开发。
互联⽹公司的特征:⼈⽐较多、⾼并发、⾼可⽤、开发⼈员⽐较多。
敏捷开发:就是把项⽬拆分很细。
分布式开发:将⼀个项⽬,拆分成多个⼦项⽬,如:会员系统、订单系统、
⽀付系统。使⽤的是RPC远程调⽤技术、项⽬之间互不影响。
分布式开发:
SOA⾯向服务的架构:主要以http+xml报⽂格式来传输。
将项⽬拆分成多个⼦的服务。使⽤Webservice
SOA架构:要把业务逻辑层封装起来。控制层剥离开来。
⾯向服务SOA架构就是将床头项⽬业务逻辑层分装成
服务接⼝,暴露其他给其他服务进⾏调⽤。
微服务架构:是通过SOA架构演变过来的。
⼆、分布式开发需要使⽤的技术SOA&微服务
分布式领域中使⽤RPC需要使⽤的技术:
httpclient、Dubbo(阿⾥)、Dubbox、Zookeeper(注册中⼼)、SpringCloud、eureka注册中⼼(fegin、rest客户端调⽤⼯具、zuul、分布式配置中⼼、ribbin、断路器hystrix)、redis、mongdb、消息中间件、
之后分布式开发领域中:⽣产者、消费者、注册中⼼、监控中⼼、容器。SpringBoot:简化XML配置、快速整合第三⽅框架开发、内置tomcat容器。
三、微服务架构
SpringCloud http协议+json格式来进⾏传输
或者使⽤Dubbox
四、Dubbo架构原理
1、dubbo是rpc远程调⽤、服务治理、分布式服务框架,
dubbo实现的SOA⾯向服务架构的框架。满⾜分布式开发需求。
在分布式中主要做远程调⽤,功能有集容错机制、负载均衡
动态配置、路由策略、服务治理。
2、⾥⾯底层实现是长连接+NIO框架。
3、dubbo⾥⾯原理图:
⽣产者:提供接⼝
消费者:调⽤接⼝
注册中⼼:负载均衡、容错机制、路由策略、服务治理
监控中⼼:
容器:
五、dubbo能够解决的问题
SpringCloud中的功能:
enruka:注册中⼼
ribbion:负载均衡
fegin/rest:客户端调⽤⼯具
config:分布式⽂件配置中⼼
zuul:⽹关
hystrix:熔断器
dubbo能够解决什么问题?
问题:rpc远程调⽤、服务的URI地址、负载均衡(f5,lvs,nginx)、
依赖关系⾮常复杂,
每个服务还需要监控。
Dubbo有的功能:
API透明化,就相当于控制层带哦⽤业务逻辑层
负载均衡机制可以替代F5、nginx、lvs、容错机制
服务注册与发现,主要提供API地址
dubbo采⽤的是Spring机制
六、Dubbo创建项⽬架构模式
会员服务提供查询⽤户接⼝信息,暴露给订单系统,调⽤会员服务接⼝查询⽤户信息Dubbo项⽬结构误区
leeue-member-interface 会员提供服务项⽬没有具体实现
leeue-member-service-impl --⽣产者实现会员服务项⽬具体实现
leeue-order-service --- 订单服务
七、使⽤Dubbo发布服务这⾥以会员服务案例
⾸先:会员服务是向外⾯提供接⼝的,这⾥我们默认会员为⽣产者。
所以要先建⽴会员接⼝项⽬,再简历会员接⼝实现项⽬。
会员接⼝项⽬代码因为向外⾯提供接⼝服务的,只需要定义接⼝就⾏了。package ber.service;
/**
* @classDesc: 功能描述:(会员服务提供接⼝的)
* @author:<a href="leeue@foxmail">李⽉</a>
* @Version:v1.0
* @createTime:2018年12⽉5⽇下午3:31:20
*/
public interface UserService {
/**
* 使⽤⽤户的userId查询⽤户信息
* @param id
* @return
*/
public String getUser(Long id);
}
会员接⼝实现项⽬:l要引⼊上⾯的接⼝项⽬的坐标。
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.leeue</groupId>
<artifactId>45_Dubbo_leeue_member_provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!--引⼊会员服务接⼝ -->
<dependency>
<groupId>com.leeue</groupId>
<artifactId>45_Dubbo_member_interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 添加dubbo框架 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.6</version>
</dependency>
<!-- 添加zk客户端依赖 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
</project>
实现:
package ber.service.impl;
import ber.service.UserService;
/
**
*
soa* @classDesc: 功能描述:(对会员项⽬的实现)
* @author:<a href="leeue@foxmail">李⽉</a>
* @Version:v1.0
* @createTime:2018年12⽉5⽇下午3:59:36
*/
public class UserServiceImpl implements UserService {
public String getUser(Long id) {
System.out.println("会员服务接受订单服务####getUser() id:"+id);
if (id == 1) {
return "嘻嘻我是id_1";
}
if (id == 2) {
return "哈哈我是id_2";
}
return "未到....";
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论