μ•ˆλ…•ν•˜μ„Έμš”?

이번 κΈ€μ—μ„œλŠ” λ³€ν™”λœ Hyperledger Fabric v1.0의 μ•„ν‚€ν…μ²˜μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ³ μž ν•©λ‹ˆλ‹€.

Hyperledger Fabric의 영문 λ¬Έμ„œλ“€μ€ λ‹€μŒμ˜ λ§ν¬μ—μ„œλ„ μ§€μ†μ μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜κ³  μžˆμœΌλ‹ˆ μ°Έμ‘°ν•˜μ„Έμš”. Fabric κΈ°μˆ λ¬Έμ„œ
μ΅œμ’… Fabric v1.0이 λ°œν‘œλ˜κΈ° μ „κΉŒμ§€ μ•„ν‚€ν…μ²˜λ₯Ό μ„€λͺ…ν•˜λŠ” λ¬Έμ„œμ˜ λ‚΄μš©μ΄ λ³€κ²½λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΅œμ’… GA 되긴 μ „μ—” μ„€λͺ…μ˜ λ‚΄μš©μ΄ λ‹€μ†Œ 변경될 수 μžˆμŠ΅λ‹ˆλ‹€.

1. Fabric v0.6 μ•„ν‚€ν…μ²˜

Fabric v0.6의 μ•„ν‚€ν…μ²˜λ₯Ό λ˜λŒμ•„ 보면 Membership Service, Peer둜 κ΅¬μ„±λ˜μ–΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
Membership ServiceλŠ” μ‚¬μš©μžμ— λŒ€ν•œ enroll 및 κ΄€λ ¨ μΈμ¦μ„œλ₯Ό 생성,쑰회 등을 λ‹΄λ‹Ήν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμ˜€κ³ ,
Peer μ—μ„œ 블둝체인 κ°œλ…μ—μ„œ ν•„μš”ν•œ μž‘μ—…λ“€(ν•©μ˜ μ•Œκ³ λ¦¬μ¦˜, μ²΄μΈμ½”λ“œ, 이벀트, 원μž₯ 관리 λ“±)을 μˆ˜ν–‰ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€.

2. Fabric v1.0 μ•„ν‚€ν…μ²˜

Fabric v1.0 의 컨셉은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€

  • νŠΈλžœμž­μ…˜μ— μ„œλͺ…(Endorsement)ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ ν”„λ‘œμ„ΈμŠ€μ— 반영
  • κ°œμΈμ •λ³΄ 보호 및 κΈ°λ°€μœ μ§€ 지원
  • μ°Έμ—¬μž μˆ˜μ™€ νŠΈλžœμž­μ…˜ μ²˜λ¦¬λŸ‰(TPS) 쑰절
  • 비결정적(non-deterministic) νŠΈλžœμž­μ…˜ 제거
  • ν”ŒλŸ¬κ·ΈμΈ λ°©μ‹μ˜ 데이터 μŠ€ν† μ–΄(원μž₯관리λ₯Ό μœ„ν•œ DB)
  • Fabricκ³Ό μ²΄μΈμ½”λ“œμ˜ 동적 μ—…κ·Έλ ˆμ΄λ“œ 지원
  • SPF(Single Point of Failure)λ₯Ό μ œκ±°ν•˜κ³  λ©€ν‹°ν”Œ 멀버쉽 μ„œλΉ„μŠ€λ₯Ό κ°€λŠ₯ν•˜κ²Œ 함

κ·Έ 쀑 κ°€μž₯ 큰 λ³€ν™”λŠ” Peer의 μ—­ν• μž…λ‹ˆλ‹€. 이전 λ²„μ „μ—μ„œ λͺ¨λ“  역할을 ν•˜λ‚˜μ˜ Peer 즉, Validating Peer μ—μ„œ μˆ˜ν–‰ν•˜λ˜ 것을 λ‹€μŒκ³Ό 같이 두 κ°€μ§€μ˜ μ—­ν• λ‘œ λ‚˜λˆ μ„œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • Endorsing Peer ( Endorser )
  • Ordering-service-node ( Orderer )


[좜처] : https://jira.hyperledger.org/browse/FAB-37

μœ„μ˜ κ·Έλ¦Όμ—μ„œ λ³΄λŠ” κ²ƒμ²˜λŸΌ μƒˆλ‘œμš΄ 버전인 Fabric v1.0 μ—μ„œλŠ” SDK의 역할이 λ”μš± μ»€μ§‘λ‹ˆλ‹€.
이전 버전에 있던 REST APIλŠ” 없어지고 grpc λ˜λŠ” CLIλ₯Ό ν†΅ν•΄μ„œ 블둝체인 μ„œλ²„μ™€ 톡신을 ν•˜λ©° λ‹€μ†Œ λ³΅μž‘ν•΄μ§„λ“―μ΄ λ³΄μ΄λŠ” νŠΈλžœμž­μ…˜μ˜ 흐름을 가지고 μžˆμŠ΅λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜ 흐름을 μ•„μ£Ό κ°„λž΅ν•˜κ²Œ μ„€λͺ…ν•˜λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. 졜초 Clientκ°€ 블둝체인에 νŠΈλžœμž­μ…˜ μˆ˜ν–‰μ„ μœ„ν•œ Proposal을 ν•©λ‹ˆλ‹€.
  2. Proposal은 Endorse Peerμ—μ„œ μˆ˜ν–‰λ©λ‹ˆλ‹€.
  3. Endorser듀은 Poroposal을 endorsement policy에 μ˜κ±°ν•΄ Validateν•˜μ—¬ μ„œλͺ…을 ν•œ λ’€ Proposal responseλ₯Ό Clientμ—κ²Œ λ³΄λƒ…λ‹ˆλ‹€.
  4. μ„œλͺ…λœ proposal responseλ₯Ό 받은 ClientλŠ” νŠΈλžœμž­μ…˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  5. νŠΈλžœμž­μ…˜μ€ λͺ¨λ“  채널에 λŒ€ν•΄μ„œ Ordererκ°€ λ°›μ•„μ„œ νŠΈλžœμž­μ…˜μ˜ μˆœμ„œλŒ€λ‘œ 정렬을 ν•©λ‹ˆλ‹€.
  6. Orderer에 μ˜ν•΄ μ •λ ¬λœ νŠΈλžœμž­μ…˜μ€ ν•΄λ‹Ή 채널을 톡해 λ‹€μ‹œ Peer둜 λ³΄λ‚΄μ Έμ„œ μ΅œμ’…μ μœΌλ‘œ 원μž₯으둜 μ €μž₯λ©λ‹ˆλ‹€.

μœ„μ˜ νλ¦„μ—μ„œ EndorseλŠ” 비결정적인 νŠΈλžœμž­μ…˜μ„ μ œκ±°ν•˜μ—¬ 결정적인 νŠΈλžœμž­μ…˜λ§Œ μ²˜λ¦¬ν•˜λ„λ‘ ν•˜λŠ” 역할을 ν•˜κ²Œλ˜λ©°,
OrdererλŠ” Fabric v0.6 μ—μ„œ Validating Peer κ°€ μˆ˜ν–‰ν–ˆλ˜ PBFT와 λΉ„μŠ·ν•œ SBFT와 같은 ν•©μ˜ μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.(μ •ν™•νžˆ PBFTλŠ” μ•„λ‹™λ‹ˆλ‹€)

λ˜ν•œ, μ±„λ„μ΄λΌλŠ” κ°œλ…μ΄ μΆ”κ°€λ˜λŠ”λ° 채널은 μ‹€μ œ μ²΄μΈμ½”λ“œκ°€ λ””ν”Œλ‘œμ΄λ˜κ³  νŠΈλžœμž­μ…˜μ΄ μ‹€ν–‰λ˜λŠ” κ΅¬κ°„μž…λ‹ˆλ‹€. 즉 μ•„λž˜μ™€ 같이 λ‘κ°œμ˜ 채널(νŒŒλž€μ„ , 뢉은선) 각각 λ‹€λ₯Έ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ‹΄κ³  μžˆλŠ” μ²΄μΈμ½”λ“œκ°€ μ‹€ν–‰λ˜λ©°,
채널이 생성될 λ•Œ ν•΄λ‹Ήν•˜λŠ” Peerλ₯Ό 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.
μ•„λž˜ κ·Έλ¦Όμ—μ„œμ™€ 같이 κ°™κΈ° λ‹€λ₯Έ μ‘°μ§μ—μ„œ λ™μž‘ν•˜κ³  μžˆλŠ” Peerλ₯Ό ν•˜λ‚˜μ˜ μ±„λ„λ‘œ ν†΅ν•©ν•˜κ²Œ 되면 λ™μΌν•œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 λŒμ•„κ°€λŠ” ν™˜κ²½μ΄ λ©λ‹ˆλ‹€.
μ±„λ„μ΄λΌλŠ” κ°œλ…μ„ 톡해 λΉ„μ¦ˆλ‹ˆμŠ€μ μΈ ν™•μž₯성을 μ œκ³΅ν•΄ 쀄 수 있으리라고 νŒλ‹¨λ©λ‹ˆλ‹€.

Ordering ServiceλŠ” λ‹€μŒμ˜ μ„€μ • μ˜΅μ…˜μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.

  • SOLO : μ‹±κΈ€ λ…Έλ“œλ‘œ μ„€μ •
  • Kafka / Zookeeper : 1:n λ…Έλ“œλ‘œ Crash Fault Tolerance μ œκ³΅ν•˜λ©°, ν™€μˆ˜ λ…Έλ“œλ₯Ό ꢌμž₯함.
  • SBFT (Future) : 1:n λ…Έλ“œλ‘œ Byzantine Fault Tolerance 제곡

3. μ •λ¦¬ν•˜λ©°

이번 글은 μƒˆλ‘­κ²Œ GA될 Fabric v1.0 의 μ•„μΉ΄ν…μ²˜ 쀑 ν‘œλ©΄μ μΈ μ»΄ν¬λ„ŒνŠΈ 듀에 λŒ€ν•΄μ„œ κ°„λž΅νžˆ μ„€λͺ…을 ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
λ³€ν™”λœ μ»΄ν¬λ„ŒνŠΈλ§Œ 해도 그리고 그에 λ”°λ₯Έ νŠΈλžœμž­μ…˜μ˜ νλ¦„λ§Œ λŒ€λž΅λ΄λ„ λ§Žμ€ 뢀뢄에 λŒ€ν•΄μ„œ λ³€ν™”κ°€ μžˆμ—ˆκ³  κ·Έ 말은 곡뢀할 λ‚΄μš©μ΄ λ§Žμ•„μ‘Œλ‹€κ³  λŠκ»΄μ§‘λ‹ˆλ‹€.
μ•žμœΌλ‘œλŠ” μ’€ 더 μƒμ„Έν•˜κ²Œ νŠΈλžœμž­μ…˜μ˜ 흐름을 μ„€λͺ…ν•˜λ©΄μ„œ 각 μ»΄ν¬λ„ŒνŠΈμ˜ 역할에 λŒ€ν•΄μ„œ μ΄ν•΄ν•˜λŠ” μ‹œκ°„μ„ 가지렀고 ν•©λ‹ˆλ‹€.

μ•žμœΌλ‘œλ„ μ΄μ–΄μ§ˆ λ‚΄μš© κΈ°λŒ€λ°”λžλ‹ˆλ‹€.