《支持億級制品管理系統的設計-王青.pdf》由會員分享,可在線閱讀,更多相關《支持億級制品管理系統的設計-王青.pdf(27頁珍藏版)》請在三個皮匠報告上搜索。
1、支持億級制品管理系統的設計王青 JFrog(中國)技術總監個人簡介王青JFrog(中國)技術總監十五年敏捷研發管理與軟件工程實踐經驗專注制品庫管理阿里云MVPArchSummit,InfoQ,GOPS金牌講師議題管理上億的制品,會遇到什么問題?1.海量文件存儲占用磁盤大,如何優化?2.如何設計存儲系統能支持高并發的文件上傳?3.并發下載遇到瓶頸,如何水平擴容?4.用戶如何自動化清理文件?1.IDC 研究報告全球的app數量達到520M-202460%企業每天進行版本發布,甚至更快-202580%數據中心將運行 k8s-20252.案例深圳某大型高科技企業月度構建次數達到9000萬次某股份制銀行
2、日均構建次數達到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 軟件發布頻率的增長趨勢JFrog 軟件產品形態1.軟件唯一可信源三方庫二方庫版本庫2.7000+7000+企業用戶3.世界500強70%企業已使用應用架構 去重的文件存
3、儲設計 文件上傳是將文件以其 checksum 值重命名 數據庫里存放文件的路徑和文件的 checksum1.海量文件存儲占用磁盤大,如何優化?示例Actual FileDB RecordPath優點任何文件在磁盤里只存儲一份在海量文件檢索時效率極大提升 文件上傳:大文件制品上傳 上傳時間長,容易超時失敗 缺乏冗余存儲方案如何設計存儲系統能支持高并發的文件上傳下載?Cache-fs:讀取緩沖區,用于優化 Artifactory 和遠程存儲(例如 NAS 或云存儲)之間的流量。這個“最近使用”(LRU)緩存將托管最近上傳和下載的工件。啟用它可以減少對網絡存儲的請求數量,從而減少響應時間。Even
4、tual:一個寫緩沖區,用于在使用慢速和/或遠程存儲時優化上傳過程中的減速。默認情況下,所有依賴對象存儲(例如 AWS S3、Azure Blob 存儲等)的 Artifactory 存儲模板都啟用此緩沖區。這允許實現異步上傳,不用等工件上傳到遠程存儲即可立即使用。一旦工件上傳到存儲并在 Artifactory 中可用,它將從最終緩存中刪除。增加文件讀寫緩存層鏈式存儲設計 先做好單機性能監控 JVM 監控 Tomcat HTTP Connections/Threads Artifactory async Thread Pool-提供線程數 CPU*4 Database 數據庫瓶頸-PT-too
5、ls Filestore Configurations并發下載遇到瓶頸,如何水平擴容?水平擴容按業務區分制品庫集群16JFrog Docker P2P 分發 一定要為Pod設置資源上限 舉例:Java -Xms=1g-Xmx=2g RabbitMQ rabbitmq.conf total_memory_available_override_value=1GB MongoDB -wiredTigerCacheSizeGB=1resources:requests:memory:1Gi cpu:100m limits:memory:2Gi cpu:250m.云原生應用的改造應用必須暴露監控數據rea
6、dinessProbeIs the app ready to start servinglivenessProbeIs the app good to continue servingTypesExec-return 0 on successHttp-return 400 on successTcp-succeed to open a socket on a given portFor complex checks,write a script and use the execexec probereadinessProbe:httpGet:path:/api/system/health po
7、rt:8080livenessProbe:exec:command:-mongo -eval -db.adminCommand(ping)livenessProbe:tcpSocket:port:5672 云原生應用的改造 Init Containers-主容器啟動之前運行Prepare storageSetup configuration Sidecar containers-和主容器一起運行ContainerMaintenanceLog collectionMonitoringProxyApplication pod example.Multiple artifactory logs fo
8、rwarded by a Fluentbit container to a log aggregator.PodApplication containerFluentbit containerLogsLog collector云原生應用的改造https:/helm.sh/Helm是Kubernetes的包管理器.類似于CentOS/RedHat里的yum 你的整個應用都使用一個Helm chart 進行描述有默認的配置文件(values.yamlvalues.yaml)一個Chart包可以部署到不同環境(Chart.yamlChart.yaml)云原生應用的改造我們設計了一種查詢語言 Arti
9、factory Query Language(AQL)如何自定義清理文件/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($msp:license:$match:*GPL*,license:$nmatch:LGPL-2.1*)用戶按需使用:使用JFrog建設企業軟件唯一可信源總結系統改進:1.去重存儲2.增加文件緩存層3.支持系統水平擴容4.支持用戶自動化清理文件JFrogJFrog 微信公眾號微信公眾號JFrogJFrog 小助手微信小助手微信DevOpsDevOps 技術交流群技術交流群