``` Personally, I find RAFT to be much simpler to implement. However, I do not expect to reinvent the wheel here. ```
That's absolutely right, no need to reinvent the wheel, there are many existing implementations for raft: https://raft.github.io/ ``` I don't think using key store to persist all the messages is a good idea. ``` Yes, store an ID is enough. On Thu, Mar 8, 2018 at 3:32 PM, Sohaib Iftikhar <sohaib1...@gmail.com> wrote: > Hi Dexin, > > Thank you for your suggestions. I will try to answer as much as I can and > leave the rest to the RocketMQ team. > > 1. The idea with incremental Ids is actually quite good. But @Yukon > mentioned that duplication can also be controlled by an application > (special KV Property) in which case different producers may produce the > same message that needs to deduplicated on the broker. > SessionId+IncrementalId won't work in this scenario I believe. But we can > actually switch to more efficient storage using the idea you described when > the user is not specifying these special keys. > Also I proposed storing of keys for only a fixed time interval. For all > practical purposes this would still remain constant time. [Log base 2 of > 10^10 is still just 33 :) ]. It does add the extra cost of communication > but this would be the case in both scenarios. > 2. As for consensus, the ideas I presented were pretty abstract so I > mentioned a couple of algorithms that could potentially be used. > Personally, I find RAFT to be much simpler to implement. However, I do not > expect to reinvent the wheel here. I strongly believe that in this case, we > can build upon some tested existing solution. > > > Regards, > Sohaib > > On Thu, Mar 8, 2018 at 1:31 AM, 李 德鑫 <dexi...@outlook.com> wrote: > > > Hi Sohaib, > > > > > > I‘m a student applying for GSOC too. And I've read all of your discussion > > in the mail list. > > > > I have some questions about your design, and some of the questions may > > need to be answered by RocketMQ team. So I send them here to be > discussed. > > > > I don't think using key store to persist all the messages is a good idea. > > Since MQ is based on O(1) data structure. The key store would harm the > > performance. > > > > I think we can learn from TCP protocol. > > > > In Producer-Broker Communication, we can give an incremental id for every > > message sent in the same session. And the session id should be persistent > > on the disk for producer. So the broker only need to maintain a map > between > > session id to expected message id(And this is how Kafka do it). Since > > messages are much more than producers. However, there's still a K/V store > > needed. So we have to ask RocketMQ team about how many producers in the > > same time while in practical situation. > > > > Also, the same idea in Consumer-Broker Communication. > > > > > > About consensus algorithm, I think RocketMQ should already have an > > implementation there. I don't know what it is, but maybe you can reuse > > that. Or what if you have to implement one, in my opinion, there's no > need > > to implement both Paxos and Raft. Since they solve the same kind of > > problems. > > > > > > > > Regards, > > > > Dexin > > > > > > ________________________________ > > 发件人: Sohaib Iftikhar <sohaib1...@gmail.com> > > 发送时间: 2018年3月7日 18:15:51 > > 收件人: dev@rocketmq.apache.org > > 主题: Re: [GSOC|ROCKETMQ-124] Support non-redundant message delivery > > mechanism > > > > Hi Yukon, > > > > Thanks for your reply. Yes, it would be nice to concretely define the > scope > > of this project as the doc is a bit ambitious for just a summer. Should > you > > (or anyone else) have questions/suggestions/clarifications I'd be glad > to > > discuss more details. > > > > Thanks, > > Sohaib > > > > On Wed, Mar 7, 2018 at 8:58 AM, yukon <yu...@apache.org> wrote: > > > > > Hi, > > > > > > Google doc is better for discussion, your design is great, now we could > > > discuss more details base on it. > > > > > > Any advice is welcome from RocketMQ community. > > > > > > Appreciate your efforts. > > > > > > Regards, > > > yukon > > > > > > On Wed, Mar 7, 2018 at 5:15 AM, Sohaib Iftikhar <sohaib1...@gmail.com> > > > wrote: > > > > > > > Hi, > > > > > > > > @Yukon Thank you for your reply. This clears some doubts. > > > > > > > > Sorry for the delay as I was somewhat occupied with another project. > I > > > have > > > > created an initial design doc. Email is a bit cumbersome for > feedback I > > > > wrote this document in two formats: > > > > > > > > 1. In the form of a Google document: > > > > https://docs.google.com/document/d/1KSpXGNDH0HF5E27lfKJxJnjIjPtlP > > > > 1Q-M6rj3yZde24. > > > > The document is open for comments to all users without signing in. I > > > would > > > > appreciate it if you put your name before the comment so I can > identify > > > who > > > > to follow up the discussion with. > > > > > > > > 2. As a markdown on github: > > > > https://github.com/sohaibiftikhar/rocketmq/blob/ > > > gsoc_design/gsoc_design.md > > > > . > > > > The comments for this can be made on the commit: > > > > https://github.com/sohaibiftikhar/rocketmq/commit/ > > > > dfd55fc69f430fc024217a3b20dde31717334e62 > > > > > > > > After I have received a certain amount of feedback I will try to > > > > incorporate it and put in a subsequent version for review. Please > tell > > me > > > > which methods suits you better (gdoc or github) for review and we can > > > > continue with that for the subsequent versions. > > > > > > > > Lastly, the document is a couple of pages so I appreciate your > patience > > > and > > > > your help. > > > > Looking forward to your opinions. > > > > > > > > Thanks, > > > > Sohaib > > > > > > > > On Mon, Mar 5, 2018 at 1:01 PM, yukon <yu...@apache.org> wrote: > > > > > > > > > Hi Sohaib, > > > > > > > > > > Sorry for the late reply, we could move this project forward now ~ > > > > > > > > > > ``` > > > > > I would at some point like to post > > > > > design ideas to this problem privately to get it reviewed by the > > > > > development community but not make it publicly available so that it > > > > cannot > > > > > be plagiarised. > > > > > ``` > > > > > > > > > > You can send your design ideas to me directly or to our PMC list( > > > > > priv...@rocketmq.apache.org) if you want to make your ideas > > privately. > > > > But > > > > > please don't break away from the community. > > > > > > > > > > I hope you have already understood the goal of this project. Now, > > > > RocketMQ > > > > > support At-least-once delivery, it's an obvious solution > > > > > that achieves Exactly-Once by removing duplicated messages. > > > > > > > > > > Return to your original questions: > > > > > > > > > > 1. What defines a redundant message? > > > > > > > > > > A message id will be generated when new a message, so this id can > be > > > used > > > > > to identify a message. Also, the user could specify a unique > > > > > business-related property to identify a message. > > > > > > > > > > The redundant messages will occur when the network is broken or > > > > > reconnected, rebalance[1] is triggered, etc. > > > > > > > > > > > > > > > 2. Is their a timeline on the redundant messages? > > > > > > > > > > Yes, keep all messages nonredundant is expensive, let's consider > this > > > > > question within a certain time window ~ > > > > > > > > > > Looking forward to your design. > > > > > > > > > > [1]. > > > > > https://github.com/apache/rocketmq/blob/master/client/ > > > > > src/main/java/org/apache/rocketmq/client/impl/consumer/ > > > > > RebalanceService.java > > > > > > > > > > > > > > > Regards, > > > > > yukon > > > > > > > > > > > > > > > On Fri, Mar 2, 2018 at 9:31 PM, Sohaib Iftikhar < > > sohaib1...@gmail.com> > > > > > wrote: > > > > > > > > > > > @Zhanhui Thanks for the response. This is not a campaign its just > > > part > > > > of > > > > > > GSoC (https://summerofcode.withgoogle.com/). And community help > is > > > > > gladly > > > > > > welcomed. In fact, it is recommended :) > > > > > > > > > > > > @KaiYuan Thanks for your suggestions. I will come up with a flow > > > chart > > > > > for > > > > > > the proposed solution this weekend. > > > > > > > > > > > > Thanks, > > > > > > Sohaib > > > > > > > > > > > > > > > > > > On Fri, Mar 2, 2018 at 3:41 AM, Zhanhui Li <lizhan...@gmail.com> > > > > wrote: > > > > > > > > > > > > > Hi Sohaib, > > > > > > > > > > > > > > I have been sort of busy this these days. Sorry to reply you so > > > late! > > > > > > > > > > > > > > So sure what “deadline” you are referring to. If this is part > of > > a > > > > > > > campaign, I have to admit I am not aware of the regulations and > > > what > > > > > kind > > > > > > > of help I should offer to maintain fairness considering other > > > arising > > > > > > > similar issues. > > > > > > > > > > > > > > Regards! > > > > > > > > > > > > > > Zhanhui Li > > > > > > > > > > > > > > > > > > > > > > 在 2018年3月1日,上午3:43,Sohaib Iftikhar <sohaib1...@gmail.com> > 写道: > > > > > > > > > > > > > > > > Hi guys, > > > > > > > > > > > > > > > > Would be nice to have some feedback on this as the deadline > is > > > not > > > > > too > > > > > > > far :) > > > > > > > > > > > > > > > > Thanks, > > > > > > > > Sohaib > > > > > > > > > > > > > > > > Regards, > > > > > > > > Sohaib Iftikhar > > > > > > > > > > > > > > > > -- Man is still the most extraordinary computer of all.-- > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Feb 26, 2018 at 10:36 AM, Sohaib Iftikhar < > > > > > > sohaib1...@gmail.com > > > > > > > <mailto:sohaib1...@gmail.com>> wrote: > > > > > > > > Thank you for the pointers to the code. This was super > helpful. > > > The > > > > > > > multiple keys can probably be serialized better than separating > > > them > > > > > > with a > > > > > > > space but that is already legacy I suppose. > > > > > > > > > > > > > > > > Firstly filters like bloom or cuckoo are heuristic. They can > > help > > > > > make > > > > > > > things faster but definitely cannot be used as the only > solution. > > > > > Hence, > > > > > > in > > > > > > > the end, we will still need a persistent keystore/distributed > > set. > > > My > > > > > > plan > > > > > > > was to have this keystore as distributed (raft guarantee etc.). > > The > > > > > > > keystore can also hold a persistent filter on its end. If a > > broker > > > > > > > collapses it can renew/refresh its filter from the keystore. > > Hence > > > > > > > eliminating the problems about crashes that you mention. The > > > problem > > > > > here > > > > > > > could be in maintaining performance for filters in case of > > removals > > > > > from > > > > > > > the keystore (for eg: sliding windows as mentioned in my > previous > > > > > mail). > > > > > > > Periodic refreshal of filters can help solve this but I am open > > to > > > > > > > suggestions on how to make this better. > > > > > > > > > > > > > > > > I think implementing a distributed set on the client cluster > > has > > > > its > > > > > > > caveats. The way I understand RocketMQ is that we do not have > > > control > > > > > > over > > > > > > > the diskspace/memory on the client end. So we probably only > have > > a > > > > > > constant > > > > > > > amount. A distributed set on the client would also need to be > > > > > persistent. > > > > > > > For eg: if a client restarts/recovers etc. This basically means > > we > > > > > need a > > > > > > > keystore on the client instead of the broker cluster. This > > probably > > > > > puts > > > > > > > too much responsibility on the client cluster. A different > > approach > > > > > would > > > > > > > be to ensure that the offsets are always in sync with the > broker. > > > > Since > > > > > > the > > > > > > > broker only serves unique messages (based on the proposed > > solution > > > on > > > > > the > > > > > > > producer/broker end) all we need to ensure is that a client > does > > > not > > > > > > > consume messages with the same offset twice. > > > > > > > > > > > > > > > > Please suggest improvements if this does not look like the > > > correct > > > > > > > approach. Also would be great if someone can come up with a > > > > completely > > > > > > > different approach so that we can weigh up pros and cons. > > > > > > > > > > > > > > > > Thanks for reading this through and looking forward to your > > > > opinions. > > > > > > > > > > > > > > > > Regards, > > > > > > > > Sohaib > > > > > > > > > > > > > > > > Regards, > > > > > > > > Sohaib Iftikhar > > > > > > > > > > > > > > > > -- Man is still the most extraordinary computer of all.-- > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Feb 26, 2018 at 3:58 AM, Zhanhui Li < > > lizhan...@gmail.com > > > > > > > <mailto:lizhan...@gmail.com>> wrote: > > > > > > > > Hi Sohaib, > > > > > > > > > > > > > > > > About multiple key support, the following code snippet should > > > > clarify > > > > > > > your doubt: > > > > > > > > org.apache.rocketmq.common.message.Message class has > > overloaded > > > > > > setKeys > > > > > > > methods, allowing your to set multiple keys via > string(separated > > by > > > > > > > space…sorry, we have not yet unified all separators, hoping > this > > > does > > > > > not > > > > > > > confuse you) or collection. > > > > > > > > > > > > > > > > > > > > > > > > When broker tries to build index for the message with > multiple > > > > keys, > > > > > > > multiple index entries are inserted into the indexing file. > > > > > > > > See org.apache.rocketmq.store.index.IndexService#buildIndex > > > > > > > > > > > > > > > > > > > > > > > > In terms of eliminating message duplication, personally, I > wish > > > we > > > > > have > > > > > > > a feature of exactly-once semantic covering the whole cluster > and > > > the > > > > > > > complete send-store-consume processes. A rough idea is route > the > > > > > message > > > > > > > according to its unique key to a broker according to a rule; > The > > > > > serving > > > > > > > broker ensures uniqueness of the message according to the key( > as > > > you > > > > > > said, > > > > > > > bloom-filter/cuckoo-filter, etc); Things might looks simple, > but > > > > > issues > > > > > > > resides in scenarios where cluster is experiencing membership > > > > changes: > > > > > > for > > > > > > > example, what if a broker crashed down? We might need propagate > > > > > > > bloom-filter bitset synchronously to other brokers having the > > same > > > > > > topics; > > > > > > > What if a new broker joins in the cluster and starts to serve? > I > > do > > > > not > > > > > > > mean this is too complex to implement. Instead, this is a > pretty > > > > > > > interesting topic and fancy feature to have. Alternatively, we > > > might > > > > > > defer > > > > > > > eliminating duplicates to the consumption phase using kind of > > > > > distributed > > > > > > > set. For sure, my proposing idea suffers the same challenges > > > > including > > > > > > > membership changes. > > > > > > > > > > > > > > > > Guys of dev board, any insights on this issue? > > > > > > > > > > > > > > > > Zhanhui Li > > > > > > > > > > > > > > > > > > > > > > > >> 在 2018年2月26日,上午2:47,Sohaib Iftikhar <sohaib1...@gmail.com > > > > <mailto: > > > > > > > sohaib1...@gmail.com>> 写道: > > > > > > > >> > > > > > > > >> Hi Zhanhui, > > > > > > > >> > > > > > > > >> I have a doubt about these multiple keys. If I am wrong in > any > > > of > > > > > the > > > > > > > >> assumptions I make please point it out. > > > > > > > >> > > > > > > > >> If there is support for multiple keys I cannot see this in > the > > > > code. > > > > > > The > > > > > > > >> class Message only stores a single key in the property map > > > against > > > > > the > > > > > > > >> property name "KEYS". Is this also done in the same ways as > > > tags? > > > > > That > > > > > > > is > > > > > > > >> different keys are separated with ' || '? So basically as a > > user > > > > of > > > > > > the > > > > > > > >> producer API it is the user's responsibility to ensure that > he > > > > > > separates > > > > > > > >> the different keys with the correct separator. I can see an > > > > obvious > > > > > > > problem > > > > > > > >> here. What if the key contains this special character ' || > '? > > > But > > > > > > maybe > > > > > > > >> this event is rare and hence this is not important. Could > you > > > > point > > > > > me > > > > > > > to > > > > > > > >> some source/doc that explains this part? I was looking at > the > > > > index > > > > > > > section > > > > > > > >> rocketmq-store but I have not been able to understand the > > > indexing > > > > > > > process > > > > > > > >> completely for now. I will keep reading the source to get a > > > better > > > > > > idea. > > > > > > > >> > > > > > > > >> Moving on to the implementational details. Here is a broad > > idea > > > of > > > > > one > > > > > > > >> possible way to approach it. > > > > > > > >> > > > > > > > >> The attempt is to remove duplicate messages. In this issue, > I > > > > would > > > > > > > like to > > > > > > > >> aim at eliminating duplicate messages at the producer/broker > > > end. > > > > > For > > > > > > > now, > > > > > > > >> we do not concern ourselves with the duplicate messages > > > happening > > > > > due > > > > > > to > > > > > > > >> unwritten consumer offsets as these two issues have > different > > > > > > solutions. > > > > > > > >> One way to solve this problem at the producer/broker end > could > > > be > > > > to > > > > > > > have a > > > > > > > >> distributed key store that stores the messages. We can make > it > > > > > > > configurable > > > > > > > >> such that this distributed store stores all messages or > works > > > as a > > > > > > > sliding > > > > > > > >> window keeping only the messages from the last X seconds > > > specified > > > > > by > > > > > > > the > > > > > > > >> user. We can have a layer on top to check set membership > such > > > as a > > > > > > bloom > > > > > > > >> filter or a cuckoo filter ( > > > > > > > >> https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf < > > > > > > > https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf>) to > > help > > > > > > > >> performance. Every message being pushed in by a producer are > > > > checked > > > > > > in > > > > > > > >> first with the filter and in case of a positive result with > > this > > > > key > > > > > > > store. > > > > > > > >> If the message is found then it is discarded. This helps > > remove > > > > > > > duplicates > > > > > > > >> completely from a producer perspective. The core of this > idea > > is > > > > the > > > > > > > >> distributed key store which would be completely separate > from > > > the > > > > > > > current > > > > > > > >> message storage. Since the concept of a distributed key > store > > > or a > > > > > > > >> key/value store is not novel there are two ways to this. > > > > > > > >> 1. Implement it ourselves. This would be high effort but no > > > > external > > > > > > > >> dependencies. > > > > > > > >> 2. Use a key-value store such as Redis (which already has > > > timeouts > > > > > and > > > > > > > >> persistence but a large memory footprint) or some other > > > disk-based > > > > > > > storage > > > > > > > >> for set membership. This would include an external > dependency > > > but > > > > > > > >> development time will reduce significantly for such a > > solution. > > > > > > > >> I am inclined towards implementing it by myself as this > would > > > > avoid > > > > > > > >> dependencies on other products especially since RocketMQ is > > > > > currently > > > > > > a > > > > > > > >> self-reliant system. In addition, my past experience with > > > building > > > > > > such > > > > > > > a > > > > > > > >> store should also come in handy. > > > > > > > >> > > > > > > > >> I would like to know the opinions of the development > community > > > on > > > > > this > > > > > > > >> approach and to suggest improvements on it. Looking forward > to > > > > your > > > > > > > >> responses to this. > > > > > > > >> > > > > > > > >> ====<question unrelated to issue>===== > > > > > > > >> To increase my familiarity with the code base and to help > > prove > > > > > that I > > > > > > > am > > > > > > > >> familiar with the tools and technologies in place it would > be > > > > great > > > > > > if I > > > > > > > >> could be pointed to some low effort issues that I could help > > out > > > > > with. > > > > > > > In > > > > > > > >> case there are no 'newbie' issues available I could help > > improve > > > > the > > > > > > > >> comments inside the codebase. I noticed some source files > with > > > no > > > > > > > >> explanations which can be documented via comments to help > > > onboard > > > > a > > > > > > new > > > > > > > >> contributor faster. > > > > > > > >> ====</question unrelated to issue>===== > > > > > > > >> > > > > > > > >> Thanks a lot for reading this through and looking forward to > > > your > > > > > > > opinions. > > > > > > > >> > > > > > > > >> Regards, > > > > > > > >> Sohaib > > > > > > > >> > > > > > > > >> > > > > > > > >> On Sat, Feb 24, 2018 at 11:50 AM, Zhanhui Li < > > > lizhan...@gmail.com > > > > > > > <mailto:lizhan...@gmail.com>> wrote: > > > > > > > >> > > > > > > > >>> Hi Sohaib, > > > > > > > >>> > > > > > > > >>> Happy to know you are interested in RocketMQ. > > > > > > > >>> > > > > > > > >>> First, let me answer questions you raised. > > > > > > > >>> > > > > > > > >>> — can there be multiple tags? > > > > > > > >>> No. At present, the storage engine allows single tag only. > > > > > > > Subscriptions > > > > > > > >>> are allowed to use combination of tags. The current model > > > should > > > > > meet > > > > > > > your > > > > > > > >>> business development. If not, please let us know. > > > > > > > >>> > > > > > > > >>> > > > > > > > >>> — key (Similar question to above.) > > > > > > > >>> RocketMQ builds index using message keys. A single message > > may > > > > have > > > > > > > >>> multiple keys. > > > > > > > >>> > > > > > > > >>> — About redundant message > > > > > > > >>> From my understanding, you are trying to eliminate > duplicate > > > > > > messages. > > > > > > > >>> True there are various reasons which may cause message > > > > duplication, > > > > > > > ranging > > > > > > > >>> from message delivery and consumption. Discussion on this > > topic > > > > is > > > > > > > warmly > > > > > > > >>> welcome. Had you had any idea to contribute on this issue, > > the > > > > > > > developer > > > > > > > >>> board is happy to discuss. > > > > > > > >>> > > > > > > > >>> Zhanhui Li > > > > > > > >>> > > > > > > > >>> > > > > > > > >>> > > > > > > > >>> > > > > > > > >>>> 在 2018年2月24日,上午11:17,Sohaib Iftikhar < > sohaib1...@gmail.com > > > > > <mailto: > > > > > > > sohaib1...@gmail.com>> 写道: > > > > > > > >>>> > > > > > > > >>>> My earlier email message seems to have gotten lost. So I > > will > > > > try > > > > > > > again. > > > > > > > >>>> Please see the original message for the discussion. > > > > > > > >>>> > > > > > > > >>>> Regards, > > > > > > > >>>> Sohaib Iftikhar > > > > > > > >>>> > > > > > > > >>>> -- Man is still the most extraordinary computer of all.-- > > > > > > > >>>> > > > > > > > >>>> On Tue, Feb 20, 2018 at 1:54 AM, Sohaib Iftikhar < > > > > > > > sohaib1...@gmail.com <mailto:sohaib1...@gmail.com>> > > > > > > > >>>> wrote: > > > > > > > >>>> > > > > > > > >>>>> Hi, > > > > > > > >>>>> > > > > > > > >>>>> I am interested in working on this issue ( > > > > > > https://issues.apache.org/ > > > > > > > <https://issues.apache.org/> > > > > > > > >>>>> jira/browse/ROCKETMQ-124) as part of GSOC-18. I have a > few > > > > > > questions > > > > > > > for > > > > > > > >>>>> the same. I am not sure if this discussion needs to be on > > the > > > > > JIRA > > > > > > > >>> issue or > > > > > > > >>>>> here. Feel free to correct me if this is the wrong > > platform. > > > > Also > > > > > > > while > > > > > > > >>> I > > > > > > > >>>>> have worked with distributed pub-sub systems I am still > > > fairly > > > > > new > > > > > > to > > > > > > > >>>>> Rocket-MQ so maybe my understanding of it is incorrect. I > > > > > apologise > > > > > > > if > > > > > > > >>> that > > > > > > > >>>>> is the case and would be happy to stand corrected. > > > > > > > >>>>> > > > > > > > >>>>> Following are my questions: > > > > > > > >>>>> 1. What defines a redundant message? > > > > > > > >>>>> The constructor that I see for a message is as follows: > > > > > > > >>>>> Message(String topic, String tags, String keys, int > flag, > > > > > byte[] > > > > > > > >>> body, > > > > > > > >>>>> boolean waitStoreMsgOK) > > > > > > > >>>>> Possible candidates to me are topic, tags (can there be > > > > > multiple > > > > > > > >>> tags? > > > > > > > >>>>> I could not find an example for this. If yes how are they > > > > > > > separated?), > > > > > > > >>> keys > > > > > > > >>>>> (Similar question to above.) and of course the body. Is > > there > > > > > > > something > > > > > > > >>>>> that I have missed in this? Is there something that we do > > not > > > > > need > > > > > > to > > > > > > > >>>>> consider? > > > > > > > >>>>> 2. Is their a timeline on the redundant messages? What I > > mean > > > > by > > > > > > > this is > > > > > > > >>>>> that is there a time limit after which a message with > > similar > > > > > > > content is > > > > > > > >>>>> allowed. From what I gather there was no such thing > > > mentioned. > > > > > This > > > > > > > >>> would > > > > > > > >>>>> mean storing all the messages. Depending on the > > requirements > > > > this > > > > > > > may or > > > > > > > >>>>> may not be the best solution. It might be desirable that > no > > > > > > > duplicates > > > > > > > >>> are > > > > > > > >>>>> needed within a certain time window (sliding). This > allows > > > > > ignoring > > > > > > > of > > > > > > > >>>>> duplicate messages that were generated very close to each > > > other > > > > > (or > > > > > > > in > > > > > > > >>> the > > > > > > > >>>>> window indicated). Depending on this requirement > > > implementation > > > > > may > > > > > > > >>> become > > > > > > > >>>>> a little bit more involved. > > > > > > > >>>>> > > > > > > > >>>>> For now, these are the only questions. I have ideas that > > need > > > > > > review > > > > > > > >>> about > > > > > > > >>>>> possible implementations but I will mention them once the > > > > > > > specifications > > > > > > > >>>>> are clear to me. As an end question, I would at some > point > > > like > > > > > to > > > > > > > post > > > > > > > >>>>> design ideas to this problem privately to get it reviewed > > by > > > > the > > > > > > > >>>>> development community but not make it publicly available > so > > > > that > > > > > it > > > > > > > >>> cannot > > > > > > > >>>>> be plagiarised. What platform/method can I use to do > that? > > Or > > > > is > > > > > > > >>> submitting > > > > > > > >>>>> a draft to the Google platform the only possible way to > > > > > accomplish > > > > > > > this? > > > > > > > >>>>> > > > > > > > >>>>> Thanks a lot for reading this through and looking forward > > to > > > > your > > > > > > > >>> inputs. > > > > > > > >>>>> > > > > > > > >>>>> Regards, > > > > > > > >>>>> Sohaib Iftikhar > > > > > > > >>>>> > > > > > > > >>> > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >