从零开始搭建高负载java架构(03)——gateway网关节点(基础篇)

用vscode创建spring boot应用,软件环境:

spring 3.0.6
alibaba cloud 2022.0.0.0-RC2

spring initial 时初始化引入插件:Gateway, Spring Boot Actuator

【注意】业务节点的服务名不能用下划线,否则会报"Whitelabel Error Page"错误

项目的pom.xml完整配置如下:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cloudservice</groupId>
    <artifactId>gateway_service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gateway_service</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
        <spring-cloud.version>2022.0.2</spring-cloud.version>
        <spring-alibaba-cloud.version>2022.0.0.0-RC2</spring-alibaba-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</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>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-alibaba-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>

删除项目的src/main/resources/application.protertity文件,新建文件:src/main/resources/bootstrap.yml用于启动时从nacos读取网关配置,bootstrap.yml文件内容如下:

spring:

  profiles:

    active: dev

  application:

    name: gateway_service

  cloud:

    nacos:

      # 动态服务发现服务

      discovery:

        # nacos服务地址, 正式时可以用域名或云的动态负载产品来实现多配置中心节点的动态负载

        server-addr: 192.168.10.111:8848

        # nacos认证信息

        username: nacos

        password: nacos

        # 如果没有指定命令空间,则默认命令空间为PUBLIC,如果指定需要写ID

        namespace:

      # 动态配置服务

      config:

        # nacos config服务器的地址

        server-addr: 192.168.10.111:8848

        # nacos认证信息

        username: nacos

        password: nacos

        file-extension: yml

        # 如果没有指定命令空间,则默认命令空间为PUBLIC,如果指定需要写ID

        namespace:

        # 如果没有配置Group,则默认值为DEFAULT_GROUP

        group: DEFAULT_GROUP

        # 从Nacos读取配置项的超时时间

        timeout: 5000

        # 长轮询超时时间

        config-long-poll-timeout: 10000

        # 轮询的重试时间

        config-retry-time: 2000

        # 长轮询最大重试次数

        max-retry: 3

        # 开启监听和自动刷新

        refresh-enabled: true

        # Nacos的扩展配置项,数字越大优先级越高

        extension-configs:

          - dataId: actuator.yml

            group: COMMON_GROUP

            # 动态刷新

            refresh: true

        #  - dataId: rabbitmq-config.yml

        #    group: EXT_GROUP

        #    refresh: true

网关的nacos主配置:
命名空间用默认的public
Data ID是:gateway_service-dev.yml
Group是:DEFAULT_GROUP
配置格式:YAML
配置内容如下:

management:

  # actuator的监控端口
  server:
    port: 7001
  endpoint:

    # actuator开启网关监控功能 
    gateway:
      enabled: true

# 网关服务端口
server:
  port: 6001
spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true
      routes:
        - id: order-service
          uri: lb://order-service
          predicates: 
            - Path=/order/**
          filters:
            # StripPrefix 数字表示要截断的路径的数量
            - StripPrefix=1

 启动类加上简单的OpenFeign的负载均衡和远程调用实现,下一章节才详细说明动态网关路由的实现和dubbo的集成,启动类代码如下:

package com.cloudservice.gateway_service;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class GatewayServiceApplication {

	public static void main(String[] args) {
		SpringApplication.run(GatewayServiceApplication.class, args);
	}

}

另外创建转发的测试业务节点:order-service, pom.xml和bootstrap.yml基本与网关相同,不加载gateway依赖就行,nacos配置只要配置:actuator的监控端口和web服务端口即可;同时加入默认访问路径的Controller实现HomeController, 代码如下:

package com.cloudservice.orderservice;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {
    @GetMapping("/")
    public String home() {
        return "home";
    }
}

src/main/resources/templates/home.html模板代码如下:

 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Order Home</title>
    </head>
    <body>
        <h1>Welcome to Order Home.</h1>
    </body>
</html>

分别启动网关gateway节点和order-service节点,在网页输入地址:

http://192.168.10.111:6001/order/

即可看到:

同时,可以通过actuator监控的地址,查看当前路由信息,访问地址:http://192.168.10.111:7001/actuator/gateway/routes

返回内容:

[
    {
        "predicate": "Paths: [/order-service/**], match trailing slash: true",
        "metadata": {
            "nacos.instanceId": null,
            "nacos.weight": "1.0",
            "nacos.cluster": "DEFAULT",
            "nacos.ephemeral": "true",
            "nacos.healthy": "true",
            "management.port": "7002",
            "preserved.register.source": "SPRING_CLOUD"
        },
        "route_id": "ReactiveCompositeDiscoveryClient_order-service",
        "filters": [
            "[[RewritePath /order-service/?(?<remaining>.*) = '/${remaining}'], order = 1]"
        ],
        "uri": "lb://order-service",
        "order": 0
    },
    {
        "predicate": "Paths: [/gateway_service/**], match trailing slash: true",
        "metadata": {
            "nacos.instanceId": null,
            "nacos.weight": "1.0",
            "nacos.cluster": "DEFAULT",
            "nacos.ephemeral": "true",
            "nacos.healthy": "true",
            "management.port": "7001",
            "preserved.register.source": "SPRING_CLOUD"
        },
        "route_id": "ReactiveCompositeDiscoveryClient_gateway_service",
        "filters": [
            "[[RewritePath /gateway_service/?(?<remaining>.*) = '/${remaining}'], order = 1]"
        ],
        "uri": "lb://gateway_service",
        "order": 0
    },
    {
        "predicate": "Paths: [/order/**], match trailing slash: true",
        "route_id": "order-service",
        "filters": [
            "[[StripPrefix parts = 1], order = 1]"
        ],
        "uri": "lb://order-service",
        "order": 0
    }
]

【注意】

1. 192.168.10.111是我自己本地架设的centos8的机器地址,按实际的网关所在机器地址配置 
2. 如果网页访问不了网关端口,确认网关等应用都启动的情况下,用telnet检查防火墙是否开放了端口,没有则用firewall-cmd命令开放相应的端口
3. actuator监控端口绝不能对外开放,否则会带来的安全风险
4. spring.cloud.nacos.discovery用于向nacos注册中心注册和发现服务,服务间只能发现和访问有相同的namespace和group的已注册的服务

[上一篇]从零开始搭建高负载java架构(02)——Nacos配置

[下一篇]从零开始搭建高负载java架构(04)——gateway网关节点(动态路由)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ALU(算术逻辑单元)是计算机处理器中负责执行算术和逻辑操作的核心组件。在设计RISC-V处理器的过程中,ALU的优化是至关重要的一步。 首先,我们可以通过增加多个ALU管道来提处理器的性能。这样,指令可以在多个ALU之间并行执行,从而加快处理速度。另外,还可以采用超标量技术,将多个ALU分组,并行执行不同的指令,进一步提处理器效率。 其次,为了提ALU的性能,我们可以通过增加更多的功能单元来支持多种操作。例如,我们可以添加浮点运算单元,以支持浮点运算指令。此外,还可以添加位移单元和乘法单元等,以执行各种操作。通过提供更多的功能单元,ALU可以在单个周期内执行更多的操作,提处理器的性能。 另外,在ALU的设计中,还需要考虑到电路延迟的问题。通过优化电路布线和信号传输路径,可以减少ALU操作所需的时间。此外,采用流水线技术也可以提处理器的吞吐量。通过将ALU操作划分为多个阶段,并行执行多条指令,可以大大提处理器的效率。 最后,为了优化ALU的设计,还需要考虑功耗的问题。通过采用低功耗电路设计和节能技术,可以有效降低ALU的功耗。此外,在处理器的设计过程中,还可以采用动态电压调整和时钟频率调整等技术,根据实际负载情况动态调整ALU的电压和频率,以达到节能的目的。 综上所述,通过增加ALU管道、添加更多功能单元、优化电路延迟、采用流水线技术和优化功耗等方法,可以对RISC-V处理器中的ALU进行优化,提处理器的性能和效率。这些优化措施能够使处理器更快、更强大,更适应各种复杂的计算任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好的兆头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值