NSCA bottleneck / NSCA Timestamp

Andreas Ericsson ae at op5.se
Sat Nov 24 14:05:20 CET 2007


Thomas Guyot-Sionnest wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Andreas Ericsson wrote:
>> Thomas Guyot-Sionnest wrote:
>>> Solution #2:
>>> Each packet sent have a version number, so we can create new packet
>>> formats with different version (older servers will discard non-matching
>>> version). I'm not an expert in network protocols but I guess we should
>>> do something like this:
>>>
>>> typedef struct data_packet_struct{
>>>         int16_t   packet_version;
>>>         u_int32_t crc32_value;
>>>         u_int32_t timestamp;
>>>         int16_t   return_code;
>>>         uint16_t  count; /* bytes of data */
>>>         char      payload[MAX_PACKET_SIZE];
>>>         }data_packet;
> 
> Just FYI the "int16_t   return_code;" should have been removed (replaced
> by  uint16_t  count;).
> 
>>> typedef struct nsca_message_v3_struct{
>>>         int16_t   return_code;
>>>         char      host_name[MAX_HOSTNAME_LENGTH];
>>>         char      svc_description[MAX_DESCRIPTION_LENGTH];
>>>         char      plugin_output[MAX_PLUGINOUTPUT_LENGTH];
>>>         }nsca_message_v3;
>>>
>> This is bad. Look up modbus for how to write header + body part
>> messages which allows for near-unlimited protocol extensions.
> 
> Thanks for your insightful reply. As I said I don't have much experience
> in network protocols. My example was some kind of merge between the NTP
> protocol (which I know in details) and the current NSCA protocol with
> backward compatibility, and provided as an example as to what I had in
> mind. The idea is to leverage limitations without breaking old clients
> (so that an upgrade can be seamless and won't require upgrading clients
> that don't need it).
> 
>> With this way of doing things, you're limiting yourself to a
>> definitive size of each host/service. It makes for (a little)
>> easier coding, but it's a useless limitation to put on people.
> 
> The current limit for the payload would be 65k (uint16_t characters),
> and I see no way to way to increase that without splitting further the
> header struct (i.e. first get the packet_version (int16_t), then you can
> know what to expect next).
> 
>> [ code examples and comments... ]
> 
> This indeed looks great but I don't see how to make that
> backward-compatible. Also note that one data packet (with header) is
> sent per check result, so we must define the length of the packet to
> know where to expect the next header.
> 
> As for the padding, I not sure what the purpose is (I guess
> performance...). While we could pad any version >3, the current version
> (3) is a static size.
> 
> If you have time to look at the current protocol and draft something
> backward-compatible, convenient and extensible it would be awesome.
> 

Oh gee, that means I won't have time to go buy a vacuum-cleaner today.
What a shame ;-)

-- 
Andreas Ericsson                   andreas.ericsson at op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/




More information about the Developers mailing list