아키텍처 구조
채굴기 하드웨어 한계를 확인하여 stratum프로토콜 단일 채널 구조 재설계
문제원인
채굴기 생산업체측 하드웨어가 마이닝풀에서mining.notify를 짧은 간격으로 전파하면, 커넥션은 연결된 채로 share를 제출하지 못하는 현상이 발생
해결과정
- 채굴기 쪽에서는 블록체인에서 새로운 블록을 생성하면, 현재 작업은 필요없게 되므로 현재 job을 버리고 새 job을 받는 동기화가 반드시 필요. 그래서 마이닝 풀쪽에서는 동기화를 위한 notify와 연결 유지를 위한 주기적 notify작업이 있었고 그 두 사이클이 겹치면서 동시에 같은 height와 ‘clean:true’ notify(스트라텀 v1 프로토콜)하는 상황 발생. 채굴기가 동시에 들어온 notify를 핸들링 하지 못함을 확인.
- 채굴기 스펙 실측확인
- mining.notify 짧은 주기로 수신시 50ms 이하에서 stuck이 됨을 재현, 100ms이상은 안정적
- stuck상황에서 새로운 jobId, ‘clean:true’로 두가지 조건이 충족해야 재가동 가능함을 확인.
- 병렬적으로 notify가 가능한 구조를 방지, job상태를 관리하는 단일 채널을 구성하고, 채널의 job이 fresh/stale인지 구분하는 책임을 consumer에서 고루틴으로 분리후 전파.
- proof체인을 1초 간격으로 polling해서 jobChan에 등록, 새로운 높이의 job은 notify ‘clean:true’, 같은 높이의 job은 ‘clean:false’로 파라메터 분리.
구조
결과
같은 원인으로 채굴기가 stuck하는 상황을 제거, 프루프노드와 동기화 상태 1초 이내 유지, 네트워크 이슈로 연결이 단절되어도 회복하는 resilence 향상
![[포트폴리오] MiningPool](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fattachment%253Aecb3bbec-bd2e-458e-aace-f38584817e62%253A%2525E1%252584%252591%2525E1%252585%2525A9%2525E1%252584%252590%2525E1%252585%2525B3%2525E1%252584%252591%2525E1%252585%2525A9%2525E1%252586%2525AF%2525E1%252584%252585%2525E1%252585%2525B5%2525E1%252584%25258B%2525E1%252585%2525A9_%2525E1%252584%25258C%2525E1%252585%2525A9%2525E1%252586%2525BC%2525E1%252584%252592%2525E1%252585%2525A1%2525E1%252586%2525B8.png%3Ftable%3Dblock%26id%3D3a29c76c-6cb4-80e5-9531-d7b3b085fd62%26spaceId%3Db4216657-966f-4c29-ae8c-42f6c4adb66d&w=3840&q=75)