日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

公司新來一個架構師, 將消費金融系統重構了

來源: 責編: 時間:2024-03-22 08:55:23 160觀看
導讀1、背景1.2 業務重組與合并隨著需求不斷迭代,轉轉消費分期整體出現了一些調整,并提出了新的產品方向,在此背景下,對于經歷了久經滄桑的歷史服務,已經逐漸不適合未來的產品規劃。面對新的業務整合和重組,急需新的架構和思想

b7D28資訊網——每日最新資訊28at.com

1、背景

1.2 業務重組與合并

隨著需求不斷迭代,轉轉消費分期整體出現了一些調整,并提出了新的產品方向,在此背景下,對于經歷了久經滄桑的歷史服務,已經逐漸不適合未來的產品規劃。面對新的業務整合和重組,急需新的架構和思想來承載未來的業務。b7D28資訊網——每日最新資訊28at.com

1.2 解決技術債務

現階段存在的主要問題:b7D28資訊網——每日最新資訊28at.com

  1. 代碼模塊之間邊界感不強,需要通過模塊拆分、服務拆分來區分業務邊界。
  2. 代碼實現缺少層次感,設計模式單一,一層到底的冗長代碼。
    此前,微服務拆分原則是按消費分期、合作方分期產品等維度進行整體拆分的,優點是明確了項目職責,簡單的從需求維度進行服務拆分,確實是一種行之有效的方式,缺點是沒有對基礎功能進行剝離,以至于很多場景需要維護重復的代碼,增加了項目的維護成本。

1.3 影響開發效率

即使我們接手項目已經有一段時間,并對項目足夠了解時,但排查問題起來依然費力費時,而且系統內部代碼錯綜復雜,調用鏈路交錯,難以正常維護,從長遠的開發效率考慮,盡快提出新型方案來代替現有結構。b7D28資訊網——每日最新資訊28at.com

1.4 監控體系不夠完善

線上異常機制不夠敏感,缺少關鍵業務指標的告警看板,作為一個業務開發,應保持對核心指標數據的敏感性。b7D28資訊網——每日最新資訊28at.com

2、重構目標

  1. 不影響業務的正常運轉和迭代;
  2. 改善現有代碼結構設計,讓代碼易于擴展,提升開發效率;
  3. 采用新工程逐步替代原有接口,舊工程逐漸廢棄。

3、設計

3.1 調研

開始重構之前,調研了互聯網消金通用的架構解決方案:b7D28資訊網——每日最新資訊28at.com

圖片b7D28資訊網——每日最新資訊28at.com

通用方案b7D28資訊網——每日最新資訊28at.com

由于是外部調研的通用架構設計,所以并非完全契合轉轉消費分期產品,但可以借鑒其分層架構設計的思想,在代碼設計階段,可以先對核心模塊進行拆解和規劃。b7D28資訊網——每日最新資訊28at.com

3.2 規劃

前端頁面與后端重構計劃分兩次迭代進行,分階段進行,可以有效分攤并降低項目上線風險,第一次迭代圍繞后端主要模塊進行剝離重新設計并上線;第二次重構目的是解決產品需求,對接前端新頁面。b7D28資訊網——每日最新資訊28at.com

3.3 修繕者模式

作為一個一線的業務開發,需要開展重構工作的同時還得保證產品需求的正常迭代,修繕者模式無疑是最佳選擇。   第一次迭代歷程,對于歷史工程邊緣邏輯保留并隔離,只對核心代碼進行重構后轉移到到新工程,新工程逐步接手老舊邏輯,并對老工程提供RPC接口,逐漸取代。此方案整體風險最低,同時能兼顧到正常的需求迭代。
第二次迭代歷程,經歷了第一次迭代后,新系統運行穩定,同時也具備接手新產品的能力,新工程開始與前端對接、聯調,在此之后,V2版本也正式上線。b7D28資訊網——每日最新資訊28at.com

3.4 領域設計(橫向拆分)

圖片b7D28資訊網——每日最新資訊28at.com

模塊拆分b7D28資訊網——每日最新資訊28at.com

  1. 聚合業務:涵蓋了消費分期主要業務,根據其各自產品需求特點,作為上層業務代碼,對前端、收銀臺提供聚合接口。
  2. 基礎服務:用戶信貸所產生的數據、或依托合作方數據,圍繞金融分期服務提供的數據支持。
  3. 三方對接:基于轉轉標準API下的邏輯實現,同時具備靈活接入合作方接口的能力。

3.5 模塊設計(縱向拆分)

基于以往項目存在的問題,再結合消費分期的特點,我們對分期購買到賬單還款結清的整個流程進行拆解:用戶主動填寫申請信息,提交授信申請并獲額,挑選商品分期下單,生成還款計劃,提供綁卡、賬單還款等功能。以上就是一個簡單的分期購物流程,基于以上流程,我們把消費分期所包含的公共模塊,如授信前獲額、用信、賬單還款,這些富有金融服務屬性的功能進行剝離。消費分期作為轉轉的產品原型,在聚合層中各自維護,互不影響。
設計原則:在不改變原有代碼邏輯的情況下,根據單一職責和依賴倒置原則的思想:對系統進行模塊拆分與合并,以明確項目職責降低耦合度;對包進行重新規劃,劃分包與包之間的邊界,進一步減少代碼間的耦合。b7D28資訊網——每日最新資訊28at.com

3.6 代碼設計

好的代碼重構一定離不開設計模式,基于原有單一的策略模式,我們把合作方對接模塊與基礎服務模塊進行了拆解,采用雙層模板、策略、工廠模式的組合,分別對授信、用信、貸后幾個模塊單獨設計接口,維護好對合作方通用標準API接口,同時具備靈活接入的特點,舉個例子,以下為授信模塊主要代碼類圖:b7D28資訊網——每日最新資訊28at.com

第一層作為基礎服務的策略模式;
第二層作為合作方對接的策略模式。
主要類圖設計:b7D28資訊網——每日最新資訊28at.com

圖片b7D28資訊網——每日最新資訊28at.com

  在定義接口與實現類后,形成了對合作方對接層依賴,同時對訂單、用信、授信等核心數據進行落地,對消費分期提供數據支撐,舉個例子,以下為授信模塊主要代碼:b7D28資訊網——每日最新資訊28at.com

  1. 基礎服務接口定義
/** * 授信接口定義 **/public interface ICreditService {    /**     * appId,資方定義的一個唯一ID     */    String getAppId();    /**     * app名稱     *     * @return zz or zlj     */    String getAppName();     /**     * 獲取授信結果     *     * @return result     */    CreditResult creditResult(String logStr, Long uid);}
  1. 標準流程抽象
/** * 標準API對接實現 * **/public abstract class AbstractCreditService implements ICreditService {     /**     * 標準API對接     *     * @return IBaseApiService     */    protected abstract IBaseApiService getApiThirdService();    @Override    public AppConfig getPartner() {        return commonConfigUtil.getAppConfig(getAppId());    }        @Override    public CreditResult creditResult(String logStr, Long uid) {        CreditResultInput input = new CreditResultInput();        input.setUid(uid);        ResponseProtocol<CreditResultOutput> output = getApiThirdService().creditResult(logStr, input);        String creditStatus = TransformUtil.approvalStatusTransform(output.getData());        return CreditResult.builder().result(creditStatus).build();    }}/** * 合作方差異化接入 */@Service@Slf4jpublic class ZZABCCreditServiceImpl extends AbstractABCCreditService {    @Resource    ZZABCThirdServiceImpl abcThirdService;    @Override    public String getAppId() {        return PartnerEnum.ABC_ZZ_API.getAppId();    }    @Override    public String getAppName() {        return AppNameEnum.ZZ.getValue();    }    @Override    protected IABCThirdService getABCThirdService() {        return abcThirdService;    }}
  1. 標準API對接
/** * 標準API對接 * * @author Rouse * @date 2022/4/24 13:57 */public interface IBaseApiService {    /**     * 標準API,獲取appId     *     * @return appId     */    String getAppId();    /**     * 獲取授信結果     */    ResponseProtocol<CreditResultOutput> creditResult(CreditResultInput input);}
  1. 內部標準API實現
/** * 合作方,標準API對接實現 * * @author Rouse * @date 2022/4/24 14:04 */@Slf4jpublic abstract class AbstractBaseApiService implements IBaseApiService {    @Override    public ResponseProtocol<CreditResultOutput> creditResult(CreditResultInput input) {        // 通用加解密        return getDataResponse(logStr, getAppConf().getUrl4CreditResult(), input, CreditResultOutput.class);    }}
  1. 差異化合作方接入
/** * ABC合作方接口封裝 **/public interface IABCThirdService extends IBaseApiService {    /**     * 標準API,獲取appId     *     * @return appId     */    String getAppId();    /**     * 獲取授信結果     */    ResponseProtocol<ABCCreditResultOutput> creditResult(ABCCreditResultInput input);}/** * 合作方抽象方法封裝 **/@Slf4jpublic abstract class AbstractABCThirdService extends AbstractBaseApiService implements IABCThirdService {    @Override    public ResponseProtocol<ABCCreditResultOutput> creditResult(ABCCreditResultInput input) {        // 加解密差異化實現        return getDataResponse(logStr, getAppConf().getUrl4CreditResult(), input, ABCCreditResultOutput.class);    }}/** * ABC合作方對接 * */@Service@Slf4jpublic class ZZABCThirdServiceImpl extends AbstractABCThirdService{    @Override    public String getAppId() {        return PartnerEnum.ABC_API_ZZ.getAppId();    }    @Override    public String getAppName() {        return AppNameEnum.ZZ.getValue();    }}

4、上線過程

對于老系統的重構,新系統上線過度期也至關重要,因為采用了新的表結構進行重新設計,涉及到數據的同步,我們采用單向數據同步,逐漸棄用老系統數據,如果灰度期間需要回滾,首先對數據進行回滾,優先保證線上服務穩定。
 以下是經歷兩次重構迭代的過程:圖片b7D28資訊網——每日最新資訊28at.com

5、監控

圖片
圖片b7D28資訊網——每日最新資訊28at.com

  1. 項目重構監控先行,這次我們采用了轉轉告警機制和Prometheus線上監控,另外搭建了一套線上看板,及時發現各個模塊的潛在隱患。
  2. 日志,一個完美的系統離不開合理的日志,日志往往是定位問題最便捷的工具。

6、總結

通過此次技術重構,我們不僅解決了過去存在的技術債務問題,還提升了服務的穩定性和用戶體驗,也提升產品交付效率。b7D28資訊網——每日最新資訊28at.com

技術重構并非一蹴而就,但只要我們有堅定的信念和不懈的努力,終將取得成功。引用一句名言:”不要因為懶惰而拒絕重構,不要因為無暇重構而成為你拖延的理由 。” 是的,重構是持續優化代碼質量和可維護性的過程,需要我們時刻關注并付諸行動。b7D28資訊網——每日最新資訊28at.com

我認為,重構的另一種價值:一個重構好的系統、往往具備通用性,可移植性。簡單說就是我們重構后的系統以最小的改動且能在同行中快速復用,因為你創造了一個穩定可靠的“輪子”,如果做到這點,無非你是這個行業技術解決方案的專家。b7D28資訊網——每日最新資訊28at.com

關于作者

羅思,金融技術部后端研發工程師。轉轉消費分期業務開發。b7D28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-78505-0.html公司新來一個架構師, 將消費金融系統重構了

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: JavaScript 中七個鮮為人知的數組方法

下一篇: 癱瘓8年小哥植入馬斯克腦機接口,狂打8小時「文明6」!Neuralink首個人類植入者直播來了

標簽:
  • 熱門焦點
  • 石頭智能洗地機A10 Plus體驗:雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機A10 Plus。從這個產品名上就不難看出,這次石頭推出的并不是常見的掃地機器
  • 一文看懂為蘋果Vision Pro開發應用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現實(MR)頭戴設備。Vision Pro結合了虛擬現實(VR)和增強現實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個人開發仿造稿定設計的圖片編輯器到現在,不知不覺已過去一年時間了,期間我經歷了裁員失業、面試找工作碰壁,寒冬下一直沒有很好地履行計劃.....這些就放在日
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發生
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 疑似小米14外觀設計圖曝光:后置相機模組變化不大

    下半年的大幕已經開啟,而誰將成為下半年手機圈的主角就成為了大家關注的焦點,其中被傳有望拿下新一代驍龍8 Gen3旗艦芯片的小米14系列更是備受大家矚
  • 聯想的ThinkBook Plus下一版曝光,鍵盤旁邊塞個平板

    ThinkBook Plus 是聯想的一個特殊筆記本類別,它在封面放入了一塊墨水屏,也給人留下了較為深刻的印象。據有人爆料,聯想的下一款 ThinkBook Plus 可能更特殊,它
  • 三翼鳥智能家居亮相電博會,讓用戶體驗更真實

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現場,成為了展會的一大看點。這也是三翼鳥繼9月9日發布了行業首個一站式定制智慧家平臺后的
Top 主站蜘蛛池模板: 汉沽区| 和政县| 嘉峪关市| 石景山区| 湖南省| 南部县| 正定县| 娱乐| 东阿县| 临安市| 咸宁市| 买车| 前郭尔| 天镇县| 新安县| 沂源县| 佛坪县| 红桥区| 库尔勒市| 永康市| 洞头县| 青冈县| 招远市| 安阳市| 全椒县| 兴隆县| 肥城市| 临沂市| 阳泉市| 武定县| 武宣县| 萍乡市| 本溪| 中江县| 当涂县| 江安县| 乌鲁木齐县| 隆德县| 乐平市| 钟祥市| 芷江|