You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@rocketmq.apache.org by yukon <yu...@apache.org> on 2021/10/01 01:40:15 UTC

Re: RIP 24: Introduce multi-protocol support

Hello, community,

Any further opinions about this RIP?  If not, we would like to propose a
draft of the new protocol spec.

Regards,
yukon

On Tue, Sep 28, 2021 at 8:14 AM vongosling <vo...@apache.org> wrote:

> Subscribe to the dev mailing list before sending emails. Otherwise, emails
> cannot be sent to the community.
>
>
> i yangkun <ya...@outlook.com> 于2021年9月28日周二 上午8:11写道:
>
> > Status
> > ________________________________
> >
> >   *   Current Status: Draft
> >   *   Authors: [aaron-ai](https://github.com/aaron-ai)
> >
> >   *   Shepherds: Zhanhui Li<ma...@apache.org>, Yukon<mailto:
> > yukon@apache.org>, duhengforever<ma...@gmail.com>
> >   *   Mailing List discussion: <dev@rocketmq.apache.org<mailto:
> > dev@rocketmq.apache.org>>
> >
> >   *   Pull Request: #PR_NUMBER
> >   *   Released: <released_version>
> >
> > Background & Motivation
> > ________________________________
> > What do we need to do
> >
> >   *   will we add a new module? yes.
> >   *   will we add new APIs? no.
> >
> >   *   will we add a new feature? yes.
> >
> > Why should we do that
> >
> >   *   Are there any problems with our current project?
> > Currently, the RocketMQ kernel supports only one transport layer protocol
> > available, aka, Remoting. Despite its simplicity and high performance,
> the
> > remoting protocol has some disadvantages:
> >
> >
> > 1. Lack of formal protocol specification. Remoting is loosely defined,
> > lacking a necessary specification document to describe each protocol
> > detail. This indicates much uncertainty, obstructing community
> developers,
> > from different backgrounds, from building uniformly-behaved SDKs and
> > further raises the bar of participation because they have to read the
> > existing source codebase before understanding the ins and outs.
> >
> > 2. Remoting is built on top of Netty, not every language has a Netty-like
> > library. Languages like C/C++ have to pave a lot of "preparation" to
> stand
> > at the same start-line. It would be awesome for RocketMQ to have gRPC,
> > which provides a unified foundation and concepts. Based on this unified
> > foundation, SDKs of different languages can be built with shared models
> and
> > designs.
> >
> > 3. Remoting builds virtually everything from the ground, including
> > auto-retry, connection-multiplexing, coding/decoding, and more. Note
> these
> > all have been properly defined and implemented in gRPC-like libraries.
> > Further, these common parts bring a significant portion of the SDK
> > complexity, whereas they are already available in gRPC for all mainstream
> > programming languages in the field.
> >
> >   *   What can we benefit from the proposed changes?
> > In the future, RocketMQ is supposed to have multi-protocol support, to
> > embrace new technology trends, service mesh for example, and enhance
> > interoperability among different communities, like gRPC, HTTP, MQTT, etc.
> > So we shall introduce a multi-protocol mechanism and add gRPC as a new
> > supported protocol.
> >
> > As we all know, gRPC is widely adopted, and now is a CNCF incubation
> > project. It has a great yet mature ecosystem, including a number of
> > successful community projects. The gRPC-based protocol will bring us more
> > productive features:
> >
> > 1. Build RocketMQ Client SDK with a unified interface.
> >
> >        2. Focus on the logic of RocketMQ itself without much effort on
> the
> > transportation layer.
> >
> >        3. The HTTP2-based gRPC protocol makes RocketMQ more accessible to
> > cloud-native ecology.
> >
> > Goals
> >
> >   *   What problem is this proposal designed to solve?
> > Introduce a multi-protocol mechanism and add gRPC as a new supported
> > protocol
> >   *   To what degree should we solve the problem?
> >
> > Support gRPC and Remoting protocol both
> >
> > Non-Goals
> >
> >   *   What problem is this proposal NOT designed to solve?
> > Nothing specific.
> >   *   Are there any limits of this proposal?
> > Nothing specific.
> >
> > Changes
> > ________________________________
> > Architecture
> >
> > Nothing specific.
> >
> > Interface Design/Change
> >
> >   *   Method signature changes. No
> >   *   Method behavior changes. No
> >
> >   *   CLI command changes. No
> >   *   Log format or content changes. No
> >
> > Compatibility, Deprecation, and Migration Plan
> >
> >   *   Are backward and forward compatibility taken into consideration?
> > Yes, new broker server will support both two protocols
> >   *   Are there deprecated APIs?
> > Nothing specific.
> >
> >   *   How do we do the migration?
> > Nothing specific.
> >
> > Implementation Outline
> >
> > We will implement the proposed changes by two phases.
> >
> > Phase 1
> >
> >   1.  Define the new protocol based on gRPC and reach a consensus in the
> > community.
> >   2.  Implement the gRPC server in the rocketmq kernel
> >
> >   1.  Implement Java SDK based on gRPC protocol
> >
> > Phase 2
> >
> >   1.  Implement multilingual SDK, like CPP, Golang, python, C#, etc.
> >
> >
>
> --
> Best Regards :-)
>

Re: RIP 24: Introduce multi-protocol support

Posted by yukon <yu...@apache.org>.
We have drafted the new rocketmq protocol and APIs,  any feedback is
welcome.

Please refer https://github.com/apache/rocketmq-apis/pull/1/files for more
details.

Regards

On Fri, Oct 1, 2021 at 9:40 AM yukon <yu...@apache.org> wrote:

> Hello, community,
>
> Any further opinions about this RIP?  If not, we would like to propose a
> draft of the new protocol spec.
>
> Regards,
> yukon
>
> On Tue, Sep 28, 2021 at 8:14 AM vongosling <vo...@apache.org> wrote:
>
>> Subscribe to the dev mailing list before sending emails. Otherwise, emails
>> cannot be sent to the community.
>>
>>
>> i yangkun <ya...@outlook.com> 于2021年9月28日周二 上午8:11写道:
>>
>> > Status
>> > ________________________________
>> >
>> >   *   Current Status: Draft
>> >   *   Authors: [aaron-ai](https://github.com/aaron-ai)
>> >
>> >   *   Shepherds: Zhanhui Li<ma...@apache.org>, Yukon<mailto:
>> > yukon@apache.org>, duhengforever<ma...@gmail.com>
>> >   *   Mailing List discussion: <dev@rocketmq.apache.org<mailto:
>> > dev@rocketmq.apache.org>>
>> >
>> >   *   Pull Request: #PR_NUMBER
>> >   *   Released: <released_version>
>> >
>> > Background & Motivation
>> > ________________________________
>> > What do we need to do
>> >
>> >   *   will we add a new module? yes.
>> >   *   will we add new APIs? no.
>> >
>> >   *   will we add a new feature? yes.
>> >
>> > Why should we do that
>> >
>> >   *   Are there any problems with our current project?
>> > Currently, the RocketMQ kernel supports only one transport layer
>> protocol
>> > available, aka, Remoting. Despite its simplicity and high performance,
>> the
>> > remoting protocol has some disadvantages:
>> >
>> >
>> > 1. Lack of formal protocol specification. Remoting is loosely defined,
>> > lacking a necessary specification document to describe each protocol
>> > detail. This indicates much uncertainty, obstructing community
>> developers,
>> > from different backgrounds, from building uniformly-behaved SDKs and
>> > further raises the bar of participation because they have to read the
>> > existing source codebase before understanding the ins and outs.
>> >
>> > 2. Remoting is built on top of Netty, not every language has a
>> Netty-like
>> > library. Languages like C/C++ have to pave a lot of "preparation" to
>> stand
>> > at the same start-line. It would be awesome for RocketMQ to have gRPC,
>> > which provides a unified foundation and concepts. Based on this unified
>> > foundation, SDKs of different languages can be built with shared models
>> and
>> > designs.
>> >
>> > 3. Remoting builds virtually everything from the ground, including
>> > auto-retry, connection-multiplexing, coding/decoding, and more. Note
>> these
>> > all have been properly defined and implemented in gRPC-like libraries.
>> > Further, these common parts bring a significant portion of the SDK
>> > complexity, whereas they are already available in gRPC for all
>> mainstream
>> > programming languages in the field.
>> >
>> >   *   What can we benefit from the proposed changes?
>> > In the future, RocketMQ is supposed to have multi-protocol support, to
>> > embrace new technology trends, service mesh for example, and enhance
>> > interoperability among different communities, like gRPC, HTTP, MQTT,
>> etc.
>> > So we shall introduce a multi-protocol mechanism and add gRPC as a new
>> > supported protocol.
>> >
>> > As we all know, gRPC is widely adopted, and now is a CNCF incubation
>> > project. It has a great yet mature ecosystem, including a number of
>> > successful community projects. The gRPC-based protocol will bring us
>> more
>> > productive features:
>> >
>> > 1. Build RocketMQ Client SDK with a unified interface.
>> >
>> >        2. Focus on the logic of RocketMQ itself without much effort on
>> the
>> > transportation layer.
>> >
>> >        3. The HTTP2-based gRPC protocol makes RocketMQ more accessible
>> to
>> > cloud-native ecology.
>> >
>> > Goals
>> >
>> >   *   What problem is this proposal designed to solve?
>> > Introduce a multi-protocol mechanism and add gRPC as a new supported
>> > protocol
>> >   *   To what degree should we solve the problem?
>> >
>> > Support gRPC and Remoting protocol both
>> >
>> > Non-Goals
>> >
>> >   *   What problem is this proposal NOT designed to solve?
>> > Nothing specific.
>> >   *   Are there any limits of this proposal?
>> > Nothing specific.
>> >
>> > Changes
>> > ________________________________
>> > Architecture
>> >
>> > Nothing specific.
>> >
>> > Interface Design/Change
>> >
>> >   *   Method signature changes. No
>> >   *   Method behavior changes. No
>> >
>> >   *   CLI command changes. No
>> >   *   Log format or content changes. No
>> >
>> > Compatibility, Deprecation, and Migration Plan
>> >
>> >   *   Are backward and forward compatibility taken into consideration?
>> > Yes, new broker server will support both two protocols
>> >   *   Are there deprecated APIs?
>> > Nothing specific.
>> >
>> >   *   How do we do the migration?
>> > Nothing specific.
>> >
>> > Implementation Outline
>> >
>> > We will implement the proposed changes by two phases.
>> >
>> > Phase 1
>> >
>> >   1.  Define the new protocol based on gRPC and reach a consensus in the
>> > community.
>> >   2.  Implement the gRPC server in the rocketmq kernel
>> >
>> >   1.  Implement Java SDK based on gRPC protocol
>> >
>> > Phase 2
>> >
>> >   1.  Implement multilingual SDK, like CPP, Golang, python, C#, etc.
>> >
>> >
>>
>> --
>> Best Regards :-)
>>
>