大规模视频网站的计费与流量管理
本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Rick DeNatale 译者 贾晓楠 发布于 2008年2月4日
class StandardsController < ApplicationController
# GET /standards
# GET /standards.xml
def index
@standards = Standard.find(:all)
respond_to do|format|
format.html # index.html.erb
format.xml { render :xml => @standards }
end
end
# GET /standards/1
# GET /standards/1.xml
def show
@standard = Standard.find(params[:id])
respond_to do|format|
format.html # show.html.erb
format.xml { render :xml => @standard }
end
end
# GET /standards/new
# GET /standards/new.xml
def new
@standard = Standard.new
respond_to do|format|
format.html # new.html.erb
format.xml { render :xml => @standard }
end
end
# GET /standards/1/edit
def edit
@standard = Standard.find(params[:id])
end
# POST /standards
# POST /standards.xml
def create
@standard = Standard.new(params[:standard])
respond_to do|format|
if @standard.save
flash[:notice] = 'Standard was successfully created.'
format.html { redirect_to(@standard) }
format.xml { render :xml => @standard, :status => :created, :location => @standard }
else
format.html { render :action => "new" }
format.xml { render :xml => @standard.errors, :status => :unprocessable_entity }
end
end
end
# PUT /standards/1
# PUT /standards/1.xml
def update
@standard = Standard.find(params[:id])
respond_to do|format|
if @standard.update_attributes(params[:standard])
flash[:notice] = 'Standard was successfully updated.'
format.html { redirect_to(@standard) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @standard.errors, :status => :unprocessable_entity }
end
end
end
# DELETE /standards/1
# DELETE /standards/1.xml
def destroy
@standard = Standard.find(params[:id])
@standard.destroy
respond_to do|format|
format.html { redirect_to(standards_url) }
format.xml { head :ok }
end
end
end
除了特别的名字以外,所有自动生成的控制器代码都是这样的。
使用自动生成的控制器非常简单。在许多情况下,很少或者不需要对生成的代码做任何改变,尤其是当你把“精瘦的控制器”这个理念铭记于心时。
另一方面,Ruby/Rails还有一条理念,就是 “不要重复自己(DRY)”。 如果存在几乎重复的代码,即便不是你自己写的,也是违背DRY原则的。
输入:resource_controller。James Golick贡献了一个新的rails插件,称为resource_controller,它可以实现与上面同样的控制器,代码如下:
class StandardsController < ApplicationController
resource_controller
end
然而,这里仍有一个小小的瑕疵。 它没有提供标准的xml响应能力,但可以用一小段代码来实现:
class StandardsController < ApplicationController
resource_controller
index.wants.xml { render :xml => @standards }
[new, show].each do|action|
action.wants.xml { render :xml => @standard })
end
create.wants.xml { render :xml => @standard, :status => :created, :location => @standard }
[update, destroy].each do|action|
action.wants.xml { head :ok }
end
[create_fails, update_fails].each do|action|
action.wants.xml { render :xml => @standard.errors, :status => :unprocessable_entity }
end
end
有了这个插件,写控制器代码如同写模型代码一样,只需加上像resource_controller这样的声明的类方法,以及action.wants之类的“回调”。这个插件自动为控制器的每个方法分配实例变量。在上面的代码中,给index方法分配了@standards ,给其他方法分配了@standard。
Rails有一些公用的模式强迫改变控制器代码。其中包括嵌套资源。很容易在config/routes.rb中设置路由:
map.resources :organization, :has_many => :standards
但是,一旦你这样做了,你就需要更改控制器来获取和使用上层资源,并在每个动作中正确使用。resource_controller插件简化了这些。在如上面那样更改路由后,你只需添加一个声明来调用我们的控制器:
class StandardsController < ApplicationController
resource_controller
belongs_to :organization
end
belongs_to声明允许嵌套资源使用控制器。现在,当一个控制器动作通过嵌套资源URL被访问时,例如/organization/1234 /standards,控制器会自动创建一个名为@organization的实例变量,适当地设置好,并使用standards所关联地父对象来查找和 建立Standard模型的实例。
注意, 同样的控制器也工作在非嵌套的URL下,因此我们可以在routes.rb中做另一个映射,来允许在organization之外访问starnards:
map.resources :standard
map.resources :organization, :has_many :standards
这样resource控制器就会自动地工作在这两种上下文中了。
这个插件也处理命名空间控制器、多态嵌套资源(与ActiveRecord多态关联相似和相关)和其他一些奇妙地东西。你也可以获得URL以及工作在请求的URL上下文中的路径辅助函数。
看来Resource_controller是个有用的插件,毫无疑问随着它的成熟,会变得越来越好。细节见James Golicks的博客。另外还有Fabio Akita制作的一段屏幕录像,演示了这个插件的实际使用情况。
查看英文原文:Rails: Resource_controller Plugin Puts Controllers on a Diet
本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于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。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
没有回复
关注此讨论 回复