Docker

  • 컨테이너 기반의 오픈소스 가상화 플랫폼
  • 컨테이너로 추상화하고 동일한 인터페이스를 제공, 프로그램 배포 및 관리를 단순화

배포의 변화

  1. 전통적인 시대 : 물리서버 실행
  2. 가상화된 시대 : 단일서버에 여러 VM을 실행, APP을 격리하여 관리
  3. 컨테이너 시대 : 격리속성을 완화, APP간에 OS를 공유한다. 가상화에 비해 가볍다고 여겨진다. 컨테이너 간 자체 파일시스템, CPU, 메모리, 프로세스 공간을 가짐

오케스트레이션 도구

오케스트레이션(orchestration) > 관현악의 편곡, 통합, 결지, 편성 조직화 등

설정 관리 조정을 의미. 즉 배포 테스크의 자동화. 복잡성의 오류를 줄인다.

대표 오케스트레이션 : 쿠버네티스(사실상표준), 메소스피어, 도커스웜 간단히 말해 APP 서비스의 자동화된 배포를 관리해준다.

컨테이너 오케스트레이션

여러개의 서버에 컨테이너를 배포, 운영하며 서비스간 연결을 쉽게 해준다. 서버를 군으로 묶어 자동으로 선택, APP을 배포하고, 부하가 생기면 컨테이너를 늘리고 , 장애가 생기면 정상동작중인 서버에 다시 띄워 장애를 방지한다.

  • 대표적 기능
  1. 컨테이너 자동배치 및 복제
  2. 컨테이너 그룹에 대한 로드밸런싱
  3. 컨테이너 장애복구, 클러스터 외부서비스 노출
  4. 컨테이너 추가/제거
  5. 컨테이너간 인터페이스를 통한 연결 및 네트워크 포트 제어

쿠버네티스 kubernates > k8s/kube

  • 컨테이너를 쉽고 빠르게 배포/확장 관리를 자동화 해주는 구글에서 2014년 공개한 오픈소스 플랫폼
  • 명칭은 키잡이, 파일럿을 뜻하는 그리스어 에서 유래했다고 함. 기원을 찾아보면 다들 의문인듯.

Ingress (입장)

  • 다양한 웹어플리케이션을 하나의 로드밸런서로 서비스하기 위해 Ingress 기능을 제공
  • 기존 apache/nginx 등 웹서버 역할을 대신하는 프록시 서버

Remote debug

JPDA (Java Platform Debugger Architecture)

원격 톰캣 디버그를 가능하게 해준다. docker 를 설치하여 이미지를 빌드, 실행하여도 로그를 보려면 해당 컨테이너에 접속해야 하는데, 이를 편리하게 디버그 하기 위한 방법으로 활용된다.

private int getFromIdx(int idx) {
return idx * IN_QRY_LIMIT_SIZE;
}

private int getToIdx(int idx, int originSize) {
int fromIdx = getFromIdx(idx);
int toIdx = fromIdx + IN_QRY_LIMIT_SIZE;
if (toIdx > originSize) {
toIdx = originSize;
}
return toIdx;
}



    private static List<String> getFilePathListByImage(String url, String localPath, String extension) throws IOException {
        BufferedImage bi = ImageIO.read(url);
        int totalHeight = bi.getHeight();
        int splitSize = (totalHeight / SPLIT_RULE_HEIGHT) + 1;
        List<StringsplitFileNmList = new ArrayList<>();
        for (int i = 0; i < splitSize; i++) {
            String splitFileNm = "fileName_" + i;
            File outputFile = new File(localPath + splitFileNm + "." + extension);
            int ySize = SPLIT_RULE_HEIGHT * i;

            int height = SPLIT_RULE_HEIGHT;
            if ((i + 1) == splitSize) {
                height = totalHeight % SPLIT_RULE_HEIGHT;
            }
            if (height == 0) {
                continue;
            }

            BufferedImage subImage = bi.getSubimage(0, ySize, bi.getWidth(), height);

            ImageIO.write(subImage, extension, outputFile);
            splitFileNmList.add(splitFileNm);
        }
        return splitFileNmList;
    }


'java' 카테고리의 다른 글

bit AND 연산 구현  (0) 2021.08.19
from idx to idx 설정  (0) 2020.04.07
확률을 퍼센트로 줘서 랜덤하게 뽑기  (1) 2018.01.18
Intellij Custom VM Option 넣기  (0) 2017.06.16
JUnit Test property 주입 하기  (0) 2017.04.26

+ Recent posts