SpringBoot-04-初识分布式微服务架构

分布式微服务基础

8.1 分布式理论

1)是什么

  • 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。
  • 分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据
  • 说人话,团结就是力量

2)为什么会出现

  • 首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。
  • 因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题

3)技术难点

  • 这么多的服务,我的用户该怎么来访问

  • 这么多的服务,我的服务和服务之间该怎么进行通讯

  • 这么多服务我该怎么管理

  • 有服务挂掉了,怎么处理

8.2 RPC

  • 什么是RPC

    • RPC(Remote Procedure Call)是指远程过程调用,是一种进程间通信方式,他是一种技术的思想
    • 说人话,遥控器
  • RPC过程

    rpc

  • 技术难点

    • 网络通信(目前技术水平下,网络传输仍然不那么可靠)
    • 序列化

8.3 Dubbo

  • 什么是Dubbo

    • Apache Dubbo is a high-performance, java based open source RPC framework.
    • 说人话,Dubbo是基于Java的RPC框架。提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
  • 工作流程

    dubbo

8.4 Zookeeper

  • 什么是Zookeeper
    • 从上面Dubbo的工作流程中可以看到,Registry这个东西那是相当重要啊,而Zookeeper就是Dubbo官方推荐我们使用的注册中心
    • 说人话,就是一个用来注册和分发服务的中间件

8.5 分布式初体验

1)准备工作

  • 安装Zookeeper

    • 到Zookeeper官网上下载下来解压就好了
    • 运行bin目录下的zkServer即可开启Zookeeper
      • 如果闪退,则在文件最后一行加上pause就能看到错误信息
  • 安装Dubbo-admin,这个是Dubbo的监控程序,通过他,我们可以直观的看到我们部署了那些服务

    • Github:https://github.com/apache/dubbo-admin

    • 注意要下载master分支下的,默认使develop分支。同时下载下来的Maven项目需要打包

    • 启动界面,默认端口在7001,默认账号密码root-root

      image-20210131214049208

2)搭建服务提供商

  • 导入依赖

    <!-- Dubbo -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.8</version>
    </dependency>
    <!-- zookeeper -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.6.2</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  • 编写服务类

    • 接口

      public interface SellService {
          String sell();
      }
      
    • 实现类

      @DubboService
      @Service
      public class SellServiceImpl implements SellService {
          @Override
          public String sell() {
              return "我买了Lamborghini";
          }
      }
      
      • 最新版本的Dubbo中,@Service注解已经过时,官方要我们用@DubboService来暴露服务
  • 配置文件

    dubbo:
      application:
        name: 出售服务
      registry:
        address: zookeeper://127.0.0.1:2181
      scan:
        base-packages: com.pbx.service
    
    server:
      port: 9000
    

3)服务调用者

  • 导入依赖

    <!-- Dubbo -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.8</version>
    </dependency>
    <!-- zookeeper -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.6.2</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  • Service实现类

    @Service
    public class BuyServiceImpl implements BuyService {
    
        @Override
        public void buy() {
    
        }
    }
    
    • 通常情况下,这里调用远程服务的方式是通过pom导入,这里简化步骤,直接建立一个完全一样的服务接口
  • 配置Dubbo

    dubbo:
      application:
        name: 购买服务
      registry:
        address: zookeeper://127.0.0.1:2181
    server:
      port: 9001
    
  • 测试,进行测试的时候要同时开启两个SpringBoot项目和Zookeeper

    @Autowired
    BuyService buyService;
    
    @Test
    void contextLoads() throws InterruptedException {
        while (true) {
            buyService.buy();
            Thread.sleep(3000);
        }
    }
    

    image-20210131224351035

  • 同时在Dubbo-admin中也可以看见

    image-20210131224138890

    image-20210131224305360

posted @ 2021-01-31 22:46  PrimaBruceXu  阅读(192)  评论(0编辑  收藏  举报