스팀 API 노드의 탈중앙화 문제
최근에 있었던 스팀잇 장애로 인하여 생각하게 된 부분입니다.
스팀의 공식 API 노드는 api.steemit.com입니다. 그 외에도 여러 증인들이 API 노드를 운영하고 있습니다. 현재 동작중인 노드들은 @justyy님의 웹사이트에서 확인할 수 있습니다. 아래의 링크입니다.
https://steemyy.com/node-status.php
최근 발생한 장애는 API 노드가 전체적으로 중단된 것이 아니라 계정 이력(account history) 부분만 문제가 생긴 것으로 보입니다. 아마도 account history 노드를 별도로 운영하는데 이 노드에 장애가 발생한 것으로 추측됩니다.
문제는, 여러개의 API 노드가 있는 것처럼 보이지만 api.steemit.com의 account history 노드가 멈출 경우 다른 API 노드들 또한 해당 기능을 제공하지 못하고 있다는 점입니다. 장애 발생 당시에 API 노드를 변경시키면서 일일이 확인을 해 보았는데, 어떤 API 노드도 account history를 제대로 제공하지 못했습니다.
겉보기에는 많은 노드가 있는 것 같지만, 실질적으로 account history는 전부 api.steemit.com에 의존하고 있는 것이 아닌가 생각됩니다. 결론적으로, 실질적인 full node는 api.steemit.com 하나뿐인 것으로 보입니다. 스팀잇 접속을 포함해서 여러 가지 서비스가 account history를 조회할 경우 모든 요청은 결국 api.steemit.com의 account history 노드 하나에 전부 몰리고 있는 것 같습니다.
정말로 이런 상황이라면 서버 하나가 다운되면 스팀잇 전체가 무력화된다는 의미입니다. 증인 노드들에 의해 블럭체인은 유지되겠지만 사용자가 포스트를 제대로 열람할 수 없으니까요.
이 문제를 해결하는 방안은, 현재 API 노드를 운영중인 분들중 누군가가 나서서 account history 노드를 구축하여 진정한 full node를 운영하거나 또는 서비스 운영자가 직접 API 노드를 구축해서 운영해야 합니다.
제 경우엔 증인 노드와 보팅 서비스를 운영하고 있긴 하지만 사실상 적자운영중인 상황이라 하드웨어 측면에서 더 이상 뭘 어떻게 하기는 쉽지 않은 것이 현실입니다. 스팀 API 노드가 이런 상황이니 참 여러가지로 고민을 하게 만드네요.
스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다.
(https://steemitwallet.com/~witnesses)
jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다.
jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기
Posted through the AVLE Dapp (https://avle.io)
Upvoted! Thank you for supporting witness @jswit.
Thank you, friend!
![image.png](https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmd7of2TpLGqvckkrReWahnkxMWH6eMg5upXesfsujDCnW/image.png)
![image.png](https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmWDnFh7Kcgj2gdPc5RgG9Cezc4Bapq8sQQJvrkxR8rx5z/image.png)
I'm @steem.history, who is steem witness.
Thank you for witnessvoting for me.
please click it!
(Go to https://steemit.com/~witnesses and type fbslo at the bottom of the page)
The weight is reduced because of the lack of Voting Power. If you vote for me as a witness, you can get my little vote.
최근 문제가 된 것은 hivemind라고 합니다. 저도 자세히는 모르지만 주로 커뮤니티 기능을 담당한다고 알곺있습니다. 소스는 여기에 있고요.
https://github.com/steemit/hivemind
rpc노드(fullnode), seed노드, 증인노드이외에 mind노드도 있습니다. 이번에 hivemind에 버그가 있어서 다운되고 요청을 처리하지 못한 것으로 보입니다. 이번 건은 코드 버그로 인해 어쩔 수 없는 것이었던 거 같습니다.
문제는 steemit.com은 api.steemit.com만 바라보게 되어 있는 구조입니다. 해당 rpc노드가 다운되면 steemit.com은 먹통이 될 것입니다. 에이블은 이러한 문제가 어느 정도 해결되도록 되어 있습니다. 살아있는 rpc노드로 연결하도록 되어 있습니다. 문제는 살아있는 rpc노드로 요청을 하더라도 여기서 다시 죽어있는 hivemind노드로 연결하는게 아닌가 합니다.
그렇군요. 제가 운영하는 업보팅 서비스가 account history를 사용하는데 이 부분이 제대로 동작하지 않아서 AH노드에 뭔가 문제가 있는 것이 아닌가 추측을 했었습니다.
어쨌든 제가 확인한 사항은 아래와 같습니다.
api.steemit.com에서 account history 응답이 제대로 오지 않을 때는 다른 API 노드들에서도 마찬가지 문제가 발생하고, apisteemit.com이 복구되고 한 후에는 다른 API 노드들에서도 account history를 받을 수 있었습니다. 따라서, 진정한 full node는 하나이며, API 노드는 현재 사실상 중앙집중화되어 있다고 추정하고 있습니다.
비용이 얼마나 들지 모르겠지만 DIP는 이런 것 해결해야 하는 것 아닐까 합니다.
한국 증인들이 비용을 염출해서 만드는 방법도 생각해 볼 수 있지 않을까 합니다.
서버 임대료가 지속적으로 지불되어야 하기 때문에 대부분 full node 구축보다는 기본적인 기능을 구성하고 account history나 hivemind는 api.steemit.com에 의존하는 쪽으로 선택한 것이 아닌가 싶습니다. DIP에 집행할 기금이 있다면 일부를 공식적으로 API 노드 추가에 사용하면 어떨까 생각되기도 합니다.
This post has been featured in the latest edition of Witness Weekly...
If you would like to support Witness Weekly and Steem News please consider voting for @pennsif.witness
Thank you.
Hi joviansummer
These few problems show that there are many fake full nodes, but except that hivemind was a code problem.. Other official downtimes. Our full nodes are still running normally. Unfortunately, many of our investments are not understood by everyone . We invest in various servers. Develop DAPP .Hope to get support from many people
I see. @etainclub also mentioned that this outage was hivemind problem. By the way, just to clarify, are you running independent API node with main RPC node, AH node, and Hivemind? If your answer is yes, you're making a great contribution to STEEM blockchain. If so, more people should be aware of this. Thanks for the comment.
Yes, we independently deploy all services RPC, AHNode, and HIVEMIND. And these services all provide backup. So that we can quickly restore.
![image.png](https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmNu8WEoi8F9WEVgtaBSnF1XgmNEDNMA6fSVxdcCVHwXax/image.png)
![image.png](https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmeHSZdRfvrx2NsZdKinYXDddvRkdTUgi5cgVukBMo4Cvb/image.png)
That's awesome. I just wrote a post introducing your API node. And I voted for you as witness(@joviansummer and @jswit). Thanks!
When the problem with hivemind came, all posts and comments were visible on steemworld.org but not on steemit.com
Maybe @steemchiller has a good answer to what needs to be done
As far as I know, steemworld is based on @steemchiller's own SDS(STEEM data service). I'm not sure, but maybe SDS is not dependent on Hivemind. Thanks for the comment.
Hi! I wanted to explain a little more about this issue, particularly with regard to Jussi's role in this. My comment turned into an article, so I just wanted to link it for you.
Thanks for the info.
As for outages, there have been multiple outages before this one. Sometimes an outage situation went like this: Regarding account history API calls, some API nodes still worked correctly but others not. After api.steemit.com came back, those previously problematic API nodes worked correctly. That's why I think STEEM API nodes are not decentralized enough.
Considering that running an independent full API node is not a small task, I think it would be better if there is one more official API node from Steemit Team.
Yes, I completely agree. More official nodes would be great to see.