Linux操作系统中dubbo

1、简介

dubbo框架是做微服务通信的,是由阿里巴巴开发,后捐赠给阿帕奇基金会。

2、与OpenFeign的区别

dubbo是采用RPC协议实现微服务通信,OpenFeign是采用Http请求的方式实现的。

OpenFeign 最简单的,就是Spring公司开发的,整合SpringBoot的时候,代码简洁。

3、应用

要创建三个工程,api工程,消费者工程(consumer)和提供者工程(provider),api工程是用于另外两个工程引用的。

消费者工程和提供者工程 是要有共同的引用的,比如说:在传递请求的时候,要用user对象,那这个user对象就可以定义在api工程里,这样两个工程就都可以用了。还有Service层接口,也是要放到api工程里的。

0、启动nacos和redis

1、准备工程

创建三个项目

2、编写api工程

【1.添加依赖】

 <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
        <jwt.version>0.7.0</jwt.version>
        <fastjson.version>1.2.60</fastjson.version>
        <spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>
    <dependencies>
​
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>compile</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-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
​
    <!--2.添加当前项目所依赖的插件: -->
    <build>
        <plugins>
            <!--1.添加tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                </configuration>
            </plugin>
            <!--2.添加Spring Boot 的打包插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.10.RELEASE</version>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

【2.添加实体类Score】

package com.jr.entry;
​
import lombok.Data;
import java.io.Serializable;
​
@Data
public class Score implements Serializable {
    private String name;
    private Double score;
}

注意:实体类Score一定要实现Serializable接口,否则会报错

【3.添加ScoreService接口】

package com.jr.service;
​
import com.jr.entry.Score;
import java.util.List;
​
public interface ScoreService {
​
    public List<Score> getinfo();
​
}

【4.添加工具类Result】

package com.jr.util;
​
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
​
@Data
public class Result {
​
    private Integer code;
    private String message;
    private Map<String, Object> map = new HashMap<>();
​
    private Result() {
    }
​
    public static Result ok() {
        Result r = new Result();
        r.setCode(ResultCode.SUCCESS.getCode());
        r.setMessage(ResultCode.SUCCESS.getMessage());
        return r;
    }
​
    public static Result error() {
        Result r = new Result();
        r.setCode(ResultCode.ERROR.getCode());
        r.setMessage(ResultCode.ERROR.getMessage());
        return r;
    }
​
    public Result put(String key, Object value) {
        map.put(key, value);
        return this;
    }
​
    public Object get(String key) {
        return map.get(key);
    }
}

【5.添加枚举ResultCode】

package com.jr.util;
​
public enum ResultCode {
    SUCCESS(0, "请求成功"),
    ERROR(1, "请求失败"),
    ;
​
    private int code;
    private String message;
​
    ResultCode(int code, String message) {
        this.code = code;
        this.message = message;
    }
​
    public int getCode() {
        return code;
    }
​
    public String getMessage() {
        return message;
    }
}

3、准备Consumer工程

【1.添加依赖】

    
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.7.RELEASE</version>
    </parent>
​
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
        <jwt.version>0.7.0</jwt.version>
        <fastjson.version>1.2.60</fastjson.version>
        <spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--引入api工程依赖 -->
        <dependency>
            <groupId>com.jr</groupId>
            <artifactId>dubboapi</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
       <!--引入dubbo依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </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-cloud-alibaba.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>
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>

【2.创建SessionConfig配置类】

package com.jr.config;
​
@Configuration
public class SessionConfig {
​
    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
        serializer.setCookieName("JSESSIONID");
        serializer.setCookiePath("/");
        serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
        return serializer;
    }
​
    @Bean
    public RedisSerializer<Object> redisSerializer() {
        return new GenericJackson2JsonRedisSerializer();
    }
}

【3.创建控制器UserController】

package com.jr.controller;
​
@RestController
@RequestMapping("/user")
public class UserController {
​
    @Autowired
    private UserService userService;
​
    @GetMapping
    public Result getinfo(){
        User user = userService.getinfo();
        return Result.ok().put("data",user);
    }
}

【4.创建实体类User】

package com.jr.entry;
​
@Component
@Data
public class User {
​
    private String id;
    private String name;
    private String password;
    private List<Score> scoreList;
}

【5.创建UserService接口】

package com.jr.service;
​
public interface UserService {
​
    public User getinfo();
}

【6.创建UserServiceImpl实现类】

package com.jr.service.impl;
​
@Service
public class UserServiceImpl implements UserService {
​
    @Reference
    private ScoreService scoreService;
​
    @Override
    public User getinfo() {
        User user=new User();
        user.setId("111");
        user.setName("zhangsan");
        user.setPassword("zs123");
        List<Score> list=scoreService.getinfo();
        user.setScoreList(list);
        return user;
    }
}

注意:@Service主键要用dubbo下面的,不能用Spring的注解。

【7.创建启动类】

package com.jr;
​
@SpringBootApplication
@EnableRedisHttpSession
public class SpringBootMain {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMain.class,args);
    }
}

【8.编写application.properties配置文件】

spring.application.name=dubbocon

【9.编写application.yml配置文件】

server:
  port: 100
​
spring:
  session:
    store-type: redis
​
dubbo:
  registry:
    address: nacos://192.168.43.8:8848
  cloud:
    subscribed-services: dubbopro   #是p工程的服务名
  consumer:
    check: false

【10.编写bootstrap.yml配置文件】

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.43.8:8848
      config:
        server-addr: 192.168.43.8:8848
        file-extension: yaml
        namespace: d2a5ce42-8836-4dc4-89e0-9f8620b82327
        shared-configs:
          - data-id: dz14redissession.yaml
            group: DEFAULT_GROUP
    inetutils:
      preferred-networks: 192.168.56
​

4、准备Provider工程

【1.添加依赖】同上

【2.创建SessionConfig配置类】同上

【3.创建ScoreServiceImpl接口实现类】

package com.jr.service.impl;
​
@Service
public class ScoreServiceImpl implements ScoreService {
    @Override
    public List<Score> getinfo() {
        List<Score> list=new ArrayList<>();
        for(int i=0;i<3;i++){
            Score score=new Score();
            score.setName("admin");
            score.setScore(Math.random()*100);
            list.add(score);
        }
        return list;
    }
}

【4.创建启动类】同上

【5.编写application.properties配置文件】

spring.application.name=dubbopro

【6.编写application.yml配置文件】

server:
  port: 200
​
spring:
  session:
    store-type: redis
​
dubbo:
  scan:
    base-packages: com.jr.service  #指定把哪一个包下面的Servlet交给dubbo去管理。
  protocol:
    name: dubbo
    port: -1
  registry:
    address: nacos://192.168.43.8:8848
  cloud:
    subscribed-services: ""

【7.编写bootstrap.yml配置文件】同上

注意:

启动时,要先启动consumer工程,后启动provider工程,避免出现启动失败的错误。

内容概要:本文详细比较了GPU、TPU专用AI芯片在大模型推理优化方面的性能、成本及适用场景。GPU以其强大的并行计算能力和高带宽显存,适用于多种类型的神经网络模型和计算任务,尤其适合快速原型开发和边缘计算设备。TPU专为机器学习设计,擅长处理大规模矩阵运算密集型任务,如Transformer模型的推理,具有高吞吐量和低延迟特性,适用于自然语言处理和大规模数据中心的推理任务。专用AI芯片通过高度定制化架构,针对特定神经网络模型进行优化,如卷积神经网络(CNN),在处理特定任务时表现出色,同时具备低功耗和高能效比的优势,适用于边缘计算设备。文章还介绍了各自的优化工具和框架,如CUDA、TensorRT、TPU编译器等,并从硬件成本、运营成本和开发成本三个角度进行了成本对比。 适合人群:从事人工智能、深度学习领域的研究人员和技术人员,尤其是对大模型推理优化感兴趣的读者。 使用场景及目标:①帮助读者理解GPU、TPU和专用AI芯片在大模型推理中的优缺点;②为选择适合的硬件平台提供参考依据,以实现最优的推理性能和成本效益;③介绍各种优化工具和框架,帮助开发者高效部署和优化模型。 其他说明:本文不仅涵盖了硬件架构特性,还深入探讨了优化技术和应用场景,旨在为读者提供全面的技术参考。在选择硬件平台时,需综合考虑具体任务需求、预算限制及开发资源等因素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值