大规模视频网站的计费与流量管理
本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Mirko Stocker 译者 李明(nasi) 发布于 2008年8月20日
GitHub 最近启用了自己的RubyGems服务器,使得发布gems变得轻而易举。你只需要在代码库的根目录提供一个gemspec,并在GitHub的配置中选 上一个勾选框,gem就会构建好并可以供人安装。为了避免和其他用户的gems发生冲突,它以用户名为前缀,格式如username-project。
现在RubyGems的用户不再是只有RubyForge一个gems源了,但是对于可选的GitHub源还需要进行设置。这似乎不是什么大障碍,但是依然有些问题,正如Magnus Holm在blog中指出的那样。看起来最大的问题就是自动依赖管理了,因为RubyGems的依赖判断都基于同一个服务器,所以就没法正常工作。另外,你还需要知道在GitHub上提供某个gem的用户的用户名才行。
为了更深入的了解,InfoQ采访了RubyGems的维护者Eric Hodel、来自GitHub的PJ Hyett以及来自RubyForge的Tom Copeland。
Eric Hodel详细地介绍了问题的细节:
最严重的潜在问题莫过于带有破折号(dash)的gems了。一个恶意的用户可以去GitHub创建一个叫net的帐户,并发布一个ssh包,版本比RubyForge的net-ssh还要高。那么RubyGems就会安装那个GitHub上面的gem,而这样做是错误的。
不幸的是很多时候这被当成一个特性来使用。gems.rubyonrails.org(还有其他开发者)在gems中包含开发版,并和gems.rubyforge.org的名字相同。大家希望能够匹配以便可以让RubyGems安装开发版。
添加源就和随便安装来自互联网的软件一样危险。
目 前解决这个问题的最好办法就是gem作者为他们发布的gems做签名。这样gem用户可以溯及一个gem至可信的源。我不确定通过它来建立互联网的信任有 多难,但是我已经在hoe中添加了代码,在你运行`rake generate_key`(详见`ri Hoe`)以后会自动为gems做签名。关于签名和验证gems的详细文档,请参阅`ri Gem::Security`。
因 为gems在RubyForge和GitHub都可以发布,那么就需要说到交叉依赖的问题。这样可以允许gem作者说“我依赖brixen-mspec或 者rubyspec-mspec或者mspec”。John Barnette和Yehuda Katz对实现这个比较感兴趣,但是我还没听说有什么进展。
目前,还得用户自己手动将gems.github.com添加到RubyGems的源中才能获得GitHub的gems。Eric说他“并不很反对[把GitHub添加到默认源中],但是不知道在没有交叉依赖的情况下,这玩意到底有没有用”。
来自GitHub的Pj Hyett对Eric的评论表示赞同:
Eric担心的关于命名冲突的问题同样也是我们所担心的,一个叫做net的用户建立了一个叫做ssh的gem的场景实际已经发生了。幸运的是,这只是有人向我们展示这个缺陷以引起我们的注意。当然,并不是我们所有的用户都那么友善,所以我们需要找到解决方案。我们可不想让我们的服务把我们每天使用的系统给干掉。
最开始,我们本打算在GitHub以username/repo-name的形式来构建gems,这样命名冲突就不是个问题了。它还能模拟我们的URL结构以带来便利。可不幸的是,斜杠在RubyGems中不支持,而我们又不想通过打补丁才能让用户使用GitHub的gems。
来自RubyForge的Tom Copeland说道关于RubyForge的项目自动发布gems的想法:
可 能我们需要在项目的admin标签中加点儿什么,可以让用户指向自己svn/git代码库的gemspec,然后我们来构建它;或者指向代码库的根目录, 这样我们可以查找lib目录,并使用项目名称作为gem名,而将svn的修订版作为gem号。[..] 这个特性目前的需求大吗?
另外一种可能是在GitHub上添加一个功能,可以“创建RubyForge项目”或者“发布到RubyForge”。但是Tom指出,“目前在RubyForge项目的批准有手工的步骤。我们需要梳理如何能自动处理来自GitHub的项目创建请求。”
Pj Hyett如此评价这个主意:
我并不是很反对“发布到RubyForge”按钮这个主意,但是很坦率的说,我更希望我们的系统和他们站点的工作方式相一致。在GitHub构建一个gem就像在代码库中提交代码那么简单,我们的用户现在就是这么做的,所以这个主意就别去想它好了。
即是说,经常有用户对于构建gems有自己的需求,而这些需求基于安全考虑或者其他一些原因我们可能永远都无法满足,所以如果一个用户需要做一些我们暂时提供不了的事情的话,我们还是推荐他们使用RubyForge。
总结一下,我们看到有些人对解决这个问题有兴趣,但是可能还尚需时日才能搞定它。
在GitHub发布Gems是自动的,在RubyForge发布Gems也可以通过Ryan Davis的Hoe做到自动化,这是个helper,来协助Rake、RubyGems和其他一些东西。它包括一个task,可以在RubyForge上发布Gems。一旦Hoe正确安装,只需要一个简单的 rake release VERSION=x.y.z 就能够发布。关于Hoe更多的详情,请参阅在Nuby on Rails上的Hoe教程。
你在GitHub上托管了项目吗?如果是的话,你在RubyForge也发布了吗?你是怎么使用的(工具、脚本或者任务)?
译者 李明(nasi) 毕业于东北大学,曾供职于百度网页搜索部,从事分布式网络爬虫及其国际化的研发工作。
本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011。
Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。
云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。
淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011。
2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。
12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011。
篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
没有回复
关注此讨论 回复