《2-王青-高性能制品庫系統的設計.pdf》由會員分享,可在線閱讀,更多相關《2-王青-高性能制品庫系統的設計.pdf(24頁珍藏版)》請在三個皮匠報告上搜索。
1、高效能制品庫系統的設計JFrog2023 深圳站王青十五年敏捷研發管理與軟件工程實踐經驗,目前任 JFrog 中國技術團隊負責人QCon明星講師,GOPS金牌講師JFrog(中國)技術總監2023 深圳站目錄CONTENTS管理上億的制品,會遇到什么問題?海量文件存儲占用磁盤大,如何優化?1 如何設計存儲系統能支持高并發的文件上傳?2 并發下載遇到瓶頸,如何水平擴容?3 利用制品元數據實現自動化4 2023 深圳站JFrog 軟件產品形態1.唯一可信源三方庫二方庫版本庫2.7000+企業用戶3.全球財富100強企業近90%已使用2023 深圳站現有的制品庫正在阻礙您的快速發布研發測試區生產區F
2、TP/SVNMaven庫NexusNPM庫NPMDocker庫Docker RegistryC#,.Net庫Nuget公有云私有云開發團隊開發團隊開發團隊開發團隊開發團隊開發團隊統一代碼庫統一持續集成使用多種私服賬號構建速度慢版本信息不透明1.研發團隊版本缺乏質量信息缺乏版本流轉信息2.測試團隊無高可用性大包傳輸失敗3.運維團隊漏洞發現難影響定位難開發修復難4.安全團隊2023 深圳站JFrog 軟件唯一可信源2023 深圳站軟件發布頻率的增長趨勢1.IDC 研究報告全球的App數量達到520M-202460%企業每天進行版本發布,甚至更快-202580%數據中心將運行 K8s-20252.案
3、例深圳某大型高科技企業月度構建次數達到 9000萬次某股份制銀行日均構建次數達到 10萬次Sources:IDC,Preparing for the Digital-First Economy:The Hyperscale,Hyperspeed,and Hyperconnected Enterprise,#DR2020_GS2_FG,March 2020 and IDC FutureScape:Worldwide Datacenter 2020 Predictions,#US44747919 2023 深圳站應用架構2023 深圳站1.海量文件存儲占用磁盤大,如何優化?去重的文件存儲設計文件上
4、傳是將文件以其 checksum 值重命名數據庫里存放文件的路徑和文件的 checksum2023 深圳站去重存儲的優點任何文件在磁盤里只存儲一份在海量文件檢索時效率極大提升Actual FileDB RecordPath2023 深圳站如何設計存儲系統能支持高并發的文件上傳下載?文件上傳:上傳時間長,容易超時失敗缺乏寫緩存2023 深圳站增加文件讀寫緩存層Cache-fs:讀取緩沖區,用于優化 Artifactory 和遠程存儲(例如 NAS 或云存儲)之間的流量。這個“最近使用”(LRU)緩存將托管最近上傳和下載的工件。啟用它可以減少對網絡存儲的請求數量,從而減少響應時間。Eventual
5、:一個寫緩沖區,用于在使用慢速和/或遠程存儲時優化上傳過程中的減速。默認情況下,所有依賴對象存儲(例如 AWS S3、Azure Blob 存儲等)的 Artifactory 存儲模板都啟用此緩沖區。這允許實現異步上傳,不用等工件上傳到遠程存儲即可立即使用。一旦工件上傳到存儲并在 Artifactory 中可用,它將從最終緩存中刪除。2023 深圳站鏈式存儲設計2023 深圳站高并發下載遇到瓶頸,如何水平擴容?JVM 監控Tomcat HTTP Connections/ThreadsDatabase 數據庫瓶頸-PT-toolsFilestore Configurations2023 深圳站水
6、平擴容2023 深圳站按業務區分制品庫集群2023 深圳站記錄制品流轉元數據,實現質量可信2023 深圳站通用部署包的數據模型2023 深圳站根據版本的質量信息進行版本自動拉取/Find items that have been approved by QA:getLatestReleasedJar.aqlitems.find(repo:libs-release-local,name:$match:guestbook-service-*.jar,apiTest.summary.pass_rate:$eq:100,qa.approve:$eq:true).sort($desc:created).
7、limit(1)jf dl-file-spec getLatestReleasedJar.aql2023 深圳站根據版本的質量信息進行版本自動化流轉2023 深圳站用戶自定義清理/Find all the builds that have were created after 2012-07-01builds.find(created:$gt:2012-07-01)/Find items that have been approved by QAitems.find(qa_approved:$eq:true)/Find builds that were run on a linux machinebuilds.find(os:$match:linux*)/查詢包含GPL的包,但不包含LGPL-2.1*items.find($and:license:$match:*GPL*,license:$nmatch:LGPL-2.1*)jf cli del-file-spec cleanup.json2023 深圳站總結系統改進:1.去重存儲2.增加文件緩存層3.支持系統水平擴容4.利用制品元數據實現自動化2023 深圳站JFrog 微信公眾號JFrog 小助手微信DevOps 技術交流群感謝聆聽