架構(gòu)師之路(一) 總體架構(gòu)設(shè)計(jì)篇

本專(zhuān)題所寫(xiě)所感所得,來(lái)自轉(zhuǎn)轉(zhuǎn)首席架構(gòu)師和字節(jié)架構(gòu)團(tuán)隊(duì),此致,敬禮。。

一、引言

鄧寧克魯格效應(yīng)

鄧寧-克魯格效應(yīng)是指的是能力欠缺的人在自己欠考慮的決定的基礎(chǔ)上得出錯(cuò)誤結(jié)論,但是無(wú)法正確認(rèn)識(shí)到自身的不足,辨別錯(cuò)誤行為,是一種認(rèn)知偏差現(xiàn)象。這些能力欠缺者們沉浸在自我營(yíng)造的虛幻的優(yōu)勢(shì)之中,常常高估自己的能力水平,卻無(wú)法客觀(guān)評(píng)價(jià)他人的能力。

這種現(xiàn)象稱(chēng)為「鄧寧克魯格效應(yīng)」。

鄧寧將這種效應(yīng)歸納為:「如果你沒(méi)有能力,你就不會(huì)知道自己沒(méi)有能力?!?/p>

中國(guó)的絕大多數(shù)研發(fā)人員處于第一階段,不知道高層級(jí)的架構(gòu)知識(shí)自己不知道。本專(zhuān)題的目的是把架構(gòu)師從愚昧之巔推向絕望之谷,之后能到哪里,全是造化全是命,師傅領(lǐng)進(jìn)門(mén),修行靠個(gè)人。。

本場(chǎng) Chat 主要內(nèi)容:

  1. 互聯(lián)網(wǎng)發(fā)展三階段
  2. 互聯(lián)網(wǎng)架構(gòu)演進(jìn)之路
  3. 單體架構(gòu)設(shè)計(jì)與實(shí)踐
  4. 水平分層架構(gòu)設(shè)計(jì)與實(shí)踐
  5. 面向服務(wù)架構(gòu)設(shè)計(jì)與實(shí)踐
  6. 微服務(wù)架構(gòu)設(shè)計(jì)與實(shí)踐
  7. 服務(wù)網(wǎng)格架構(gòu)設(shè)計(jì)與實(shí)踐
  8. 千億級(jí)真實(shí)案例實(shí)踐

二、互聯(lián)網(wǎng)發(fā)展三個(gè)階段

2.1 概念

  • PC互聯(lián)網(wǎng)(靜態(tài)化)
    讓數(shù)據(jù)可以在一定范圍內(nèi)在線(xiàn)化。
  • 移動(dòng)互聯(lián)網(wǎng)(動(dòng)態(tài)化)
    讓人越來(lái)越多的數(shù)據(jù)被記錄被聯(lián)通,讓數(shù)據(jù)智能成為可能。
  • 物聯(lián)網(wǎng)(萬(wàn)物連接)
    讓網(wǎng)絡(luò)協(xié)同從人到萬(wàn)物。

2.2 場(chǎng)景

以互動(dòng)形式作為三個(gè)階段的場(chǎng)景為例:


互聯(lián)網(wǎng)發(fā)展三階段下的互動(dòng)形式變化

2.3 特點(diǎn)

  • 業(yè)務(wù)功能越來(lái)越多、越來(lái)越復(fù)雜
  • 萬(wàn)物互聯(lián)數(shù)據(jù)量越來(lái)越大
  • 請(qǐng)求量越來(lái)越大、更高的用戶(hù)體驗(yàn)要求
  • 業(yè)務(wù)快速迭代持續(xù)交付的能力

三、互聯(lián)網(wǎng)架構(gòu)演進(jìn)

互聯(lián)網(wǎng)架構(gòu)演進(jìn)經(jīng)歷了單體架構(gòu)、水平架構(gòu)、面向服務(wù)架構(gòu)、微服務(wù)架構(gòu)、服務(wù)網(wǎng)格架構(gòu)等演進(jìn)過(guò)程。大致的演進(jìn)方向如下圖所示:


架構(gòu)演進(jìn)模型

本文按照演進(jìn)的模型順序來(lái)介紹架構(gòu)的演進(jìn)。

3.1 單體架構(gòu)

以某一商業(yè)系統(tǒng)為例,它接受客戶(hù)的訂單,驗(yàn)證庫(kù)存和貨款,然后發(fā)貨。系統(tǒng)大致可以分為三個(gè)核心模塊(賬戶(hù)模塊、庫(kù)存模塊、配送運(yùn)輸模塊)。將三個(gè)核心模塊封裝到一個(gè)war包內(nèi)部署。


單體架構(gòu)

3.1.1 優(yōu)點(diǎn)

  • 開(kāi)發(fā)簡(jiǎn)單
  • 測(cè)試簡(jiǎn)單
  • 部署簡(jiǎn)單
  • 擴(kuò)展簡(jiǎn)單
擴(kuò)展簡(jiǎn)單,多部署一臺(tái)唄

3.1.2 適用場(chǎng)景

  • 業(yè)務(wù)場(chǎng)景簡(jiǎn)單、功能不復(fù)雜、研發(fā)人員少
  • 創(chuàng)業(yè)公司初期
  • 性能要求極其苛刻

3.1.3 缺點(diǎn)

  • 系統(tǒng)耦合性高
  • 技術(shù)選型單一
  • 開(kāi)發(fā)效率越來(lái)越低下

3.1.4 問(wèn)題改進(jìn)

數(shù)據(jù)庫(kù)數(shù)據(jù)量大,查詢(xún)效率低腫么辦?
答:拆分。垂直拆分(分庫(kù))、水平拆分(分表)

業(yè)務(wù)邏輯逐漸復(fù)雜,系統(tǒng)臃腫腫么辦?
答:拆分。垂直方向拆分(業(yè)務(wù)緯度)、水平拆分(功能緯度)

3.2 水平分層架構(gòu)

水平分層架構(gòu)按功能緯度水平分層,每層之間邏輯解耦。可分為網(wǎng)關(guān)層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪(fǎng)問(wèn)層、數(shù)據(jù)存儲(chǔ)層。


水平分層架構(gòu)

3.2.1 網(wǎng)關(guān)層

網(wǎng)關(guān)層主要提供通用的功能,與業(yè)務(wù)邏輯相關(guān)性不強(qiáng)。大致分為以下幾個(gè)功能:

  • 請(qǐng)求鑒權(quán)
    登陸鑒權(quán)、黑白名單等
  • 數(shù)據(jù)完整性檢查
    數(shù)據(jù)包header、body完整性、正確性檢查,是否被竄改等
  • 協(xié)議轉(zhuǎn)換
    json->hashmap、pb->json等
  • 路由轉(zhuǎn)發(fā)
    根據(jù)cmd轉(zhuǎn)發(fā)到不同的業(yè)務(wù)邏輯層
  • 服務(wù)治理
    限流、降級(jí)、熔斷等
3.2.1.1 網(wǎng)關(guān)實(shí)現(xiàn)
網(wǎng)關(guān)組件

IO模型詳解參考:Linux IO模式及 select、poll、epoll詳解

3.2.2 業(yè)務(wù)邏輯層

  • 庫(kù)存模塊
    庫(kù)存量加減、庫(kù)存是否充足判斷、是否需要補(bǔ)充庫(kù)存等。
  • 配送模塊
    配送管理、訂單管理、物流信息等。

3.2.3 數(shù)據(jù)訪(fǎng)問(wèn)層

3.2.3.1 CURD

程序員日常工作,業(yè)務(wù)的增刪改查

3.2.3.2 ORM

對(duì)象關(guān)系映射(Object Relational Mapping,簡(jiǎn)稱(chēng)ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫(kù)存在的互不匹配的現(xiàn)象的技術(shù)。簡(jiǎn)單的說(shuō),ORM是通過(guò)使用描述對(duì)象和數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù),將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中。

對(duì)比緯度 mybatis hibernate
難易度 相對(duì)容易上手 重量級(jí),掌握難度大些
工作量 手寫(xiě)SQL,需要維SQL和結(jié)果映射 封裝、簡(jiǎn)潔
可移植性 SQL是依賴(lài)數(shù)據(jù)庫(kù)書(shū)寫(xiě)的,所以擴(kuò)展性差,可移植性比較差 可移植性強(qiáng),Hibernate與數(shù)據(jù)庫(kù)具體的關(guān)聯(lián)都在XML配置中
緩存機(jī)制 緩存機(jī)制不佳,臟數(shù)據(jù)會(huì)給系統(tǒng)帶來(lái)很大的隱患 Hibernate用戶(hù)無(wú)需關(guān)心SQL,二級(jí)緩存出現(xiàn)臟數(shù)據(jù)系統(tǒng)會(huì)報(bào)錯(cuò)
使用場(chǎng)景 都適用 單一業(yè)務(wù)高并發(fā)下不建議使用
3.2.3.3 分庫(kù)分表
對(duì)比緯度 Mycat Sharding-JDBC Sharding-Proxy Sharding-Sidecar
官方文檔 Mycat 權(quán)威指南 官方文檔 官方文檔 官方文檔
開(kāi)發(fā)語(yǔ)言 Java Java Java Java
開(kāi)源協(xié)議 GPL-2.0/GPL-3.0 Apache-2.0 Apache-2.0 Apache-2.0
數(shù)據(jù)庫(kù) MySQL、Oracle、SQL Server、PostgreSQL、DB2、MongoDB、SequoiaDB MySQL、Oracle、SQLServer、PostgreSQL、任何遵循 SQL92 標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù) MySQL/PostgreSQL MySQL/PostgreSQL
連接數(shù)
應(yīng)用語(yǔ)言 任意 Java 任意 任意
代碼入侵 無(wú) 需要修改代碼 無(wú) 無(wú)
性能 損耗略高 損耗低 損耗略高 損耗低
無(wú)中心化
靜態(tài)入口 無(wú) 無(wú)
管理控制臺(tái) Mycat-web Sharding-UI Sharding-UI Sharding-UI
分庫(kù)分表 單庫(kù)多表/多庫(kù)單表 ?? ?? ??
多租戶(hù)方案 ?? -- -- --
讀寫(xiě)分離 ?? ?? ?? ??
分片策略定制化 ?? ?? ?? ??
分布式主鍵 ?? ?? ?? ??
標(biāo)準(zhǔn)化事務(wù)接口 ?? ?? ?? ??
XA強(qiáng)一致事務(wù) ?? ?? ?? ??
柔性事務(wù) -- ?? ?? ??
配置動(dòng)態(tài)化 開(kāi)發(fā)中 ?? ?? ??
編排治理 開(kāi)發(fā)中 ?? ?? ??
數(shù)據(jù)脫敏 -- ?? ?? ??
可視化鏈路追蹤 -- ?? ?? ??
彈性伸縮 開(kāi)發(fā)中 開(kāi)發(fā)中 開(kāi)發(fā)中 開(kāi)發(fā)中
多節(jié)點(diǎn)操作 分頁(yè)、去重、排序、分組、聚合 分頁(yè)、去重、排序、分組、聚合 分頁(yè)、去重、排序、分組、聚合 分頁(yè)、去重、排序、分組、聚合
跨庫(kù)關(guān)聯(lián) 跨庫(kù) 2 表 Join ER Join、基于 caltlet 的多表 Join -- -- --
IP 白名單 ?? -- -- --
SQL 黑名單 ?? -- -- --
存儲(chǔ)過(guò)程 ?? -- -- --

放棄吧,小伙伴,分庫(kù)分表多麻煩呀,有條件的話(huà),直接上ti-db吧

3.2.3.4 屏蔽底層存儲(chǔ)差異性
  • mysql/mongodb
  • redis/memcached
  • leveldb/rocksdb/hbase
  • ti-db

3.2.4 同步架構(gòu) or 異步架構(gòu)

3.2.4.1 同步架構(gòu)

同步架構(gòu)是以串行的方式實(shí)現(xiàn)業(yè)務(wù)服務(wù)的響應(yīng)。


同步架構(gòu)

全流程解析如下圖:


同步架構(gòu)
3.2.4.2 異步架構(gòu)

異步架構(gòu)是通過(guò)消息隊(duì)列mq異步提高吞吐量。


異步架構(gòu)

3.2.5 分層設(shè)計(jì)

水平分層設(shè)計(jì)過(guò)多或者過(guò)少有啥缺點(diǎn)?
答:
1.過(guò)多:請(qǐng)求路徑變長(zhǎng)、平均響應(yīng)延時(shí)變高、定位問(wèn)題復(fù)雜、運(yùn)維成本高。
2.過(guò)少:變成單體架構(gòu)了。

水平分層設(shè)計(jì)幾層合適?
答:
1.同步架構(gòu)(四層):網(wǎng)關(guān)層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪(fǎng)問(wèn)層、數(shù)據(jù)存儲(chǔ)層。
2.異步架構(gòu)(五層):網(wǎng)關(guān)層、異步消息隊(duì)列層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪(fǎng)問(wèn)層、數(shù)據(jù)存儲(chǔ)層。

3.3 面向服務(wù)架構(gòu)(SOA)

面向服務(wù)架構(gòu)是垂直分層。不同功能模塊通過(guò)定義好的接口關(guān)聯(lián),接口采用中立的方式定義,獨(dú)立于硬件平臺(tái)、操作系統(tǒng)、編譯語(yǔ)言。其主要特點(diǎn)是:

  • 多個(gè)獨(dú)立服務(wù)
  • 通過(guò)esb交互


    SOA

3.3.1 缺點(diǎn)

  • 業(yè)務(wù)垂直,每個(gè)服務(wù)都是一個(gè)單體架構(gòu)
  • 嚴(yán)重依賴(lài)于esb消息總線(xiàn)

3.4 微服務(wù)架構(gòu)

微服務(wù)架構(gòu)是微服務(wù)可以在“自己的程序”中運(yùn)行,并通過(guò)“輕量級(jí)設(shè)備與HTTP型API進(jìn)行溝通”。關(guān)鍵在于該服務(wù)可以在自己的程序中運(yùn)行。通過(guò)這一點(diǎn)我們就可以將服務(wù)公開(kāi)與微服務(wù)架構(gòu)(在現(xiàn)有系統(tǒng)中分布一個(gè)API)區(qū)分開(kāi)來(lái)。在服務(wù)公開(kāi)中,許多服務(wù)都可以被內(nèi)部獨(dú)立進(jìn)程所限制。如果其中任何一個(gè)服務(wù)需要增加某種功能,那么就必須縮小進(jìn)程范圍。在微服務(wù)架構(gòu)中,只需要在特定的某種服務(wù)中增加所需功能,而不影響整體進(jìn)程的架構(gòu)。

說(shuō)人話(huà):就是把水平分層架構(gòu)的每一次再拆分出更細(xì)粒度的微服務(wù)。

微服務(wù)架構(gòu)

3.4.1 舉個(gè)例子

服務(wù)被拆分成醬紫:

  • 網(wǎng)關(guān)層
    1個(gè)
  • 業(yè)務(wù)邏輯層
    N個(gè)
  • 數(shù)據(jù)訪(fǎng)問(wèn)層
    N個(gè)
  • DB/Cache
    N個(gè)


    微服務(wù)架構(gòu)

3.4.2 缺點(diǎn)

各個(gè)大廠(chǎng)都在用,優(yōu)點(diǎn)太多,罄竹難書(shū),不講了。咱們反而道而行之,只講缺點(diǎn):

  • 迭代速度變慢
    業(yè)務(wù)需關(guān)注服務(wù)間通信,所以迭代速度變慢。


  • 基礎(chǔ)組件升級(jí)困難


  • 存在多語(yǔ)言通信問(wèn)題,業(yè)務(wù)每種語(yǔ)言有一套基礎(chǔ)設(shè)施,成本大


3.5 服務(wù)網(wǎng)格架構(gòu)(service mesh)

服務(wù)網(wǎng)格是一個(gè)基礎(chǔ)設(shè)施層,用于處理服務(wù)間通信。云原生應(yīng)用有著復(fù)雜的服務(wù)拓?fù)洌?wù)網(wǎng)格保證請(qǐng)求可以在這些拓?fù)渲锌煽康卮┧?。在?shí)際應(yīng)用當(dāng)中,服務(wù)網(wǎng)格通常是由一系列輕量級(jí)的網(wǎng)絡(luò)代理組成的,它們與應(yīng)用程序部署在一起,但應(yīng)用程序不需要知道它們的存在。


服務(wù)網(wǎng)格架構(gòu)

3.5.1 優(yōu)點(diǎn)

  • 獨(dú)立進(jìn)程、獨(dú)立升級(jí)
  • 業(yè)務(wù)只關(guān)注業(yè)務(wù)邏輯本身
  • 一套基礎(chǔ)設(shè)施支持多語(yǔ)言開(kāi)發(fā)
  • 業(yè)務(wù)團(tuán)隊(duì)和基礎(chǔ)設(shè)施團(tuán)隊(duì)物理解耦

3.5.2 Istio

要聊ServiceMesh,就不得不提Istio,它是ServiceMesh目前最流行的實(shí)踐,今天說(shuō)說(shuō)Istio是干啥的。

  • Istio服務(wù)網(wǎng)格邏輯上分為數(shù)據(jù)面、控制面。
  • 數(shù)據(jù)面由一組智能代理(Envoy)組成,代理部署為sidecar,調(diào)解和控制微服務(wù)所有的網(wǎng)絡(luò)通信。
  • 控制面負(fù)責(zé)管理和配置代理來(lái)路由,以及運(yùn)行時(shí)策略。
3.5.2.1 數(shù)據(jù)面Envoy

Envoy的核心職責(zé)是高效轉(zhuǎn)發(fā),主要有以下功能:
(1)服務(wù)發(fā)現(xiàn)
(2)負(fù)載均衡
(3)安全傳輸
(4)多協(xié)議支持,例如HTTP/2,gRPC
(5)斷路器(Circuit breakers)
(6)健康檢查
(7)百分比分流路由
(8)故障注入(Fault injection)
(9)系統(tǒng)度量

3.5.2.1.1 請(qǐng)求路由
3.5.2.1.2 服務(wù)發(fā)現(xiàn)和負(fù)載均衡

三種負(fù)載平衡模式:輪循、隨機(jī)、帶權(quán)重。

3.5.2.1.3 斷路器

它是軟件架構(gòu)設(shè)計(jì)中,一個(gè)服務(wù)自我保護(hù),或者說(shuō)降級(jí)的設(shè)計(jì)思路。

舉個(gè)例子:當(dāng)系統(tǒng)檢測(cè)出某個(gè)接口有大量超時(shí)時(shí),斷路器策略可以終止對(duì)這個(gè)接口的調(diào)用(斷路器打開(kāi)),經(jīng)過(guò)一段時(shí)間后,再次嘗試調(diào)用,如果接口不再超時(shí),則慢慢恢復(fù)調(diào)用(斷路器關(guān)閉)。
主要功能包括

  • 超時(shí)
  • 帶超時(shí)預(yù)算有限重試
  • 并發(fā)連接數(shù)和上有服務(wù)請(qǐng)求數(shù)限制
  • 健康檢查
3.5.2.1.4 故障注入

它是軟件架構(gòu)設(shè)計(jì)中,一種故意引入故障,以擴(kuò)大測(cè)試覆蓋范圍,保障系統(tǒng)健壯性的方法,主要用于測(cè)試。

故障注入的兩種類(lèi)型:

  • 延遲:計(jì)時(shí)故障,模擬增加網(wǎng)絡(luò)延時(shí)或過(guò)載的上游服務(wù)。
  • 中止:模擬上游服務(wù)的崩潰故障。中止通用以http錯(cuò)誤代碼或者tcp連接失敗形式表現(xiàn)。
3.5.2.2 控制面
3.5.2.2.1 Mixer

Mixer的一些核心能力是:
(1)跨平臺(tái),作為其他組件的adapter,實(shí)現(xiàn)Istio跨平臺(tái)的能力;
(2)和Envoy通訊,實(shí)時(shí)各種策略
(3)和Envoy通訊,收集各種數(shù)據(jù)
Mixer的設(shè)計(jì)核心在于“插件化”,這種模型使得Istio能夠適配各種復(fù)雜的主機(jī)環(huán)境,以及后端基礎(chǔ)設(shè)施。


Mixer
3.5.2.2.2 Pilot

Pilot作為非常重要的控制平面組件,其核心能力是:
(1)為Envoy提供服務(wù)發(fā)現(xiàn)能力;
(2)為Envoy提供各種智能路由管理能力,例如A/B測(cè)試,灰度發(fā)布;
(3)為Envoy提供各種彈性管理能力,例如超時(shí),重試,斷路策略;
Pilot的設(shè)計(jì)核心在于“標(biāo)準(zhǔn)化”,它會(huì)將各種流控的控制命令轉(zhuǎn)化為Envoy能夠識(shí)別的配置,并在運(yùn)行時(shí),將這些指令擴(kuò)散到所有的Envoy。Pilot將這些能力抽象成通用配置的好處是,所有符合這種標(biāo)準(zhǔn)的Envoy都能夠接入到Pilot來(lái)。
潛臺(tái)詞是,任何第三方可以實(shí)現(xiàn)自己的proxy,只要符合相關(guān)的API標(biāo)準(zhǔn),都可以和Pilot集成。


Pilot
3.5.2.2.3 Citadel

Citadel組件,它提供終端用戶(hù)身份認(rèn)證,以及服務(wù)到服務(wù)的訪(fǎng)問(wèn)控制??傊?,這是一個(gè)和安全相關(guān)的組件。

3.6 實(shí)踐

以某知名互聯(lián)網(wǎng)公司架構(gòu)演進(jìn)為例。

3.6.1 服務(wù)架構(gòu)1.0

服務(wù)被拆分為:

  • 網(wǎng)關(guān)層
    1個(gè)
  • 業(yè)務(wù)邏輯層
    1個(gè)
  • 數(shù)據(jù)訪(fǎng)問(wèn)層
    N個(gè)
  • DB/Cache
    N個(gè)


    服務(wù)架構(gòu)1.0

娘耶,業(yè)務(wù)邏輯層粒度太粗,所有業(yè)務(wù)邏輯耦合到一起,開(kāi)發(fā)效率也低。拆遷隊(duì)準(zhǔn)備就位,垂直方向拆拆拆。。

3.6.2 服務(wù)架構(gòu)2.0

服務(wù)被拆分為:

  • 網(wǎng)關(guān)層
    1個(gè)
  • 業(yè)務(wù)邏輯層
    N個(gè)
  • 數(shù)據(jù)訪(fǎng)問(wèn)層
    N個(gè)
  • DB/Cache
    N個(gè)


    服務(wù)架構(gòu)1.0->服務(wù)架構(gòu)2.0

這下好了吧,但公共邏輯和業(yè)務(wù)邏輯混合在一起,沒(méi)有解耦。
公共邏輯層

  • 組件化:引入jar/sdk包
  • 服務(wù)化:下層為獨(dú)立服務(wù)

拆遷隊(duì)繼續(xù)搞事情,水平方向拆拆拆。。

3.6.3 服務(wù)架構(gòu)3.0

服務(wù)被拆分為:

  • 網(wǎng)關(guān)層
    1個(gè)
  • 業(yè)務(wù)邏輯層
    N個(gè)
  • 公共邏輯層
    N個(gè)
  • 數(shù)據(jù)訪(fǎng)問(wèn)層
    N個(gè)
  • DB/Cache
    N個(gè)


    服務(wù)架構(gòu)2.0->服務(wù)架構(gòu)3.0

3.6.4 服務(wù)架構(gòu)4.0

該服務(wù)架構(gòu)的未來(lái)是service mesh,沒(méi)搞沒(méi)搞。

四、寫(xiě)在最后

以上架構(gòu)演進(jìn)都是扯淡,適合自己的才是最好的架構(gòu)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容