Comparaison des performances RPC et RESTful basées sur Dubbo

Commençons par la conclusion: l'efficacité des requêtes RPC est environ 1,6 fois supérieure à celle des requêtes HTTP et les performances sont nettement supérieures à celles des requêtes HTTP.
Analyse des raisons: RESTful est basé sur le protocole HTTP pour l'interaction. Le protocole HTTP contient une grande quantité d'informations d'en-tête de demande et d'en-tête de réponse. Dubbo est basé sur le protocole binaire personnalisé de dubbo pour la transmission. Le corps du message est relativement simple et les données de transmission sont beaucoup plus petites.
Comparaison des performances
Code de requête HTTP:

// 服务端基于spring boot搭建
// 服务端代码
@SpringBootApplication
@RestController
public class DemoApplication {
    
    

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

    @RequestMapping("/helloworld")
    public String helloworld() {
    
    
        return "hello world";
    }

}

// 客户端代码
import org.springframework.util.StopWatch;
import org.springframework.web.client.RestTemplate;

public class HelloworldTest {
    
    
    public static void main(String[] args) {
    
    
        RestTemplate restTemplate = new RestTemplate();
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
        for (int j = 0; j < 10; j++) {
    
    
            System.out.println("------------------");
            for (int i = 1; i <= 10000; i++) {
    
    
                restTemplate.getForObject("http://127.0.0.1/helloworld", String.class);
                if (i % 1000 == 0) {
    
    
                    stopWatch.stop();
                    System.out.println(stopWatch.getTotalTimeSeconds());
                    stopWatch = new StopWatch();
                    stopWatch.start();
                }
            }
        }
    }
}

Code RPC:

// dubbo-demo工程的代码,详情请看:https://github.com/apache/dubbo/tree/master/dubbo-demo
// 服务端
public class DemoServiceImpl implements DemoService {
    
    

    @Override
    public String sayHello(String name) {
    
    
        return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress();
    }
}

// 客户端
public class Consumer {
    
    

    public static void main(String[] args) {
    
    
        //Prevent to get IPV6 address,this way only work in debug mode
        //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not
        System.setProperty("java.net.preferIPv4Stack", "true");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{
    
    "META-INF/spring/dubbo-demo-consumer.xml"});
        context.start();
        DemoService demoService = (DemoService) context.getBean("demoService"); // get remote service proxy

        StopWatch stopWatch = new StopWatch();
        stopWatch.start();

        for (int j = 0; j < 10; j++) {
    
    
            System.out.println("-----------");
            for (int i = 1; i <= 10000; i++) {
    
    
                demoService.sayHello("world"); // call remote method
                if (i % 1000 == 0) {
    
    
                    stopWatch.stop();
                    System.out.println(stopWatch.getTotalTimeSeconds());
                    stopWatch = new StopWatch();
                    stopWatch.start();
                }
            }
        }
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/fomeiherz/article/details/101523412
conseillé
Classement