可伸缩性的最差实践

  引言

  在扩展大量大型的分布式系统期间,我有机会观察(并实践)了一些最差实践。这些最差实践中的大部分在开始时都没有危害,但如果疏忽大意,它们就会对系统的发展和可伸缩性构成危害。很多文章都聚焦于最佳实践,以确保拥有一个易于维护和可伸缩的系统,但在本文中,我主要强调的则是一些应该规避的最差实践。

  技术

  没有任何一种技术或架构能实现所有的需求。了解何时该反思现有的方法、如何拓宽视野以超越局部范围、或如何进行依赖的有效控制,这些都是可伸缩性的关键特性。让我们进一步分别研究一下。

  金锤子

  金锤子起源于一条古老的谚语:如果你只有一把锤子,那么任何东西在你眼里都是一枚钉子。很多">开发人员都局限在仅使用一种技术的观念中——其代价是不得不使用选定的技术来构建和维护基础设施,即便已经存在另一种技术更适用于特定问题域的功能和抽象。强行把一种技术用在它所不擅长的方面,有时会适得其反。

  举例来说,持久化键—值对问题的常见解决方案是使用数据库。之所以常常这样选择是因为组织或开发者有坚实的数据库实践,针对许多问题自然而然就会沿用同样的解决途径。当数据库的特性(关系完整性、锁、连接和方案)成为瓶颈或阻碍了其伸缩扩展时,问题也就出现了。这是因为应用基于数据库的解决方案要发展,其成本通常要比使用其它可用技术更为昂贵。随着键—值存储访问率的增加,数据库并发模式的性能就开始降低,而数据库具备的高级特性却被闲置。许多传统关系数据库的替代方案都是针对这些缺点的,比如CouchDB、SimpleDB或BigTable。

  另一个常见的“锤子”就是总利用线程来进行并发编程。尽管线程确实是针对并发的,但它们也带来了成本,这些成本包括代码复杂性的增加、以及由于目前线程的的锁定和访问模型造成的组件编排(composability )方面的固有不足。由于如今最流行的编程语言都使用线程处理并发,因此数千行代码都含有竞态条件、潜在的死锁和不一致的数据访问管理。有些正在成长的社区提出了另一些并发方案,这些方案不存在线程的可伸缩性问题,也就是由Erlang或Stackless Python提倡的并发模型。即便不在实际生产中选择那些语言,研究一下它们的概念(比如消息传递或异步I/O)仍然是一种不错的实践。

  资源滥用

  小范围的问题开发者们一般都能处理得得心应手:使用分析工具、了解算法的空间和时间复杂度、或者了解哪种场合应该用哪种列表实现。但并非每个人都善于认识到大型系统的约束条件,比如识别共享资源的性能要求、了解服务的各种客户、或发掘数据库的访问模式。

  应用程序实现伸缩性的普遍方法是不断横向部署冗余的、无状态的、彼此不共享内容的服务,以此作为最理想的体系架构。但以我的经验看来,这种扩展往往会忽视新增服务对共享资源的影响。

  比如说,如果一个特定的服务使用数据库作为持久存储,它通常通过一个线程池来管理数据库连接。使用池是不错的方法,有助于避免进行过多的数据库连接处理。然而数据库仍然是共享资源,除了单个池配置,还必须对所有池从总体上进行管理。下面两个实践就会导致失败:

  持续增加服务数,但并不减小池的最大数。

  增大单个池的大小,而不减小服务数量。

  以上两种情况中,除了按性能要求配置应用之外,连接的总数也必须加以管理。此外,还要持续监控数据库的容量,以保持连接均衡。

  处理共享资源的可用性至关重要,准确的说,这是因为它们一旦失效,由于其“共享”的本质,失效会对系统造成全面的影响,而非孤立存在。

  大泥球

  依赖是很多系统讨厌却又必不可少的东西,不积极地处理好依赖及其版本会损害灵活性和可伸缩性。

  代码的依赖管理有多种不同的模式:

  同时编译整个代码集

  基于已知版本选取构件和服务

  发布的模型和服务所有变更都向后兼容

  让我们看看这些情形。首先,在大泥球模式下,整个系统作为一个单元编译和部署。这种模式拥有明显的优势,也就是将依赖管理交给编译器处理,并能提前捕获一些问题,但它会因每次都部署整个系统(包括测试、交付和大范围变化引起的风险)而引发可伸缩性的问题。在这种模式下,会更难隔离系统的变化。

时间: 2024-11-05 22:43:31

可伸缩性的最差实践的相关文章

《智能数据时代:企业大数据战略与实战》一3.4 避免最差实践

3.4 避免最差实践 有很多潜在原因导致大数据分析项目不能达成原定的目标和期望.在某些情况下,学会"应该怎么做"还不如学会"不应该做什么".这使我们能够形成识别"最糟糕做法"的观念,这样你就可以避免犯下与别人过去相同的错误.与自己犯错相比,从别人的错误中学习要更为可取.需要关注的某些最糟糕的做法如下: 认为"只要建成系统就行,问题会自然解决".很多组织都会犯的错误是简单地认为只要部署了数据仓库或BI系统就自然能够解决关键业务问

大数据分析项目中的“最差”实践

本文讲的是大数据分析项目中的"最差"实践,大数据分析现在很火.只要你浏览任何IT出版物或者网站,你都能看到商务智能供应商和他们的系统集成合作伙伴推销帮助企业实施和管理大数据分析系统的产品和服务.这些广告和大数据分析的新闻以及供应商匆匆提供的案例研究可能会使你误认为大数据是很容易的事,误认为要成功部署只需要一种特别的技术. 如果它是那么简单就好了.当BI供应商乐呵呵地告诉你他们的客户已经成功部署大数据分析项目时,他们不会告诉你还有那么多失败的案例.大数据分析项目令人失望是有一些潜在原因的

PL/SQL最差实践

1.超长的PL/SQL代码 影响:可维护性,性能 症状: 在复杂的企业应用中,存在动辄成百上千行的存储过程或上万行的包. 为什么是最差: 太长的PL/SQL代码不利于阅读,第三方工具在调试时也会出现代码行混乱等问题.PL/SQL存储对象(存储过程.包.函数.触发器等)行数上限约为6000000行,但实际工作中,当包大小超过5000行就会出现调试问题. 解决之道: PL/SQL代码在执行前会被加载到shared pool中,shared pool以字节为单位,UNIX下为64K,桌面环境下为32K

redis在学生抢房应用中的实践小结

背景简介 最近一个月,我们做了一个学生抢房的项目.考虑到抢房有一定的并发量(其实并没有那么大,被批次给隔离开来了),我们在抢房的项目中采用了全量redis的做法,本文主要是关于这个项目中涉及到redis使用的一个总结. 为了行文的方便,下面简单介绍一下抢房项目.其实这个抢房应用的使用对象主要是给学校的硕士,博士使用(他们在选择宿舍的方面比本科生拥有更多的自由,本科生的宿舍目前还是走的分配流程).抢房是将手动选择宿舍的过程自动化,来让系统代替你选房.而让系统帮你选的方法是告诉系统你的意愿,因此抢房

解析SOA反模式

了解不同的面向服务的体系结构 (SOA) 反模式,这些反模式对通常出现的会产生确定性负面结果的情形或解决方案进行了描述.随着越来越多的企业开始大举从 Web 服务转向 SOA,引入.采用和成功实现 SOA 方面的各种障碍变得越来越明显.其中一些障碍与导致过去的关键活动失败的因素类似;而其他障碍则是 SOA 特有的.对这些障碍和最差实践进行记录,将帮助顾问.架构师和专业人员不再犯同样的错误,并学习如何避免这些问题的发生.此处汇集和说明的反模式是由作者通过作为 IBM 架构师的个人经验.研究过去和当

正确使用日志的10个技巧(转)

  做一个苦逼的Java攻城师, 我们除了关心系统的架构这种high level的问题, 还需要了解一些语言的陷阱, 异常的处理, 以及日志的输出, 这些"鸡毛蒜皮"的细节. 这篇文章是JCP成员, Tomasz Nurkiewicz(http://nurkiewicz.blogspot.com/ )总结的10条如何正确使用日志的技巧(参见原文). 跟那篇"java编程最差实践"一样, 也是针对一些细节的, 因为日志是我们排查问题, 了解系统状况的重要线索. 我觉得

《设计原本—计算机科学巨匠Frederick P. Brooks的反思》一一

前 言 我写这本书的目的,意在督促设计师和设计项目经理们去努力思考设计活动的过程(process),特别是复杂系统的设计过程.本书是站在工程师的角度来思考的,不仅注重实用(utility)与效益(effectiveness),也兼顾效率(efficiency)和优雅(elegance).1 谁应该读这本书 <人月神话>一书的目标读者是"职业程序员.职业经理人,尤其是管理程序员的职业经理人".在该书中,我讨论了团队在开发软件时,获得概念完整性(conceptual integ

《极客与团队》一导读

前 言 极客与团队 "工程问题都很简单.人际关系才是最难的." --比尔·库格伦,前Google工程部资深副总裁 生活中总是充满了离奇的转折,就好像我们俩从没想过会合作写一本软件工程的书一样. 和大多数电脑狂一样,大学毕业后我们发现自己的兴趣和热情(折腾电脑)居然也是不错的谋生手段.而和那个时代的大多数黑客一样,我们的整个20世纪90年代中期都是在干这些事情,用别人剩下的零件攒机,拿着一大叠软盘安装预览版的Linux,然后学着操纵UNIX机器.我们都是系统管理员出身,然后在互联网泡沫刚

《智能数据时代:企业大数据战略与实战》一导读

前 言 大数据这个概念自诞生以来,已经经历了几次飞跃.时至今日,大数据这个名词频繁地与人工智能.DT.预测等词汇放在一起,看上去数据的发展已经成为与科技发展甚至整个社会发展平行的存在--?一切的颠覆都离不开数据.大数据是一种赋能工具,它的作用是帮助行业加速价值的流通,减少信息不对称,提高交易效率.市面上大数据行业相关的书籍已经汗牛充栋,然而还没有这样一本书--全面地解析大数据.企业和人之间的关系,站在企业管理者的角度解答如何利用大数据加速发展.攫取更多的价值:更没有人全面告诉企业的管理者,如果想