鏡像下載、域名解析晋涣、時間同步請點擊 阿里云開源鏡像站
前言
本文將包括兩部分內(nèi)容:
- 淘寶 npm 域名即將停止解析
- npmmirror 鏡像站大重構升級
原淘寶 npm 域名即將停止解析
正如在《淘寶 NPM 鏡像站喊你切換新域名啦》 中預告的那樣:
http://npm.taobao.org 和 http://registry.npm.taobao.org 將在 2022.06.30 號正式下線和停止 DNS 解析册招。
域名切換規(guī)則:
- http://npm.taobao.org => http://npmmirror.com
- http://registry.npm.taobao.org => http://registry.npmmirror.com
因此漓概,有強依賴老域名的各位開發(fā)者請盡快更新到新域名刀闷,可能受到的影響和處理方式:
- 企業(yè)用戶需要聯(lián)系 網(wǎng)管/IT/SRE 更新防火墻白名單柳骄。
- 存量應用的 lock 文件团赏,開發(fā)者需要自行執(zhí)行 sed 等指令去替換或重新生成。
- 本地 npmrc 里面的 registry 地址(如果有耐薯,則)需要開發(fā)者自行更新舔清。
- 開發(fā)者自己的 CL 工具 或 平臺應用 里面寫死的地址,需開發(fā)者自己更新并部署曲初。
- cnpm cli / nrm 等工具体谒,對應的社區(qū)同學已經(jīng)提 PR 更新,大家重新安裝最新版本即可臼婆。(如發(fā)現(xiàn)遺漏麻煩知會下我們)
BTW:我們新的品牌名為: npmmirror 中國鏡像站抒痒。
npmmirror 中國鏡像站大重構升級
我們的 npmmirror 鏡像站,自 2014 年正式對外服務以來颁褂,不知不覺已經(jīng) 8 年故响,2021 年全年的包下載量高達 260 億次(比 2020 年增長 1.5 倍)。
這些年來颁独,Node.js 領域的技術在快速的迭代升級彩届,我們原來的架構已經(jīng)很難支撐當今如此大體量的前端生態(tài),因此在 2021 年我們啟動了技術升級誓酒,并于春節(jié)前已經(jīng)切換完成樟蠕。
同步邏輯優(yōu)化
早期我們同步 npm 源站的方式,是沒有補償機制的丰捷,所以當因為不可抗力導致同步失敗時坯墨,需要社區(qū)開發(fā)者手動執(zhí)行 cnpm sync 同步下。
在本次優(yōu)化中病往,我們實現(xiàn)了一個簡單的任務系統(tǒng)捣染,來提供更好的同步補償機制。
非常感謝阿里云這么多年來的對中國 npmmirror 鏡像服務的開源贊助停巷,只能靠僅有的廣告位和每年的感謝帖子來回報這份天價的云資源賬單耍攘。
這一次重構之后,我們驗證下來至少可以節(jié)省一半的云服務器資源畔勤,也算是讓阿里云的開源贊助可以減輕一些成本負擔蕾各。
完全重寫的代碼
第一點是框架升級,原有的代碼 是基于 Koa 的庆揪,現(xiàn)基于 Egg 的 TypeScript 模式完全重構:cnpm/cnpmcore 式曲。
@HTTPController()
export class DownloadController extends AbstractController {
@Inject()
private packageVersionDownloadRepository: PackageVersionDownloadRepository;
@HTTPMethod({
path: `/downloads/range/:range/:fullname(${FULLNAME_REG_STRING})`,
method: HTTPMethodEnum.GET,
})
async showPackageDownloads(@HTTPParam() fullname: string, @HTTPParam() range: string) {
// ...
}
}
同時,目錄結構基于 DDD 領域驅動設計方式,https://www.yuque.com/liberty/rf322x
app
├── common
│ └── adapter # 外部服務調(diào)用
├── core
│ ├── entity # 核心模型吝羞,實現(xiàn)業(yè)務行為
│ ├── event # 異步事件定義兰伤,以及消費,串聯(lián)業(yè)務
│ ├── service # 核心業(yè)務邏輯
│ └── util
├── repository
│ └── model # ORM 模型钧排,數(shù)據(jù)定義
├── port
│ └── controller # HTTP Controller
├── schedule # 定時任務
└── test # 單測
同時敦腔,我們的監(jiān)控體系也切換為基于 Egg 的 Easy-Monitor 。
可能存在的問題
鑒于我們是全新架構大重構恨溜,盡管我們已經(jīng)在春節(jié)前完成了老數(shù)據(jù)的全量遷移符衔,但也引起了一些數(shù)據(jù)同步問題,在此給您帶來的不便表示抱歉糟袁。
如果遇到 包版本
或 mirror 大包
同步缺漏問題判族,可以先手動 sync 一次。如還有問題系吭,可以通過 cnpm issue 反饋五嫂,我們將在第一時間處理,請大家多體諒肯尺。