SDS Downgrade Points Naming Conventions and Management Practices
SDS downgrade points use camel-case Java variable naming (e.g., createOrderPoint), must be unique per application, and are centrally managed in the SDS admin database through auto-registration and periodic cleanup.
In the didi/sds (Service Degradation System) repository, a downgrade point serves as a unique string identifier that protects specific business methods from cascading failures. Understanding the proper SDS downgrade points naming conventions and management practices ensures your degradation strategy remains readable, consistent, and synchronized across distributed services.
Naming Conventions for SDS Downgrade Points
Camel-Case Formatting
According to the README documentation, SDS adopts Java variable naming conventions for point strings to maintain aesthetic consistency. The documentation states that points should follow the camel-case style (驼峰法), resembling standard Java variable names such as businessMethodPoint.
Centralized Constant Definitions
Production implementations should declare downgrade points as public static final String constants within dedicated constant files. In sds-example/sds-client-example/src/main/java/com/didiglobal/sds/example/chapter4/OrderManageService.java, the project defines:
public final static String CREATE_ORDER_POINT = "createOrderPoint";
This approach enables reuse across multiple service methods and prevents hardcoding strings throughout the codebase.
Business Meaning and Uniqueness
Effective point names must convey the specific business operation they protect, such as createOrderPoint or queryUserInfoPoint. The system enforces uniqueness within each application through validation logic. In SdsClient, SdsPowerfulCounterService, and other client APIs, the code invokes AssertUtil.notBlack(point, "降级点不能为空!") to ensure the point string is non-blank and valid.
Management Practices for SDS Downgrade Points
Central Registration in Point Dictionary
Every downgrade point requires persistence in the SDS admin database, specifically the point_dict table. The PointDictServiceImpl.addIfNotExist() method in sds-admin/src/main/java/com/didiglobal/sds/admin/service/impl/PointDictServiceImpl.java handles this by inserting new points only when they do not already exist in the database.
Batch Registration and Duplicate Prevention
For bulk operations, the addPointList() method iterates through point collections, skips existing entries, and inserts only new records. This prevents duplicate entries while efficiently registering multiple points during application deployment or updates.
Automatic Cleanup of Dead Points
The admin service periodically purges obsolete points that no longer appear in client heartbeat data. The checkAndDeleteDeadPoint() method compares the database dictionary against live client heartbeat maps, removing stale entries to maintain a clean configuration state.
Client-Side Usage Patterns
Developers reference the constant definitions through three primary integration patterns:
- Direct API calls to
SdsClientmethods:shouldDowngrade(),exceptionSign(), anddowngradeFinally() - AOP annotation using
@SdsDowngradeMethod(point = CREATE_ORDER_POINT)as demonstrated inOrderManageService.java - Utility wrapper via
SdsEasyUtil.invokerMethod()for simplified three-step execution
Implementation Examples
The following patterns demonstrate practical application of these conventions.
Centralized constant definition:
public final class DowngradePoints {
public static final String CREATE_ORDER_POINT = "createOrderPoint";
public static final String QUERY_USER_POINT = "queryUserInfoPoint";
}
Direct client API usage:
if (sdsClient.shouldDowngrade(DowngradePoints.CREATE_ORDER_POINT)) {
throw new SdsException("Order creation degraded");
}
try {
// business logic
} catch (Exception e) {
sdsClient.exceptionSign(DowngradePoints.CREATE_ORDER_POINT, e);
throw e;
} finally {
sdsClient.downgradeFinally(DowngradePoints.CREATE_ORDER_POINT);
}
AOP annotation approach:
@Service
public class OrderService {
@SdsDowngradeMethod(point = DowngradePoints.CREATE_ORDER_POINT)
public Long createOrder(Long userId, String address) {
return ThreadLocalRandom.current().nextLong(0, 10_000_000);
}
}
Utility helper pattern:
String result = SdsEasyUtil.invokerMethod(
DowngradePoints.QUERY_USER_POINT,
"defaultUser",
() -> userRepository.findById(id).orElseThrow());
Summary
- SDS downgrade points must follow camel-case Java variable naming conventions for consistency and readability.
- Define points as
public static final Stringconstants in dedicated files to ensure reuse and prevent duplication. - The
PointDictServiceImplin the admin module handles central registration, batch insertion, and automatic cleanup of dead points through methods likeaddIfNotExist()andcheckAndDeleteDeadPoint(). - Client applications enforce point validity through
AssertUtil.notBlack()validation before executing degradation logic. - Integration options include direct
SdsClientAPI calls,@SdsDowngradeMethodannotations, or the simplifiedSdsEasyUtilwrapper.
Frequently Asked Questions
What happens if two different methods use the same downgrade point name in the same application?
The SDS system requires uniqueness within each application. While the client-side AssertUtil.notBlack() validation ensures the point is non-blank, duplicate point names for different logical operations would cause incorrect degradation statistics and strategy application. Each business operation should have a distinct point constant like createOrderPoint versus updateOrderPoint.
How does SDS handle point registration when deploying a new service instance?
When a client application starts, it sends heartbeat data containing active downgrade points to the SDS admin service. The PointDictServiceImpl.addIfNotExist() method automatically persists any new points to the point_dict table without requiring manual database insertion, enabling zero-touch registration during deployment.
What is the recommended way to clean up unused downgrade points?
The SDS admin service runs checkAndDeleteDeadPoint() periodically to compare registered points against active client heartbeats. Points that no longer appear in heartbeat data are automatically removed from the database, preventing configuration clutter from deprecated business methods.
Can I use Chinese characters or special symbols in downgrade point names?
While technically possible if the string passes validation, the didi/sds README explicitly recommends camel-case English naming following Java variable conventions (e.g., businessMethodPoint). This ensures compatibility, readability, and consistency across international development teams.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →