周凯 揭秘码云:全球第二大代码托管平台的核心架构

1. 揭秘码云:全球第⼆二⼤大代 码托管平台的核⼼心架构 周凯 @Zoker 开源中国 码云负责⼈人
3. 周凯 码云负责⼈人 • 2014年年2⽉月加⼊入开源中国 • 负责Ruby开发及运维⼯工作 • 负责产品及⽤用户体验改进 • 负责分布式架构的研发及上线 • 负责⼤大客户售前、实施、售后等⼯工作 • More…
4. • 简介 • 架构 • 运维 • 总结
5. 简介 / 架构 / 运维 / 总结
6. 码云是开源中国社区在2013年年推出的基于 Git 的代码托管 服务,为开发者提供稳定、⾼高效、安全的云端软件开发协作平 台;⽆无论是个⼈人、团队、或是企业,都能够⽤用码云实现代码托 管、项⽬目管理理、协作开发。
7. 产品特点 个⼈人⽤用户免费 个⼈人开发者可免费创 建 1000 个项⽬目(不不 限公有、私有),提 供最多 5G 的免费代 码存储空间 代码托管 ⽀支持 Git/SVN 管理理, 提供代码审核、Bug 跟踪以及 Webhook 钩⼦子回调等功能 团队协作 轻量量级敏敏捷项⽬目管理理 ⼯工具,提供需求、任 务、问题跟踪功能, 提供任务看板⼯工具 质量量分析 ⼀一键分析项⽬目源码, 直观了了解项⽬目代码质 量量,提供代码安全扫 描功能
8. 功能特点 ⽀支持通过微信服务号 接收账号登录、任务 分配、Pull Requests Java/PHP 代码 API ⽂文档⾃自动⽣生 成和浏览 强⼤大的 Jenkins 插 件助⼒力力⾃自动 化流程 禁⽌止强制 推送功能 Pages ⻚页⾯面功能, ⽀支持引擎 Jekyll、 Hugo、Hexo 代码与任务强关联、 ⽀支持配置不不同的访问 … ⽅方式、完善的⽇日志记 录,⽅方便便追溯…
9. 客户案例例 私有云客户 公有云客户 ⾼高校版⽤用户
10. ⽤用户 300W+ 当前数据 项⽬目数 500W+ 企业 5W+ ⾼高校 500+
11. 数据增⻓长 ⽤用户⽇日均 4K+ 项⽬目⽇日均 8K+ ⽇日均 Push 50W+
12. 简介 / 架构 / 运维 / 总结
13. 码云基于 Gitlab 5.1.0 版本进⾏行行改造
14. 应⽤用架构
15. STEP1: 单机架构 App • 8核 32G内存 • ⼀一块 2T 存储盘 DB • 4核 16G内存 • ⼀一块 1T 存储盘 Client App DB
16. • 存储空间的压⼒力力 • 计算资源的压⼒力力
17. STEP2: 分布式⽂文件系统 Ceph 是⼀一个 Linux PB 级分布式⽂文件系统。 • 可轻松扩展到数 PB 容量量 • ⾼高性能(每秒输⼊入/输出操作[IOPS]和带宽) • ⾼高可靠性
18. App1 DNS 分发 App2 … AppN NFS MON/OSD MON/OSD MON/OSD Ceph 使⽤用 Ceph 进⾏行行仓库的存储架构
19. • 遭遇IO瓶颈 • RBD块设备被⽆无故卸载
20. STEP3: NFS架构 Gitlab 官⽅方的集群⽅方案
21. • NFS缓冲⽂文件导致删除不不彻底 • NFS性能问题 • 占⽤用内⽹网带宽的问题 • ⽆无法⽅方便便的横向扩展存储 • 毫⽆无维护性
22. git@gitee-app1:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 184G 15G 160G 9% / /dev/sda2 307G 47G 245G 16% /home 172.16.3.66:/data 10T 50G 9.9T 1% /data 172.16.30.1:/disk1 10T 50G 9.9T 1% /disk1 172.16.30.2:/disk2 10T 50G 9.9T 1% /disk2 172.16.30.3:/disk3 10T 50G 9.9T 1% /disk3 172.16.30.4:/disk4 10T 50G 9.9T 1% /disk4 172.16.30.5:/disk5 10T 50G 9.9T 1% /disk5 172.16.30.6:/disk6 10T 50G 9.9T 1% /disk6 172.16.30.7:/disk7 10T 50G 9.9T 1% /disk7 凌乱的磁盘挂载
23. STEP4: 分布式架构 DNS 分发 Frontend 分发集群 Router Backend1 Repos Backend2 … BackendN Repos Repos Mysql Redis集群 ES集群
24. 分布式架构组成模块
25. 如何分发 • 按⽤用户进⾏行行分⽚片 • 与仓库⽆无关的请求随机分发 • 仓库⾮非同⼀一台机器器的逻辑处理理 Router Nginx Proxy SSH Proxy Server Proxy LFS Proxy Frontend 集群 Backend1 Repos Backend2 BackendN … Repos Repos Mysql Redis集群 ES集群
26. 稳定性 应⽤用 • KeepAlived • DRBD 服务 • Mysql Cluster • Redis Cluster • ES Cluster •… Frontend1 KeepAlived Frontend1bak Backend1 Repos KeepAlived DRBD Backend1bak Repos
27. 可维护性 • ⽤用户分配策略略 • 迁移策略略 • 扩展Frontend以及Backend
28. 异地多中⼼心 • 企业专线带宽质量量不不理理想 • 内部⽹网络管制 深圳 北北京 杭州
29. 异地多中⼼心架构 Router SSH Proxy Server Proxy Nginx Proxy 杭州节点 BaBcakceknedn1d1 ReRBpeaBopcaskocesknedn1d1 ReRpeopsos Sync BaBcakceknedn1d1 ReRBpeaBopcaskocesknedn1d1 ReRpeopsos 深圳节点 Router SSH Proxy Server Proxy Nginx Proxy
30. • 同步仓库队列列,⼀一定要保证可靠性 • 多个中⼼心之间的仓库定时校验
31. 架构提升 • 正在改造按项⽬目进⾏行行分⽚片 • 将Gitee主程通过RPC调⽤用⽅方式与仓库剥开 • 读写分离
32. Backend1 Repos Backend2 BackendN … Repos Repos Backend1 Backend2 … BackendN Repos Repos Repos Repos 主程与仓库分离 Repos Repos
33. Write Read 写主仓 Backend1 Repos Router Backend1-1 Repos Sync ! Backend1-2 Repos Sync 读写分离 写操作 读操作
34. 简介 / 架构 / 运维 / 总结
35. 发发布布 Ansible Host playbook Web Services Nginx Sidekiq Worker git-srv brzo System update SServer Host Server init …
36. 监控 Grafana Elasticsearch Logstash Kibana
37. 安全防护 软件漏漏洞洞 CC攻击 DDOS DDoS攻击历史峰值 : 365.80G DDoS攻击次数 : 417 DDoS攻击历史峰值 : 487.75G DDoS攻击次数 : 171 DDoS攻击历史峰值 : 47.66G DDoS攻击次数 : 19
38. 未来 • 容器器化(Sonar、Pages等服务已完成) • 运维⾃自动化
39. 简介 / 架构 / 运维 / 总结
40. 总结 • 码云⼀一直以为程序员服务为⽬目标 • 架构之路路很难但迎接挑战 • 多多分享多多汲取意⻅见