Maturity

Dubbo maturity report

Function maturity

FeatureMaturityStrengthProblemAdviseUser
Concurrency controlTestedconcurrency controlOn trial
Connection controlTestedconnection number controlOn trial
Connecting certain provider straightlyTestedProvider service for point-to-point connecting straightly, for testCan be used in the test environmentAlibaba
Grouping polymerizationTestedReturn value of grouping polymerization, service for menu aggregation and other servicesUsed in special scenesCan be used in the production environment
Parameters validatorTestedparameters validator, JSR303 validation framework integrationHave effect on PerformanceOn trialLaiWang
Result cacheTestedresult cache, for accelerating requestsOn trial
Generic referenceStableGeneric reference, remote call without a business interface class,for test platforms, open api proxy service, and so onCan be used in the production environmentAlibaba
Generic serviceStableGeneric service, no interface class is required to implement any interface, for mock platformCan be used in the production environmentAlibaba
Echo testTestedecho testOn trial
AttachmentStableAttachmentCan be used in the production environment
Asynchronous callTestedUnavailable asynchronous callOn trial
Local callTestedLocal callOn trial
Callback parameterTestedCallback parameterUsed in special scenesOn trialRegistry
Events notifyTestedEvents notify, triggering before and after the remote call is executedOn trial
Local stubStablePerforming part of the logic on the client sideCan be used in the production environmentAlibaba
Local mockStableForged return results, which can be executed when failed or directly executed, for service degradationNeed support of registryCan be used in the production environmentAlibaba
Delay publishStableDelay publish, used to wait for the application to load warmup data or wait for spring context to load completelyCan be used in the production environmentAlibaba
Lazy connectTestedDelay setting up connections, when invocation is set upOn trialRegistry
Stickness connectionsTestedStickness connections, always make a request to the same provider service unless the service is down, and then switch to anotherOn trialRegistry
Token authorizationTestedToken authorization, is used for service authorizationNeed support of registryOn trial
Routing ruleTestedDynamically determining the call relationshipNeed support of registryOn trial
Configuration ruleTestedDistribute the configuration dynamically, is the switch of business logicNeed support of registryOn trial
AccesslogTestedAccesslog, used to record call informationLocal storage, impact performance, limited by disk sizeOn trial
Distributed transactionResearchJTA/XA three phase submission transaction(TCC)UnstableUnavailable

Strategy maturity

FeatureMaturityStrengthProblemAdviseUser
Zookeeper registryStableSupport the cluster, have various of related open source products, dubbo-2.3.3 and above versions are recommendedDepended on the stability of zookeeperCan be used in the production environment
Redis registryStableSupport the client - based double - write clustering method with high performancePlease ensure server time synchronization, be used to check the expired dirty data of heartbeatCan be used in the production environment
Multicast registryTestedDecentration, no registry needs to be installedDepending on the network topology and routing, there is a risk across the server roomsCan be used in a small range, in development/test environment
Simple registryTestedDogfooding, the registry itself is also a standard RPC serviceNo cluster support, may occur single-point failureOn trial
FeatureMaturityStrengthProblemAdviseUser
Simple monitor systemStableSupport JFreeChart statistics reportNo cluster support, may occur single-point failure, but the failure does not affect the RPC callCan be used in the production environment
FeatureMaturityStrengthProblemAdviseUser
Dubbo protocolStableUse NIO to reuse a single long connection and use a thread pool to process requests concurrently, Reduce handshake and increase concurrency efficiency, good performanceA single connection will become a bottleneck in the transmission of large filesCan be used in the production environmentAlibaba
Rmi protocolStableInteroperable with native RMI, based on the TCP protocolOccasionally the connection fails, and the stub needs to be rebuiltCan be used in the production environmentAlibaba
Hessian protocolStableInteroperable with native Hessian, based on the HTTP protocolHessian.jar support is required, and the overhead of HTTP short connections is largeCan be used in the production environment
FeatureMaturityStrengthProblemAdviseUser
Netty TransporterStableThe NIO framework of JBoss, has good performanceA request sends two events and needs to shield useless eventsCan be used in the production environmentAlibaba
Mina TransporterStableClassic NIO framework,stableThe dispatch of the message queue is not timely, under great pressure, there will be FullGCCan be used in the production environmentAlibaba
Grizzly TransporterTestedThe NIO framework of Sun, applied in the GlassFish containerThe thread pool is not extensible, and Filter can’t intercept the next filterOn trial
FeatureMaturityStrengthProblemAdviseUser
Hessian SerializationStableGood performance, multilingual support (recommended)The compatibility of various versions of Hessian is not good, it may be in conflict with the Hessian used in the application, and the Dubbo is embedded with the source code of the hessian3.2.1Can be used in the production environmentAlibaba
Dubbo SerializationTestedThe performance is better in a large number of POJO transmission by not transmitting the class information of POJO.When a field is added to the parameter object, an external file declaration is requiredOn trial
Json SerializationTestedpure text, can be cross-language parsed, default using FastJsonPoor performanceOn trial
Java SerializationStableJava native supportPoor performanceCan be used in the production environment
FeatureMaturityStrengthProblemAdviseUser
Javassist ProxyFactoryStableBytecode generation instead of reflection, good performance(recommended)Depending on the javassist.jar and taking up the JVM’s Perm memory, the Perm may have to be larger:java -XX:PermSize=128mCan be used in the production environmentAlibaba
Jdk ProxyFactoryStableJDK native supportPoor performanceCan be used in the production environment
FeatureMaturityStrengthProblemAdviseUser
Failover ClusterStableFailure automatically switches, when failure occurs, retries other servers, usually used for read operations.(recommended)Retry will lead to longer delaysCan be used in the production environmentAlibaba
Failfast ClusterStableFast failure, only one call, failure to be reported immediately, usually used for non idempotent writing.If a server is being restarted, a call failure may occurCan be used in the production environmentAlibaba
Failsafe ClusterStableFailsafe, when abnormal, directly ignored, usually used to write to the audit log and other operationsCall information lossCan be used in the production environmentMonitor
Failback ClusterTestedFailure auto recovery, backstage record failure request, regular retransmission, usually used for message notification operationsUnreliable, lost when restart the serverCan be used in the production environmentRegistry
Forking ClusterTestedMultiple servers are invoked in parallel, as long as one success is returned, often used for high real-time reading operations.Need to waste more service resourcesCan be used in the production environment
Broadcast ClusterTestedA broadcast calls all providers, one by one, and any error is wrongly reported, usually used to update the provider’s local stateThe speed is slow, and any false report is wrong.Can be used in the production environment
FeatureMaturityStrengthProblemAdviseUser
Random LoadBalanceStableRandom probability, set random probability according to weight(recommended)The probability of a collision on a cross section is high. When retrying, there may be an unequal instantaneous pressure.Can be used in the production environmentAlibaba
RoundRobin LoadBalanceStableRound Robin, setting wheel based ratio according to the weight after the ConventionThere is a slow machine accumulation request problem, and extreme circumstances may cause an avalancheCan be used in the production environment
LeastActive LoadBalanceStableThe least active call number, the random number of the same active number, the active number is the count difference before and after the call, making the slow machine receive less request.Do not support the weight, in the capacity planning, not to pressure a machine oriented pressure measurement by weight capacityCan be used in the production environment
ConsistentHash LoadBalanceStableThe consistency hash, the same parameters always request to the same provider, when one provider hung, originally sent to the provider’s request, based on virtual nodes, spread to other providers, will not cause dramatic changesUneven distribution of pressureCan be used in the production environment
FeatureMaturityStrengthProblemAdviseUser
Condition routing ruleStableRouting rules based on conditional expressions, simple and easy to useThere are some complex multi branch conditions, and the rules are difficult to describeCan be used in the production environmentAlibaba
Script routing rulesTestedRouting rules based on the script engine, powerfulNo sandbox is running, scripting ability is too powerful and may be the back doorOn trial
FeatureMaturityStrengthProblemAdviseUser
Spring ContainerStableAutomatically load all Spring configurations under the META-INF/spring directoryCan be used in the production environmentAlibaba
Jetty ContainerStableStart an embedded Jetty for reporting stateWhen a large number of pages are accessed, the threads and memory of the server are affectedCan be used in the production environmentAlibaba
Log4j ContainerStableConfiguring the configuration of the log4j automatically, automatically subdirecting the log files by process at the startup of multiple processesThe user can’t control the configuration of log4j, inflexibleCan be used in the production environmentAlibaba

Last modified November 25, 2020: fix sample code issue for SPI.md (#659) (0576d68)