편집자 주: 이 기사의 출처는DfinityFun(ID:DfinityFun), 승인을 받아 Odaily에서 재인쇄했습니다.
", 여기에서 인터넷 컴퓨터 개발 플랫폼의 인프라에 대한 DFINITY의 공식 소개와 DFINITY의 혁신적인 차세대 스마트 계약인 "소프트웨어 컨테이너"를 통해 분산형 인터넷 서비스를 수십억 사용자로 확장할 수 있는 방법을 확인할 수 있습니다.
보조 제목
네트워크 뉴런 시스템(NNS)
인터넷 컴퓨터는 ICP(Internet Computer Protocol)라는 블록체인 컴퓨팅 프로토콜을 기반으로 합니다. 네트워크 자체는 계층 구조에 따라 설계됩니다. 맨 아래 계층은 전용 하드웨어 노드(노드)를 호스팅하는 독립 데이터 센터입니다. 이러한 노드 시스템은 함께 그룹화되어 서브넷(서브넷)을 생성합니다. 서브넷 마스터는 사용자가 업로드한 상호 운용 가능한 기본 컴퓨팅 단위인 소프트웨어 컨테이너(캐니스터)를 실행하며 컨테이너에는 코드와 상태가 포함됩니다.
ICP의 고유한 기능은 네트워크를 제어, 구성 및 관리하는 NNS(Network Neuron System)입니다.
NNS는 또한 토큰 경제학에서 중요한 역할을 합니다. NNS는 노드 보상을 위해 새로운 ICP 토큰(구 DFN 토큰)을 생성합니다. 뉴런 노드는 네트워크의 제안을 관리합니다. NNS가 데이터 센터와 뉴런을 보상하기 위해 새로운 ICP 토큰을 발행할 때 이는 인플레이션의 일부입니다.
궁극적으로 데이터 센터 소유자 및 뉴런 소유자는 ICP 토큰을 획득하고 컨테이너 소유자 및 관리자와 거래할 수 있습니다. 컨테이너 소유자와 관리자는 이 토큰을 주기로 변환한 다음 컨테이너를 충전하는 데 사용합니다(예: 가스 요금). 예를 들어, 이러한 컨테이너가 계산을 수행하거나 메모리를 저장할 때 프로세스 전체에서 주기를 소비해야 하며, 주기가 소진된 후 더 많은 주기를 보충해야 계속 실행될 수 있는데 이것이 디플레이션 부분입니다.
보조 제목
서브넷
인터넷 컴퓨터를 이해하려면 먼저 전체 네트워크의 기본 구성 요소인 서브넷의 개념을 이해해야 합니다. 서브넷은 인터넷 컴퓨터 네트워크의 소프트웨어 컨테이너의 서로 다른 하위 집합을 호스팅하는 역할을 합니다. NNS 제어 하에서 서로 다른 데이터 센터에서 가져온 노드 머신을 함께 모아서 서브넷을 만듭니다. 이러한 노드는 ICP를 통해 협력하여 호스트하는 소프트웨어 컨테이너와 관련된 데이터 및 계산을 대칭적으로 복제합니다.
NNS는 서브넷을 구성할 때 독립 데이터 센터의 노드를 통합합니다. 비잔틴 내결함성 기술과 DFINITY에서 개발한 암호화 기술을 사용함으로써 ICP 프로토콜은 서브넷이 변조되지 않고 다운되지 않도록 보장할 수 있습니다. 서브넷은 전체 인터넷 컴퓨터 네트워크의 기본 부분이지만 사용자 및 소프트웨어에 구애받지 않습니다. 사용자와 컨테이너 소프트웨어는 공유 기능을 호출하기 위해 컨테이너의 ID만 알면 됩니다.
이러한 둔감함은 인터넷의 기본 설계 원칙을 확장한 것입니다. (전통적인) 인터넷에서 사용자가 일부 소프트웨어에 연결하려면 소프트웨어를 실행하는 컴퓨터의 IP 주소와 소프트웨어가 수신 대기 중인 TCP 포트를 알아야 합니다. 인터넷 컴퓨터에서 사용자가 함수를 호출하려는 경우 컨테이너의 ID와 함수 서명만 알면 됩니다. 인터넷이 원활한 연결을 생성한 것과 같은 방식으로 DFINITY는 네트워크의 기본 작동에 대한 지식 없이 라이선스 소프트웨어가 다른 소프트웨어를 직접 호출할 수 있는 소프트웨어를 위한 원활한 세상을 만듭니다.
인터넷 컴퓨터는 또한 다른 방식으로 서브넷 무감각성을 보장합니다. NNS는 서브넷을 분할 및 병합하여 네트워크 전체의 부하를 분산할 수 있습니다. 물론 이는 호스팅된 컨테이너에도 영향을 미치지 않습니다.
이 예에는 11개의 소프트웨어 컨테이너를 호스팅하는 가상 서브넷 ABC가 있습니다. NNS는 네트워크 확장 성능을 분할해야 함을 나타냅니다. 이 경우 서브넷 ABC는 컨테이너 1-6을 계속 호스트하지만 동시에 컨테이너 7-11을 호스트하는 새 서브넷 XYZ를 생성합니다. 확장하는 동안 관련된 모든 컨테이너는 서비스 중단을 경험하지 않습니다.
각 서브넷 유형은 컨테이너에 특정 속성과 기능을 제공합니다. 예를 들어 컨테이너가 데이터 서브넷에서 호스팅되는 경우 호출을 처리할 수 있지만 다른 컨테이너는 처리할 수 없습니다. 다른 컨테이너를 호출하려면 시스템 서브넷이 필요합니다. 컨테이너가 ICP 토큰의 균형을 유지하거나 주기를 다른 컨테이너로 보낼 수 있게 하려면 신뢰할 수 있는 서브넷이 필요합니다. 이러한 이유로 거버넌스 컨테이너는 신뢰할 수 있는 서브넷에서만 호스팅되어야 합니다.
서브넷의 기능은 부분적으로 기본 계층의 내결함성에서 파생됩니다. 이것은 NNS가 망가진 서브넷을 복구할 수 있도록 하는 새로운 암호화 기술을 포함하여 대중과 곧 공유하고자 하는 기초 과학 분야의 흥미로운 영역입니다.
보조 제목
컨테이너
서브넷의 목적은 컨테이너를 호스팅하는 것입니다. 컨테이너는 전용 하이퍼바이저에서 실행되며 공개적으로 지정된 API를 통해 다른 컨테이너와 상호 작용합니다. 컨테이너에는 WebAssembly 가상 머신에서 실행되는 WebAssembly 바이트코드와 내부에서 실행되는 메모리 내 데이터 페이지가 포함되어 있습니다. 일반적으로 이 WebAssembly 바이트코드는 Rust 또는 Motoko와 같은 프로그래밍 언어를 컴파일하여 생성됩니다. 이 바이트 코드에는 개발자가 API와 쉽게 상호 작용할 수 있는 런타임이 포함됩니다.
인터넷 컴퓨터에서 컨테이너가 공유하는 함수를 호출하는 방법은 업데이트 호출 또는 쿼리 호출 두 가지가 있습니다. 본질적인 차이점은 업데이트 호출로 함수를 호출하면 컨테이너 메모리의 데이터에 대한 모든 변경 사항이 유지되는 반면 쿼리 호출로 함수를 호출하면 메모리에 대한 모든 변경 사항이 실행 후 폐기.
업데이트 호출의 변경 사항은 영구적이며 ICP 블록체인 컴퓨터 프로토콜이 서브넷의 모든 노드에서 실행하기 때문에 변조 방지됩니다. 예상할 수 있듯이 이러한 호출은 일관된 전역 호출 순서로 이루어지므로 완전히 결정적인 실행 환경에서 동시 실행이 가능합니다. 업데이트 호출은 2초 이내에 완료됩니다.
반대로 쿼리 호출은 변경 사항을 유지하지 않습니다. 메모리에 대한 모든 변경 사항은 실행 후 삭제됩니다. 매우 효율적이고 저렴하며 완료하는 데 몇 밀리초 밖에 걸리지 않습니다. 이는 서브넷의 모든 노드에서 실행되지 않기 때문에 낮은 수준의 보안을 제공한다는 의미이기도 합니다.
이 예에서 사용자는 맞춤형 뉴스 페이지를 요청하고 있으며 새로 생성된 콘텐츠를 즉시 사용할 수 있습니다.
보조 제목
자동 저장, 직교 지속성
개발자가 데이터를 보존하는 방식은 인터넷 컴퓨터의 가장 멋진 점 중 하나입니다. 개발자는 지속성에 대해 생각할 필요가 없으며 코드를 작성하기만 하면 지속성이 자동으로 발생합니다. 이를 직교 지속성이라고 합니다. 이는 인터넷 컴퓨터가 메모리 데이터 페이지를 컨테이너에 보관하기 때문입니다.
이 모든 것이 어떻게 작동하는지 궁금할 것입니다. 컨테이너는 메모리 데이터 페이지를 변경하는 업데이트 호출을 위한 소프트웨어 시행자입니다. 이는 주어진 시간에 컨테이너 내부에 하나의 실행 스레드만 있을 수 있음을 의미합니다.
반대로 쿼리 호출은 메모리를 영구적으로 변경하지 않습니다. 이를 통해 컨테이너 내의 여러 동시 스레드가 주어진 시간에 쿼리 호출을 처리할 수 있습니다. 이러한 쿼리 호출은 상태 루트에 기록된 마지막으로 결정된 메모리 스냅샷에 대해 실행됩니다.
마지막으로 컨테이너는 새로운 컨테이너를 생성할 수 있고 컨테이너는 스스로 포크할 수 있습니다. 새 컨테이너를 만들기 위해 WebAssembly 바이트코드를 지정하기만 하면 메모리 내 데이터 페이지가 비어 있게 시작됩니다. 컨테이너가 분기되면 내부 메모리 페이지와 동일한 새로 생성된 복사본이 생성됩니다. 확장 가능한 인터넷 서비스를 만들 때 포크는 매우 강력합니다.
보조 제목
확장성
이제 인터넷 컴퓨터 서비스의 확장성에 대해 이야기해 봅시다. 다양한 유형의 컨테이너에는 자체 용량 상한이 있습니다. 예를 들어 컨테이너는 WebAssembly 구현의 제한으로 인해 4GB의 메모리만 저장할 수 있습니다. 따라서 수십억 명의 사용자로 확장할 수 있는 인터넷 서비스를 만들려면 다중 컨테이너 아키텍처를 사용해야 합니다.
컨테이너의 많은 사본을 생성하기 위해 특수 컨테이너를 생성한 다음 사용자 콘텐츠를 다른 컨테이너로 분할하여 확장 가능한 인터넷 서비스를 생성할 수 있습니다. 그러나 이 아키텍처는 여러 가지 이유로 지나치게 단순화되었습니다.
각각의 추가 컨테이너가 전체 메모리 용량을 늘리고 컨테이너 수를 늘리면 전체 업데이트 및 쿼리 호출 처리량이 증가하는 것은 사실이지만 특정 사용자 콘텐츠에 대한 쿼리 호출 요청을 확장할 수는 없습니다. 더 많은 컨테이너 샤드를 추가하여 시스템 용량을 늘릴 때마다 사용자 콘텐츠의 균형을 재조정해야 합니다. 이는 실제로 에지에서 확장 가능한 아키텍처가 아닙니다. 쿼리 시 가장 가까운 복제본에서 최종 사용자에게 데이터를 제공하는 좋은 방법도 없습니다. 프런트엔드 컨테이너와 백엔드 컨테이너라는 2계층 아키텍처가 필요합니다.
Internet Computer는 도메인 이름을 NNS(DNS 유사)를 통해 여러 프런트 엔드 컨테이너에 매핑할 수 있도록 허용하는 것과 같이 최종 사용자를 프런트 엔드 컨테이너에 고정시키는 몇 가지 흥미로운 기능을 제공합니다. 최종 사용자가 이러한 도메인 이름을 확인하려는 경우 인터넷 컴퓨터는 프런트 엔드 컨테이너를 호스팅하는 모든 서브넷에 있는 모든 복제 노드의 총 수를 확인하고 가장 가까운 복제 노드의 IP 주소를 반환합니다. 그 결과 최종 사용자는 가장 가까운 복제본에서 쿼리를 실행하여 내재된 네트워크 대기 시간을 줄이고 사용자 경험을 개선하여 콘텐츠 전송 네트워크(CDN) 없이 에지 컴퓨팅의 이점을 제공합니다.
이 기능을 최대한 활용하려면 프런트엔드 컨테이너와 백엔드 버킷 컨테이너가 포함된 전형적인 2계층 구조가 필요합니다. 이 예에서 웹 브라우저는 프로필 사진을 로드하려고 합니다.
1단계, 웹 브라우저는 가까운 노드가 있는 서브넷에서 실행되는 프런트 엔드 컨테이너에 매핑됩니다. 그런 다음 웹 브라우저는 사진을 검색하기 위해 인근 노드에 쿼리 호출을 제출합니다.
2단계, 프런트 엔드 컨테이너는 사진을 저장하는 데이터 컨테이너에 컨테이너 간 쿼리 호출 요청을 보냅니다.
3단계, 데이터 저장 컨테이너가 반환한 쿼리 호출 응답에 정적 콘텐츠(예: 사진)가 포함된 경우 데이터를 캐시에 저장할 수 있습니다. 이 경우 프런트 엔드 컨테이너의 쿼리 호출을 실행하는 복제본 노드는 쿼리 캐시에 쿼리 호출의 응답(즉, 데이터)을 저장할 수 있습니다.
4단계, 쿼리 호출 캐싱 메커니즘은 프런트 엔드 컨테이너 코드에 완전히 둔감합니다. 사용자 호출 프런트 엔드 컨테이너가 필요한 모든 정보를 수집하면 쿼리 호출 응답 또는 HTTP 요청을 통해 콘텐츠를 반환할 수 있습니다.
시간이 지남에 따라 노드의 쿼리 캐시는 정적 콘텐츠를 축적하고 주변 사용자가 관심 있는 데이터를 생성하여 더 빠르고 더 나은 사용자 경험을 제공합니다. 이러한 방식으로 인터넷 컴퓨터의 기본 에지 아키텍처는 개발자가 특별한 작업을 수행하거나 별도의 독점 서비스의 도움을 받을 필요 없이 콘텐츠 전송 네트워크의 이점을 제공합니다.
웹 브라우저 또는 스마트폰에서 실행되는 UX/UI가 어떤 프런트 엔드 컨테이너가 일부 콘텐츠 또는 데이터의 변경 조정을 담당하는지 결정하면 표준 인터페이스를 통해 업데이트 호출을 제출하여 콘텐츠 또는 데이터를 수정할 수 있습니다.
그런 다음 이 프런트 엔드 컨테이너는 일반적으로 원하는 변경 사항을 구현하기 위해 더 많은 컨테이너 간 업데이트 호출을 만듭니다.
보조 제목
오픈 인터넷 서비스
요약하자면 프런트엔드 컨테이너와 백엔드 데이터 컨테이너의 2계층 아키텍처를 사용하는 개방형 인터넷 서비스의 설계에 대해 논의해 보겠습니다. 먼저 프런트 엔드 컨테이너를 코딩할 때 BigMap이라는 기존 라이브러리 클래스를 사용하여 작업을 단순화합니다.
