前言
在程式員的系統開發中,有些開發是從0到1的系統開發,有些開發是從1到100的系統開發,有些開發是為了保證系統更好、更穩定運作的優化。
從0到1的開發和從1到100的開發,是為了系統更好的實作功能,需要快速疊代,可以不斷的優化、上線、再優化、再上線。
優化需求,是為了更好的使用系統,讓系統更好、更穩定的運作,但是優化不能夠影響到原有線上的功能,但是我們需要優化。為了防止優化過程中影響到其他代碼,這裡有幾個總結的方案可供參考。
使用開關配置
目前我們項目中配置中心使用的是Apollo,其他配置中心或者配置檔案也是同樣的道理。
- 優點:①可配置化,②可以直接防止優化代碼報異常影響到原來的邏輯
- 缺點:開關是一刀切,要麼走優化邏輯,要麼不走優化邏輯
public static void main(String[] args) {
// 這裡可以使用開關配置,如果有問題可以使用開關及時關掉
String switchKey = ApolloUtil.getProperty("business_key", "false");
if (Boolean.TRUE.toString().equalsIgnoreCase(switchKey)){
// 優化邏輯
}
// 原來業務邏輯
}
使用 try-catch
- 優點:即使優化代碼出現異常也會直接出現的異常吞掉
public static void main(String[] args) {
try {
// 優化邏輯
}catch (Throwable e){
// 這裡可以把優化邏輯代碼出現的異常吞下,防止系統異常之類的
log.error("the exception is {}", e.getMessage(), e);
}
// 原來業務邏輯
}
随機調整
- 優點:①類似于灰階釋出,②可配置化,可以靈活調整比例
- 缺點:影響部分使用者的使用
public static void main(String[] args) {
int limitNum = Integer.parseInt(ApolloUtil.getProperty("limitNum", "10"));
// 10%, 90% 類似于灰階釋出,可以逐漸放開
if (limitNum > Math.random() * 100){
// 優化邏輯
}
// 原來業務邏輯
}
聯合使用
- 核心:結合 try-catch 和可配置化
public static void main(String[] args) {
String str = "";
boolean flag = optimizationLogic(str);
if (flag){
// 根據 flag 為 true 情況下的邏輯
}else {
// 根據 flag 為 false 情況下的邏輯
}
// 原來的邏輯
}
/**
* 優化邏輯,false 表示不走,true 表示走
* @param code
* @return
*/
private static boolean optimizationLogic(String code){
try {
if (null == code || code.isEmpty()){
return false;
}
String switchKey = ApolloUtil.getProperty("business_key", "false");
if (Boolean.FALSE.toString().equalsIgnoreCase(switchKey)){
return false;
}
// 優化邏輯
return true;
}catch (Throwable e){
// 這裡可以把優化邏輯代碼出現的異常吞下,防止系統異常之類的
log.error("the exception is {}", e.getMessage(), e);
}
return false;
}