`
beike
  • 浏览: 362856 次
社区版块
存档分类
最新评论

[转贴]高性能、高流量互联网应用架构设计实战原则

阅读更多

FreeWheel是由前DoubleClick高管Douglas Knopper, Jon Heller和Diane Yu于2007年创建,由硅谷顶级的风险投资机构Battery Ventures投资的互联网视频广告技术服务提供商,总部位于硅谷的Palo Alto,提供互联网视频广告投放、监测、预测和内容互联增值等关键解决方案。不同于其他外资企业,FreeWheel的研发中心设在中国,数据运营中心则设立在美国纽约。

    FreeWheel北京研发团队成立两年多来,在敏捷软件开发、Ruby On Rails开发大型复杂商业系统、视频广告技术、完全离岸的产品研发与跨国运营等方面受到关注。本文将谈谈FreeWheel在高性能、高流量互联网应用系统架构设计上所遵循的基本原则。

    原则一:假设故障总会发生(Design with failure in mind)

    在设计和实现大型互联网在线应用时,架构师必须考虑到系统各模块、各应用服务器、各开源应用软件的故障比率和失效的潜在原因。当服务的可用性(Availability)成为系统设计的首要目标时,尤其需要在设计阶段就充分考虑如何在系统某部分发生故障时,仍然保持一定的服务可用性。一些基本的假设包括:

    ·没有Bug的软件不存在,只是故障率高低不同,应优先关注高故障率应用。

    ·硬件总会发生故障,需要备份和冗余。

    ·导致某应用崩溃的请求,如不能及时终止或被redirect,可能会导致所有服务器一个接一个的瘫痪。

    ·构建仅包括最简单输入输出逻辑和固定输出内容的Dot 模式Server,以应对应用服务群大面积瘫痪或负载极限发生时的服务响应。

    ·每次release正式升级前,在模拟生产环境的Staging环境运行版本测试

    原则二:数据分区处理(Partition Your Data)

    在分布式计算环境下,如何高效的处理海量数据?如何在Bug发生后更加容易的重新批处理?一个基本的设计原则就是分区(Partition),即将待处理信息按照生成节点、内在一致性(Self Contain)、时间等因素进行分组,让每个平行处理节点可尽量仅处理切分后的数据,而减少节点间的数据交换。分区的基本原则包括:

    ·应用流量均衡Load Balance和数据分区结合

    ·容易在分组内进行再分区

    ·减少分组数据之间的状态依赖

    ·减少数据中心之间的数据交换

    原则三:冗余(Redundancy)

    冗余几乎是高可用系统设计的必然选择,也是老生常谈的话题,然而如何做到成本与效率的最佳平衡则是架构设计考虑的重点。可以参考的经验包括:

    ·优先减少单点故障。

    ·单个应用可快速重启恢复。

    ·应用间减少启动和运行依赖,尽量可独立工作。

    ·与其依赖热备冗余,不如建立服务中断后的快速恢复预案(依赖热备系统,在实战中总是很难理想地恢复全部服务)。

原则四:监控,监控,还是监控(Monitor, monitor, monitor)

    从应用部署到数据中心的第一天开始,就要意识到,没有人能够7x24小时的盯着几十个应用系统,近百个应用程序的运行状态。有没有down机,有没有程序崩溃,有没有数据库死锁,服务是否始终可用,这些不但是困扰工程师的问题,更是牵扯到客户支持,乃至建立产品品牌的重要问题。如果你想"一切尽在掌握",不想经常(偶尔总是有的,因为未知故障总会发生)在凌晨被运营团队的电话叫醒,那么赶快set up你的自动监控系统,让你的生活轻松起来吧。

    至少有两大类的Monitor群组需要建立起来:

    从客户角度:

    ·服务的可用时间/失效时间

    ·服务响应延迟

    ·客户累积服务次数

    从系统容量角度:

    ·各应用服务器CPU/内存/存储负载统计

    ·高峰与平均比(Peak to mean ratio)

    ·应用服务失效/崩溃/延迟报警

    ·应用服务自动恢复通知

    ·数据同步延迟和失效警报

    ·后台日常处理日报/周报/月报,趋势图

    原则五:保持简捷(Keep It Simple Stupid, KISS)

    传统软件开发中的变更管理是一个难题,在互联网应用系统开发中变更则比过去更加频繁,同时对产品质量的要求则更高。面对这个难题,普遍的结论是,唯一不变的就是变化本身。然而实战中,控制变化的规模和影响,仍然需要找出一些"以不变应万变"的准则,这对于提高产品开发效率和保持高质量至关重要。

    分清"保持"与"非保持"内容

    ·业务需求总会变化,属于"非保持",架构设计上充分考虑其变化,而非特化。

    ·而软件本身像一个不断成长进化的生命,有自己的DNA。找到DNA,就找到了"保持",例如设计的可扩展性,可维护性,可测试性。

    简单原则

    ·代码写得越多,维护越复杂,需要不断地通过重构来简化。

    ·复杂的系统容易出错,维护成本高,要避免设计单个复杂系统。

    ·如果测试人员需要费九牛二虎之力才能理解"天才"的设计和实现,最好抛弃它。否则有一天你会为测试覆盖率难以提高,故障重现困难而沮丧。

    原则六:即时架构(Just in Time Architect)

    即时架构是在寻找最佳设计和资源限制之间所做出的实用选择,此原则可能更加适用于快速变化的软件开发领域,例如互联网,而非严谨的产品线软件开发。"设计"和"重构"成为每个版本开发周期中不断重复的迭代步骤。

    即时设计

    ·在每个版本只有一个月的设计、开发和测试周期的约束下,要将基础设施(Infrastructure)一次设计到最佳状态是不可能的。

    ·基础架构可满足未来6个月至1年(视业务增长与投入的预测而定)应用的扩展要求即可。

    即时重构

    ·知道何时、何处需要重构是关键,提前筹划,而不要临阵磨枪。

    ·要为重构预留足够的开发资源。在FreeWheel,新产品开发,现有产品维护和基础架构重构的资源比例大约是25% : 50% : 25%.

    ·重构不是"推到重来",每次重构一部分要好得多,否则你的测试团队负担太重,会导致产品质量波动。

    以上是FreeWheel中国研发团队在研发Monetization Rights Management,MRM在线视频广告平台过程中的一些实战经验分享,在QCon 2009 Beijing大会演讲内容基础上部分整理。

作者简介:

    本文作者系FreeWheel核心系统技术总监,Email: wangdieda@hotmail.com,欢迎交流,今后有机会希望能与大家分享FreeWheel在利用Hadoop进行日志处理方面的一些心得。

 

分享到:
评论

相关推荐

    Spark 入门实战系列

    6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7.SparkStreaming(上)--SparkStreaming原理介绍.pdf 7.SparkStreaming(下)--SparkStreaming实战.pdf 8.SparkMLlib(上)--...

    行业文档-设计装置-木器、玻璃用贴花纸生产及转贴方法.zip

    在实际应用中,设计师和制造商需要不断探索新的设计风格和转贴技术,以满足市场的多元化需求。 7. 环保与可持续性:随着环保意识的提高,贴花纸的生产也需要考虑环保材料的选择和生产过程的节能减排,例如采用水性...

    电子政务-导电泡棉转贴装置.zip

    综上所述,"导电泡棉转贴装置"在电子政务中的应用涉及到硬件设计、设备维护、电磁兼容性和法规遵从等多个方面,是保障电子政务系统稳定运行的关键技术之一。通过阅读"行业分类-电子政务-导电泡棉转贴装置.pdf"这份...

    转贴一个网络设计的例子

    转贴一个网络设计的例子

    易语言源码动网转贴.rar

    易语言是一种基于中文编程的计算机...总的来说,易语言源码动网转贴不仅涵盖了网络编程、数据处理、用户交互等基础知识,还涉及到安全、性能优化等多个领域,对于学习和理解易语言及网络应用开发有着重要的实践价值。

    HP 阵列配置文档(转贴RAID5的实战配置).rar

    在实际应用中,RAID5适合于需要高可用性和良好性能同时又对成本敏感的环境。但需要注意的是,随着硬盘数量的增加,RAID5的重建时间也会增加,且当两块硬盘故障时,数据可能无法恢复。因此,对于大型或关键业务系统,...

    动易系统的论坛转贴工具

    《动易系统的论坛转贴工具详解与应用》 在互联网信息交流日益频繁的今天,论坛作为用户互动的重要平台,其内容分享与传播的作用不容忽视。动易系统的论坛转贴工具,便是为了解决用户在论坛间便捷分享内容而设计的一...

    动网转贴.zip易语言项目例子源码下载

    总的来说,“动网转贴”项目实例是一个全面展示易语言应用的范例,涵盖了网络通信、数据处理和界面设计等多个关键领域,对于所有想要提升易语言编程技能的人来说,都是不容错过的宝贵资源。通过深入研究和实践,你将...

    胖子说RUP(转贴)

    虽然 RUP 是一个相对重型的流程模型,但随着敏捷思想的兴起,RUP 也在不断进化,吸收了敏捷的一些原则,如迭代开发、持续集成等,使得 RUP 更加灵活,适应现代软件开发的需求。 总结,RUP 是一种全面的软件开发框架...

    行业分类-设备装置-FPC吸附胶纸转贴组件.zip

    总的来说,"行业分类-设备装置-FPC吸附胶纸转贴组件.zip"中的内容涵盖了FPC在实际应用中的一个重要技术环节,涉及FPC的固定、连接以及相关组件的设计与选型。了解这些知识对于从事电子设备制造、组装以及相关技术...

    易语言动网转贴.rar

    6. **界面设计**:如果这是一个图形用户界面的应用,那么易语言的窗口部件和界面设计也是重要部分,需要考虑用户体验和交互设计。 总的来说,"易语言动网转贴"可能是一个结合了网络爬虫、数据解析、数据库操作等多...

    电子功用-导电胶配对模切对半转贴加工方法

    对半转贴加工方法则是模切工艺的一种特殊应用,主要针对需要对称或匹配的导电胶部件。这种方法涉及将导电胶片裁切成两半,然后将这两半精确地对齐并贴合在一起,形成完整的导电路径。这种技术特别适用于那些需要紧密...

    性能测试相关文档

    在IT行业中,性能测试是确保软件系统在高负载下稳定运行的关键步骤。"性能测试相关文档"这个压缩包集合了多个关键主题,涵盖了LoadRunner工具的使用,包括LR中的对象和计数器、服务器资源监控、参数设置以及压力测试...

    行业资料-电子功用-全自动导电布成型转贴穿管设备及工艺的介绍分析.rar

    标题"行业资料-电子功用-全自动导电布成型转贴穿管设备及工艺的介绍分析.rar"表明这是一份关于电子行业中的特定应用——全自动导电布成型转贴穿管设备及其相关工艺的详细介绍。导电布是一种具有导电性能的材料,常...

    算法设计与分析 转贴 算法试卷收集 3.doc

    算法设计与分析 算法设计与分析是计算机科学中的一门重要课程,涉及到算法的设计、分析和实现。下面是从给定的文件中生成的相关知识点: 一、算法的时间复杂性 * 算法的时间复杂性是算法运行所需要的时间量,这个...

    flex和java进行CRUD操作(转贴)

    Flex是Adobe公司开发的一种富互联网应用程序(Rich Internet Application,RIA)框架,主要用于构建运行在浏览器上的交互式用户界面。Java则是一种广泛使用的后端编程语言,常用于处理数据存储、业务逻辑以及服务器...

    BFC UBB转贴器

    由于现在流行的转贴工具都是基于浏览器的,转换速度比较慢,还得打开浏览器才能使用(同时受到浏览器版本限制)。 <br> 而这个小程序则完全不依赖于浏览器,以BFC采集器的UBB转换模块为基础,转换速度超快,...

Global site tag (gtag.js) - Google Analytics