Replies: 2 comments 1 reply
-
|
Please put a copy of the technical solution here in content form. Thanks. |
Beta Was this translation helpful? Give feedback.
-
GSoC 2026 Proposal: Enhance Seata-Go Multi-Registry Support and seata-ctl Diagnostic Tool Capability
Relevant Preparation
Project SummaryAfter tracing the current Go SDK registry path through Right now, the registry abstraction is still very small: Because of that, I want this proposal to stay aligned with the official topic while sequencing the work around four concrete outcomes:
The final goal is not just "more registry names in configuration." It is to make Seata-Go easier to deploy in real service-governance environments and easier to debug when distributed transactions behave unexpectedly. Background and Problem DefinitionApache Seata's Java implementation already has a mature registry SPI and a broader operational story, but Seata-Go still lags behind at the infrastructure boundary. The gap matters for two reasons. First, registry support is part of real deployment viability. If Go users can only rely on Second, troubleshooting matters almost as much as feature support. Distributed transaction failures are often caused by partially correct setups: stale registry entries, unhealthy server nodes, inconsistent group mappings, or orphaned transaction/lock state. In those moments, a small but reliable query tool is usually more valuable than a broad but fragile admin surface. I also compared the Go code with Java 2.x. Java already has:
That gives this project a strong reference direction. I do not need to invent the architecture from scratch, but I do need to translate it carefully into Go and into the current Seata-Go codebase. Scope ClarificationThe official Apache idea for this topic has a broad surface: multi-registry support, NamingServer compatibility, seata-ctl diagnostics, structured output, and TUI ambitions. I therefore keep the proposal aligned with that umbrella, but stage the delivery so the shared registry foundation and the first diagnostically useful CLI slice land first. I think the right way to make that scope credible is to preserve the priority ordering of the idea instead of flattening everything into one summer-sized promise. My interpretation of the required scope is:
What I am explicitly not treating as required first-wave deliverables:
If a server-side contract turns out to be necessary for part of the CLI work, I will treat that as a mentor-confirmation item during community bonding, not as an implicit assumption inside the required scope. Current State and Gap AnalysisMy current understanding is based on direct code reading across all three relevant codebases. In local incubator-seata-go
This means the Go-side work is not "hook up a few SDKs." The shared foundation still needs to become registry-aware in a more explicit way. In local incubator-seata Java 2.x
That is an important scoping signal. These adapters are not the same problem with different import paths. In current incubator-seata-ctl
Project GoalsCore goals
Non-goals for the guaranteed scope
Technical Plan1. Shared multi-registry foundation in seata-goThe first step is not Nacos-specific or ZooKeeper-specific business logic. The first step is to stop treating the current Go discovery layer as if I plan to introduce a clearer registry layer around the operations that Java Seata already models:
I also want the loading path to become more explicit, closer to a provider/factory model than the current switch-only initialization path. This is the architectural work that makes the later backend additions reviewable instead of ad hoc. 2. Preserve current file and etcd behavior while fixing the boundaryI do not want the foundation work to regress current users. That means:
One of the most important local findings was that etcd watch updates currently stop at the cache layer. I want to address that class of problem early, because otherwise every new backend inherits the same weakness. 3. Nacos firstNacos should be the first required backend for three reasons:
I do not want to describe this as simple endpoint lookup work. The real work includes naming conventions, group and cluster routing, listener behavior, and making the Go-side semantics line up with what Java users already expect. 4. ZooKeeper secondZooKeeper should be the second required backend because it is also explicitly prioritized by the idea and because its operational model is meaningfully different from Nacos. The Java implementation uses ephemeral nodes and watchers, so the Go version should be built with those realities in mind instead of pretending the same adapter template fits every registry family. 5. Bounded seata-ctl diagnostic baselineFor the required CLI slice, I want to stay with one bounded, diagnostically useful scope:
I do not want to promise config mutation, reload, or a broad admin surface as required deliverables. The current tool already has a usable command flow and terminal output path, so the most credible proposal is to extend those existing diagnostics first, then treat the TUI as second-wave polish once the commands themselves are solid. Concretely, this is the part of the current codebase I expect to build on:
6. Consul and Redis on the same shared pathI do want the foundation to be strong enough for Consul and Redis, because the official topic explicitly includes them and the Java side already shows how those backends behave. I still want them sequenced after Nacos and ZooKeeper rather than ahead of the common registry/session boundary, but I am treating them as planned in-scope work, not as out-of-scope extras. Deliverables and Acceptance Criteria
Validation and Testing PlanI want verification to shape the scope from the start, not only confirm it at the end. Layer 1: fast unit and mock testsThese will cover:
Layer 2: backend integration testsThese will validate:
Layer 3: sample-oriented validationI also want to provide sample configs and minimal runnable flows so the result is understandable to users and future contributors, not only to maintainers reading isolated tests. That includes sample-level validation for the new registry paths and the CLI diagnostics that community users are expected to run. Regression ruleAny registry work that weakens the existing Upstream Merge StrategyI want this project to land as a sequence of reviewable PRs, not one oversized end-of-summer patch. Planned order:
This is the same review philosophy that made the multi-database proposal stronger: land the shared foundation first, then build the feature-specific layers on top of it. Implementation Plan and TimelineCommunity bonding
Weeks 1-2: shared foundation
Expected artifact: PR 1 with no-regression coverage. Weeks 3-5: Nacos
Expected artifact: PR 2 with backend-specific tests and compatibility notes. Weeks 6-7: ZooKeeper plus hardening
Expected artifact: PR 3 and a midterm-ready baseline. Weeks 8-9: Consul and Redis
Expected artifact: PR 4 with the full multi-registry baseline in reviewable shape. Weeks 10-11: bounded seata-ctl diagnostic baseline
Expected artifact: PR 5 with one demonstrable diagnostic command family. Week 12: TUI polish, docs, and samples
Expected artifact: PR 6 with polish, docs, and community output. Cut order if time slips
If the shared registry/session foundation runs deeper than expected, I would next shrink ZooKeeper to the smallest reviewable baseline rather than dilute the common layer, Nacos quality, or the validation story. Minimum acceptable final stateThe final state I consider acceptable, even under pressure, is:
Risk Analysis and Mitigation
Collaboration StyleI want this project to be easy to mentor and easy to review. My plan is to:
Registry behavior and debugging tools are both easy to over-promise. I would rather stay explicit about tradeoffs and get early feedback than optimize for a larger-looking scope. Why I Am a Good FitI study Environmental Engineering at Nanchang University, but my open-source work has been concentrated in Go middleware and distributed-systems-adjacent code. More importantly for this project, I already have recent contribution history in Apache middleware repositories and I am comfortable doing compatibility-sensitive work under review. For this proposal, I did not stop at the idea title. I read:
That preparation is the reason this proposal is narrower and more explicit than a generic "support all registries and build a TUI" draft. I would rather present a fundable, reviewable plan than a broader promise that becomes hard to merge halfway through the summer. Availability and Communication
If my availability changes later, I will surface it early instead of letting it become a hidden project risk. Questions for Mentors
After GSoCIf the project goes well, I want to continue with the remaining registry work, more operational examples, and follow-up compatibility fixes. The outcome I care about is not only more feature names in configuration files. I want Seata-Go to be easier to extend, easier to deploy, and easier to debug in environments that already depend on real registry infrastructure. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Dear Seata community,
My name is Xuwei Yang (GitHub: CAICAIIs). I have submitted a GSoC 2026 proposal for Apache Seata on improving Seata-Go multi-registry support and enhancing seata-ctl diagnostic capability, and I would like to briefly introduce the idea here.
From my recent reading of the Seata-Go, Seata Java, and seata-ctl codebases, my understanding is that Seata-Go still has a clear gap with the Java side in registry support, while the current diagnostic tooling on the Go side is also still limited. In practice, this makes it harder to use Seata-Go in environments that already depend on registries such as Nacos or ZooKeeper, and it also increases the cost of troubleshooting distributed transaction issues.
My proposal is to approach this work incrementally. On the Seata-Go side, I plan to first improve the shared registry foundation, then prioritize Nacos and ZooKeeper support, followed by Consul and Redis. On the seata-ctl side, I plan to focus on a practical diagnostic baseline first, including environment checks, transaction inspection, and lock inspection, and then continue with further improvements if time allows.
I have recently been contributing in Seata-Go and related Go middleware projects, and I also did some local prototype and code reading work while preparing this proposal. Please find the attached proposal PDF for more details. I would greatly appreciate any feedback from the community on the scope and priorities of this topic.
CAICAIIsSeataGoMultiRegistryAndSeataCtl.pdf
Best regards,
Xuwei Yang
GitHub: CAICAIIs
Time zone: Asia/Shanghai (UTC+8)
Beta Was this translation helpful? Give feedback.
All reactions