Skip to content

Support SaveMessagesAndIncrNextSenderMsgSeqNum in MessageStore #555

@Yu-Xie

Description

@Yu-Xie

Today, MessageStore persist message to send one by one through this method:

SaveMessageAndIncrNextSenderMsgSeqNum(seqNum int, msg []byte) error

This means each outgoing message maps to one database operation. This is less efficient when there is traffic spikes.
I did a benchmark using SQL Store, with local laptop and Postgres in Docker. If you send out X outgoing messages all at once by calling SendToTarget, the results are listed below (which is very slow because we write to database for every single message without batching at all):

  • 100 Messages = 204 ms (490 QPS)
  • 1000 Messages = 1568 ms (638 QPS)
  • 5000 Messages = 8294 ms (602 QPS)
  • 10000 Messages = 15712 ms (636 QPS)

The proposal is to support batching for outgoing messages:

  1. Support a bulk method func SaveMessagesAndIncrNextSenderMsgSeqNum(seqNum int, msg [][]byte) in the storage interface.
  2. Support a bulk method func SendAppToTarget(m []Messagable, sessionID SessionID) error in registry.go which invokes 1. underneath.

Prototype is done in this PR #576 with SQLStore and In Memory Store support (not file store / mongo store yet).

@ackleymi @mgatny What do you think?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions