찾다
운영 및 유지보수리눅스 운영 및 유지 관리Alibaba Cloud ECS SDK를 사용하여 선점형 인스턴스를 합리적이고 빠르게 생성하고 관리하는 방법

이 기사의 내용은 Alibaba Cloud ECS SDK를 사용하여 선점형 인스턴스를 합리적이고 빠르게 생성하고 관리하는 방법에 대한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다. . 돕다.

선점형 인스턴스 관리

준비

작업을 수행하기 전에 필요 사항:

비즈니스 요구 사항을 충족할 수 있는 인스턴스 사양과 지역을 이해하세요.

Alibaba Cloud ECS SDK의 기본 지식과 호출 방법을 숙지하세요. 자세한 내용은 SDK 사용 지침을 참조하세요.

참고:

선점형 인스턴스 코드에는 ECS SDK 버전 4.2.0 이상이 필요합니다. Java POM 종속성을 예로 들어 pom 종속성을 수정하고 도입합니다.

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>3.2.8</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-ecs</artifactId>
  <version>4.2.0</version>
</dependency>

지역 및 사용 가능한 인스턴스 사양 쿼리#🎜 🎜##🎜 🎜#OpenAPI 설명 영역을 사용하여 선점형 인스턴스를 생성할 수 있는 지역과 사용 가능한 인스턴스 사양을 쿼리합니다. 샘플 코드는 아래와 같습니다.

OpenApiCaller.java
public class OpenApiCaller {
  IClientProfile profile;
  IAcsClient client;
  public OpenApiCaller() {
      profile = DefaultProfile.getProfile("cn-hangzhou", AKSUtil.accessKeyId, AKSUtil.accessKeySecret);
      client = new DefaultAcsClient(profile);
  }
  public  <T extends AcsResponse> T doAction(AcsRequest<T> var1) {
      try {
          return  client.getAcsResponse(var1);
      } catch (Throwable e) {
          e.printStackTrace();
          return null;
      }
  }
}
DescribeZonesSample.java
public class DescribeZonesSample {
  public static void main(String[] args) {
      OpenApiCaller caller = new OpenApiCaller();
      DescribeZonesRequest request = new DescribeZonesRequest();
      request.setRegionId("cn-zhangjiakou");//可以通过 DescribeRegionsRequest 获取每个地域的 RegionId
      request.setSpotStrategy("SpotWithPriceLimit");//对于查询是否可购买抢占式实例此项必填
      request.setInstanceChargeType("PostPaid");//后付费模式,抢占式实例必须是后付费模式
      DescribeZonesResponse response = caller.doAction(request);
      System.out.println(JSON.toJSONString(response));
  }
}

다음은 지역별 사용 가능한 인스턴스 사양, 디스크 유형, 네트워크 유형 및 기타 정보를 볼 수 있는 출력 결과입니다.

{
  "requestId": "388D6321-E587-470C-8CFA-8985E2963DAE",
  "zones": [
      {
          "localName": "华北 3 可用区 A",
          "zoneId": "cn-zhangjiakou-a",
          "availableDiskCategories": [
              "cloud_ssd",
              "cloud_efficiency"
          ],
          "availableInstanceTypes": [
              "ecs.e4.large",
              "ecs.n4.4xlarge",
              "ecs.sn2.medium",
              "ecs.i1.2xlarge",
              "ecs.se1.2xlarge",
              "ecs.n4.xlarge",
              "ecs.se1ne.2xlarge",
              "ecs.se1.large",
              "ecs.sn2.xlarge",
              "ecs.se1ne.xlarge",
              "ecs.xn4.small",
              "ecs.sn2ne.4xlarge",
              "ecs.se1ne.4xlarge",
              "ecs.sn1.medium",
              "ecs.n4.8xlarge",
              "ecs.mn4.large",
              "ecs.e4.2xlarge",
              "ecs.mn4.2xlarge",
              "ecs.mn4.8xlarge",
              "ecs.n4.2xlarge",
              "ecs.e4.xlarge",
              "ecs.sn2ne.large",
              "ecs.sn2ne.xlarge",
              "ecs.sn1ne.large",
              "ecs.n4.large",
              "ecs.sn1.3xlarge",
              "ecs.e4.4xlarge",
              "ecs.sn1ne.2xlarge",
              "ecs.e4.small",
              "ecs.i1.4xlarge",
              "ecs.se1.4xlarge",
              "ecs.sn2ne.2xlarge",
              "ecs.sn2.3xlarge",
              "ecs.i1.xlarge",
              "ecs.n4.small",
              "ecs.sn1ne.4xlarge",
              "ecs.mn4.4xlarge",
              "ecs.sn1ne.xlarge",
              "ecs.se1ne.large",
              "ecs.sn2.large",
              "ecs.i1-c5d1.4xlarge",
              "ecs.sn1.xlarge",
              "ecs.sn1.large",
              "ecs.mn4.small",
              "ecs.mn4.xlarge",
              "ecs.se1.xlarge"
          ],
          "availableResourceCreation": [
              "VSwitch",
              "IoOptimized",
              "Instance",
              "Disk"
          ],
          "availableResources": [
              {
                  "dataDiskCategories": [
                      "cloud_ssd",
                      "cloud_efficiency"
                  ],
                  "instanceGenerations": [
                      "ecs-3",
                      "ecs-2"
                  ],
                  "instanceTypeFamilies": [
                      "ecs.mn4",
                      "ecs.sn1",
                      "ecs.sn2",
                      "ecs.sn1ne",
                      "ecs.xn4",
                      "ecs.i1",
                      "ecs.se1",
                      "ecs.e4",
                      "ecs.n4",
                      "ecs.se1ne",
                      "ecs.sn2ne"
                  ],
                  "instanceTypes": [
                      "ecs.n4.4xlarge",
                      "ecs.sn2.medium",
                      "ecs.i1.2xlarge",
                      "ecs.se1.2xlarge",
                      "ecs.n4.xlarge",
                      "ecs.se1ne.2xlarge",
                      "ecs.se1.large",
                      "ecs.sn2.xlarge",
                      "ecs.se1ne.xlarge",
                      "ecs.xn4.small",
                      "ecs.sn2ne.4xlarge",
                      "ecs.se1ne.4xlarge",
                      "ecs.sn1.medium",
                      "ecs.n4.8xlarge",
                      "ecs.mn4.large",
                      "ecs.mn4.2xlarge",
                      "ecs.mn4.8xlarge",
                      "ecs.n4.2xlarge",
                      "ecs.sn2ne.large",
                      "ecs.sn2ne.xlarge",
                      "ecs.sn1ne.large",
                      "ecs.n4.large",
                      "ecs.sn1.3xlarge",
                      "ecs.sn1ne.2xlarge",
                      "ecs.e4.small",
                      "ecs.i1.4xlarge",
                      "ecs.se1.4xlarge",
                      "ecs.sn2ne.2xlarge",
                      "ecs.sn2.3xlarge",
                      "ecs.i1.xlarge",
                      "ecs.n4.small",
                      "ecs.sn1ne.4xlarge",
                      "ecs.mn4.4xlarge",
                      "ecs.sn1ne.xlarge",
                      "ecs.se1ne.large",
                      "ecs.sn2.large",
                      "ecs.i1-c5d1.4xlarge",
                      "ecs.sn1.xlarge",
                      "ecs.sn1.large",
                      "ecs.mn4.small",
                      "ecs.mn4.xlarge",
                      "ecs.se1.xlarge"
                  ],
                  "ioOptimized": true,
                  "networkTypes": [
                      "vpc"
                  ],
                  "systemDiskCategories": [
                      "cloud_ssd",
                      "cloud_efficiency"
                  ]
              }
          ],
          "availableVolumeCategories": [
              "san_ssd",
              "san_efficiency"
          ]
      }
  ]
}

선점형 인스턴스의 과거 가격 쿼리쿼리하려면 OpenAPI explainSpotPriceHistory 사용 선점형 인스턴스 지난 30일 동안의 인스턴스 가격 변동 데이터를 이용하여 가격 대비 성능이 가장 좋은 지역 및 사양 정보를 가져옵니다. 샘플 코드(DescribeSpotPriceHistorySample.java)는 다음과 같습니다.

public class DescribeSpotPriceHistorySample {
    public static void main(String[] args) {
        OpenApiCaller caller = new OpenApiCaller();
        List<DescribeSpotPriceHistoryResponse.SpotPriceType>
         result = new ArrayList<DescribeSpotPriceHistoryResponse.SpotPriceType>();
        int offset = 0;
        while (true) {
            DescribeSpotPriceHistoryRequest request = new DescribeSpotPriceHistoryRequest();
            request.setRegionId("cn-hangzhou");
            //可以通过 DescribeRegionsRequest 获取可购买的每个地域的 RegionId
            request.setZoneId("cn-hangzhou-b");//可用区必填
            request.setInstanceType("ecs.sn2.medium");//参考 DescribeZones 返回的实例类型,必填
            request.setNetworkType("vpc");//参考 DescribeZones 返回的网络类型,必填
//            request.setIoOptimized("optimized");
                        //是否 I/O 优化类型,DescribeZones 返回的 IoOptimized,选填
//            request.setStartTime("2017-09-20T08:45:08Z");//价格开始时间,选填,默认 3 天内数据
//            request.setEndTime("2017-09-28T08:45:08Z");//价格结束时间,选填
            request.setOffset(offset);
            DescribeSpotPriceHistoryResponse response = caller.doAction(request);
            if (response != null && response.getSpotPrices() != null) {
                result.addAll(response.getSpotPrices());
            }
            if (response.getNextOffset() == null || response.getNextOffset() == 0) {
                break;
            } else {
                offset = response.getNextOffset();
            }
        }
        if (!result.isEmpty()) {
            for (DescribeSpotPriceHistoryResponse.SpotPriceType spotPriceType : result) {
                System.out.println(spotPriceType.getTimestamp() + "---> 
                spotPrice:" + spotPriceType.getSpotPrice() + "---->
                originPrice:" + spotPriceType.getOriginPrice());
            }
            System.out.println(result.size());
        } else {
        }
    }
}

다음은 반환된 결과의 예입니다.

2017-09-26T06:28:55Z--->spotPrice:0.24---->originPrice:1.2
2017-09-26T14:00:00Z--->spotPrice:0.36---->originPrice:1.2
2017-09-26T15:00:00Z--->spotPrice:0.24---->originPrice:1.2
2017-09-27T14:00:00Z--->spotPrice:0.36---->originPrice:1.2
2017-09-27T15:00:00Z--->spotPrice:0.24---->originPrice:1.2
2017-09-28T14:00:00Z--->spotPrice:0.36---->originPrice:1.2
2017-09-28T15:00:00Z--->spotPrice:0.24---->originPrice:1.2
2017-09-29T06:28:55Z--->spotPrice:0.24---->originPrice:1.2
위 단계를 반복하면 가용 영역에서 이 사양의 리소스에 대한 가격 추세와 최근 가격을 확인할 수 있습니다.

참고:

평균 가격과 최고 가격을 사용하여 선점형 인스턴스 구매를 수락할 수 있는지 여부를 결정하거나 보다 합리적인 데이터 모델을 사용하여 다음을 수행할 수 있습니다. 과거 가격 데이터를 분석하고, 생성된 리소스의 사양과 가용성 영역을 언제든지 조정하여 최고의 비용 효율성을 달성합니다.

선점형 인스턴스 생성 선점형 인스턴스를 생성하기 전에 다음을 완료해야 합니다. # 🎜🎜#

선점형 인스턴스를 생성하기 위해 커스텀 이미지를 사용하는 경우 커스텀 이미지를 생성했어야 합니다.

콘솔에서 보안 그룹을 생성하거나 OpenAPI CreateSecurityGroup을 사용하여 보안 그룹을 생성하고 보안 그룹 ID(SecurityGroupId)를 가져옵니다.

VPC를 생성하고 콘솔에서 전환하거나 OpenAPI CreateVpc 및 CreateVSwitch를 사용하여 VPC를 생성하고 스위치 ID(VSwitchId)를 가져옵니다.

OpenAPI CreateInstance를 사용하여 선점형 인스턴스를 만듭니다. 샘플 코드(CreateInstaneSample.java)는 다음과 같습니다.

public class CreateInstaneSample {
    public static void main(String[] args) {
        OpenApiCaller caller = new OpenApiCaller();
        CreateInstanceRequest request = new CreateInstanceRequest();
        request.setRegionId("cn-hangzhou");//地域 ID
        request.setZoneId("cn-hangzhou-b"); //可用区ID
        request.setSecurityGroupId("sg-bp11nhf94ivkdxwb2gd4");//提前创建的安全组 ID
        request.setImageId("centos_7_03_64_20G_alibase_20170818.vhd");
        //建议选择您自己在该地域准备的自定义镜像
        request.setVSwitchId("vsw-bp164cyonthfudn9kj5br");//VPC 类型需要交换机 ID
        request.setInstanceType("ecs.sn2.medium"); //填入您询价后需要购买的规格
        request.setIoOptimized("optimized");//参考 DescirbeZones 返回参数
        request.setSystemDiskCategory("cloud_ssd");
        //参考 DescirbeZones 返回参数,多选一 cloud_ssd, cloud_efficiency, cloud
        request.setSystemDiskSize(40);
        request.setInstanceChargeType("PostPaid");//抢占式实例必须后付费
        request.setSpotStrategy("SpotWithPriceLimit");
        //SpotWithPriceLimit 出价模式,SpotAsPriceGo 不用出价,最高按量付费价格
        request.setSpotPriceLimit(0.25F);//SpotWithPriceLimit 
        出价模式生效,您能接受的最高价格,单位为元每小时,必须高于当前的市场成交价才能成功
        CreateInstanceResponse response = caller.doAction(request);
        System.out.println(response.getInstanceId());
    }
}

선점형 인스턴스 재활용

선점형 인스턴스가 가격 요인이나 시장 변화의 영향을 받을 수 있는 경우 수요와 공급으로 인해 재활용이 불가피해졌습니다. 이때 선점형 인스턴스의 인터럽트가 트리거됩니다. 해제하기 전에 선점형 인스턴스는 잠금 상태로 전환되어 인스턴스가 자동으로 재활용됨을 나타냅니다. 재활용 상태에 따라 인스턴스의 종료 로직을 ​​자동화할 수 있습니다.

현재 다음 방법 중 하나를 통해 선점형 인스턴스의 인터럽트 잠금 상태를 얻을 수 있습니다.

인스턴스 메타데이터를 통해 가져옵니다. 다음 명령을 실행합니다.

curl &#39;http://100.100.100.200/latest/meta-data/instance/spot/termination-time&#39;

반환 값이 비어 있으면 인스턴스를 계속 사용할 수 있습니다. 2015-01-05T18:02:00Z(UTC 시간)과 유사한 형식의 정보가 반환되면 이때 인스턴스가 해제된다는 의미입니다.

OpenAPI 설명 인스턴스를 사용하여 반환된 OperationLock을 기반으로 인스턴스가 재활용 보류 상태에 들어갔는지 확인합니다. 코드 샘플은 다음과 같습니다(DescribeInstancesSample.java).

public class DescribeInstancesSample {
  public static void main(String[] args) throws InterruptedException {
      OpenApiCaller caller = new OpenApiCaller();
      JSONArray allInstances = new JSONArray();
      allInstances.addAll(Arrays.asList("i-bp18hgfai8ekoqwo0y2n", "i-bp1ecbyds24ij63w146c"));
      while (!allInstances.isEmpty()) {
          DescribeInstancesRequest request = new DescribeInstancesRequest();
          request.setRegionId("cn-hangzhou");
          request.setInstanceIds(allInstances.toJSONString());//指定实例 ID,效率最高
          DescribeInstancesResponse response = caller.doAction(request);
          List<DescribeInstancesResponse.Instance> instanceList = response.getInstances();
          if (instanceList != null && !instanceList.isEmpty()) {
              for (DescribeInstancesResponse.Instance instance : instanceList) {
                  System.out.println
               ("result:instance:" + instance.getInstanceId() + ",az:" + instance.getZoneId());
                  if (instance.getOperationLocks() != null) {
            for (DescribeInstancesResponse.Instance.LockReason 
            lockReason : instance.getOperationLocks()) {
   System.out.println("instance:" + instance.getInstanceId() + "-->
   lockReason:" + lockReason.getLockReason() + ",vmStatus:" + instance.getStatus());
          if ("Recycling".equals(lockReason.getLockReason())) {
           //do your action
  System.out.println("spot instance will be recycled immediately, 
  instance id:" + instance.getInstanceId());
        allInstances.remove(instance.getInstanceId());
                          }
                      }
                  }
              }
              System.out.print("try describeInstances again later ...");
              Thread.sleep(2 * 60 * 1000);
          } else {
              break;
          }
      }
  }
}

재활용이 트리거될 때의 출력 결과는 다음과 같습니다.

instance:i-bp1ecbyds24ij63w146c-->lockReason:Recycling,vmStatus:Stopped
spot instance will be recycled immediately, instance id:i-bp1ecbyds24ij63w146c

위 내용은 Alibaba Cloud ECS SDK를 사용하여 선점형 인스턴스를 합리적이고 빠르게 생성하고 관리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Linux : 복구 모드에 들어가는 방법 (및 유지 보수)Linux : 복구 모드에 들어가는 방법 (및 유지 보수)Apr 18, 2025 am 12:05 AM

Linux 복구 모드를 입력하는 단계는 다음과 같습니다. 1. 시스템을 다시 시작하고 특정 키를 눌러 Grub 메뉴를 입력하십시오. 2. (복구 계)로 옵션을 선택하십시오. 3. FSCK 또는 루트와 같은 복구 모드 메뉴에서 작업을 선택하십시오. 복구 모드를 사용하면 단일 사용자 모드에서 시스템을 시작하고 파일 시스템 검사 및 수리를 수행하고 구성 파일 편집 및 기타 작업을 수행하여 시스템 문제를 해결할 수 있습니다.

Linux의 필수 구성 요소 : 초보자를위한 설명Linux의 필수 구성 요소 : 초보자를위한 설명Apr 17, 2025 am 12:08 AM

Linux의 핵심 구성 요소에는 커널, 파일 시스템, 쉘 및 공통 도구가 포함됩니다. 1. 커널은 하드웨어 리소스를 관리하고 기본 서비스를 제공합니다. 2. 파일 시스템은 데이터를 구성하고 저장합니다. 3. Shell은 사용자가 시스템과 상호 작용할 수있는 인터페이스입니다. 4. 일반적인 도구는 일상적인 작업을 완료하는 데 도움이됩니다.

Linux : 기본 구조를 살펴 봅니다Linux : 기본 구조를 살펴 봅니다Apr 16, 2025 am 12:01 AM

Linux의 기본 구조에는 커널, 파일 시스템 및 쉘이 포함됩니다. 1) 커널 관리 하드웨어 리소스 및 UNAME-R을 사용하여 버전을보십시오. 2) Ext4 파일 시스템은 큰 파일과 로그를 지원하며 mkfs.ext4를 사용하여 생성됩니다. 3) Shell은 Bash와 같은 명령 줄 상호 작용을 제공하고 LS-L을 사용하는 파일을 나열합니다.

Linux 운영 : 시스템 관리 및 유지 보수Linux 운영 : 시스템 관리 및 유지 보수Apr 15, 2025 am 12:10 AM

Linux 시스템 관리 및 유지 보수의 주요 단계에는 다음이 포함됩니다. 1) 파일 시스템 구조 및 사용자 관리와 같은 기본 지식을 마스터합니다. 2) 시스템 모니터링 및 리소스 관리를 수행하고 Top, HTOP 및 기타 도구를 사용하십시오. 3) 시스템 로그를 사용하여 문제를 해결하고 JournalCTL 및 기타 도구를 사용하십시오. 4) 자동 스크립트 및 작업 스케줄링을 작성하고 CRON 도구를 사용하십시오. 5) 보안 관리 및 보호 구현, iptables를 통해 방화벽을 구성합니다. 6) 성능 최적화 및 모범 사례를 수행하고 커널 매개 변수를 조정하며 좋은 습관을 개발하십시오.

Linux의 유지 관리 모드 이해 : 필수 요소Linux의 유지 관리 모드 이해 : 필수 요소Apr 14, 2025 am 12:04 AM

시작시 init =/bin/bash 또는 단일 매개 변수를 추가하여 Linux 유지 관리 모드가 입력됩니다. 1. 유지 보수 모드를 입력하십시오 : 그루브 메뉴를 편집하고 시작 매개 변수를 추가하십시오. 2. 파일 시스템을 다시 마운트하여 읽고 쓰기 모드 : MOUNT-OREMOUNT, RW/. 3. 파일 시스템 수리 : FSCK/DEV/SDA1과 같은 FSCK 명령을 사용하십시오. 4. 데이터 손실을 피하기 위해 데이터를 백업하고주의해서 작동합니다.

Debian이 Hadoop 데이터 처리 속도를 향상시키는 방법Debian이 Hadoop 데이터 처리 속도를 향상시키는 방법Apr 13, 2025 am 11:54 AM

이 기사에서는 데비안 시스템에서 Hadoop 데이터 처리 효율성을 향상시키는 방법에 대해 설명합니다. 최적화 전략에는 하드웨어 업그레이드, 운영 체제 매개 변수 조정, Hadoop 구성 수정 및 효율적인 알고리즘 및 도구 사용이 포함됩니다. 1. 하드웨어 리소스 강화는 모든 노드에 일관된 하드웨어 구성, 특히 CPU, 메모리 및 네트워크 장비 성능에주의를 기울일 수 있도록합니다. 전반적인 처리 속도를 향상시키기 위해서는 고성능 하드웨어 구성 요소를 선택하는 것이 필수적입니다. 2. 운영 체제 조정 파일 설명 자 및 네트워크 연결 : /etc/security/limits.conf 파일을 수정하여 파일 설명자의 상한을 늘리고 동시에 시스템에 의해 열 수 있습니다. JVM 매개 변수 조정 : Hadoop-env.sh 파일에서 조정

데비안 syslog를 배우는 방법데비안 syslog를 배우는 방법Apr 13, 2025 am 11:51 AM

이 안내서는 데비안 시스템에서 syslog를 사용하는 방법을 배우도록 안내합니다. Syslog는 로깅 시스템 및 응용 프로그램 로그 메시지를위한 Linux 시스템의 핵심 서비스입니다. 관리자가 시스템 활동을 모니터링하고 분석하여 문제를 신속하게 식별하고 해결하는 데 도움이됩니다. 1. syslog에 대한 기본 지식 syslog의 핵심 기능에는 다음이 포함됩니다. 로그 메시지 중앙 수집 및 관리; 다중 로그 출력 형식 및 대상 위치 (예 : 파일 또는 네트워크) 지원; 실시간 로그보기 및 필터링 기능 제공. 2. Syslog 설치 및 구성 (RSYSLOG 사용) Debian 시스템은 기본적으로 RSYSLOG를 사용합니다. 다음 명령으로 설치할 수 있습니다 : sudoaptupdatesud

데비안에서 Hadoop 버전을 선택하는 방법데비안에서 Hadoop 버전을 선택하는 방법Apr 13, 2025 am 11:48 AM

데비안 시스템에 적합한 Hadoop 버전을 선택할 때는 다음과 같은 주요 요소를 고려해야합니다. 1. 안정성 및 장기 지원 : 안정성과 보안을 추구하는 사용자의 경우 Debian11 (Bullseye)과 같은 데비안 안정 버전을 선택하는 것이 좋습니다. 이 버전은 완전히 테스트되었으며 최대 5 년의 지원주기가있어 시스템의 안정적인 작동을 보장 할 수 있습니다. 2. 패키지 업데이트 속도 : 최신 Hadoop 기능 및 기능을 사용해야하는 경우 Debian의 불안정한 버전 (SID)을 고려할 수 있습니다. 그러나 불안정한 버전에는 호환성 문제와 안정성 위험이있을 수 있습니다. 3. 커뮤니티 지원 및 자원 : 데비안은 풍부한 문서를 제공하고

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구