Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
15 февраля 2011, 8:17:19 AM   # 1
 
 
Сообщения: 1484
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
0. URL-адреса
----------------------------------------------------------------------------------
URL: http://yyz.us/bitcoin/pushpool-0.4.tar.gz
Repo: https://github.com/jgarzik/pushpool


1. Проблема
----------------------------------------------------------------------------------
С недавним slashdotting и результирующей приток новых пользователей, сетевой протокол «getwork» используется в горнодобывающей промышленности показывает некоторое напряжение, особенно в бассейнах. Шахтеры запросить работу один раз каждые 5-10 секунд, используя HTTP JSON-RPC, который имеет несколько вопиющих недостатков, которые приводят к ненужной нагрузке на сервере:
  • HTTP / 1.1 постоянные соединения являются редкостью, возможно, потому, что bitcoind их не поддерживает. Это приводит к новому соединению TCP от каждого шахтера, каждые 5-10 секунд, в одной и той же сети хоста.
  • «Getwork» данных составляет всего 256 байт, но HTTP заголовки и бинарные к шестнадцатеричном кодирования для JSON увеличить полезную нагрузку более чем в два раза
  • Реализация официального Биткойн клиента сервера RPC является по существу однопоточный контур, в котором запросы от клиентов B, C и D будут остановленных и игнорировали до запроса клиента А является закончена - или 30 секунд (см -rpctimeout). Этот алгоритм не допускает высокую частоту запросов TCP из нескольких потоков / компьютеров.

Несколько людей, операторы бассейна, в частности, имеют большой интерес к решению этих проблем. Кроме того, толчок добыча (см ниже) была обсуждена в качестве будущей альтернативы методы опроса «» getwork используемой в настоящее время.


2. Цели разработки для решения
----------------------------------------------------------------------------------
Я написал сервер демонстрационного бассейна (ака а «getwork» прокси-сервер), который функционирует таким же образом, к недавно обсуждалось poold.py: Большое число шахтеров подключения к серверу пула, который прокси запросы «getwork» JSON-RPC на официальный клиент Bitcoin. Эта демонстрация сервер реализует новый двоичный протокол, который был разработан для удовлетворения следующих целей:

  • Постоянные соединения TCP, чтобы устранить TCP отключить + восстановить поведение шахтеров
  • Сеть эффективная для общего случая использования: один сетевой пакет для «getwork», один сетевого пакета для возвращаемых данных.
  • Сеть эффективная для подобных случаев применения (monitorblocks, monitortx), где клиенты подключаются, а затем пассивно ждать событий в реальное время для доставки
  • Существующий шахтер клиент рабочих процессов поддерживается, для минимизации сетевого воздействия изменения протокола на шахтерах
  • Поддержка "толчок горнодобывающей промышленности," где сервер доставляет новую работу шахтеров Незапрошенных (то есть. без шахтера первой передачи сообщения «getwork»)

Эта не является предназначен для замены JSON-RPC API, но дополнить его для конкретных случаев применения. Да, это означает, что bitcoind будет слушать три сетевые порты: P2P сеть, JSON-RPC, и бинарная RPC (хотя, как сейчас, только P2P требуется для работы; сервера всегда по желанию).


3. Давайте начнем с примера протокола: сегодня добыча getwork
----------------------------------------------------------------------------------
Конкретные детали самого протокола в ubbp.h и protocol.h указанного выше URL (pushpool-0.1.1.tar.gz). Ниже приведен пример, чтобы обеспечить соответствующее введение:

* Соединение TCP разбивается на сообщения. Каждое сообщение имеет 64-битный заголовок, с 8-битным опкодом и 24-битовой полой длиной.
* Шахтерская клиент подключается к TCP серверу, и выдает сообщение LOGIN, который сжимает данные JSON входа + SHA256 хэша (данные + Shared Secret).
* Сервер отвечает с OP_LOGIN_RESP сообщи, сжатым форматом JSON, с указанием опций и возможностей
* Клиент выдает OP_GETWORK MSG (8 байт)
* Сервер отвечает с OP_WORK сообщ (264 байт)
* Клиент использует CPU / GPU для работы над доказательством правильности работы решения ...
* Клиент выдает OP_GETWORK MSG (8 байт)
* Сервер отвечает с OP_WORK сообщ (264 байт)
* ...

Приведенный выше пример намеренно соответствует существующему клиентскому рабочему процессу шахтера JSON-RPC «getwork» сегодня. Miner клиенты могут даже поддерживать лицо без операции по конвейерная в OP_LOGIN и OP_GETWORK запросы вместе, и закрывая соединение TCP. Stateless операция не рекомендуется, но является поддерживается для того, чтобы поддерживать самый широкий спектр существующих горнорудных клиентов.


4. Завтра добыча: толчок добыча
----------------------------------------------------------------------------------
Когда блок или ТХ прибывает, то предпочтительно, чтобы сразу приступить к работе на новой работе. С точки зрения сервера, это классическая проблема данных вещания, где сервер хочет вещать N различных частей работы N шахтеров. Следовательно, "толчок добыча" где сервер толкает новую работу проактивно в шахтерских клиентов.

Этот новый сетевой протокол поддерживает толкая добычу, как показано в следующем примере:

* Клиент подключается к серверу, выдает сообщение LOGIN с "send_me_work" установленный флаг
* Сервер отвечает OP_LOGIN_RESP сообщ
* Сервер отправляет OP_WORK Сообщи
* Сервер отправляет OP_WORK Сообщи
* Сервер отправляет OP_WORK Сообщи
* ...


5. Подобный вариант использования: monitorblocks
----------------------------------------------------------------------------------
Гэвин Андресен есть патч в его GitHub, который обеспечивает очень полезную функцию: когда новый блок получили (monitorblocks) или новую транзакцию бумажника (monitortx), bitcoind посылает HTTP POST на указанный URL. Таким образом, monitorblocks обеспечивает мониторинг в режиме реального времени в сети Bitcoin и monitortx обеспечивает мониторинг в режиме реального времени локального кошелька. Такой род featureset проталкивает данные, как происходят события, а не заставлять оператор сайта опрашивать JSON-RPC для определенных операций для завершения.

Мониторинг новых блоков в сети Bitcoin является очень легкой задачей широковещательной передачи данных, что этот двоичный протокол сети может легко поддерживать:

* Клиент подключается к серверу, выдает сообщение LOGIN с "send_me_blocks" установленный флаг
* Сервер отвечает OP_LOGIN_RESP сообщ
* Сервер отправляет OP_BLOCK Сообщи
* Сервер отправляет OP_BLOCK Сообщи
* Сервер отправляет OP_BLOCK Сообщи
...

monitortx является более сложным, потому что один может определять транзакции соответствия критериев. Но с поддержкой этого нового протокола о JSON, гибкость не является проблемой.


6. План для продолжения - это просто грубый проект
----------------------------------------------------------------------------------
Я имею в виду следующие шаги, чтобы продолжиться, учитывая необходимость сливаться несколько потенциально параллельные усилия нажимной горнодобывающие:
  • написать сервер / прокси-сервер в пул, который поддерживает новый протокол (сделано)
  • взломать существующие Проходчик клиентов (cpuminer, oclminer, кажется легкой мишенью) для поддержки нового протокола. волонтеры?
  • итерация, тест, комментарий. итерация, тест, комментарий. мыльная пена, полоскание, повторите
  • Когда люди счастливы, реализовать в официальном bitcoind
  • параллельно с любым из вышеуказанных усилий, обновления rpc.cpp официального bitcoind с разумной реализацией HTTPd

Пусть комментарии начинаются ... надеюсь, кто-то добровольно моднику шахтер GPU, чтобы поддержать это?



Приложение 1: Часто задаваемые вопросы
----------------------------------------------------------------------------------
Q. Зачем придумывать новый протокол? Почему бы не использовать буферы протокола Google или XDR?

А. Protobuf и XDR и требуют базового формата пакетирования, например, UBBP, что я подарил здесь. Это означает, что выбор будет UBBP + Protobuf или UBBP + JSON. Учитывая объятия Bitcoin сообщества о формате JSON, был выбран последний. JSON, на самом деле более гибким, чем protobufs, потому что больше динамические структуры данных могут быть описаны с использованием JSON.


Вопрос: Почему вы не вопиющие проблем в getwork?

A. Я сосредоточился исключительно на сетевом эффективный протокол. Выбор реализации getwork выходит за рамки данной работы.


Вопрос: Что такое состояние / качество этой версии кода?

А. Э-э, он компилирует и работает ... но ни один клиент еще не существует для него. Без клиента рудничной для тестирования, это о том, как полезно, как плевки на рыбу ...



jgarzik сейчас офлайн Пожаловаться на jgarzik   Ответить с цитированием Мультицитирование сообщения от jgarzik Быстрый ответ на сообщение jgarzik


Как заработать Биткоины?
Без вложений. Не майнинг.


15 февраля 2011, 11:48:20 AM   # 2
 
 
Сообщения: 487
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Получил 1806 Биткоинов
Реальная история.





Похоже, разумное повышение, тем более, что шахтеры будут уведомлены о новом блоке и будет иметь возможность начать на новом сразу
Cdecker сейчас офлайн Пожаловаться на Cdecker   Ответить с цитированием Мультицитирование сообщения от Cdecker Быстрый ответ на сообщение Cdecker

15 февраля 2011, 7:50:47 PM   # 3
 
 
Сообщения: 364
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Почему не UDP?
m0Ray сейчас офлайн Пожаловаться на m0Ray   Ответить с цитированием Мультицитирование сообщения от m0Ray Быстрый ответ на сообщение m0Ray

15 февраля 2011, 8:56:56 PM   # 4
 
 
Сообщения: 1484
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Почему не UDP?

Повторные предполагают, что вы завершаете изобретать TCP.
jgarzik сейчас офлайн Пожаловаться на jgarzik   Ответить с цитированием Мультицитирование сообщения от jgarzik Быстрый ответ на сообщение jgarzik

15 февраля 2011, 10:10:55 PM   # 5
 
 
Сообщения: 364
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Почему не UDP?
Повторные предполагают, что вы завершаете изобретать TCP.
Действительно ли требуется везде ретрансляция? Я думаю, что это полезно только во время входа в систему и результатов отчетности и только на стороне шахтер. Все остальные действия не требуют возможностей TCP.
Я думаю, что это может быть, как это:

Код:
минералогической>Сервер: Имя пользователя Пароль
Сервер->Miner: OK keepalive_timeout
Если шахтер не получает ответа в разумные сроки, он повторно отправляет запрос входа в систему.
На сервере ошибок Логин может просто проигнорировать запрос или отправить некоторые отклонять сообщения.
В случае успеха сервер записи шахтер IP и номер порта и добавляет его Miner идентификации таблицы вместе с текущей временной меткой.
Затем:
Код:
Сервер->Miner: РАБОТА ....

Однажды во время keepalive_timeout:
Код:
минералогической>Сервер: ALIVE
или
Код:
минералогической>Сервер: РЕЗУЛЬТАТ ...
Сервер->Miner: OK keepalive_timeout
Сервер должен обновлять метку времени в таблице идентификаторов шахтера тогда.
Miner дублирует РЕЗУЛЬТАТ сообщение, если он не получает ответа в разумные сроки.

Сервер удалит Проходчик записи идентификаторов из своей таблицы после того, как 4 *keepalive_timeout.
Обратите внимание, что сервер может адаптироваться keepalive_timeout для некоторых шахтеров с использованием статистических данных на лету.

Это позволит сократить трафик до минимума, имхо.
m0Ray сейчас офлайн Пожаловаться на m0Ray   Ответить с цитированием Мультицитирование сообщения от m0Ray Быстрый ответ на сообщение m0Ray

15 февраля 2011, 10:33:56 PM   # 6
 
 
Сообщения: 1484
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Почему не UDP?
Повторные предполагают, что вы завершаете изобретать TCP.
Действительно ли требуется везде ретрансляция? Я думаю, что это полезно только во время входа в систему и результатов отчетности и только на стороне шахтер. Все остальные действия не требуют возможностей TCP.

Шахтер не хочет потерять РАБОТУ сбщ, GETWORK сбщ, ни у их решение теряется. Каждое отдельное сообщение - LOGIN, GETWORK, РАБОТА, ... - должны быть повторно переданы или повторен на одну или другую сторону.

Но это только один из многих недостатков UDP. TCP также лучше поддерживается большинством языков программирования LIBS и более Firewall- и NAT удобно.

Реализовав множество UDP-серверов различного рода - финансовые данные каналы, игровые серверы и координаторами облачных вычислений - вы действительно ветер изобретать TCP при попытке просто иметь надежный UDP реализацию.
jgarzik сейчас офлайн Пожаловаться на jgarzik   Ответить с цитированием Мультицитирование сообщения от jgarzik Быстрый ответ на сообщение jgarzik

15 февраля 2011, 10:50:49 PM   # 7
 
 
Сообщения: 364
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

1) запрос Ни Войти, ни решение не теряются в моем предложении.
2) Я не думаю, что потеря работы сообщение будет серьезно влиять на производительность. Если я правильно понимаю принцип, новая работа будет транслироваться в каждой транзакции, полученной сервером. И это достаточно часто.
3) Я имею в виду только "От себя" протокол, который не использует GETWORK.
4) UDP, насколько я знаю, это то же NAT-дружественным, как TCP. В обоих случаях окно NAT просто отображает порт источника.
5) Это не так широко поддерживается LIBS только потому, что это очень просто.
6) Некоторые особенности TCP действительно накладные расходы при создании сервиса с малой задержкой. Так что иногда лучше переопределять некоторые функции TCP, чем использовать его полную версию. Например, в данном случае нам не нужно подтверждение приема для каждого сообщения.

И ... SYN Flood ...
m0Ray сейчас офлайн Пожаловаться на m0Ray   Ответить с цитированием Мультицитирование сообщения от m0Ray Быстрый ответ на сообщение m0Ray

16 февраля 2011, 2:04:24 AM   # 8
 
 
Сообщения: 247
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Я просто хочу сказать, что я также думаю, UDP это странно / плохая идея здесь.

И хотя я еще не время, чтобы погружаться в раствор выглядит очень красиво.
comboy сейчас офлайн Пожаловаться на comboy   Ответить с цитированием Мультицитирование сообщения от comboy Быстрый ответ на сообщение comboy

16 февраля 2011, 2:43:23 AM   # 9
 
 
Сообщения: 1484
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

1) запрос Ни Войти, ни решение не теряются в моем предложении.

Если они не могут быть потеряны, то они по определению должны быть переданы повторно. И вы должны построить логику, чтобы определить, как часто ретранслировать. Когда остановить ретрансляционной и отказаться. Обновленное TCP, другими словами.

котировка
2) Я не думаю, что потеря работы сообщение будет серьезно влиять на производительность. Если я правильно понимаю принцип, новая работа будет транслироваться в каждой транзакции, полученной сервером. И это достаточно часто.
3) Я имею в виду только "От себя" протокол, который не использует GETWORK.

Потеря сообщения WORK может означать потерю Деньги, из-за не работает на самом последнем блоке и т.д. Ни один шахтер не будет стоять за это, поэтому работа должна быть подтверждена клиентом и ретранслируются сервером. TCP делает это для нас автоматически.

котировка
4) UDP, насколько я знаю, это то же NAT-дружественным, как TCP. В обоих случаях окно NAT просто отображает порт источника.

UDP не имеет понятия соединений, поэтому ящик перегружен NAT должны полагаться на тайм-аутов и других хаков, в отличие от TCP. Но, сосредоточив внимание на NAT вы проигнорировали "брандмауэр"; TCP гораздо более легко проходит через брандмауэры, чем UDP. Я видел это на много крупных корпоративных сайтов особенно. Они будут делать локальный сервер DNS, а не UDP трафик будет проходить через брандмауэр во внешний мир. Если вы хотите универсальность, UDP не путь. TCP просто больше шансов на успех.


котировка
6) Некоторые особенности TCP действительно накладные расходы при создании сервиса с малой задержкой. Так что иногда лучше переопределять некоторые функции TCP, чем использовать его полную версию. Например, в данном случае нам не нужно подтверждение приема для каждого сообщения.

Только если вы не возражаете потерять деньги

jgarzik сейчас офлайн Пожаловаться на jgarzik   Ответить с цитированием Мультицитирование сообщения от jgarzik Быстрый ответ на сообщение jgarzik

16 февраля 2011, 1:00:30 PM   # 10
 
 
Сообщения: 350
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Как насчет увеличения интервала времени между запросами? А запрет для тех, кто будет использовать частые запросы.
bitcoinex сейчас офлайн Пожаловаться на bitcoinex   Ответить с цитированием Мультицитирование сообщения от bitcoinex Быстрый ответ на сообщение bitcoinex

16 февраля 2011, 2:21:39 PM   # 11
 
 
Сообщений: 45
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Как насчет увеличения интервала времени между запросами? А запрет для тех, кто будет использовать частые запросы.

Это может вызвать проблемы для тех, кто использует большое количество процессорных ядер, хотя?
burtyb сейчас офлайн Пожаловаться на burtyb   Ответить с цитированием Мультицитирование сообщения от burtyb Быстрый ответ на сообщение burtyb

16 февраля 2011, 5:06:40 PM   # 12
 
 
Сообщения: 1484
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Как насчет увеличения интервала времени между запросами? А запрет для тех, кто будет использовать частые запросы.

Это не проблема сетевого протокола. Вы можете легко добавить эти правила к серверу пула или bitcoind после того, как протокол развернут.
jgarzik сейчас офлайн Пожаловаться на jgarzik   Ответить с цитированием Мультицитирование сообщения от jgarzik Быстрый ответ на сообщение jgarzik

16 февраля 2011, 6:23:13 PM   # 13
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Я только что прочитал источники и смешивание двоичного протокола с JSon сжатых данными, выглядит странно для меня. Почему бы просто не использовать (сжатый) JSON-RPC через TCP и определить только методы RPC? Это должно быть намного проще реализации на любом языке, более стандартным, читаемые и т.д. Но это все еще позволяет нажимные функции и будет более эффективным, так как мы избавимся от HTTP накладных расходов. Пожалуйста, не изобретайте колесо.

Может быть, я слишком высокого уровня ориентированных, но герметизирующего JSON RPC в двоичном протокола является очень необычным.

Например, метод 'Логин' должен выглядеть {ID: 'ххх', метод: 'Вход', Params: [ 'имя пользователя', 'SHA256 из имени пользователя + пароль']}. Одна команда может быть завершена новая линия, или лучше, почти каждый язык имеет поддержку потокового JSON (ну, я знаю, Java и Python библиотеки), потому что это очень легко обнаружить, что сообщение завершено.
слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть

16 февраля 2011, 6:31:33 PM   # 14
 
 
Сообщения: 1484
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

Я только что прочитал источники и смешивание двоичного протокола с JSon сжатых данными, выглядит странно для меня. Почему бы просто не использовать (сжатый) JSON-RPC через TCP и определить только методы RPC?

Поскольку отправка работы, как сжимаются JSON включает
  • кодирование бинарных данных в шестнадцатеричном
  • хранить эту строку в шестнадцатеричной структуре JSON
  • сжатие JSON
  • (Отправляется клиенту)
  • декомпрессия JSON
  • получать указатель на шестнадцатеричную строку
  • декодирования шестнадцатеричной строка двоичных данных

Это, очевидно, более простое - менее использование процессора и меньше использования полосы пропускания - для отправки двоичных данных непосредственно работы. Помните, что двоичные данные общий случай для добычи полезных ископаемых.

JSON в протоколе для гибких особенности переговоров и конфигурации. Но мы должны избегать сегодня Binary->текст->compressed->текст->двоичное кодирование данных избыточного, так как шахтеры работают на двоичных данных.
jgarzik сейчас офлайн Пожаловаться на jgarzik   Ответить с цитированием Мультицитирование сообщения от jgarzik Быстрый ответ на сообщение jgarzik

16 февраля 2011, 6:52:59 PM   # 15
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

    Поскольку отправка работы, как сжимаются JSON включает
    • кодирование бинарных данных в шестнадцатеричном

    Абсолютно маргинальные накладные расходы. Среднее ядро ​​процессора может кодировать мегабайт данных в шестнадцатеричные в секунду.

    котировка
    • хранить эту строку в шестнадцатеричной структуре JSON

    Так 2x больше данных (два байта для одного сырого байта) для самой полезной нагрузки. Для одной горной работы, только несколько байт действительно требуется, большинство текущих отправки данных клиента не используется (источник: m0mchil). Гораздо более эффективным способом является изменение работы полезной нагрузке на себя.

    котировка
    • сжатие JSON

    Что же в вашем предложении, для хранения сообщений полезной нагрузки. Опять же, я не вижу реальные проблемы здесь.

    котировка
    • получать указатель на шестнадцатеричную строку

    Вот почему я сказал, что я, наверное, слишком HighLevel. Я действительно не забочусь о нахождении указателя в шестнадцатеричной строке. Это гораздо более экономически эффективным, чтобы оставить эту работу на компьютерах и библиотеки высокого уровня, чем возиться с битами на протокол низкого уровня. Не забывайте, что этот протокол должен быть переписан на многих языках, поэтому, используя стандартный протокол, вы экономите десятки часов труда для программирования и исправления ошибок.

    котировка
    Это, очевидно, более простое - менее использование процессора и меньше использования полосы пропускания - для отправки двоичных данных непосредственно работы. Помните, что двоичные данные общий случай для добычи полезных ископаемых.

    Вы правы, что сырой двоичный протокол действительно является наиболее эффективным. Но давайте найти разумный уровень оптимизации. Он не должен быть _perfect_. Она должна быть эффективной и простой в обращении / отладки. Не забывайте, что вы оптимизация наносекунд работы процессора, а затем выполнить один запрос SQL, который 100x медленнее, чем любой разбор протокола.

    Грубый расчет:

    Теперь:
    --------
    Один запрос: 300 байт запроса HTTP, 700 байтов данных ==> ~ 1 кБ данных каждые 5 секунд в течение каждого рабочего. Это 12Kb за минуту на одного работника.

    Json над TCP:
    --------
    Один запрос: (приблизительно) 20 байт запроса, 300? байт ответа КАЖДЫЙ МИНУТНОГО ==> 320 байт в минуту на одного работника.

    По очень простой оптимизации, вы сократить пропускную способность до 2,5% от первоначального размера. Без каких-либо бинарной пустячный и собственные вещи. Сколько% будет экономия между Json над TCP и двоичной через TCP? [/ Список]
    слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть

    16 февраля 2011, 7:05:24 PM   # 16
     
     
    Сообщения: 1372
    Цитировать по имени
    цитировать ответ
    по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

    Один запрос: (приблизительно) 20 байт запроса, 300? байт ответа КАЖДЫЙ МИНУТНОГО ==> 320 байт в минуту на одного работника.

    Ну, я знаю, что я снова смешивания протокола и реализации getwork. Но нет никакого смысла в большой поддержке getwork над TCP и до сих пор отправки задания каждые 5 секунд. Поэтому я говорю о реальной ситуации, об использовании протокола TCP и реализации реального pushwork сразу.
    слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть

    16 февраля 2011, 7:16:51 PM   # 17
     
     
    Сообщения: 1484
    Цитировать по имени
    цитировать ответ
    по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

    Поскольку отправка работы, как сжимаются JSON включает
    • кодирование бинарных данных в шестнадцатеричном

    Абсолютно маргинальные накладные расходы. Среднее ядро ​​процессора может кодировать мегабайт данных в шестнадцатеричные в секунду.

    котировка
    • хранить эту строку в шестнадцатеричной структуре JSON

    Так 2x больше данных (два байта для одного сырого байта) для самой полезной нагрузки. Для одной горной работы, только несколько байт действительно требуется, большинство текущих отправки данных клиента не используется (источник: m0mchil). Гораздо более эффективным способом является изменение работы полезной нагрузке на себя.

    котировка
    • сжатие JSON

    Что же в вашем предложении, для хранения сообщений полезной нагрузки. Опять же, я не вижу реальные проблемы здесь.

    котировка
    • получать указатель на шестнадцатеричную строку

    Вот почему я сказал, что я, наверное, слишком HighLevel. Я действительно не забочусь о нахождении указателя в шестнадцатеричной строке. Это гораздо более экономически эффективным, чтобы оставить эту работу на компьютерах и библиотеки высокого уровня, чем возиться с битами на протокол низкого уровня. Не забывайте, что этот протокол должен быть переписан на многих языках, поэтому, используя стандартный протокол, вы экономите десятки часов труда для программирования и исправления ошибок.

    Вы слишком буквально. Даже питон должен сделать этот шаг: работа = json_result [ «данные»]


    котировка
    котировка
    Это, очевидно, более простое - менее использование процессора и меньше использования полосы пропускания - для отправки двоичных данных непосредственно работы. Помните, что двоичные данные общий случай для добычи полезных ископаемых.

    Вы правы, что сырой двоичный протокол действительно является наиболее эффективным. Но давайте найти разумный уровень оптимизации. Он не должен быть _perfect_. Она должна быть эффективной и простой в обращении / отладки. Не забывайте, что вы оптимизация наносекунд работы процессора, а затем выполнить один запрос SQL, который 100x медленнее, чем любой разбор протокола.

    Делая все дополнительные, бессмысленные работы Binary->текст->сжатие>текст->двоичная также увеличивает вероятность ошибки программиста.

    Если у вас есть двоичный файл, пакетированный протокол, самое простое, наименее подверженные ошибкам, что нужно сделать, это получить (или создать, в случае bitcoind в) сырой двоичный пакет, и передать непосредственно на подключенный шахтер.

    jgarzik сейчас офлайн Пожаловаться на jgarzik   Ответить с цитированием Мультицитирование сообщения от jgarzik Быстрый ответ на сообщение jgarzik

    16 февраля 2011, 7:20:49 PM   # 18
     
     
    Сообщения: 1484
    Цитировать по имени
    цитировать ответ
    по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

    Один запрос: (приблизительно) 20 байт запроса, 300? байт ответа КАЖДЫЙ МИНУТНОГО ==> 320 байт в минуту на одного работника.

    Ну, я знаю, что я снова смешивания протокола и реализации getwork. Но нет никакого смысла в большой поддержке getwork над TCP и до сих пор отправки задания каждые 5 секунд. Поэтому я говорю о реальной ситуации, об использовании протокола TCP и реализации реального pushwork сразу.

    Протокол поддерживает несколько вариантов использования:
    • getwork опроса (то есть., как каждый шахтер написано сегодня). C: GETWORK S: РАБОТА С: GETWORK S: РАБОТА ...
    • нажмите горнодобывающего C: CONFIG (толчок для горнодобывающей промышленности) S: РАБОТА С: РАБОТА С: РАБОТА С: РАБОТА ...
    • monitorblocks C: CONFIG (монитор блокирует) S: БЛОК S: БЛОК S: BLOCK ...

    Протокол поддерживает LAN или WAN, bitcoind или сервер пула.

    Если клиент предпочитает шахтер опрос над нажимной добычей, они может выбрать чтобы сделать это.



    jgarzik сейчас офлайн Пожаловаться на jgarzik   Ответить с цитированием Мультицитирование сообщения от jgarzik Быстрый ответ на сообщение jgarzik

    16 февраля 2011, 7:33:23 PM   # 19
     
     
    Сообщения: 1372
    Цитировать по имени
    цитировать ответ
    по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

    Вы слишком буквально. Даже питон должен сделать этот шаг: работа = json_result [ «данные»]

    Хорошо, я не сказал, что поиск указателя не требуется / выполняется внутри, автоматически. Это просто делается с помощью стандартных библиотек, представленных на любом языке, и нет необходимости снова реализовать бинарный материал.

    котировка
    Делая все дополнительные, бессмысленные работы Binary->текст->сжатие>текст->двоичная также увеличивает вероятность ошибки программиста.

    Ну, мы говорим о личном мнении. Мое мнение таково, что программирования высокого уровня, намного проще и подвержены ошибкам, чем реализация низкого уровня. Благодаря этому подходу, мы программируем на языках высокого уровня, а не на ассемблере.

    И вы до сих пор не дает расчет экономии пропускной способности в отношении JSON RPC через TCP.

    котировка
    После того как вы двоичный, пакетированный протокол, самый простой

    Верный. Но я надеюсь, что вы не хотите сказать, что

    импорт JSON
    json.decode (sock.read ())

    это труднее сделать, чем создавать собственную библиотеку синтаксического анализа для каждого языка (C, Python, Java, PHP?) и распаковка двоичных данных, не так ли?

    Я не хочу быть личным в любом случае, я думаю, это здорово, что вы открываете эту тему. Я просто найти некоторое равновесие между хардкор низкоуровневой вещи и почти стандартный протокол реализован в любом месте. Я просто не осуждено, что этот протокол нужен такой тяжелый overoptimization.
    слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть

    16 февраля 2011, 7:36:15 PM   # 20
     
     
    Сообщения: 169
    Цитировать по имени
    цитировать ответ
    по умолчанию Re: Bitcoin протокола двоичных данных, для добычи полезных ископаемых, monitorblocks и т.д.

    Как насчет увеличения интервала времени между запросами? А запрет для тех, кто будет использовать частые запросы.
    Как насчет многих пользователей NAT-соединений?
    Я думаю, что вы говорите "они должны использовать разные имя пользователя / пароль,", Но они не должны делать это и может написать шахтера, которые используют различные учетные записи для часто просит ...
    нареч сейчас офлайн Пожаловаться на нареч   Ответить с цитированием Мультицитирование сообщения от Adv Быстрый ответ на сообщение нареч

    

    Как заработать Биткоины?

    Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

    bitcoin-zarabotat.ru
    Почта для связи: bitcoin-zarabotat.ru@yandex.ru

    3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW