6、SpringBoot尚硅⾕笔记整理⾼级篇-分布式
六、Spring Boot与分布式
分步式、Dubbo/Zookeeper、Spring Boot/Cloud
⼀、分布式应⽤
在分布式系统中,国内常⽤zookeeper+dubbo组合,⽽Spring Boot推荐使⽤ 全栈的Spring,Spring Boot+Spring Cloud。
分布式系统:
单⼀应⽤架构 当⽹站流量很⼩时,只需⼀个应⽤,将所有功能都部署在⼀起,以减少部署节点和成 本。此时,⽤于简化增删改查⼯作量的数据访问框架(ORM)是关键。
垂直应⽤架构 当访问量逐渐增⼤,单⼀应⽤增加机器带来的加速度越来越⼩,将应⽤拆成互不相⼲ 的⼏个应⽤,以提升效率。此时,⽤于加速前端页⾯开发的Web框架(MVC)是关键。
分布式服务架构 当垂直应⽤越来越多,应⽤之间交互不可避免,将核⼼业务抽取出来,作为独⽴的服 务,逐渐形成稳定的服务中⼼,使前端应⽤能更快速的响应多变的市场需求。此时, ⽤于提⾼业务复⽤及整合的分布式服务框架(RPC)是关键。
流动计算架构 当服务越来越多,容量的评估,⼩服务资源的浪费等问题逐渐显现,此时需增加⼀个 调度中⼼基于访问压⼒实时管理集容量,提⾼集利⽤率。此时,⽤于提⾼机器利 ⽤率的资源调度和治理中⼼(SOA)是关键。
⼆、Zookeeper和Dubbo
ZooKeeper
ZooKeeper 是⼀个分布式的,开放源码的分布式应⽤程序协调服务。它是 ⼀个为分布式应⽤提供⼀致性服务的软件,提供的功能包括:配置维护、 域名服务、分布式同步、组服务等。
Dubbo
Dubbo是Alibaba开源的分布式服务框架,它最⼤的特点是按照分层的⽅ 式来架构,使⽤这种⽅式可以使各个层之间解耦合(或者最⼤限度地松耦 合)。从服务模型的⾓度来看,Dubbo采⽤的是⼀种⾮常简单的模型,要 么是提供⽅提供服务,要么是消费⽅消费服务,所以基于这⼀点可以抽象 出服务提供⽅(Provider)和服务消费⽅(Consumer)两个⾓⾊。
1、安装zookeeper作为注册中⼼
2、编写服务提供者
3、编写服务消费者
4、整合dubbo
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
application.properties
dubbo.application.name=consumer-user
三、Spring Boot和Spring Cloud
Spring Cloud
Spring Cloud是⼀个分布式的整体解决⽅案。Spring Cloud 为开发者提供了在分布式系统(配 置管理,服务发现,熔断,路由,微代理,控制总线,⼀次性token,全局琐,leader选举,分 布式session,集状态)中快速构建的⼯具,使⽤Spring Cloud的开发者可以快速的启动服务 或构建应⽤、同时能够快速和云平台资源进⾏对接。
SpringCloud分布式开发五⼤常⽤组件
* 服务发现——Netflix Eureka
* 客服端负载均衡——Netflix Ribbon
* 断路器——Netflix Hystrix
* 服务⽹关——Netflix Zuul
* 分布式配置——Spring Cloud Config 微服务
Spring Cloud ⼊门
– 1、创建provider
<?xml version="1.0" encoding="UTF-8"?>
<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.atguigu</groupId>
<artifactId>provider-ticket</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>provider-ticket</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
<relativePath/><!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
&porting.outputEncoding>UTF-8</porting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
server:
port:8002
spring:
application:
name: provider-ticket
eureka:
instance:
prefer-ip-address:true # 注册服务的时候使⽤服务的ip地址
client:
service-url:
defaultZone: localhost:8761/eureka/
service
package com.atguigu.providerticket.service;
import org.springframework.stereotype.Service;
@Service
public class TicketService {
springcloud难学吗public String getTicket(){
System.out.println("8002");
return"《厉害了,我的国》";
}
}
controller
package com.ller;
import com.atguigu.providerticket.service.TicketService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;
@RestController
public class TicketController {
@Autowired
TicketService ticketService;
@GetMapping("/ticket")
public String getTicket(){
Ticket();
}
}
– 2、创建consumer
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论