新聞中心
1. 全球的網(wǎng)絡(luò)規(guī)劃
如下圖是我認(rèn)為比較理想的一種網(wǎng)絡(luò)拓?fù)?

龍文網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
網(wǎng)絡(luò)規(guī)劃主要有如下幾點(diǎn):
- 網(wǎng)段劃分
在面向全球的業(yè)務(wù)形態(tài)下,網(wǎng)絡(luò)被割裂為兩部分: 海外和中國內(nèi)地。我更傾向于建立兩個(gè)中心,國內(nèi)的核心節(jié)點(diǎn)設(shè)置在北京,主要面向國內(nèi)業(yè)務(wù);海外的核心節(jié)點(diǎn)設(shè)置在新加坡,主要面向海外業(yè)務(wù)。
因此將 10.128.0.0/16 及以上網(wǎng)段劃分給海外,10.127.0.0/16 及以下劃分給國內(nèi)。同時(shí),每個(gè)區(qū)的網(wǎng)段之間相隔 8,預(yù)留一定的擴(kuò)展空間。
- 實(shí)現(xiàn)連通
如果是同一個(gè) VPC,那么內(nèi)網(wǎng)是可達(dá)的。但是如果是不同 VPC、不同的廠商、不同的區(qū)域之間,我們通常會(huì)借助一定的方法實(shí)現(xiàn)連通:公網(wǎng)或者專線。
公網(wǎng)是比較普適的一種方法。我們可以基于公網(wǎng),搭建 VPN 內(nèi)網(wǎng),實(shí)現(xiàn)網(wǎng)絡(luò)連通。但是,公網(wǎng)的連通質(zhì)量不能得到保障,因此還有一種方式就是專線。
專線能夠?qū)崿F(xiàn)跨區(qū)域的網(wǎng)絡(luò)連通,但是云專線通常限于同一家云廠商。也就是說,華為云北京的云專線只能連通華為云新加坡,而不能連通 AWS 新加坡。
- 配置路由
實(shí)現(xiàn)連通只是相當(dāng)于插上了網(wǎng)線,但是轉(zhuǎn)發(fā)數(shù)據(jù)包時(shí),并不清楚 IP 包的下一跳是哪里,因此還需要配置路由。
由于設(shè)置有兩個(gè)網(wǎng)絡(luò)核心,海外的區(qū)域與海外的核心節(jié)點(diǎn)需要互通,國內(nèi)的區(qū)域與國內(nèi)的核心節(jié)點(diǎn)需要互通。至于其他各區(qū)域是否互通,需要看是否有需求。比如,我們需要在內(nèi)網(wǎng)進(jìn)行鏡像數(shù)據(jù)的 P2P 分發(fā),那么就需要各區(qū)域也互通。
2. 建設(shè)全球鏡像分發(fā)能力
全球的鏡像分發(fā)能力是建立在全球 IDC 內(nèi)網(wǎng)互通的前提下的。我們不能讓基礎(chǔ)設(shè)施暴露于公網(wǎng)之上,全部的鏡像數(shù)據(jù)都是通過內(nèi)網(wǎng)流量進(jìn)行傳輸?shù)摹?/p>
如下圖是一個(gè)全球鏡像分發(fā)系統(tǒng):
我們的研發(fā)部門在國內(nèi),而部署的服務(wù)遍布全球。鏡像數(shù)據(jù)的流轉(zhuǎn)會(huì)經(jīng)過以下流程:
- 國內(nèi)構(gòu)建鏡像并推送到國內(nèi)的 Habor 中。
- 國內(nèi) Habor 同步鏡像到海外的 Habor 中。
- 在某個(gè)區(qū)域,部署海外的應(yīng)用,拉取鏡像。
- 由于每個(gè) Docker 中都配置了 Dget 的地址作為 registry-mirrors,應(yīng)用鏡像被緩存到 Dget 中。
- 在同一個(gè)區(qū)域,多個(gè)副本部署時(shí),都將直接拉取 Dget 中的鏡像。
3. Habor 的部署與高可用
3.1 部署 Habor
Harbor 部署主要有兩種方式 Helm Chart 和 Docker Compose。這里推薦的是 Docker Compose,因?yàn)樽鳛橐粋€(gè)不會(huì)頻繁變更、穩(wěn)定性要求高的服務(wù),VM 比 Kubernetes 更適合作為 Habor 的基礎(chǔ)設(shè)施。
3.2 高可用 Harbor
Harbor 的高可用主要有兩種方式:
- 共享存儲(chǔ)。一致性高,需要部署雙活\主備的存儲(chǔ)后端。
- 多 Harbor 之間同步。一致性不高,鏡像同步需要時(shí)間。
我建議采用的方案是共享存儲(chǔ),不想等待 Harbor 同步完成,推送完的鏡像即可用。如下圖,共享存儲(chǔ)方案下,需要以雙活\主備的形式部署存儲(chǔ)組件:
這里需要共享的組件有:
- 共享 PGSQL
可以直接購買云廠商的服務(wù),然后初始化創(chuàng)建表。
CREATE DATABASE notary_server;
CREATE DATABASE notary_signer;
CREATE DATABASE harbor ENCODING 'UTF8';
CREATE USER harbor;
ALTER USER harbor WITH ENCRYPTED PASSWORD '123456';
GRANT ALL PRIVILEGES ON DATABASE notary_server TO harbor;
GRANT ALL PRIVILEGES ON DATABASE notary_signer TO harbor;
GRANT ALL PRIVILEGES ON DATABASE registry TO harbor;
GRANT ALL PRIVILEGES ON DATABASE harbor TO harbor;
GRANT ALL PRIVILEGES ON DATABASE clair TO harbor;
external_database:
harbor:
host: 1.1.1.1
port: 5432
db_name: harbor
username: harbor
password: 123456
ssl_mode: disable
max_idle_conns: 10
max_open_conns: 100
notary_server:
host: 1.1.1.1
port: 5432
db_name: notary_server
username: harbor
password: 123456
ssl_mode: disable
max_idle_conns: 10
max_open_conns: 30
notary_signer:
host: 1.1.1.1
port: 5432
db_name: notary_signer
username: harbor
password: 123456
ssl_mode: disable
max_idle_conns: 10
max_open_conns: 30
- 共享 Redis
Harbor 的 Redis 主要存儲(chǔ)的是會(huì)話 Session 信息,會(huì)影響到 Harbor UI 頁面的登錄。如果對(duì)可用性要求不太高,可以使用自建的 Redis 實(shí)例,因?yàn)榧词?Redis 的存儲(chǔ)數(shù)據(jù)丟失,對(duì) Harbor 的數(shù)據(jù)完整性沒有影響。
- 共享 S3 對(duì)象存儲(chǔ)
我使用的是華為 OBS 對(duì)象存儲(chǔ),這里的 AKSK 需要給 full 權(quán)限。
storage_service:
s3:
accesskey: xxx
secretkey: xxx
region: ap-southeast-3
regionendpoint: https://obs.ap-southeast-3.myhuaweicloud.com
bucket: xxx
encrypt: false
secure: true
v4auth: true
chunksize: 5242880
multipartcopychunksize: 33554432
multipartcopymaxconcurrency: 100
multipartcopythresholdsize: 33554432
rootdirectory: /registry/
如果擔(dān)心 S3 的單點(diǎn)問題,可以購買兩個(gè) Bucket,相互同步鏡像數(shù)據(jù)。這樣,當(dāng)其中一個(gè) Bucket 有異常時(shí),可以迅速切換到另外一個(gè) Bucket 恢復(fù)服務(wù)。
4. 利用 Dragonfly 節(jié)省帶寬
為什么需要 Dragonfly 分發(fā)鏡像? 其中很大的一個(gè)原因在于節(jié)省帶寬,還有就是避免 Habor 的負(fù)載過大。
如果不使用 Dragonfly 鏡像分發(fā),那么每次拉取鏡像都會(huì)向 Habor 請(qǐng)求數(shù)據(jù)。如下圖:
而采用 Dragonfly 之后,同一個(gè)區(qū)域只需要請(qǐng)求一次 Harbor,其他請(qǐng)求都可以通過區(qū)域內(nèi)的流量完成。這種方式大大加快了鏡像拉取過程,節(jié)省了跨區(qū)域的帶寬,減輕了 Habor 的負(fù)載壓力。
5. 總結(jié)
最近在給業(yè)務(wù)重新規(guī)劃部署一套鏡像管理系統(tǒng),本篇是相關(guān)思考和實(shí)踐的一些總結(jié)。
本文主要從網(wǎng)絡(luò)規(guī)劃開始,聊到全球鏡像的分發(fā)。網(wǎng)絡(luò)規(guī)劃主要涉及網(wǎng)段規(guī)劃、實(shí)現(xiàn)連通、配置路由三個(gè)部分。而鏡像分發(fā)主要采用的是 Habor + Dragonfly 的方案。同時(shí),推薦的是采用共享存儲(chǔ)的方式部署高可用的 Harbor。
實(shí)際上,在部署完 Habor 之后,我還對(duì)各區(qū)域拉取鏡像的速度進(jìn)行了測(cè)試。另外,還需要將影響 Habor 服務(wù)的依賴項(xiàng)配置監(jiān)控,持續(xù)的改進(jìn),才能打造好的鏡像倉庫及分發(fā)系統(tǒng)。
6. 參考
- https://github.com/dragonflyoss/Dragonfly2
- https://github.com/goharbor/harbor
新聞名稱:聊聊面向全球的鏡像分發(fā)網(wǎng)絡(luò)
網(wǎng)頁路徑:http://fisionsoft.com.cn/article/dhdsijd.html


咨詢
建站咨詢
