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 <vongosl...@apache.org> wrote: > Subscribe to the dev mailing list before sending emails. Otherwise, emails > cannot be sent to the community. > > > i yangkun <yangku...@outlook.com> 于2021年9月28日周二 上午8:11写道: > > > Status > > ________________________________ > > > > * Current Status: Draft > > * Authors: [aaron-ai](https://github.com/aaron-ai) > > > > * Shepherds: Zhanhui Li<mailto:lizhan...@apache.org>, Yukon<mailto: > > yu...@apache.org>, duhengforever<mailto:duhengfore...@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 :-) >