大家好 我是来自乌鸦庙庙的张道军哈伯社区的供选者哈伯项目起源于乌鸦庙在运运人领运运的广泛运用乌鸦庙公司也不例外在公司的内部的产品和服务中都广泛地运用了哈伯然后在运行这些哈伯的服务的过程中遇到了哪些问题我们是怎么解决这些问题的我们从下面五个方面来进行探讨第一是第一是CDN从那个典型流量来看在公司内部构建镜像测试 发布然后大量的用户拉取镜像因此主要的请求还是在拉取镜像流量的问题是使用了重点因此我们使用了CDN在拉取镜像的请求里头又有各种各样的请求我们要区别对待对于Blob的Gallery请求我们占取了大部分的流量因此我们在CDN中缓存了Blob的Gallery请求但不是所有的请求都可以被CDN缓存的比如说Gallery V2的请求Gallery Service Token的请求这些都是跟授权相关的另外还要排除一些私有的工程比如说一些私有的项目除了Gallery Blob的请求还有Gallery Manifest的Gallery Manifest的一个Manifest的大小大概是几KB而一个Blob的大概是几KB或者是几百KB因此我们可以根据自己的需要来是否缓存Manifest第二个是高口用我们在不同的区域不同的部署了两个Hub服来实现高口用通过复载均衡来切换到不同的实力同时两个实力之间通过进向复制来保持一致复制即包括了定时的复制又包括了事件的复制这样的话能保证两个Hub incident之间的进向是一致的由于Hub的复制只复制了进向没有同步机器人账号和用户的权限信息因此我们需要手动同步的一些相关的信息升级的时候我们通常采用Load Balance附带均衡将请求切换到不同的Hub incident然后将离线的Instance升级到最新版本第三是监控作为一个企业级的大型服务我们需要时刻知道现在系统的运行状况最基本的功能能不能满足首先是能不能登录拉去进下的速度怎么样还有现在的存储空间是不是够用数据库的连接是不是已经打满了Hub的本身提供了一些数据指标这些指标可以通过普罗美修师来Expo的出来但是有一些没法通过Hub本身来过去因此我们需要内部的一些监控也需要一些外部的监控比如说在不同的区域进向的拉去的速度我们就需要不同的外部程序来完成同时有的时候请求会返回ictt 500的错误大部分情况下这种错误不是Hub本身产生的因此我们需要外部的监控才能获得这些信息我们建议参考四个黄金指标延迟 流量 保护度 还有错误率来不断完善现有的监控指标另外为了方便整顿问题需要对日子进行集中管理常用的工具一般都是Loginside 还有EFK等等第四是性能我们前面提到的CDN是一种改善性能的方法另外Hub还在其他方面做了很多性能的优化比如说数据库事务在大马里头我们曾经有一段时间每一个请求都是一个事务后来发现这样对性能影响非常大我们后来就减少了数据库的覆盖范围尽量减少事务的使用还有一个就是数据库的乐观锁Hub的后台作业通过Job Service来完成的而Job Service又用到了Task和Execution在Task和Execution的状态同步上我们原来使用的数据库乐观锁后来发现这个地方带来了很大的麻烦因为所有的Task都是基于Repository数量来产生的当数量大于5000之后就会出现很多像Tigletation、Replication就会出现很多个Goloutine去更新同一个Execution的状态的然后造成大量的重视这些并发给数据库带来了很大的性能压力后来我们解决的方法就是采用延迟更新的策略就是把那些缓存请求合并然后累积到一定的时间之后集中更新这样能减少了对数据库的冲击Kubernetes虽然能很方便地Scale up但不是以无限制的凡是能称为资源的比如说数据库、存储和Redis都有可能成为系统的瓶颈第五是安全性目前大概对软件供应链安全管理非常关注Hobbl作为云原生领域的供应链的重要环节又是开源系统所以在安全系统上不能故事Hobbl项目有一个安全相关的邮件组在GitHub的Security的页面上你是可以找到这个邮件组的而且建议你加入这个邮件组如果你要系统用到了Hobbl的话因为你可以尽早地获取一些关于Hobbl的安全知识并且一旦有了问题能够应该评估并且采取相应的措施举个例子今年3月份的时候我们在收到社区用户报告了一个安全漏洞问题是这样的Hobbl Ham在发布的时候会有一个默认的证书和密钥然后Hobbl会根据这个密钥来生成Bear Token而这个Token就可以去Push和Pull Image有了这个证书和密码用任何人就可以在自己的Hobbl上生成一个Token然后这个权限你可以自己定义然后就往别人的Hobbl服务上铺起印密集这个问题一报告我们马上就把公司内部的所有的系统的证书和密钥都轮换了一遍想象一下如果忽略这样的漏洞后果是贺相而知刚才我们介绍到了五个方面CDN高可用最后我们系统团队价格图可以给大家作为参考两个Hobbl Instance然后前面是CDN然后所有的身份认证都是在外部的然后Redis 数据库还有存储都是External的这样的话方便管理如果大家有什么分享和建议欢迎加入到Hobbl项目的Slide或者微信群或者现象探讨谢谢