Skip to content

Instantly share code, notes, and snippets.

@ralphbean
Created October 1, 2012 16:52
Show Gist options
  • Select an option

  • Save ralphbean/3812984 to your computer and use it in GitHub Desktop.

Select an option

Save ralphbean/3812984 to your computer and use it in GitHub Desktop.
Script to generate an educated guess at the bandwidth/load requirements for fedmsg.
""" Script to do some math to make an educated guess at
bandwith requirements of fedmsg for Fedora Infrastructure.
::
--- ~/scratch » python message-size.py
kbps: 6.49658203125
mbps: 0.00634431838989
"""
import sys
# In order to get the typical message size, I've captured a
# message from the busthat we'll arbitrarilly ordain as the
# average message.
a_bodhi_message = "{u'certificate': u'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVVVENDQTdxZ0F3SUJBZ0lCSERBTkJna3Fo\na2lHOXcwQkFRVUZBRENCb0RFTE1Ba0dBMVVFQmhNQ1ZWTXgKQ3pBSkJnTlZCQWdUQWs1RE1SQXdE\nZ1lEVlFRSEV3ZFNZV3hsYVdkb01SY3dGUVlEVlFRS0V3NUdaV1J2Y21FZwpVSEp2YW1WamRERVBN\nQTBHQTFVRUN4TUdabVZrYlhObk1ROHdEUVlEVlFRREV3Wm1aV1J0YzJjeER6QU5CZ05WCkJDa1RC\nbVpsWkcxelp6RW1NQ1FHQ1NxR1NJYjNEUUVKQVJZWFlXUnRhVzVBWm1Wa2IzSmhjSEp2YW1WamRD\nNXYKY21jd0hoY05NVEl3TnpFMU1qSXdNRFE0V2hjTk1qSXdOekV6TWpJd01EUTRXakNCNERFTE1B\na0dBMVVFQmhNQwpWVk14Q3pBSkJnTlZCQWdUQWs1RE1SQXdEZ1lEVlFRSEV3ZFNZV3hsYVdkb01S\nY3dGUVlEVlFRS0V3NUdaV1J2CmNtRWdVSEp2YW1WamRERVBNQTBHQTFVRUN4TUdabVZrYlhObk1T\nOHdMUVlEVlFRREV5WmliMlJvYVMxaGNIQXcKTWk1emRHY3VjR2g0TWk1bVpXUnZjbUZ3Y205cVpX\nTjBMbTl5WnpFdk1DMEdBMVVFS1JNbVltOWthR2t0WVhCdwpNREl1YzNSbkxuQm9lREl1Wm1Wa2Iz\nSmhjSEp2YW1WamRDNXZjbWN4SmpBa0Jna3Foa2lHOXcwQkNRRVdGMkZrCmJXbHVRR1psWkc5eVlY\nQnliMnBsWTNRdWIzSm5NSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0IKZ1FEakF3\nVGU4YzB6T2wzdXY5VUU0U3hKbEE1RzRFc3pQejFybzZzcmRWZlZ4cFMvMFg4VXdZYWpIZWsxRGt4\nRQpDb0FPK3Raa3Q2VEo5MnovR0JHSHV6ZGZaOEFabGdIZGhTZzhkbHRDU1JRK0l4TEV1b1BPdXBv\nMUl4R0c2VnJFCld4a1g4VFNyVXBOQmRmaWJjc2phYW1JMFJYRjkwWVgxVnE0MU5Cd1p5TFVueFFJ\nREFRQUJvNElCVnpDQ0FWTXcKQ1FZRFZSMFRCQUl3QURBdEJnbGdoa2dCaHZoQ0FRMEVJQlllUldG\nemVTMVNVMEVnUjJWdVpYSmhkR1ZrSUVObApjblJwWm1sallYUmxNQjBHQTFVZERnUVdCQlJCMW83\nU3MvTkkzSkdqRTFQN0VVY0JLalFtMmpDQjFRWURWUjBqCkJJSE5NSUhLZ0JSclFGcjVFZ2lKV2Vk\nWjVRWDFBaDBLVG44VUFLR0JwcVNCb3pDQm9ERUxNQWtHQTFVRUJoTUMKVlZNeEN6QUpCZ05WQkFn\nVEFrNURNUkF3RGdZRFZRUUhFd2RTWVd4bGFXZG9NUmN3RlFZRFZRUUtFdzVHWldSdgpjbUVnVUhK\ndmFtVmpkREVQTUEwR0ExVUVDeE1HWm1Wa2JYTm5NUTh3RFFZRFZRUURFd1ptWldSdGMyY3hEekFO\nCkJnTlZCQ2tUQm1abFpHMXpaekVtTUNRR0NTcUdTSWIzRFFFSkFSWVhZV1J0YVc1QVptVmtiM0po\nY0hKdmFtVmoKZEM1dmNtZUNDUURqVUI1SFR4Y2VSVEFUQmdOVkhTVUVEREFLQmdnckJnRUZCUWNE\nQWpBTEJnTlZIUThFQkFNQwpCNEF3RFFZSktvWklodmNOQVFFRkJRQURnWUVBR04wNmJ3RGg4UE8w\ndEJpRHJhUmtyUks4ZitIQ2NKZ0RWbnBDCkZYUE5kWDdvcXJkS2h5NzRPdGVsL1BZYzBrWWZkZlZH\nNGR4VnBDK0pZMUR5Z3ZwcWVXZGt5cjFwZGdyUzdSSVIKZVhnbXJrYWF1ZkhHdDVBckRxUzJ5VmRX\nM0tBWEZBWWcyaSsvajZHVkc5SjdlQ1h6U29uUkQ1NUlnM2drWnFLKwprMlNYMEFRPQotLS0tLUVO\nRCBDRVJUSUZJQ0FURS0tLS0tCg==\n', u'i': 1, u'timestamp': 1349109682.103498, u'topic': u'org.fedoraproject.stg.bodhi.update.comment', u'signature': u'30XkM8GGWTADbtEAspdlq9C8PDLgtXdnEZ06w0OAYDWg4DXbtVjP8dzmgi9pDl//HkDaMBR4jBSp\ng2IQktGKw5gBjwR/s1JIB9OKMsvn2ynh0NekZcEt1vM8o6vSiYuPD2xiAcSdSeJXx8Nt+ZgrjppC\n8rCcGZY/OuDKwMPhSPY=\n', u'msg': {u'comment': {u'group': None, u'author': u'ralph', u'text': u'Testing more for fedmsg.', u'karma': 1, u'anonymous': False, u'timestamp': 1349109680.0, u'update_title': u'xmonad-0.10-10.fc17'}}}"
average_size = sys.getsizeof(a_bodhi_message) * 2
# N is the number of senders and is not used
N = 1
# M is the number of receivers.
# In production we have three receivers up.
# - a fedmsg-hub running on busgateway01
# - a fedmsg-gateway running on busgateway01
# - a fedmsg-irc running on value03
#
# At any given time, if someone is running fedmsg-tail, that adds
# another receiver to the mix making the count 4.
#
# Assume in the future we'll distribute the fedmsg-hub across some set of
# nodes. Those fedmsg-hub worker instances would be fed by a round-robin
# dealer (that I haven't implemented yet). So let's add an extra receiver
# for that dealer.
M = 5
# Just from glancing at the bus this morning, it seemed like we were getting one
# message every 20 seconds during a high point.
# We'll multiply that by 5 just to take into account new high-volume services
# that haven't been integrated yet like koji and bugzilla. We don't know, but I
# *suspect* they'll be high-volume.
messages_per_second = 1.0/20 * 5
bits_per_second = average_size * messages_per_second * M
kbps = bits_per_second / 1024.0
mbps = kbps / 1024.0
print "kbps:", kbps # kbps: 6.49658203125
print "mbps:", mbps # mbps: 0.00634431838989
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment