230503 TIL #75 t3 x86 -> t4g arm64로 서버 변경

김춘복·2023년 5월 2일
0

TIL : Today I Learned

목록 보기
75/571

230503 Today I Learned

실전 프로젝트 5주차. 오늘은 서버 인스턴스의 아키텍쳐를 변경해서 적용해봤다.


t3 x86 -> t4g arm64로 서버 변경

  • 지금까지 사용했던 EC2 인스턴스는 x86기반의 t3.small을 사용하고 있었다.
    그런데 어제 서버에 대해서 알아보다가 t4g.small이 시간당 가격도 20% 정도 더 저렴하고, 성능도 20% 정도 더 좋다는 aws의 문서를 봤다. 가격도 낮고 성능도 더 좋다니 안 쓸 이유가 없어서 바로 도입을 시도해보았다.

  • 우선 t3는 intel의 x86 기반 아키텍쳐이고, t4g는 Graviton2 arm 기반 아키텍쳐라서 바로 적용이 안되었다.

  • 일단 t4g 인스턴스를 새로 하나 생성해서 Docker와 CodeDeploy를 받아 AMI를 arm용으로 새로 생성했다.

  • 수동으로 이미지를 빌드할 땐
    docker build --platform linux/arm64 -t 유저이름/이미지이름 .
    으로 플랫폼을 바꿔서 빌드가 가능했다.

  • CI/CD를 적용하는데서 어려움이 좀 있었는데 Github Actions가 amd64 x86 기반의 아키텍쳐라서 빌드를 할 때 추가 설정이 없으면 arm64로 빌드가 되질 않았다.
    알아보니 buildx와 QEMU 에뮬레이터가 필요했다.

  • docker buildx는 멀티 아키텍처 이미지를 빌드할 때 사용하는 도구로 여러 플랫폼에 대한 이미지를 동시에 빌드하고 푸시할 수 있다. 그리고 QEMU는 다른 아키텍처의 바이너리를 실행할 수 있도록 해주는 에뮬레이터로 여기서는 QEMU를 사용하여 arm64 이미지를 amd64 기반 시스템에서 빌드할 수 있게 해준다.

  • CI/CD yaml파일에서 Gradle로 빌드 후 Buildx와 QEMU 설치 단계를 넣었다.

	   # Gradle 빌드 후
       
      # Buildx 설치
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
		
      # QEMU 에뮬레이터 설치
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
	  
      # Docker 로그인
      - name: Login to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ env.DOCKER_USERNAME }}
          password: ${{ env.DOCKER_PASSWORD }}
      
      # Dockerhub에 빌드&푸시
      - name: Build and push Docker Image
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          platforms: linux/arm64
          tags: ${{ env.DOCKER_USERNAME }}/이미지 이름:latest
  • 맨 아래의 platforms를 linux/arm64,linux/amd64처럼 지정하면 멀티 플랫폼 이미지로 여러 환경에서 실행시킬 수도 있다.

  • linux/amd64: 대부분의 데스크톱과 서버에 사용되는 일반적인 x86-64 아키텍처에 대한 리눅스 이미지
    linux/arm64: ARM 기반 64비트 시스템에 대한 리눅스 이미지. Raspberry Pi 3 Model B+ 이후의 모델과 AWS Graviton 프로세서 기반 인스턴스에 사용된다.

  • 위의 과정으로 t3를 t4g로 변경하고 싱글 인스턴스기준 tps가 400 후반 대에서 500 후반대로 tps 100정도의 성능 향상이 있었다.

  • arm 아키텍쳐와 x86 아키텍쳐에 대한 이해도 필요할 것 같은데, 이 부분은 추후 TIL에 정리해보도록 하자.

profile
Backend Dev / Data Engineer

0개의 댓글