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 probereadiness