色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

探討篇(三):代碼復(fù)用的智慧 - 提升架構(gòu)的效率與可維護(hù)性

京東云 ? 來(lái)源:京東物流 馮志文 ? 作者:京東物流 馮志文 ? 2024-12-27 15:58 ? 次閱讀

作者:京東物流 馮志文

前兩篇從服務(wù)粒度和服務(wù)內(nèi)的分層架構(gòu)角度探討,本文繼續(xù)從服務(wù)間代碼復(fù)用角度探討。

背景

在分布式架構(gòu)中,代碼復(fù)用是個(gè)難題。那么如何處理代碼功能共享的問(wèn)題呢?本文結(jié)合日常實(shí)踐中的案例,介紹幾種分布式架構(gòu)中管理代碼復(fù)用性的技術(shù)。包括代碼復(fù)制、共享代碼庫(kù)(jar包)、共享服務(wù)、邊車服務(wù)。對(duì)于每一種技術(shù),列出優(yōu)缺點(diǎn)、適合場(chǎng)景權(quán)衡。

本文的觀點(diǎn)源自我在學(xué)習(xí)與實(shí)踐過(guò)程中的深思熟慮,尚處于不斷探索和驗(yàn)證的階段。希望能“拋磚引玉”,激發(fā)更多的討論與交流。讓我們共同進(jìn)步,在探討與實(shí)證中尋求真知。

一、代碼復(fù)制

共享的代碼被復(fù)制到每一個(gè)服務(wù)中。這種技術(shù)在服務(wù)早期比較流行。雖然現(xiàn)在代碼復(fù)制比較少見(jiàn),但它還是解決跨多個(gè)分布式服務(wù)的代碼復(fù)用的有效技術(shù)。但這種缺點(diǎn)很明顯,因?yàn)槿绻诖a中發(fā)現(xiàn)錯(cuò)誤或需要對(duì)代碼進(jìn)行重構(gòu)改造,需要在包含該代碼庫(kù)的所有服務(wù)變更。

這種技術(shù)在一些場(chǎng)景比較有用,比如服務(wù)需要的高度靜態(tài)的一次性代碼。這種類型的代碼非常適合復(fù)制,因?yàn)樗庆o態(tài)的并且不包含任何錯(cuò)誤。比如很多通用的業(yè)務(wù)識(shí)別邏輯就用這種方式,在不同應(yīng)用代碼庫(kù)個(gè)應(yīng)用中編寫(xiě)。

案例1:根據(jù)sendpay標(biāo)位判斷XXX代碼

public static boolean isXXX(String sendpay) {
    boolean flag = false;
    String sendpay_x = Character.toString(sendpay.charAt(x));
    String sendpay_y = Character.toString(sendpay.charAt(y));
    if (("1".equals(sendpay_y) || "2".equals(sendpay_y) || "0".equals(sendpay_y))
            && "1".equals(sendpay_x)) {
        flag = true;
    }
    return flag;
}

案例2:新功能上線DUCC開(kāi)關(guān)

/**
 * XXX功能 控制開(kāi)關(guān)
 */
private boolean enableLargeApplianceSendMsg = false;

public boolean isEnableLargeApplianceSendMsg() {
    return enableLargeApplianceSendMsg;
}

public void setEnableLargeApplianceSendMsg(boolean enableLargeApplianceSendMsg) {
    this.enableLargeApplianceSendMsg = enableLargeApplianceSendMsg;
    log.info("enableLargeApplianceSendMsg: {}", enableLargeApplianceSendMsg);
}

代碼復(fù)制技術(shù)
優(yōu)點(diǎn) 1、無(wú)代碼共享
缺點(diǎn) 1、代碼分散各應(yīng)用中,變更起來(lái)比較復(fù)雜。 2、無(wú)法保證跨服務(wù)代碼一致性,有時(shí)候容易遺漏某個(gè)地方未修改 3、缺乏跨服務(wù)版本控制能力
適合場(chǎng)景 1、關(guān)聯(lián)應(yīng)用較少,比如2-3個(gè)左右可以接受,如果牽扯應(yīng)用較多(比如5+,具體如何確定“較多”的基準(zhǔn)或者指標(biāo)待定)則不適合,同時(shí)核心要思考是不是服務(wù)粒度拆分的太細(xì)了? 2、簡(jiǎn)單的靜態(tài)代碼(比如公共工具類,業(yè)務(wù)邏輯通用類) 3、變更頻率較低

二、共享代碼庫(kù)

共享代碼庫(kù)是共享技術(shù)的常用技術(shù)之一。共享代碼庫(kù)是一個(gè)外部組件(比如JAVA的jar包),共享代碼庫(kù)比代碼復(fù)用更高一層級(jí)。基于功能劃分,提供較為獨(dú)立的功能。比如目前采用了根據(jù)基礎(chǔ)能力和業(yè)務(wù)模塊抽象時(shí)效內(nèi)核JAR包方式,詳見(jiàn)下圖中時(shí)效計(jì)算內(nèi)核jar包。為什么要采用這種方式呢?后文會(huì)說(shuō)明權(quán)衡點(diǎn)。

jar包引入看起來(lái)簡(jiǎn)單,在編譯時(shí)被整合和共享。但其實(shí)也有利弊取舍和復(fù)雜性。其中最重要的是代碼庫(kù)的共享庫(kù)粒度和版本控制。

1、依賴管理和變更控制

如果粗粒度共享庫(kù)中任何類文件發(fā)生變更,都需要每個(gè)服務(wù)變更、測(cè)試、部署。這極大的增加了共享庫(kù)更改的整體測(cè)試范圍。粗粒度共享庫(kù)的變更會(huì)影響多個(gè)服務(wù),但會(huì)減少依賴關(guān)系。

將共享庫(kù)分解為更小的基于功能的共享庫(kù)(比如拆分為 ABCDE等),這樣有利于變更控制和整體可維護(hù)性。但這會(huì)造成依賴管理的混亂。如下圖,業(yè)務(wù)根據(jù)不同業(yè)務(wù)域拆分不同 jar包,導(dǎo)致jar包依賴復(fù)雜。

chaijie_default.png

共享庫(kù)對(duì)少量的應(yīng)用可能并不重要,但隨著服務(wù)數(shù)量增加,變更管理和依賴管理相關(guān)的問(wèn)題也會(huì)增加。

建議:避免大的粗粒度的共享庫(kù),盡可能爭(zhēng)取更小的、功能分區(qū)的庫(kù),有利于變更控制而不是依賴管理。

2、版本控制策略

對(duì)于共享庫(kù)來(lái)說(shuō),版本控制需要向后兼容(后退、考慮舊版本兼容),同時(shí)也需要高度敏捷性。比如a.jar包變更升級(jí)版本為1.1,只需要1個(gè)服務(wù)上線,其他N個(gè)服務(wù)不會(huì)有任何影響。這雖然看起來(lái)版本控制很簡(jiǎn)單,但同樣存在權(quán)衡和隱藏的復(fù)雜性。比如下次N個(gè)應(yīng)用也需要上線。并且依賴管理混亂(服務(wù)ABC依賴a.jar版本1.1,服務(wù)DEF依賴a.jar版本1.0),復(fù)雜性不僅體現(xiàn)在版本變更的通知,也存在舊版本棄用的情況。

共享代碼庫(kù)技術(shù)
優(yōu)點(diǎn) 1、減少重復(fù)代碼 2、不受網(wǎng)絡(luò)影響,性能更加穩(wěn)定。對(duì)性能要求較高的場(chǎng)景使用該方式會(huì)有一定優(yōu)勢(shì); 3、節(jié)省服務(wù)器硬件成本,尤其服務(wù)器QPS高,需要部署大量服務(wù)器資源的場(chǎng)景下。 4、支持版本變更
缺點(diǎn) 1、可維護(hù)性較差,依賴了該組件的服務(wù)都需要跟著一起升級(jí),隨著時(shí)間的推移,梳理維護(hù)起來(lái)會(huì)很麻煩; 2、組件升級(jí)成本高且風(fēng)險(xiǎn)較大,成本包括了開(kāi)發(fā)維護(hù)升級(jí)各個(gè)服務(wù)的成本、測(cè)試驗(yàn)證的成本及運(yùn)維發(fā)布的成本,需升級(jí)維護(hù)的服務(wù)越多,成本越高,對(duì)應(yīng)的風(fēng)險(xiǎn)也越大。 3、容易jar包沖突 4、版本溝通可能很困難 5、依賴可能難以管理、版本棄用可能很復(fù)雜 6、如jar包過(guò)大,維護(hù)困難,并且調(diào)用方引入過(guò)多項(xiàng)目無(wú)用代碼
適合場(chǎng)景 1、無(wú)隱形依賴,更新頻率低和更新影響小的代碼,比如通用的判斷訂單、運(yùn)單校驗(yàn) 2、服務(wù)器資源硬件成本控制要求較為嚴(yán)格,盡量降低成本。 3、內(nèi)部一些公共功能處理場(chǎng)景,不涉及到數(shù)據(jù)庫(kù)資源層面的連接和調(diào)用,適合組件化的方式; 4、對(duì)性能要求較高的應(yīng)用

為什么時(shí)效內(nèi)核需要采用jar包給下單前下單后各應(yīng)用這種方式呢?結(jié)合上面的優(yōu)缺點(diǎn),主要權(quán)衡核心點(diǎn)如下

1.應(yīng)用場(chǎng)景相關(guān):XX是下單前商詳結(jié)算等高并發(fā)場(chǎng)景,下單后訂單生產(chǎn)節(jié)奏控制。

2.降本:預(yù)估降低了服務(wù)器硬件成本XXX核左右

3.性能:通過(guò)JAR包的依賴的方式來(lái)較少RPC調(diào)用,提升了接口性能TP99,尤其是用戶在商詳、結(jié)算提單頁(yè)面

4.更新頻率低:由于時(shí)效內(nèi)核更新頻率較低,一年1-2次左右的改動(dòng)點(diǎn)

三、共享服務(wù)

共享服務(wù)技術(shù)通過(guò)將共享功能服務(wù)化來(lái)避免重復(fù)使用。對(duì)應(yīng)上面改造,把時(shí)效內(nèi)核jar包進(jìn)行服務(wù)化時(shí)效內(nèi)核應(yīng)用,具體架構(gòu)圖如下:

共享服務(wù)是分布式中常見(jiàn)的共享服務(wù)的方法,但也需要權(quán)衡,比如變更風(fēng)險(xiǎn)、性能、可伸縮性、容錯(cuò)性。

1、變更風(fēng)險(xiǎn)

使用共享服務(wù)變更共享代碼是一把雙刃劍。 只需要共享服務(wù)部署上線,但共享服務(wù)的變更可能在運(yùn)行時(shí)破壞其他服務(wù)。那必須牽扯版本控制、共享代碼庫(kù)是在編譯的時(shí)候綁定版本控制,降低更改風(fēng)險(xiǎn)。但如何在共享服務(wù)中版本化變更呢?使用API版本控制。但使用API版本控制有個(gè)問(wèn)題,很多服務(wù)協(xié)議不是restful api,而是rpc或者消息mq,這樣會(huì)使得版本控制復(fù)雜。

共享服務(wù)雖然版本控制可以幫助降低這風(fēng)險(xiǎn),但它的應(yīng)用和管理更復(fù)雜。

2、性能

共享功能服務(wù)必須進(jìn)行服務(wù)間調(diào)用,存在網(wǎng)絡(luò)延遲開(kāi)銷而影響性能。

3、可伸縮性

共享服務(wù)一定要隨著調(diào)用服務(wù)的規(guī)模進(jìn)行伸縮

共享服務(wù)技術(shù)
優(yōu)點(diǎn) 1、減少重復(fù)代碼 2、高度解耦: 每個(gè)服務(wù)都是獨(dú)立的,可以獨(dú)立開(kāi)發(fā)、部署和擴(kuò)展,提高了系統(tǒng)的可維護(hù)性和可擴(kuò)展性。 3、快速迭代: 服務(wù)可以根據(jù)需求快速更新和迭代,更容易適應(yīng)業(yè)務(wù)變化。 4、資源隔離,互不影響,對(duì)調(diào)用方隱藏內(nèi)部細(xì)節(jié)。
缺點(diǎn) 1、增加硬件成本 2、性能受到網(wǎng)絡(luò)延遲影響 3、服務(wù)依賴導(dǎo)致 容錯(cuò)性、可用性、可伸縮性、吞吐量問(wèn)題 4、版本控制可能困難 5、分布式固有問(wèn)題:比如一致性、分布式事務(wù)處理等
適合場(chǎng)景 1、適合多語(yǔ)言的環(huán)境 2、共享功能頻繁變化 3、不需要太多的服務(wù)器資源 4、對(duì)性能要求不高

四、邊車和ServiceMesh服務(wù)網(wǎng)格

"邊車服務(wù)"(Sidecar Pattern)這個(gè)術(shù)語(yǔ)來(lái)源于摩托車的邊車(sidecar),這是一種附加在摩托車旁邊的一輪車廂,可以搭載乘客或貨物,但它不是摩托車本身的核心部分。

邊車服務(wù)(Sidecar Pattern)在微服務(wù)架構(gòu)中用于將一些與業(yè)務(wù)邏輯不直接相關(guān)的控制面(如注冊(cè)發(fā)現(xiàn)、熔斷限流、pfinder鏈路追蹤監(jiān)控、DUCC配置管理等)從應(yīng)用程序中分離出來(lái)。這樣,應(yīng)用程序可以專注于業(yè)務(wù)邏輯,而邊車服務(wù)則負(fù)責(zé)處理其他方面的問(wèn)題。

chaijie_default.png

邊車服務(wù)的關(guān)鍵特點(diǎn)包括:

?復(fù)用性:由于邊車服務(wù)可以被多個(gè)主應(yīng)用共享,因此一些通用的功能(如服務(wù)發(fā)現(xiàn)、斷路器、限流器等)可以在不同的服務(wù)之間重用,減少了代碼的冗余

?隔離性:邊車為主應(yīng)用提供了一個(gè)清晰的隔離層,使得主應(yīng)用可以專注于業(yè)務(wù)邏輯,而不必關(guān)心其他非功能性的問(wèn)題。 邊車服務(wù)是主應(yīng)用程序的附屬,為主應(yīng)用提供支持和增強(qiáng)功能。

?易于維護(hù):邊車的引入使得對(duì)于共享功能的更新和維護(hù)變得更加簡(jiǎn)單,因?yàn)檫@些功能被集中到單獨(dú)的服務(wù)中,不需要在每個(gè)應(yīng)用中單獨(dú)進(jìn)行修改。

?透明性:對(duì)于主應(yīng)用程序來(lái)說(shuō),邊車的存在應(yīng)該是透明的,主應(yīng)用不需要知道邊車的具體實(shí)現(xiàn)細(xì)節(jié)。

?獨(dú)立性:邊車服務(wù)可以獨(dú)立于主應(yīng)用程序更新和維護(hù),無(wú)需修改主應(yīng)用程序的代碼。

通過(guò)使用邊車模式,開(kāi)發(fā)人員可以將關(guān)注點(diǎn)分離,使主應(yīng)用程序更加簡(jiǎn)潔,只關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn),而將服務(wù)治理等通用性問(wèn)題交給邊車服務(wù)處理

如果每個(gè)服務(wù)都包含邊車組件,那么它就形成了服務(wù)網(wǎng)格。每個(gè)服務(wù)右邊的盒子都互相連接,形成一個(gè)“網(wǎng)格”

chaijie_default.png

服務(wù)架構(gòu)是圍繞各自領(lǐng)域組織的,但服務(wù)治理運(yùn)維耦合需要橫切這些領(lǐng)域

五、總結(jié)

技術(shù)最終是要服務(wù)于業(yè)務(wù),每種技術(shù)選擇沒(méi)有絕對(duì)的好壞,各有優(yōu)缺點(diǎn),適合場(chǎng)景。具體應(yīng)該用哪一種,需要根據(jù)成本、團(tuán)隊(duì)技能、系統(tǒng)的未來(lái)發(fā)展綜合考慮,目前團(tuán)隊(duì)系統(tǒng)中上面幾種情況都存在。正如軟件架構(gòu)定律:軟件架構(gòu)中的一切都是在權(quán)衡,架構(gòu)背后的原因比方法更重要。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 分布式
    +關(guān)注

    關(guān)注

    1

    文章

    903

    瀏覽量

    74536
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4791

    瀏覽量

    68676
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    514

    瀏覽量

    25487
  • 復(fù)用
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    12004
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    最新可用隔離元件的性能提升如何幫助替代架構(gòu)在不影響安全的前提下提升系統(tǒng)性能

    本文探討了系統(tǒng)架構(gòu)選擇對(duì)電源和控制電路設(shè)計(jì)以及系統(tǒng)性能的影響。本文還將說(shuō)明最新可用隔離元件的性能提升如何幫助替代架構(gòu)在不影響安全的前提下
    的頭像 發(fā)表于 10-13 06:12 ?7853次閱讀
    最新可用隔離元件的性能<b class='flag-5'>提升</b>如何幫助替代<b class='flag-5'>架構(gòu)</b>在不影響安全<b class='flag-5'>性</b>的前提下<b class='flag-5'>提升</b>系統(tǒng)性能

    如何應(yīng)用設(shè)計(jì)模式的思想寫(xiě)出更優(yōu)質(zhì)的嵌入式軟件應(yīng)用程序代碼

    而言,代碼復(fù)用可移植性要求越來(lái)越高,以獲得更短的項(xiàng)目周期 和更高的可維護(hù)性。下面是AIOT時(shí)代嵌入式設(shè)備的常見(jiàn)的軟件框架。
    發(fā)表于 06-12 09:38 ?249次閱讀
    如何應(yīng)用設(shè)計(jì)模式的思想寫(xiě)出更優(yōu)質(zhì)的嵌入式軟件應(yīng)用程序<b class='flag-5'>代碼</b>

    談?wù)剮追N芯片設(shè)計(jì)增加代碼復(fù)用的方法

    很多芯片在設(shè)計(jì)之初,就已經(jīng)考慮如何增加代碼復(fù)用,盡量減少工作量,降低錯(cuò)誤概率。
    的頭像 發(fā)表于 09-12 09:55 ?1365次閱讀
    談?wù)剮追N芯片設(shè)計(jì)增加<b class='flag-5'>代碼</b><b class='flag-5'>復(fù)用</b><b class='flag-5'>性</b>的方法

    15 年代碼經(jīng)驗(yàn),總結(jié)出提升 10 倍效率件事!

    【譯者注】本文作者 Matt Watson 已經(jīng)寫(xiě)了超過(guò) 15 年的代碼,也由此總結(jié)出了提升 10 倍效率件事。Matt 表示,一個(gè) 10 倍
    發(fā)表于 10-14 17:35

    嵌入式開(kāi)發(fā)程序的架構(gòu)和命名規(guī)范

    總是因人而異。很多較大型的代碼寫(xiě)到最后總是捂不住各種冒出來(lái)的bug,其實(shí)最大的問(wèn)題是根基沒(méi)有打牢。當(dāng)然,主要是程序架構(gòu)的問(wèn)題,架構(gòu)的清晰,程序的可讀
    發(fā)表于 11-05 08:22

    嵌入式軟件開(kāi)發(fā)過(guò)程之程序代碼分層

    在嵌入式軟件開(kāi)發(fā)過(guò)程中,在程序架構(gòu)的搭建完成之后,為了提高項(xiàng)目代碼的可讀可維護(hù)性等,應(yīng)對(duì)程序代碼分層
    發(fā)表于 12-21 06:13

    學(xué)習(xí)架構(gòu)-RAS概述

    健壯、可靠的計(jì)算機(jī)系統(tǒng)有個(gè)關(guān)鍵屬性:可靠、可用可維護(hù)性(RAS)。 這些屬性可以定義如下: 可靠可靠的系統(tǒng)始終按照其規(guī)范提供正確的
    發(fā)表于 08-08 07:53

    面向可維護(hù)性的軟件體系結(jié)構(gòu)設(shè)計(jì)

    面向可維護(hù)性的軟件體系結(jié)構(gòu)設(shè)計(jì)_胡文生
    發(fā)表于 01-08 15:15 ?1次下載

    代碼的可重用代碼開(kāi)發(fā)和確保可維護(hù)性的關(guān)鍵

      所有嵌入式軟件開(kāi)發(fā)人員都應(yīng)該了解庫(kù)的工作方式及其提供的好處。代碼的可重用是高效、高效的代碼開(kāi)發(fā)和確保可維護(hù)性的關(guān)鍵。
    的頭像 發(fā)表于 06-30 14:58 ?1677次閱讀
    <b class='flag-5'>代碼</b>的可重用<b class='flag-5'>性</b>是<b class='flag-5'>代碼</b>開(kāi)發(fā)和確保<b class='flag-5'>可維護(hù)性</b>的關(guān)鍵

    科普一下Verilog代碼命名規(guī)范

    命名規(guī)范包括模塊命名規(guī)范和代碼命名規(guī)范,代碼命名需要有確定的含義,提高代碼可讀可維護(hù)性
    的頭像 發(fā)表于 11-17 09:54 ?3889次閱讀

    ?如何提高HPC SoC的可靠、可用可維護(hù)性級(jí)別

    在大型數(shù)據(jù)中心和超級(jí)計(jì)算機(jī)的領(lǐng)域,高性能計(jì)算 (HPC) 已經(jīng)變得相當(dāng)普遍,并且在某些情況下,在我們的日常生活中必不可少。正因?yàn)槿绱耍煽?b class='flag-5'>性、可用可維護(hù)性(reliability
    的頭像 發(fā)表于 02-15 11:37 ?700次閱讀

    MVVM+RAC的基本概念和使用方式

    在iOS開(kāi)發(fā)中,采用合適的架構(gòu)模式能夠提高代碼可維護(hù)性和可測(cè)試
    的頭像 發(fā)表于 06-06 14:55 ?1254次閱讀

    如何寫(xiě)出易維護(hù)的嵌入式代碼怎么寫(xiě)?

    面向?qū)ο蟮恼Z(yǔ)言更接近人的思維方式,而且在很大程度上降低了代碼的復(fù)雜,同時(shí)提高了代碼的可讀可維護(hù)性,傳統(tǒng)的 C
    發(fā)表于 08-23 09:42 ?273次閱讀
    如何寫(xiě)出易<b class='flag-5'>維護(hù)</b>的嵌入式<b class='flag-5'>代碼</b>怎么寫(xiě)?

    javaWeb的MVC架構(gòu)的原理

    可維護(hù)性、可擴(kuò)展性和重用。在本文中,我們將詳細(xì)介紹JavaWeb的MVC架構(gòu)的原理以及每個(gè)組件的作用。 模型(Model) 模型是JavaWeb應(yīng)用程序中處理數(shù)據(jù)和業(yè)務(wù)邏輯的部分
    的頭像 發(fā)表于 12-03 11:48 ?932次閱讀

    如何采用分區(qū)架構(gòu)提升車輛的簡(jiǎn)易

    維護(hù)和制造。 在飛速發(fā)展的汽車制造領(lǐng)域,正在從過(guò)去滿載 ECU 的汽車向未來(lái)以數(shù)據(jù)為中心的流線型汽車轉(zhuǎn)變。分區(qū)架構(gòu)的概念正在重新定義從車輛設(shè)計(jì)到道路行駛性能、維護(hù)和制造流程等各個(gè)方面。? 汽車行業(yè)正處于變革,分區(qū)
    的頭像 發(fā)表于 07-11 15:59 ?676次閱讀
    主站蜘蛛池模板: 国产99精品视频| 成人bt下载| 最新亚洲一区二区三区四区| 99久久99久久精品免费看子| 成人在线观看视频免费| 国产在线aaa片一区二区99| 久久这里只有精品2| 人妻满熟妇AV无码区国产| 亚洲精品国产熟女久久久| 99久久99| 国语自产视频在线| 欧美黄色第一页| 亚洲精品m在线观看| java农村野外妇女hd| 国模孕妇模特季玥之粉红| 暖暖的视频完整视频免费韩国 | 免费看欧美一级特黄a大片| 色悠久久综合| 18动漫在线观看| 国产精片久久久久久婷婷| 狂操空姐电影| 香蕉精品国产高清自在自线| 91热久久免费频精品99欧美| 国产精品午夜福利在线观看| 麻豆免费观看高清完整视频| 午夜AV亚洲一码二中文字幕青青| 69国产精品人妻无码免费| 国产人妻午夜无码AV天堂| 欧美日韩高清一区| 一本大道无码AV天堂欧美| 国产a级黄色毛片| 免费韩国伦理2017最新| 亚洲精品AV无码永久无码| 哺乳溢出羽月希中文字幕| 久久精品免视看国产| 同桌别揉我奶了嗯啊| 午夜视频在线网站| 99视频这里只有精品| 国产av久久免费观看| 毛片免费在线| 亚洲人交性视频|