大规模视频网站的计费与流量管理
本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Josh Long 译者 晁晓娟 发布于 2010年1月18日
Google Collections库,1.0最终版,2009年12月发布了。你可以在http://code.google.com/p/google-collections/下载它。这个类库是 Google工程师Kevin Bourrillion和Jared Levy的智慧结晶。 最近几年由于Google工程师如Doug Lea, Josh Bloch 和 Bob Lee以及开源社区的贡献,它发展地很快。
Google Collections库希望扩展Java平台的内建集合库。JDK集合库——目前属于java.util.*包中。它主要包括如下一组接口:java.util.Collection (超接口)、java.util.Set、java.util.SortedSet、java.util.Map、和java.util.List等。这些接口直接决定了跟着JDK打包发送的各种实现机制互相之间的协议关系。java.util.Set模糊地定义了一组无序且唯一的元素集合。 java.util.SortedSet则描述了一组有序且唯一元素集合。
java.util.Map定义了一个键值的联合——通常在其他语言中称为字典(dictionary),java.util.List定义了一个有序的集合,而其元素的基数是变化的。最初的框架是由Josh Bloch在Sun工作时定义的,围绕三个方面进行:接口,实现(抽象和实际)以及允许你扩展操作集合的算法。这些接口被介绍为早期JDK提供的类(如 java.util.Vector, java.util.Hashset等)的彻底改进。Josh Bloch在2008 Google Techcast表明Google Collections Library开发的方式让他感觉良好。
Google Collections库也提供了新的工具实现方法和一组关注并发的类库,其中包括不可变集合的实现。“不可变” 保证了系统中没有其他的因素能改变集合的状态,即使是该实现本身。而“不可修改” (就像JDK的java.util.Collections 类的不可修改的工厂方法)只是保证集合的客户端/用户永远不能改变集合。通常,这些实现不是JDK封装器,而是通过适度地调节,更多地考虑内存来重新实现接口。Google Collections 库提供了很多静态工厂方法和程序来创建对象。有时候这些是颠覆冗余类型声明的简单工具方法。
import com.google.common.collect.*;
...
HashSet<String> hashSet = Sets.newHashSet();
LinkedHashSet<String> linkedHashSet = Sets.newLinkedHashSet();
ArrayList<String> arrayList = Lists.newArrayList();
LinkedList<String> linkedList = Lists.newLinkedList();
其他时候,使用静态工厂方法或程序是因为实现工具没有公开的构造函数。很多场合下并不期望创建子类,因为这要求子类接受不可变协议。在Google Collections 库中的Immutable*接口告诉客户端该集合是保证不可变的,并且实现了它们的JDK基本接口协议的语义。可能的情况下集合的用户需要给 Immutable*接口传递引用。
import com.google.common.collect.*;
...
ImmutableSet<Integer> immutableSet = ImmutableSet.of(1, 2, 3, 4, 5);
ImmutableList<String> immutableList = ImmutableList.of("a,b,c,d,e,f,g".split(","));
该类库也提供了一些唯一的实现方法,包括MultiMap和MultiSet 集合(它们描述了支持查询对象在集合中的基数或频率的集合)。这样,为了保存同一个键关联的多个值,你可能需要用到如下方法:
Multimap<String, Integer> personAndFavoriteNumbers = ArrayListMultimap.create();
personAndFavoriteNumbers.put("josh", 42);
personAndFavoriteNumbers.put("josh", 7);
Collection<Integer>numbers = personAndFavoriteNumbers.get("josh"); // doesn't return Integer
System.out.println(numbers .size()) ; // == 2
注意:get(String) 返回一个键相对应的视图。如果一个键在map里没有对应的值,就会返回一个空的集合。如果向该视图集合加入项目,他们就会反映到Multimap:
Collection<Integer>numbers = personAndFavoriteNumbers.get("josh");
System.out.println(numbers .size()) ; // == 2
numbers.add( 0) ;
System.out.println(numbers .size()) ; // == 3
System.out.println(personAndFavoriteNumbers.get("josh").size() ) ; // == 3
对于各种自定义接口有很多可用的并发实现方法:
ConcurrentHashMultiset<String> concurrentHashMultiset =
ConcurrentHashMultiset.create(Arrays.asList("a,b,c,d,e,f".split(",")));
Google Collections库通过com.google.common.base.Predicate类提供了和各种编程语言协作的友善标签。
import com.google.common.collect.*;
…
Iterable<Integer> filteredSet = Iterables.filter( someIterable, new Predicate<Integer>(){
public boolean apply( Integer integer) {
return integer > 0 ;
}
}) ;
说起该类库的适用性,Google有它在生产部署的记录,以及超过25,000个详尽测试的单元测试套件。尽管Google Collections库看起来非常有前景,但他们也有替代的选择。JDK的每一次迭代都从新的集合改善有所收获。Apache commons collections项目也有一些非常有趣的集合实现,而且比该类库出现早很多年,尽管你发现他们并不是泛型友好的。往前看,Kevin Bourrillion 说过该项目的是为了让该类库正式化后并提交给JCP。
查看英文原文:Google Collections 1.0 Offers Enhanced Implementations of the Java Collections Framework
译者 晁晓娟 从事Web开发管理多年,留过学,呆过外企,尝试过创业,关注项目管理,架构和产品。
本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于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。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
1 条回复
关注此讨论 回复