【IT168 评论】Twitter如何在数千台服务器上快速部署代码?答案是:用BT,也就是你我应该都很熟悉的BitTorrent。
对于网站经营者、创业者来说,扩展性的问题是在网站流量成长过程中势必会面对的问题,如何建立一个具有扩展性的架构(scalable architecture)便是在规划网站事业过程中不可或缺的专业知识。
如果服务本身的功能性符合用户需求,却因为架构、程序性能、数据库性能的问题导致服务增长出现瓶颈时,如何评估、分析网站性能瓶颈?厘清问题后如何找出对应的解決方案,可以思考的相关议题可能包括:
* 如何有效率地厘清问题?从客户端的数据(读取时间)或是从服务器端的log日志、硬件的负载率?
* 网站性能瓶颈是出現在Client或Server端?是数据库撑不住还是程序性能不好?是Request太多还是数据太大?
* Web Server、DB server如何挤出更多的资源?挤不出资源后如何扩展?扩展后会遇到什么问题?
参考国外知名网站在架构上的做法是很好的一种方式,尽管服务的规模可能无法相比,但根据「正确的做法与经验」踏出对的第一步,肯定是有助于突破网站运营的性能瓶颈。
Twitter身为全球最大的微博服务,运用数千台的服务器提供服务给来自全球各地的用户,然而每当网站內容、应用程序有更新时,如何尽可能地在最短的时间內将程序代码部署(deploy)到所有的服务器便是相当重要的课题。
Twitter的博客上的一篇文章:「Murder: Fast datacenter code deploys using BitTorrent」(不能直接访问)分享了Twitter如何持续改善应用程序的部署流程,在过去Twitter使用Capistrano部署应用程序,Capistrano是许多Ruby/Rails使用者(当然也有其他语言的开发人员会使用)用来部署程序代码的一个开源项目,开发人员在部署程序代码的过程中都可以通过自动化的部署流程来简化经常重复的工作,尤其在项目必须同时部署到多台应用程序服务器时会特別方便。
Twitter在早期便依赖Capistrano来进行应用程序的部署,每当有新版本的程序代码需要发布时,Capistrano会根据预设好的各种设置、流程到Twitter所有的服务器上进行更新的操作,在过去服务器还不多的情況下一切都很美好,但随着Twitter服务器数量的增长,到了几百台服务器时,事情已经不再像过去一样美好,甚至到后来拥有数千台服务器时,更新的操作会耗费40分钟。
Twitter针对这个问题,认为问题的关键在于:使用集中式的系统,也就是所有的服务器要轮流排队到同一台版本控制系统上进行代码更新。Twitter最初的想法是将版本控制系统也做出分散式的架构,服务器的代码更新就可以分散到不同的机器来压缩部署时间,但事实上版本控制系统即使分散在多台服务器上,这些服务器要更新文件也同样需要时间。因此Twitter发现或许需要一个完全去中心化、最好是像BitTorrent这样的,利用P2P的特点让所有的节点都可以协助进行程序代码的更新。
从结果来看,在采用了BitTorrent的方式来更新代码,部署的时间从40分钟大幅减少到只要12秒!实在是非常惊人的改善,数千台服务器的代码更新居然只要短短12秒就能完成。
Twitter也将此次部署流程改善的成果分享出來,项目名称叫做Murder,如果对于技术细节有兴趣的读者,可以再进行深入的研究;笔者简单摘录几个重点如下:
* Murder是以BitTornado为基础开发出来的(BitTornado是一种BitTorrent client)。
* Murder的定位是「协助我们快速地将文件部署到大批服务器上」。
* 利用BitTorrent的部署方式可避免防火墙的问题、拥有非常快的传输速度。
* 实际的部署代码是搭配Capistrano进行,网页上有很清楚的说明。
以下是Twitter的架构工程师Larry Gadea谈Murder的视频(不能直接访问):
Twitter – Murder Bittorrent Deploy System from Larry Gadea on Vimeo.
原文:http://tech.it168.com/a2010/0817/1091/000001091367.shtml
分享到:
相关推荐
3. **强大的扩展性**:MySQL支持简单的水平扩展,可组成由数十至数千台服务器的集群,以应对大规模用户访问压力。 4. **代码安全性**:开源特性使得MySQL的漏洞可以迅速被发现和修复,同时源代码的开放性降低了潜在...
- 横向复杂性:部署在数据中心内的数百至数千台服务器上。 - 垂直复杂性:各组件之间层层叠叠。 - 网格复杂性:服务之间跨集群通信。 - 时间复杂性:通过冗余设计实现高可用性。 #### 排错的基本方法 1. **...
- **可扩展性**:Mesos 支持大规模集群部署,能够有效管理数千台服务器。 - **故障恢复**:Mesos 提供了高级别的容错机制,确保即使部分节点出现故障也能保持系统的稳定运行。 #### 容器编排:Kubernetes 与 Mesos ...
在互联网上,短链接服务能够将长的URL转换为简短的字符串,方便在有限字符数的平台(如社交媒体)上分享,同时也便于跟踪点击统计。 【描述】中的信息提示这是一个学生项目,这表明它可能是为了学习和实践编程技能...
python学习资源
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
基于Andorid的音乐播放器项目设计(国外开源)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
python学习资源
python学习资源
python学习一些项目和资源
【毕业设计】java-springboot+vue家具销售平台实现源码(完整前后端+mysql+说明文档+LunW).zip
HTML+CSS+JavaScarip开发的前端网页源代码
python学习资源
【毕业设计】java-springboot-vue健身房信息管理系统源码(完整前后端+mysql+说明文档+LunW).zip
成绩管理系统C/Go。大学生期末小作业,指针实现,C语言版本(ANSI C)和Go语言版本
1_基于大数据的智能菜品个性化推荐与点餐系统的设计与实现.docx
【毕业设计】java-springboot-vue交流互动平台实现源码(完整前后端+mysql+说明文档+LunW).zip
内容概要:本文主要探讨了在高并发情况下如何设计并优化火车票秒杀系统,确保系统的高性能与稳定性。通过对比分析三种库存管理模式(下单减库存、支付减库存、预扣库存),强调了预扣库存结合本地缓存及远程Redis统一库存的优势,同时介绍了如何利用Nginx的加权轮询策略、MQ消息队列异步处理等方式降低系统压力,保障交易完整性和数据一致性,防止超卖现象。 适用人群:具有一定互联网应用开发经验的研发人员和技术管理人员。 使用场景及目标:适用于电商、票务等行业需要处理大量瞬时并发请求的业务场景。其目标在于通过合理的架构规划,实现在高峰期保持平台的稳定运行,保证用户体验的同时最大化销售额。 其他说明:文中提及的技术细节如Epoll I/O多路复用模型以及分布式系统中的容错措施等内容,对于深入理解大规模并发系统的构建有着重要指导意义。
基于 OpenCV 和 PyTorch 的深度车牌识别
【毕业设计-java】springboot-vue教学资料管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip