「サーチ」Spring bootとノードjs-CPU起動性能比較
10189 ワード
中に入る。
最近node jsを勉強しています.関連検索では「Node jsはNon-Blocking I/O操作に特化しており、CPU操作に弱い」としている.
そこで,Spring BootとNode jsを用いてそれぞれCPU起動アプリケーションとI/O起動アプリケーションを作成し,比較する.
ちなみにNode jsはプログラミング言語なのでNest jsフレームワークを使用します.
Spring bootとNode js:2021年トレンド
Googleのトレンドは、Springbootに比べてNode jsの検索量が大きいことを示しています.Node jsは確かに現在のトレンドです.
Spring boot vs Node js : CPU Bound Application
CPUブートアプリケーションは、CPU密集型アプリケーションです.したがって,以下の論理を実行するサーバを実現する.
1から10000まで、数字に経験値を加算します.
サービスロジックでは、すべてのロジックが実行されます.
Spring boot
CPU Controller
@RestController
public class CpuController {
@Autowired
private CpuService cpuService;
@GetMapping("/")
public Long cpubound(){
return cpuService.getNumber();
}
}
CPU Service@Service
public class CpuService {
public Long getNumber(){
Long number = 0l;
for(int i = 0; i <= 10000; i++){
for(int j = 0; j<=i; j++){
number = number + j;
}
}
return number;
}
}
Node js(with Nest js)CPU Controller
@Controller('cpu')
export class CpuController {
constructor(private readonly cpuService: CpuService) {}
@Get()
getNumber(): number{
return this.cpuService.getNumber();
}
}
CPU Service@Injectable()
export class CpuService {
getNumber() : number{
var n : number = 0;
for(var i = 0; i <= 10000; i++){
for(var j = 0; j<=i; j++){
n = n + j;
}
}
return n;
}
}
Artillaryを使用した比較
比較環境は、個別のEC 2サーバに配備するのではなく、ローカル環境で比較されます.
Artillary Scriptは、ローカル環境なので成功するかどうかだけを見ています.
timeoutが設定されているため、CPUの処理性能は成功するかどうかを決定します.
config:
target: "http://localhost:8080"
phases:
- duration: 60
arrivalRate: 5
http:
# Responses have to be sent within 10 seconds, or an `ETIMEDOUT` error gets raised.
timeout: 100
scenarios:
- flow:
- get:
url: "/"
Spring boot reportNode js
n/a.結論
ローカル環境では、Node jsとSpring bootはそれぞれCPU Boundアプリケーションに戻り、予想とは異なり、Node jsはより良いパフォーマンスを示します.
TimeOutが100秒に設定されているため、Node jsは300個の要求のうち16個を100秒で処理し、Spring bootは100秒で300個の要求のうち1個が処理済みでないと判断することができる.
どうして?(私の原因推論)
->Spring boot(java)リクエストを受信するとスレッドが生成されます.つまり、リクエストごとにスレッドが生成されます!この場合、CPUタスクは処理されないが、要求が増加しつつスレッドが生成されるため、逆に性能が低下すると推測される.
したがって、CPU使用量の高いエンクロージャを単一のリクエストでテストすると、結果が異なる場合があります.
Artillaryでテストするのではなく、Start time-End timeで1~100000を得るのではなく、1~100000,000の数の和でテストすると違います.
Reference
この問題について(「サーチ」Spring bootとノードjs-CPU起動性能比較), 我々は、より多くの情報をここで見つけました https://velog.io/@carrykim/Research-Spring-boot-vs-node-js-CPU-Bound-성능-비교テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol