+1.

Nice RIP, I would like to offer a help.

Gosling Von <fengji...@gmail.com> 于2018年11月6日周二 下午5:41写道:

> +1
>
> Very cool, It seems to the fifth RIP from the community.
>
> Best Regards,
> Von Gosling
>
> 在 2018年11月6日,下午1:52,huzongt...@cmss.chinamobile.com 写道:
>
> FYI
>
>
> *发件人:* huzongt...@cmss.chinamobile.com
> *发送时间:* 2018-11-06 13:38
> *收件人:* users-subscribe <users-subscr...@rocketmq.apache.org>; commits
> <comm...@rocketmq.apache.org>; dev-help <dev-h...@rocketmq.apache.org>
> *主题:* About the RIP for new Feature:Message Track Trace
> RIP-1: Message Track Trace
>
> *1、Status*
>
>    - *    Current State: Proposed*
>    - *    Authors: HuzongTang*
>    - *    Shepherds: Zhendong*
>    -     Mailing List Discussion: <apache mailing list archive>
>    -     Pull Request: #PR_NUMBER
>    -     Released: <released_version>
>
> *2、Background & Motivation*
>       What do we need to do
>       Message track trace refers to the consumption processing of a
> message which is sent from the producer instance has arrived the broker,and
> then has been consumed by the consumer instance.In the whole process, the
> information of time, location and other related services(including Client
> and Broker) is aggregated into the complete link information of message
> communication.
>       In MQ system, the complete link of a message contains three roles:
> producer, broker server and consumer.In the process of message
> communicaton, each role adds relevant information to the track trace
> link.By aggregating these information,it can provide some powerful support
> to user.
>      About the Apache RocketMQ project,I will add the feature of message
> track trace which can help users query every complete link data of a
> message exactly.This funcation is important to RocketMQ,especially in
> some  financial application fields.
>
> *3、Goals*
>
>    -     What problem is this proposal designed to solve?
>
>     Reliability and Availability is the most two important characters for
> each MQ system.Although RocketMQ does very well in the two fields,it need
> some other methods to make sure the complete link of a message is no
> problem.By some ways,we should view the complete link of a messag and
> find the root cause of failure in process messaging quickly.
>     So,if RocketMQ support the feature of Message Track Trace,we can find
> and analyse the root cause of failure in process messaging easily.And we
> can query many parameter values,such as sending cost time,consumption
> cost time,store time in broker and so on.The architecture of Message Track
> Trace will be introduced in below chapter.
>
> *4、Non-Goals*
>
>    - What problem is this proposal NOT designed to solve?
>
>           Every users who build application by using RocketMQ may lack of
> a efficient way to  find and analyse the root cause of failure in process
> messaging easily and quickly.The users may spend much more time and enery
> on operation of RocketMQ in production enviroment.
>
>    - Are there any limits of this proposal?
>
>          In order to reduce the impact of message entity content storage
> in RocketMQ,we redefine a special broker which stores every message track
> trace.So,if user don't want to use this funcation,he can close it in client
> by setting a flag.
>
> *5、Changes*
> We need add some codes in client and broker component which include
> collecting producer and consumer instances' infomation and redefine a
> special broker node.Read below sections to get more details about the
> Message Track Trace for RocketMQ.
>
> *6、Architecture*
>     We plan to design the function of message track trace including its
> store part and client instance collecting.The total architecture has two
> part below:
> *    (1)Client instance collects the infomation of message track trace*
>
>     The design of architecture above as follows:
>     *(a)*."producer and consumer multi-thread module, and Blocking
> Queue":here, in client,as a producer model,we can collect the infomation(such
> as,sending and consuming message cost time,broker store time,broker stored
> ip address and so on) and put this information into the Blocking Queue.And
> as s consumer model,use a thread called "MQ-AsyncArrayDispatcher" to take
> the message track trace infomation from Blocking Queue.Then this asynchronous
> thread( called "MQ-AsyncArrayDispatcher") pack the message track trace
> element as AsyncAppenderRequest task and submit to the thead pool.
>     Last,the main execution process of  AsyncAppenderRequest task is
> sending the message track trace infomation which is collected above from
> client side to a special broker node which is redefined in below chapter.
>     *(b)*.define a new pair hook which is implementation of 
> the“SendMessageHook/ConsumeMessageHook”,from
> this,we can collect message track trace data  before and after publishing
> and subscribing messages.
>
> *    (2)Redefine a special broker node to store message track trace data*
>
>     As shown in the above picture,we can define a specail broker service
> node which can store the message track trace data in a common RocketMQ
> cluster.Here,we can add a flag(such as autoTraceBrokerEnable) in
> broker.properties file and use this variable to define Whether this
> broker is a specail node for storing message track trace data.
>     *(a).*autoTraceBrokerEnable is false.This indicates this broker is
> an ordinary node,then "Trace_Topic" will not be created in this node.And
> it will still follow the original processing flow without any change.
>     *(b).*autoTraceBrokerEnable is true.This indicates broker is an
> special node,which stores the message track trace data specailly.And The 
> "Trace_Topic" is automatically created during the Broker's startup phase,this
> node automatically registers its owned set of topics in memory to
> nameserver(including Trace_Topic).Thus,in a RocketMQ cluster,there is
> only a specail broker node which stores message track trace datas.And
> clients(including publishing and subscribing messages) knows which broker
> node to send message trace data after they try fetch topic routing info
> from nameserver.
>
>     *(3)How to solve the query message track trace data by original topic*
>                   For example,Topic which saves message track trace data is 
> called "RMQ_SYS_TRACE_DATA_XXX" is instead of Topic of original 
> data.But,message
> query(By messageId + topic,topic+ key or topic)
> which still uses original data on RocketMQ console side can't query the
> expected result for us.
> Here, we can fill in the keyset field of the message track trace data by 
> using msgId (not offset MsgId) or Key of the original message content when 
> send the message track trace data collected by the client, so the IndexFile 
> index of the Broker end can be built according to the msgId or Key of the 
> original message.
>     And at the broker side,we can
> invokes the queryMessage() method of the storage part through the 
> QueryMessageProcessor
> Business processor.
>
> *    (4)Finishing querying messages track trace datas in console*
>     Fisrtly,the console project is based on spring boot technology,so we
> can finish querying messages track track datas in this project.The basic
> design is using thread pool to send a RPC request to the redefined broker
> node to get the message track trace data.
>
> *7、Interface Design/Change*
>     Here I just list part interface desgin and change in Client Side.And
> the chang parts of Broker and Console side leave out.
> *   (1)The data transfering asynchronously interface is as followers: *
>     public interface AsyncDispatcher {
>
> void start() throws MQClientException;
>
> boolean append(Object ctx);
>
> void flush() throws IOException;
>
> void shutdown();
>     }
>
>      (2)Defining the two Hooks which is implemented of ConsumeMessageHook
> and SendMessageHook are as followers:
>      a.ClientSendMessageTraceHookImpl
>      b.ClientConsumeMessageTraceHookImpl
>
> *     (3)We define and write some codes for common data model which are as
> followers:*
>      a.TraceBean
>      b.TraceConstants
>      c.TraceContext
>      d.TraceDataEncoder
>      e.TraceDispatcherType
>      f.TraceTransferBean
>      g.TuxeTraceType
>
> *8.Compatibility, Deprecation, and Migration Plan*
>     (1)Are backward and forward compatibility taken into consideration?
>      No issues;
>     (2)Are there deprecated APIs?
>      No issues;
>     (3)How do we do migration?
>      No issues;
>
>
> *9.Implementation Outline*     We will implement the proposed changes by
> 1 phase. All of implementation will be finished in 1 phase.
>
> ------------------------------
> huzongt...@cmss.chinamobile.com
>
>
>

Reply via email to