인생은 고통의 연속

HCI(hyper converged infrastructure)란? - 인프라 아키텍처 인턴 경험 본문

아키텍쳐/HCI

HCI(hyper converged infrastructure)란? - 인프라 아키텍처 인턴 경험

gnidoc 2018. 12. 6. 13:23
    반응형

    최근 XX기업 인프라 아키텍처 팀에서 2주간 인턴을 했다.(공채 전형 중 일부)

    같은 팀에서 7명이서 인턴을 했는데 3명은 MSA, 나를 포함한 4명은 HCI에 대한 것을 공부했다.

    좀 더 일찍 인턴을 했다면 진행 중인 과제가 서버리스나 블록체인라서 코딩도 해보고 재밌게 했을텐데

    진짜 인프라관련 기술/제품에 대한 조사라서 2주간 리서치하다가 끝난듯하다.


    그마저도 1주차는 사전교육이나 행사로 반쯤 날아가고
    2주차는 최종발표(면접) 준비하느라 실질적으론 한 3일 투자한거 같다.


    최종 목표는 HCI 기술의 이해와 제품 간(뉴타닉스, HP, DellEMC, Cisco)의 비교를 하는게 목표인데

    사다리타기를 해서 난 HP 제품을 조사하는 걸 맡았다.


    알고보니 뽑기 운이 더럽게 없던거였다.


    생각보다 내용 정리가 잘된거 같아서 정리해본다 ㅎ



    HCI란?

    먼저 HCI란 hyper converged infrastructure(하이퍼 컨버지드 인프라스트럭쳐)로 어플라이언스(appliance) 장비이다.

    • 어플라이언스란 별도의 OS/Application을 설치하지 않고 전원만 연결했을때 사용가능한 장비를 뜻하는데, HCI도 이와같은 장비이다.

    opennaru

    기존에는 위의 그림처럼 서버와 스토리지가 별개의 묶음이었다. 하지만 HCI는 서버와 스토리지를 하나로 묶음으로써 Scale In/Out(수평 스케일링)할 수 있고 이렇게 구축된 거대한 클러스터에 하이퍼바이저를 통한 VM을 올려서 가상화 서버나 VDI(virtual desktop infrastructure) 등에 사용가능하다. 즉 요즘 사용되는 AWS, Azure, GCP와 같은 클라우드 환경을 On-Premise로 단순히 전원만 연결하면 구성할 수 있다는 것이다.


    HCI 아키텍처

    위의 그림은 HCI의 대략적인 아키텍처인데 하나의 물리서버에 디스크를 물려서 물리적인 구성을 하고
    이런 물리서버를 여러개 묶어서 하나의 큰 클러스터를 구성할 수 있다.
    이렇게 묶인 클러스터에서 하이퍼 바이저를 통해서 VM을 생성해서 VDI나 가상서버를 제공할 수 있다.
    즉 물리서버 하나에서 여러개의 VM을 생성할 수 있고
    여러 물리서버에 걸쳐서 하나의 VM으로 동작할 수 있는 것이다.


    • Scale Up/Down은 기기 cpu나 메모리를 같은 스펙을 직접 변경하는 수직형 스케일링이고 In/Out 기기를 병렬적으로 추가는 수평형 스케일링이다.

    위키백과-하이퍼바이저

    • 하이퍼바이저(Hypervisor)?
      호스트 컴퓨터에서 다수의 OS를 동시에 실행하기 위한 논리적 플랫폼.(VM, Docker를 생각했다면 맞다)
      타입1/2가 있는데 1은 베어메탈(bare metal)이라고 하여 하이퍼바이저가 하드웨어에서 직접 실행되는 것이고
      2는 하이퍼바이저가 OS에서 실행된다. 당연히 1인 베어메탈이 더 빠르다.
      대표적으로 오픈소스인 Docker, VMware의 vSphere, MicroSoft의 Hyper-V 제품이 있다.


    전통적인 방식과 하이퍼 컨버지드의 차이

    webwerks

    예전에도 이런 서버 & 스토리지를 묶기 위해서 통합 스토리지 솔루션인 SAN, NAS와 같은 솔루션이 나오긴 했다. 처음엔 서버와 스토리지 사이에 Network 스위치와 Fiver Channel 스위치를 두어 관리하다가 Network와 Fiver Channel을 합친 Converged가 나오고 이젠 서버, 스위치, 스토리지를 합쳐서 클러스터를 구성하는 Hyper-Converged가 나오게 된 것이다.

    간단하게 SAN, NAS의 절충안이라고 할 수 있다.



    NAS와 SAN의 차이

    cloudberrylab

    NAS와 SAN은 네트워크를 기반으로하는 Storage 솔루션이다. 위의 그림처럼 스토리지 서버가 어디에 위치하는가가 다르다. 단순히 생각해보면 "더 좋은 장비를 쓰면 되지 않을까?" 하겠지만 cpu만 생각해봐도 cpu 코어의 배수만큼 가격차이가 단순 2배수가 아니다.


    • 인텔 8100(i3 2코어) - 12만원, 인텔 8700(i7 6코어) - 35만원 : 보급형 제품은 비슷하는게 함정;;
    • 인텔 7900X(i9 10코어) - 115만원 : 코어가 늘어날수록 기하급수적으로 비용이 상승한다.

    NAS는 서버 네트워크에 추가적으로 스토리지 서버를 연결한 것이다. 그리고 데이터는 파일단위로 저장한다. 이런 특징을 보면 알 수 있듯, 별다른 장비가 필요하진 않아서 개인도 공유기, 외장하드, 별도의 서버로 쓸 장비(PC, 노트북)만 있다면 구성이 가능하다.


    나 같은 경우엔, 집에서 라즈베리파이로 외장하드를 연결해서 구성했었다. 2 B모델을 사용했었는데, cpu는 노트북에 쓰는 코어 1개(900MHz)만도 못하고 메모리는 1G, 네트워크는 100Mbps였다. 안그래도 스펙이 부족한데 집에서 100Mbps 회선을 쓰고 있었기 때문에 따로 Qos로 10Mbps로 사용했다. 즉, 10MB짜리 노래파일 하나 올리는데 적어도 10초가 걸리고 이마저도 병렬처리를 하기엔 스펙이 부족해서 하나하나 올려야했다 ㅠㅠ

    (나의 무료 클라우드여 안녕....)


    정리하면 하나의 서버에서 스토리지 역할을 다해야되기 때문에 Storage Size는 증설 가능해도 디스크 IOPS를 늘릴 방법이 RAID 구성말고는 딱히 없다. 또한 네트워크로 스토리지에 있는 데이터를 주고 받아야하기 때문에 이또한 병목현상이 발생한다. 즉, 스토리지/네트워크 모두 병목현상을 해결할 답이 없었던 것이다.

    SAN은 이런걸 개선하기 위해서 다른 서버에서 스토리지 서버에 접근할때 Fiber Channel Switch를 통해서 접근하도록 구성되어있다. IOPS는 수평적으로 확장 가능하지만 결국 네트워크병목 현상으로인해 스위치 장비도 증설이 필요하고 특정 파일에 엑세스가 집중될 경우, 어떤 스토리지(HDD, SSD)를 쓰는지에 따라서 성능에 문제가 발생한다.

    결국 NAS, SAN 둘 다 병목현상이나 Scale Up에 대한 대책이 부족하고 한계가 도달했다. 그렇기 때문에 HCI를 사용하는 것이다.



    어디껄 써야 좋을까?

    가격을 비교하기에는 비교 스펙트럼이 넓어서 제외함
    기업별 제품 평은 매우 주관적인 관점에서 서술됨
    특정 회사 빼고는 다들 주력 상품이 아닌듯하다
    (어, 쟤네도 하니 나도 해야지의 마인드)

    비교 도표
    [인턴끼리 조사했던 내용을 토대로 만든 간단한 비교 도표이다]


    • 뉴타닉스
      2009년에 HCI라는 개념을 들고 나타나서 제품을 판매하였으며 현재 HCI업계에서는 뉴타닉스 제품이 거의 독보적이다. 하드웨어 커버리지도 넓고 Vendor Lock In이 없어서 타 제품과의 호환이 가능하고 프리즘이라는 관리SW가 매우 뛰어나다. 그리고 Hyper-V, vSphere와 같은 하이퍼바이저 외에서 자사에서 만든 AHV을 제공하는 등 HW, SW에 대한 호환성도 좋다.

    • HP - SimpliVity
      내가 인턴십 중 조사를 맡았던 기업이다.
      문제는 딱히 큰 장점은 없는게 문제인 듯 하다. 옴니스택(OmniStack)이라는 컨트롤러 카드로 SDN상에서 구현될 데이터 중복제거/압축 기술을 하드웨어 상에서 구현해서 스토리지 부분에서 더 빠르고 최적화가 잘되어 있다고는 하는데 하드웨어 커버리지도 좁아서 아마 대기업보다는 소기업/스타트업 등에서 쓰이지 않을까 싶다.

    • DellEMC - vxRail
      vSAN, 넓은 하드웨어 커버리지 그리고 vxRack와 같은 별도의 대형 제품을 판매한다. 결국 크게 장점은 없고 스토리지나 노드의 확장성이 매우 Elastic해서 추가로 확장할때 사용하면 좋을 듯하다.
      이건 인프라 외적인 부분인데 vSphere(하이퍼바이저)를 개발한 VMware를 흡수하기 했는데 라이센스가 더 저렴하다든가하는 이득은 없는거 같다. 추후에 vSphere가 가격을 올리는 등의 문제만 없다면 중요한 이슈는 아닐 듯하다.

    • Cisco - HyperFlex
      네트워크 장비로 유명한 회사라 그런지 네트워크관련 호환성이 매우 뛰어나다. FCoE(Fibre Channel over Ethernet)이라는 기술을 사용해서 스토리지/네트워크 회선을 통일해서 호환성과 속도를 향상했다고 한다. 여기도 역시 큰 장점은 딱히 없다.



    그와중에 갓갓 AWS

    지금은 주로 Private Cloud나 VDI를 구성하기 위해서 HCI를 많이 사용하게 되는데 최종적인 형태는 하이브리드 클라우드(hybrid-cloud)일 것이다.
    이게 문제는 현재 클라우드는 독식하는 AWS에서 Outposts라는 On-premises 하이브리드 클라우드를 판매 예정 중이라는 것이다.
    클라우드/서버리스만 하는 줄 알았더니 인프라까지 장악하려는 큰 그림...
    이미 AWS라는 초대형 클라우드를 제공하고 있으니 나래도 믿고 사용할 것 같다.

    AWS가 참 좋은게 문서나 커뮤니티 활성화가 잘되서 문제 생기면 찾기도 쉽고
    매년 컨퍼런스 열어서 고객 사례도 보여줘서 사례참고해서 직접 아키텍처 구성이 가능하고
    좀 비싸다는 문제가 있긴하지만 오토 스케일링을 통해서 Elastic하게 비용 최적화/절감할 수 있고
    클라우드 중 그나마 제대로된 Support를 제공해주는 것 같다.(Azure는 절래절래)



    결론

    어쨌든 하드웨어의 한계로 더 이상 Scale Up 방식의 수직적인 확장은 한계가 온 듯하다.
    그래서 Scale Out 방식의 수평적인 확장이 필요하게 되었고

    그 중의 하나가 HCI이다.

    하지만 개발자가 인프라부터 아키텍처, 비즈니스 로직 모두 관리하기에는
    서비스도 자주 변경되고 많아지고 복잡해진 구조로 인해서
    개발자는 모든걸 신경쓰기가 어렵게 되었다.

    대기업이야 모든걸 다 직접할 수 있겠지만 대부분의 기업은 비즈니스 로직만 해도 인력이 부족할 것이다.
    결국 인력비를 줄이기 위해서 가장 손이 많이 가고 비싼 인프라영역에 손을 댈 것이고
    직접 인프라 구축/관리하는 비용보다 상대적으로 저렴한 HCI나 클라우드 제품을 사용할 것이다.

    하지만 소/중규모의 팀에서라면 굳이 HCI를 사용하기보단 클라우드를 사용할 것이다.
    어쨌든 HCI도 하드웨어에 문제가 생기면 관리할 인원이 필요하지만
    클라우드는 PM 혼자서도 인프라 관리를 할 수 있기 때문이다.
    (제품 주문하고 기다릴 필요없이 서버 달라면 버튼 클릭으로 생성이 가능하니깐!)
    (권한 관리도 제품 이해도가 높은 한명이 관리하면 되니깐)


    요즘은 LG전자, 삼성전자, SK플래닛 등 대기업도 클라우드로 프로젝트를 진행한다.
    그만큼 인프라 구축되는걸 기다릴 시간이 없고 서비스는 빠르게 변화/구축되기 때문이다.
    대부분의 서비스가 빅데이터를 분석하고 이를 이용하여 머신러닝을 해야되는데
    하둡이나 텐서플로우 같이 몇십개의 서버를 병렬처리 해서 결과를 도출해야되는 아키텍처에서는
    서버나 스토리지가 죽는 경우가 태반인데
    개발자가 이런 몇십개의 서버도 관리하고 연구도 하고 개발까지...?
    과연 업무에 집중할 수 있는 시간이나 유지보수 비용(시간/금액)이
    클라우드를 쓸때보다 더 저렴/효율적인지는 잘모르겠다;;;


    정리하자면
    내부에서 관리할 Private한 영역과 외부에 공개하여 서비스할 Public한 영역을 섞어 사용하기 위해선
    Cloud와 HCI의 조화가 필요할 것이다.(하이브리드 클라우드!)
    결국 대부분 인프라 관리비용을 절감하기 위해서 HCI 제품보다는 결국 Cloud를 사용하지 않을까 싶다.
    (어차피 하이브리드 클라우드를 쓸거니깐)



    인턴이 끝나고 느낀점?

    약 2년간 인프라 걱정없이 AWS를 사용했었는데
    인프라 아키텍처팀에서 인프라 걱정하느라 매우 고통받았다.
    (인턴기간이 2주라서 다행이었다 ㅎ)

    이게 한번 도입되면 평생 써야하니 성능에 대한 검토가 필요한데
    기업에서 제공된 자료는 한계가 있고
    서로 민감한 부분이라 그런지 기업별 성능/가격 비교표를 찾기도 어려웠고
    더욱이 HCI라는 기술을 처음 듣기도 하고 상용화된 제품이 아니라 그런지 이해하기 어려웠다.
    또 인턴이라 해당 기업에 연락해서 자료를 달라기엔 시간도 부족하고 이래도 되나싶기도 하고...

    하지만 인프라에서 어떤걸 고려하는지에 대한 걸 알았고
    회사 내부에서 어떤걸 제품/솔루션을 도입할때 성능/가격 외에도 많은걸 고려한다는걸 깨달았다.
    너무 쉬운길(AWS)을 걷다보니 어려운길(인프라)에 대해서는 생각조차 못했는데
    만약에 솔루션 아키텍처쪽으로 일을 한다면 많은 도움이 될거 같다.
    평소에 개발할때 kubernetes vs elasticbeanstalk, Mysql vs Aurora, ElasticSearch vs CloudSearch와 같이
    제품 정할때 구체적인 자료 조사보다는 주변 평가나 라이브러리 잘되있는걸 골라쓰긴했는데
    남은 쉬는 기간 동안 반성의 시간을 좀 가져야할 거 같다.

    아무튼 인턴은 좋은 경험이었고 빨리 최종 공채 결과나 나왔으면 좋겠다 ㅠㅠ

    반응형
    Comments