[PYTHON] Eine Überprüfung der AWS SDK-Leistung nach Sprache

Hintergrund

Über Tags

AWS kann Tags zu Ressourcen hinzufügen. Tags in AWS werden für das Ressourcenmanagement und die [Kostenzuordnung] verwendet (http://blog.serverworks.co.jp/tech/2019/07/29/cost-alloc-tags-basic/). Das Grant-Design ist ein sehr wichtiger Punkt im Betrieb von AWS. Insbesondere in einer großen Umgebung oder Organisation ist die Anzahl der an Ressourcen angehängten Tags in der Regel sehr groß.

AWS SDK für Ruby Performance

Wie in diesem Artikel erwähnt, erhält das AWS SDK für Ruby viele Ressourcen gleichzeitig, wenn viele Tags an die Ressourcen angehängt werden. Kann viel Zeit in Anspruch nehmen. Das folgende Diagramm vergleicht anhand des Beispiels EBS, wie lange es gedauert hat, die Ressourcenerfassung (description_volumes) mit und ohne Tagging abzuschließen (das folgende Bild ist ein Nachdruck des obigen Artikels). Wenn Sie eine große Anzahl von Tags haben (in diesem Beispiel 20), können Sie feststellen, dass der Abschluss der Ressourcenerfassung sehr lange dauert.

ruby_describe.png

Dieser Artikel schätzte, dass es der Teil war, der die Zeit brauchte, um das XML der API-Antwort auf das Ruby-Objekt zu analysieren. ..

Frage

Ich habe mich gefragt, ob die oben genannten Leistungsänderungen in anderen Sprachen des AWS SDK auftreten würden, und habe mich daher entschlossen, dies zu überprüfen.

Überprüfung

Dieses Mal habe ich zusätzlich zu Ruby die Leistung mit den AWS SDKs von Python, PHP, Go und Node.js gemessen. Das Ziel sind ** 1000 EBSs mit 20 Tags **. Der Client ist LightSail (Ubuntu 18.04) in der Region Tokio. Es wird dreimal in jeder Sprache durchgeführt und der Durchschnittswert ermittelt. Die Version jeder Sprache und jedes SDK wird später beschrieben.

Prüfergebnis

Die Verifizierungsergebnisse waren wie folgt. Anscheinend hat ** nur das Ruby SDK ** viel Zeit in Anspruch genommen. Für andere Sprachen scheint es vorerst keine Bedenken zu geben.

秒数.png

Fazit / Eindrücke

Es scheint, dass nur das AWS SDK für Ruby viel Zeit für die Verarbeitung mit einer solchen Konfiguration benötigt. Was das Ruby SDK betrifft, kann die Leistung durch eine Verbesserung der intern verwendeten Bibliothek verbessert werden, daher würde ich es gerne in Zukunft erwarten.

Versions- und Bestätigungscode für jede Sprache und jedes SDK

Sprache SDK
Ruby 2.6.3 3.89.1
PHP 7.2 3.133.34
Python 3.7.1 1.2
Node.js 12.14.0 2.638.0
Go 1.13.4 1.29.22

Ruby

require 'aws-sdk-ec2'

Aws.config.update(credentials: Aws::Credentials.new('',''))
ec2_client = Aws::EC2::Client.new(region: 'ap-northeast-1')

start_time = Time.now

ec2_client.describe_volumes

end_time = Time.now
colapsed_time = end_time - start_time
puts colapsed_time

PHP

<?php
require 'vendor/autoload.php';

use Aws\Ec2\Ec2Client;

$ec2Client = new Aws\Ec2\Ec2Client([
  'region' => 'ap-northeast-1',
  'version' => '2016-11-15',
]);

$time_start = microtime(true);

$result = $ec2Client->describeVolumes();

$time = microtime(true) - $time_start;
echo "{$time}Sekunden";

Python

import boto3
import time

ec2 = boto3.client('ec2')
start = time.time()

ec2.describe_volumes()

elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time))

Node.js

var AWS = require('aws-sdk');

AWS.config.update({region: 'ap-northeast-1'});

var ec2 = new AWS.EC2();
const startTime = Date.now(); //Startzeit
ec2.describeVolumes({}, function (err, data) {
  console.log(Date.now() - startTime);
});

Go

package main

import (
	"fmt"
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/ec2"
)

func main() {
    sess, _ := session.NewSession(&aws.Config{
        Region: aws.String("ap-northeast-1")},
    )

    svc := ec2.New(sess)
    input := &ec2.DescribeVolumesInput{}

    start := time.Now()
    svc.DescribeVolumes(input)
    end := time.Now()
    fmt.Printf("%f Sekunden\n", (end.Sub(start)).Seconds())
}

Recommended Posts

Eine Überprüfung der AWS SDK-Leistung nach Sprache
Leistungsüberprüfung der Datenvorverarbeitung in der Verarbeitung natürlicher Sprache
Vorschlag eines neuen Sprachschild-Sprachrahmens
Zusammenfassung der Hosting-Seiten der Bibliothek nach Sprache
Eine Menge von ganzen Zahlen, die ax + by = 1 erfüllen.
Memorandum der Extraktion durch Python BS4-Anfrage
Holen Sie sich Qiitas "Gefällt mir" -Liste durch Schaben
Verbesserung der Leistungsmetrik durch 2-Stufen-Lernmodell
Von Boto3 verwendete Anmeldeinformationen (AWS SDK für Python)
Geschwindigkeitsvergleich jeder Sprache nach der Monte-Carlo-Methode
Gruppieren Sie nach aufeinanderfolgenden Elementen einer Liste in Python