>  기사  >  백엔드 개발  >  Go 언어를 사용하여 블록체인을 작성하는 이유

Go 언어를 사용하여 블록체인을 작성하는 이유

青灯夜游
青灯夜游원래의
2021-03-04 15:42:537380검색

이유: 1. Go 언어는 간단한 배포, 탁월한 성능, 우수한 병렬 실행 성능, 우수한 언어 디자인, 수많은 내장 라이브러리, 멋진 팀이라는 장점을 가지고 있습니다. 2. Ethereum과 Hyperledger는 모두 Go를 개발 언어로 사용하기로 결정했습니다. 이 두 슈퍼 블록체인은 생태계에서 큰 틈새 시장을 차지할 뿐만 아니라 실제로 블록체인 표준을 암묵적으로 공식화하는 등 큰 영향력을 갖고 있습니다.

Go 언어를 사용하여 블록체인을 작성하는 이유

이 튜토리얼의 운영 환경: windows10 시스템, GO 1.18, thinkpad t480 컴퓨터.

퍼블릭 블록체인 개발 분야에서 우리는 C++, Golang, Python 및 최근 출시된 Rust 등을 포함한 몇 가지 인기 있는 프로그래밍 언어를 발견했습니다.

다음과 같이 더 유명한 프로젝트에서 사용하는 프로그래밍 언어에 대한 통계를 만들어 보겠습니다.

Go 언어를 사용하여 블록체인을 작성하는 이유

Bitcoin 및 Litcoin과 같은 이전 세대 퍼블릭 체인은 일반적으로 C/C++를 사용합니다(그 당시를 살펴보겠습니다). , 당시에는 Go가 아직 등장하지 않았음), Ethereum과 같은 차세대 퍼블릭 체인과 얼라이언스 체인의 리더인 Hyperledger가 Go 언어를 더 많이 사용하기 시작하는 것을 볼 수 있습니다. 또한 지난 2년 동안 Bot Both Card 및 Grin과 같은 많은 퍼블릭 체인이 개발에 Rust 언어를 사용하기 시작했습니다.

Go 언어의 장점

배포가 용이함

Go 컴파일 및 생성은 glibc를 제외하고 다른 외부 종속성이 없는 정적 실행 파일입니다. 이로 인해 배포가 매우 편리해집니다. 대상 컴퓨터에는 기본 시스템과 필요한 관리 및 모니터링 도구만 필요하며, 애플리케이션에 필요한 다양한 패키지 및 라이브러리의 종속성에 대해 걱정할 필요가 없어 유지 관리 부담이 크게 줄어듭니다. 기계어 코드로 직접 컴파일할 수 있으며 다른 라이브러리에 의존하지 않습니다. glibc 버전에는 파일을 던져서 배포가 완료됩니다.

뛰어난 성능

C나 Java만큼 좋지는 않지만 일반적으로 기본 Python 애플리케이션보다 훨씬 뛰어나며 일부 병목 현상이 있는 비즈니스를 작성하는 데 적합합니다. 메모리 사용량도 매우 경제적입니다.

동시성 및 채널

고루틴과 채널을 사용하면 동시성 높은 서버 측 소프트웨어를 매우 쉽게 작성할 수 있으며 많은 경우 잠금 메커니즘과 이로 인해 발생하는 다양한 문제를 고려할 필요가 없습니다. 단일 Go 애플리케이션은 여러 CPU 코어를 효과적으로 활용하고 병렬 실행에서도 우수한 성능을 발휘할 수 있습니다.

좋은 언어 디자인

Go는 매우 간단하고 배우기 쉽습니다. 학문적 관점에서 볼 때 Go 언어는 실제로 매우 평범하고 많은 고급 언어 기능을 지원하지 않습니다. 그러나 엔지니어링 관점에서 볼 때 Go의 디자인은 매우 좋습니다. 사양은 충분히 간단하고 유연합니다. Go의 단순성 덕분에 Python, Elixir, C++, Scala 또는 Java 개발자는 한 달 안에 효율적인 Go 팀을 구성할 수 있습니다.

표준 라이브러리 및 도구

Go에는 현재 수많은 내장 라이브러리가 있으며, 특히 네트워크 라이브러리는 매우 강력합니다. 더 중요한 것은 Go에는 팀 협업의 일관성이 크게 향상되는 완전한 도구 체인이 함께 제공된다는 것입니다. 예를 들어, gofmt는 Go 코드의 형식을 자동으로 지정하므로 다른 사람이 작성한 코드의 형식 스타일이 일관되지 않는 문제를 대부분 제거합니다. 아카이브를 편집할 때 gofmt를 자동으로 실행하도록 편집기를 구성하면 코드를 작성할 때 원하는 대로 배치할 수 있고 아카이브할 때 자동으로 올바른 유형의 코드가 됩니다. 또한 gofix나 govet과 같은 매우 유용한 도구도 있습니다.

팀은 훌륭합니다

Go 언어의 후원자는 Google입니다. 언어는 다양한 시나리오에서 테스트될 만큼 충분합니다. 동시에 창립자는 C 언어의 아버지이기도 합니다. 후속 개발과 혁신에.

Go 성공적인 프로젝트

Go 언어는 클라우드 시대에 널리 사용되었으며, 특히 Go 언어와 함께 엔지니어링 세계에 자리를 잡은 Docker 및 K8s와 같은 킬러 제품이 등장했습니다. 언어 성공적으로 실행되는 소프트웨어도 많이 있습니다.

nsq: 매우 높은 성능을 자랑하는 bitly의 오픈 소스 메시지 대기열 시스템. 현재 매일 수십억 개의 메시지를 처리합니다.

packer: 다양한 플랫폼용 이미지 파일을 생성하는 데 사용됩니다. VM, vbox, AWS 등, 저자는 vagrant

skynet: 분산 스케줄링 프레임워크 Doozer: ZooKeeper와 유사한 분산 동기화 도구

Heka: mazila 오픈 소스 로그 처리 시스템

cbfs: Couchbase 오픈 소스 분산 파일 시스템

tsuru: SAE와 정확히 동일한 기능을 가진 오픈 소스 PAAS 플랫폼

groupcache: memcahe 작성자가 Google 다운로드 시스템용으로 작성한 캐싱 시스템

god: redis와 유사한 캐싱 시스템, 하지만 배포 및 확장성을 지원합니다.

gor: 네트워크 트래픽 패킷 캡처 및 재생 도구

생태학적 카드 슬롯과 암묵적 기준

노력의 필요성 외에도 블록체인이 Go 언어를 선택하게 된 기회와 행운도 있습니다. 블록체인 2.0, Ethereum 및 Hyperledger Fabric 이후 가장 성공적인 퍼블릭 및 컨소시엄 체인 대표자를 살펴보겠습니다. 예외 없이 모두 Go를 개발 언어로 사용합니다(Ethereum에는 실제로 다른 언어로 된 클라이언트 버전이 있지만 After 홈스테드 단계에서는 Go 클라이언트가 지배적인 위치를 차지합니다.) 이 두 슈퍼 블록체인의 영향력은 일반 프로젝트와 비교할 수 없습니다. 그들은 생태계에서 큰 틈새 시장을 차지할 뿐만 아니라 표준 없이도 암묵적으로 공식화됩니다. 블록체인의 경우, 퍼블릭 체인의 스마트 컨트랙트든 얼라이언스 체인 기술이든 이더리움과 패브릭을 우회할 수 없습니다. 그렇다면 블록체인 기술을 선택하려는 기업에게 가장 빠른 방법은 무엇을 구현하는 것일까요?

물론, 우리는 이 두 프로젝트의 혁신을 직접 복사합니다. 또 다른 지름길은 오픈 소스 코드를 직접 수정하는 것입니다. 그러면 자연스럽게 Go 언어가 다른 언어로 다시 구현되기가 쉽지 않습니다. 그리고 몇 가지 혁신을 선택하는 경우 그러나 성숙하지 않은 언어는 일부 특정 라이브러리에 대한 지원이 부족하여 프로젝트가 수행되지 못하게 됩니다.

많은 사람들이 Ethereum의 영향력에 대해 의심하지 않지만 사실 Fabric이 기업 블록체인 배포에 미치는 영향은 과소평가할 수 없습니다.

Go 언어를 사용하여 블록체인을 작성하는 이유

차트 소스 "2019 글로벌 기업 블록체인 벤치마크 연구 보고서" 》

Hyperledger Fabric이 가장 배포된 엔터프라이즈 블록체인 네트워크에서 사용되는 프로토콜 프레임워크 Hyperledger Hyperledger(Fabric이 주력 프로토콜)는 통합업체 및 소프트웨어 개발 플랫폼에서 가장 일반적으로 지원되는 프로토콜 프레임워크로, 비율은 53%입니다. 블록체인 기술 서적 중 하이퍼레저에 관한 서적이 가장 인기가 있다는 점도 하이퍼레저의 영향력을 입증한다.

Go 언어에서의 Bytom 실습

프로그래밍 언어를 선택하는 과정에서 C, C++, Java를 고려했지만 대규모 C/C++ 프로젝트를 유지 관리하기가 어렵고 Java가 약간 더 어렵습니다. 현재 Go 언어는 이미 블록체인 프로젝트에서 빛을 발하고 있으며 점차 기술과 인재에 대한 헤드 효과를 형성하고 있으므로 추세를 따르고 기술을 선택하면 초기 Bytom 프로젝트에서 직면하는 저항이 자연스럽게 줄어들 것입니다. 물론 점진적인 개발 과정에서 우리도 Go 언어를 선택함으로써 얻을 수 있는 편리함과 이점을 느꼈습니다.

블록체인에서의 Go 사례

기술적으로 말하면, 블록체인 노드는 비동기식으로 작동하기 위해 여러 모듈이 필요하므로 Go 언어 동시성 및 채널은 매우 유리합니다. 아래의 트랜잭션을 살펴보겠습니다. 검증 예:

func ValidateTxs(txs []*bc.Tx, block *bc.Block) []*ValidateTxResult {
    txSize := len(txs)
    //init the goroutine validate worker
    var wg sync.WaitGroup
    workCh := make(chan *validateTxWork, txSize)
    resultCh := make(chan *ValidateTxResult, txSize)
    closeCh := make(chan struct{})
    for i := 0; i <= validateWorkerNum && i < txSize; i++ {
        wg.Add(1)
        go validateTxWorker(workCh, resultCh, closeCh, &wg)
    }

    //sent the works
    for i, tx := range txs {
        workCh <- &validateTxWork{i: i, tx: tx, block: block}
    }

    //collect validate results
    results := make([]*ValidateTxResult, txSize)
    for i := 0; i < txSize; i++ {
        result := <-resultCh
        results[result.i] = result
    }

    close(closeCh)
    wg.Wait()
    close(workCh)
    close(resultCh)
    return results
}

우리는 루틴을 사용합니다. +Ch+WaitGroup은 30줄의 코드 내에서 동시 트랜잭션 확인 기능을 구축합니다. 높은 구성의 서버를 사용하면 100,000 TPS 이상을 실행할 수 있습니다.

쉽게 Go 언어 마스터가 되세요

Bytom 핵심 개발팀의 일부 구성원은 이전에 Go 언어 개발을 해본 적이 없지만 빠르게 시작하고 기본적으로 반달 내에 개발에 참여할 수 있습니다. 핵심 코드 유지 관리가 더 쉽습니다(특히 C/C++/Java 경험이 있는 개발자의 경우). 이는 팀 구성에 대한 간단한 언어의 이점입니다.

통합 협업

공동 작업의 관점에서 gofmt를 통해 Go 코드를 자동으로 조판하면 핵심 팀 구성원과 심지어 커뮤니티 개발자가 제출한 코드 스타일의 차이를 최소화하여 프로젝트의 전반적인 품질과 안정성을 향상시킬 수 있습니다.

요약

Go 언어 자체의 특성과 장점이 그 길을 열었고, 두 슈퍼 블록체인 프로젝트인 이더리움과 하이퍼레저의 축복으로 인해 Go 언어도 많은 블록체인 프로젝트의 출발점이 되었습니다. 첫 번째 선택, Bytom은 블록체인의 최하층 개발에 있어 Go 언어의 장점을 충분히 이해하기 위해 선택했습니다. 그러나 언어 논쟁의 함정에 빠질 필요는 없습니다. Go를 사용합니다. Go 언어로 완성되지만 주변의 많은 하위 프로젝트도 Java, Python 또는 JavaScript로 구현됩니다. 결국 생태적 다양성은 프로젝트의 장수를 위한 기초입니다.

추천 학습: Golang 튜토리얼

위 내용은 Go 언어를 사용하여 블록체인을 작성하는 이유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.