Java中dubbo+zookeeper微服务架构简介

目录
  • 1、Apache Dubbo概述
    • 1.1、Dubbo简介
    • 1.2、Dubbo的服务架构
  • 2、服务注册中心 Zookeeper
    • 2.1、ZooKeeper介绍
    • 2.2、ZooKeeper安装
    • 2.3、启动 ZooKeeper
  • 3、ZooKeeper快速入门
    • 3.1、服务提供方
    • 3.2、服务消费方
    • 3.3、问题思考
  • 4、 Dubbo管理控制台
    • 4.1、安装
  • 5、 Dubbo相关配置
    • 5.1、包扫描
    • 5.2、Dubbo 协议
    • 5.3、负载均衡
    • 5.4、 Dubbo无法发布被事务代理的服务

1、Apache Dubbo概述

1.1、Dubbo简介

  **Apache Dubbo **是一款高性能的 Java RPC 框架。其前身是阿里巴巴公司开源的、轻量级的开源 Java RPC 框架,可以和 Spring 框架无缝集成,2018年阿里巴巴把这个框架捐献给了apache基金,此框架的使用比 Spring Cloud 微服务的框架使用较为简单,只需要表写相应的服务提供和服务消费的代码即可,中央服务配置可由 ZooKeeper 进行服务的注册管理,只需要相应的服务进行配置注册,服务消费进行接口的抓取即可完成服务的远程调用。

  • 什么是RPC? RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。 需要注意的是 RPC 并不是一个具体的技术,而是指整个网络远程调用过程。
  • RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于 RPC范 畴。各种开发语言都有自己的RPC框架。Java中的RPC框架比较多,广泛使用的有RMIHessianDubbo等。
  • Dubbo官网地址:http://dubbo.apache.org ,详情可进行直接的访问查看信息。
  • Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

1.2、Dubbo的服务架构

 Dubbo的服务架构图如下所示:

各节点角色说明:

节点名 功能
提供者 暴露接口的提供方
容器 整个服务运行时的容器
注册 服务注册与发现的注册中心
消费者 调用远程服务的消费方
监控 统计服务调用次数调用时间的监控中心

服务的执行步骤:

  1. 服务容器负责启动,加载,运行服务的接口提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务,也就是注册自己的接口地址。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务,通过代理的方式直接定位到需要的接口实现对象,但是需要注意的是消费者必须有该接口才能进行代理。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 4
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2、服务注册中心 Zookeeper

  通过前面的 Dubbo架构图 可以看到,Registry(服务注册中心)在整个架构中起着至关重要的作用。Dubbo官方推荐使用 Zookeeper 作为服务注册中心,下面详细讲一下 Zookeeper 在服务器中的安装以及相应的服务注册和拉取配置。

2.1、ZooKeeper介绍

Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。

 流程说明:

  • 服务提供者(Provider)启动时: 向 /dubbo/com.test.UserServiceBo/providers 目录下写入自己的 URL 地址
  • 服务消费者(Consumer)启动时: 订阅 /dubbo/com.test.UserServiceBo/providers 目录下的提供者 URL 地址。并向 /dubbo/com.test.UserServiceBo/consumers 目录下写入自己的 URL 地址
  • 监控中心(Monitor)启动时: 订阅 /dubbo/com.test.UserServiceBo 目录下的所有提供者和消费者 URL 地址

2.2、ZooKeeper安装

  下载地址:http://archive.apache.org/dist/zookeeper/ 下载完成后 zookeeper-3.4.6.tar.gz的压缩文 件。

  安装步骤:

  • 第一步:需要有安装 JDK 的环境。
  • 第二步:把 zookeeper 的压缩包上传到 linux 系统。
  • 第三步:解压缩压缩包 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr 路径可以随便定义。
  • 第四步:进入 zookeeper-3.4.6 目录,创建 data 目录,用于数据的存储。
  • 第五步:进入 conf 目录 ,把 zoo_sample.cfg 改名为 zoo.cfg ,用于配置相关的数据信息,也是启动的配置文件。

2.3、启动 ZooKeeper

  进入 Zookeeperbin 目录,执行相应的文件即可。

  • 启动服务命令: ./zkServer.sh start
  • 停止服务命令: ./zkServer.sh stop
  • 查看服务状态: ./zkServer.sh status
  • 客户端连接: ./zkCli.sh

3、ZooKeeper快速入门

Dubbo 作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用。本小节就是要创建两个应用,一个作为服务的提供方,一个作为服务的消费方。通过Dubbo来实现服务消费方远程调用服务提供方的方法。

3.1、服务提供方

 创建一个简单的 web 项目作为服务的提供者(由maven进行管理)。

添加依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.beordie</groupId>
    <artifactId>dubbo-normal</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>5.0.5.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- dubbo相关 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.7</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.12.1.GA</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

        </plugins>
    </build>
</project>

配置 web.xml 文件

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>

    <display-name>Archetype Created Web Application</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

创建服务接口

package com.beordie.service;

/**
 * @Description
 * @Date 2021/9/2 16:08
 * @Created 30500
 */
public interface ServiceTest {
    public String get(String name);
}

创建服务实现类

package com.beordie.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.beordie.service.ServiceTest;

/**
 * @Description
 * @Date 2021/9/2 16:09
 * @Created 30500
 */
@Service
public class serviceImpl implements ServiceTest {
    @Override
    public String get(String name) {
        return "你好" + name;
    }
}

注意:服务实现类上使用的 Service 注解是 Dubbo 提供的,用于对外发布服务 。

创建web.xml 中指定的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->
    <dubbo:application name="provider"/>
    <!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址-->
    <dubbo:registry address="zookeeper://192.168.55.129:2181"/>
    <!-- 注册 协议和port -->
    <dubbo:protocol name="dubbo" port="20881"></dubbo:protocol>
    <!-- 扫描指定包,加入@Service注解的类会被发布为服务 -->
    <dubbo:annotation package="com.beordie.service.impl" />
</beans>

启动服务并在 ZooKeeper 中进行服务查看

启动完服务后通过打开客户端的命令打开 ZooKeeper 的客户端,然后通过指令 ls / 可查看到当前目录下的文件信息,会发现存在一个 Dubbo 的文件目录,继续对此目录进行查看即可发现相应的服务注册信息。

|

3.2、服务消费方

 同样需要创建一个项目来进行服务的拉取,引入的依赖和提供方的类似,这里就直接复制即可。

配置 web.xml 文件

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext-web.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

创建和提供方一致的服务接口

可以直接对接口进行复制,因为之后的服务抓取是通过动态代理的方式进行对象生成的,因此需要对应的接口对象。

编写Controlle对外暴露访问接口

package com.beordie.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.beordie.service.ServiceTest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Description
 * @Date 2021/9/2 17:05
 * @Created 30500
 */
@Controller
@RequestMapping("/demo")
public class TeController {

    // Dubbo 的远程对象注入
    @Reference
    private ServiceTest serviceTest;

    @RequestMapping("/hello")
    @ResponseBody
    public String getName(String name){
        //远程调用
        String result = serviceTest.get(name);
        System.out.println(result);
        return result;
    }

}

创建对应的启动配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->

    <dubbo:application name="dubbo-consumer"/>
    <!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址-->
    <dubbo:registry address="zookeeper://192.168.55.129:2181"/>
    <!-- 扫描的方式暴露接口 -->
    <dubbo:annotation package="com.beordie.controller"/>
</beans>

运行测试

设置完毕后启动项目,然后访问相应地址,即可抓取到正确的服务结果。

3.3、问题思考

  • 思考一:上面的Dubbo入门案例中我们是将HelloService接口从服务提供者工程 (dubbo_provider)复制到服务消费者工程(dubbo_consumer)中,这种做法是否合适?还有没有更好的方式?
  • :这种做法显然是不好的,同一个接口被复制了两份,不利于后期维护。更好的方式是单独创建一个 maven工程,将此接口创建在这个maven工程中。需要依赖此接口的工程只需要在自己工程的 pom.xml文件中引入maven坐标即可。
  • 思考二:在服务消费者工程(dubbo_consumer)中只是引用了接口,并没有提供实现类,Dubbo是如何做到远程调用的?
  • :Dubbo底层是基于代理技术为接口创建代理对象,远程调用是通过此代理对象完成的。可以通过开发工具的debug功能查看此代理对象的内部结构。另外,Dubbo实现网络传输底层是基于Netty框架完成的。
  • 思考三:上面的Dubbo入门案例中我们使用Zookeeper作为服务注册中心,服务提供者需要将自己的服务信息注册到Zookeeper,服务消费者需要从Zookeeper订阅自己所需要的服务,此时Zookeeper服务就变得非常重要了,那如何防止Zookeeper单点故障呢?
  • :Zookeeper其实是支持集群模式的,可以配置Zookeeper集群来达到Zookeeper服务的高可用,防 止出现单点故障。

4、 Dubbo管理控制台

 我们在开发时,需要知道 Zookeeper 注册中心都注册了哪些服务,有哪些消费者来消费这些服务。我们可以通过部署一个管理中心来实现。其实管理中心就是一个web应用,部署到tomcat即可。

4.1、安装

 只需要下载对应的 war 到本地的tomcat,然后启动服务即可。

需要修改WEB-INF下的dubbo.properties文件,注意dubbo.registry.address对应的值需要对应当前使用的Zookeeper的ip地址和端口号 dubbo.registry.address=zookeeper://192.168.55.129:2181 4.2、使用

  访问 http://localhost:8080/dubbo-admin-2.6.0/,输入用户名(root)和密码(root) 即可查看网站,相关的服务信息都可以在这里进行查看。

5、 Dubbo相关配置

5.1、包扫描

<dubbo:annotation package="com.beordie.service" />

服务提供者和服务消费者都需要配置,表示包扫描,作用是扫描指定包(包括子包)下的类,提供者扫描服务所在的包,消费者扫描控制器所在的包。

如果不使用包扫描,也可以通过如下配置的方式来发布服务:

<bean id="serviceImpl" class="com.beordie.service.impl.serviceImpl" />
<dubbo:service interface="com.beordie.service.Service" ref="serviceImpl" />

作为服务消费者,可以通过如下配置来引用服务:

<!-- 生成远程服务代理,可以和本地bean一样使用Service -->
<dubbo:reference id="serviceTest" interface="com.beordie.ServiceTest" />

  上面这种方式发布和引用服务,一个配置项(dubbo:service、dubbo:reference)只能发布或者引用一个服务,如果有多个服务,这种方式就比较繁琐了。推荐使用包扫描方式。

5.2、Dubbo 协议

 一般在服务提供者一方配置,可以指定使用的协议名称和端口号。

<dubbo:protocol name="dubbo" port="20880"/>
  • Dubbo支持的 协议 有:dubbormihessianhttpwebservicerestredis等。
  • 推荐使用的是dubbo协议。 dubbo 协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
  • 也可以在同一个工程中配置多个协议,不同服务可以使用不同的协议,例如:
<!-- 多协议配置 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name="rmi" port="1099" />
<!-- 使用dubbo协议暴露服务 -->
<dubbo:service interface="com.beordie.HelloService" ref="helloService"
protocol="dubbo" />
<!-- 使用rmi协议暴露服务 -->
<dubbo:service interface="com.beordie.DemoService" ref="demoService"
protocol="rmi" />

5.3、负载均衡

负载均衡(Load Balance):其实就是将请求分摊到多个操作单元上进行执行,从而共同完成工作任 务。

  • 在集群负载均衡时,Dubbo 提供了多种均衡策略(包括随机、轮询、最少活跃调用数、一致性 Hash),缺省为random随机调用。
  • 配置负载均衡策略,既可以在服务提供者一方配置,也可以在服务消费者一方配置,如下:
// 调用方配置
@Reference(check = false,loadbalance = "random")
// 服务方配置
@Service(loadbalance = "random")

5.4、 Dubbo无法发布被事务代理的服务

问题

因为提供的是服务层的接口,在涉及数据库的ACID 时就会添加事务管理,但是这样服务将不会在 。ZooKeeper 中进行注册,服务的消费端也就不会拿到对应的代理对象,也会报没有可用的服务提供者的错误。

原因

加入事务注解后,Spring会为此类基于 JDK动态代理技术 创建代理对象,创建的代理对象完整类名为com.sun.proxy.$Proxy35,导致Dubbo在进行包匹配时没有成功(因为我们在发布服务时扫描的包为com.beordie.service),所以后面真正发布服务的代码没有执行。

解决

使用 cglib 代理方式为Service类创建代理对象,并指定发布的接口 @Service(interfaceClass = HelloService.class)

到此这篇关于Java中dubbo+zookeeper微服务架构的文章就介绍到这了,更多相关dubbo zookeeper微服务架构内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java调用Zookeeper的实现步骤

    目录 watch机制 常用API JAVA调用 watch机制 Zookeeper watch是一种监听通知机制,可以随时监听一些数据的变化,从而实现数据的及时性. Zookeeper所有的读操作getData(), getChildren()和 exists()都可以设置监听(watch).[写操作则是不能设置监视点的.] Watch的三个关键点: 一次有效:当设置监视的数据发生改变时,该监视事件会被发送到客户端,并且该监听将会停止,除非重启注册监听: 顺序保证:网络延迟或者其他因素可能导致不

  • 在Java中操作Zookeeper的示例代码详解

    依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.0</version> </dependency> 连接到zkServer //连接字符串,zkServer的ip.port,如果是集群逗号分隔 String connectStr = "192.

  • Java之Zookeeper注册中心原理剖析

    RPC框架中有3个重要的角色: 注册中心 :保存所有服务的名字,服务提供者的IP列表,服务消费者的IP列表 服务提供者: 提供跨进程服务 服务消费者: 寻找到指定命名的服务并消费. Zookeeper用作注册中心 简单来讲,zookeeper可以充当一个服务注册表(Service Registry),让多个服务提供者形成一个集群,让服务消费者通过服务注册表获取具体的服务访问地址(IP+端口)去访问具体的服务提供者.如下图所示: 具体来说,zookeeper就是个分布式文件系统,每当一个服务提供者

  • 如何使用Java操作Zookeeper

    简介 Java操作Zookeeper有很多种方式,如zookeeper.zkclient.curator等等,下面介绍下使用zkclient的方式操作Zookeeper. Maven依赖: <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.11</version> </dependency&g

  • java连接zookeeper的3种方式小结

    目录 java连接zookeeper3种方式 1.使用zookeeper原始api 2.使用ZkClient客户端连接,这种连接比较简单 3.使用curator连接 Java集成zookeeper笔记 一.引入zookeeper-3.4.5.jar(原生zk包) 二.手写ZookeeperBase.java java连接zookeeper3种方式 1.使用zookeeper原始api public class Demo { private static String ip = "192.168.

  • java连接zookeeper实现zookeeper教程

    目录 java连接zookeeper实现zookeeper Java服务端连接Zookeeper,进行节点信息的获取,管理-整理成一个基本工具 添加依赖: <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.6</version> </dependency> 具体

  • java Zookeeper简述

    目录 Zookeeper 角色 Leader Follower Observer Zookeeper 工作原理(原子广播) Znode 四种形式的目录节点 ZooKeeper 安装和使用 常用命令 总结 Zookeeper 是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等.Zookeeper 提供了一个类似于 Linux 文件系统的树形结构(可认为是轻量级的内存文件系统,但只适合存少量信息,完全不适合存储大量文件或者大文件),同时提供了对于每个节点的监控通知机制. Zo

  • Java中dubbo+zookeeper微服务架构简介

    目录 1.Apache Dubbo概述 1.1.Dubbo简介 1.2.Dubbo的服务架构 2.服务注册中心 Zookeeper 2.1.ZooKeeper介绍 2.2.ZooKeeper安装 2.3.启动 ZooKeeper 3.ZooKeeper快速入门 3.1.服务提供方 3.2.服务消费方 3.3.问题思考 4. Dubbo管理控制台 4.1.安装 5. Dubbo相关配置 5.1.包扫描 5.2.Dubbo 协议 5.3.负载均衡 5.4. Dubbo无法发布被事务代理的服务 1.A

  • 解析SpringCloud简介与微服务架构

    1. 微服务架构 1.1 微服务架构理解 微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦.你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则.微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持. 概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等

  • 使用 Apache Dubbo 实现远程通信(微服务架构)

    目录 前言 1. Dubbo 基础知识 1.1 Dubbo 是什么 1.2 Dubbo 的架构图 1.3 Spring Cloud 与 Dubbo 的区别 1.4 Dubbo 的特点 1.5 Dubbo 的 6 种容错模式容错模式 1.7 主机绑定规则 2. 构建 Dubbo 服务提供方 2.1 构建服务接口模块 2.2 添加 pom.xml 依赖文件 2.3 修改 application.yml 配置文件 2.4 在主程序类上添加注解 2.5 实现 2.1 定义的接口 3. 构建 Dubbo

  • 详解Java 微服务架构

    一.传统的整体式架构 传统的整体式架构都是模块化的设计逻辑,如展示(Views).应用程序逻辑(Controller).业务逻辑(Service)和数据访问对象(Dao),程序在编写完成后被打包部署为一个具体的应用.如图所示: 系统的水平扩展 如果要对系统进行水平扩展,通常情况下,只需要增加服务器的数量,并将打包好的应用拷贝到不同的服务器,然后通过负载均衡器(Nginx)就可以轻松实现应用的水平扩展. 整体式架构的缺点 应用复杂度增加,更新.维护困难. 易造成系统资源浪费. 影响开发效率. 应用

  • 浅谈Redis在微服务架构中的几种应用场景

    本文介绍在SpringCloud中使用Redis作为Pub/Sub异步通信.缓存或主数据库和配置服务器的三种场景应用. Redis可以广泛用于微服务架构.它可能是您应用程序以多种不同方式利用的少数流行软件解决方案之一.根据要求,它可以充当主数据库,缓存或消息代理.虽然它也是一个键/值存储,但我们可以将它用作微服务体系结构中的配置服务器或发现服务器.虽然它通常被定义为内存中的数据结构,但我们也可以在持久模式下运行它. 这里我将向您展示一些使用Redis与Spring Boot和Spring Clo

  • SpringCloud微服务基础简介

    一.什么是Spring Cloud? SpringCloud 对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性.可靠.协调的应用程序. SpringCloud 是在SpringBoot的基础上构建的,使开发者可以轻松入门并快速提高工作效率. SpringCloud 提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件. SpringCloud 为开发人

  • 微服务架构之服务注册与发现实践示例详解

    目录 1 服务注册中心 4种注册中心技术对比 2 Spring Cloud 框架下实现 2.1 Spring Cloud Eureka 2.1.1 创建注册中心 2.1.2 创建客户端 2.2 Spring Cloud Consul 2.2.1 Consul 的优势 2.2.2 Consul的特性 2.2.3 安装Consul注册中心 2.2.4 创建服务提供者 3 总结 微服务系列前篇 详解微服务架构及其演进史 微服务全景架构全面瓦解 微服务架构拆分策略详解 微服务架构之服务注册与发现功能详解

  • 详解微服务架构及其演进史

    目录 1 传统单体系统介绍 1.1 单体系统的问题 1.2 单体系统的优点 1.3 单体服务到微服务的发展过程 2 关于微服务 2.1 单一职责 2.2 轻量级通信 2.3 独立性 2.4 进程隔离 2.5 混合技术栈和混合部署方式 2.6 简化治理 2.7 安全可靠,可维护. 3 微服务演进史 3.1 第一阶:简单服务通信模块 3.2 第二阶:原始通信时代 3.3 第三阶:TCP时代 3.4 第四阶:第一代微服务(Spring Cloud/RPC) 3.5 第五阶:第二代微服务 3.6 第六阶

  • 微服务架构之服务注册与发现功能详解

    目录 微服务的注册与发现 1.服务注册 2.服务发现 3.注册中心 4.现下的主流注册中心 4.1 Eureka 4.1.1 介绍 4.1.2 整体架构 4.1.3 接入Spring Cloud 4.2 ZooKeeper 4.2.1 介绍 4.2.2 整体架构 4.2.3 接入Dubbo生态 4.3 Consul 4.3.1 介绍 4.3.2 整体架构 4.3.3 生态对接 4.4 总结对比 详解微服务架构及其演进史 微服务全景架构全面瓦解 微服务架构拆分策略详解 微服务的注册与发现 我们前面

  • SpringCloud微服务架构实战之微服务治理功能的实现

    微服务治理 Spring Cloud 工具套件为微服务治理提供了全面的技术支持.这些治理工具主要包括服务的注册与发现.负载均衡管理.动态路由.服务降级和故障转移.链路跟踪.服务监控等.微服务治理的主要功能组件如下: 注册管理服务组件Eureka,提供服务注册和发现的功能. 负载均衡服务组件Ribbon,提供负载均衡调度管理的功能. 边缘代理服务组件Zuul,提供网关服务和动态路由的功能. 断路器组件Hystrix,提供容错机制.服务降级.故障转移等功能. 聚合服务事件流组件Turbine,可用来

随机推荐