文章归档

InfoQ 网站几篇不错的文章

数据库驱动应用程序中影响性能的反模式
关于ORMapping的一些负面因素的介绍, 个人认为当性能不是关键问题的时候, ORMapping 还是比较好的,可以实现快速的开发,快速部署, 由于其对数据库的封装,也带来部分问题, 牺牲掉数据库在连接,查询方面的效率..

Web开发必知的八种隔离级别
对ACID中的I(Isolation)的8种隔离级别的简单介绍,开发与数据库从业人员都有需要深入了解.

可伸缩性的最差实践
介绍可伸缩性架构设计时应该避免的诸多问题,如所有问题都依赖于一个工具集,如对资源的滥用..

一种正规的性能调优方法:基于等待的调优
类似于Oracle的Wait Interface Based优化,通过使用Instrument收集到系统的开销的详细信息, 并针对等待比较严重的部分进行优化,个人觉得具体可以参考Optimizing Oracle Performance里面的Rmethod优化方法.

构建的可伸缩性和达到的性能:一个虚拟座谈会
倾听多位资深架构师关于架构的分享..

关于性能与可伸缩性的概念.性能与可伸缩性息息相关,但是两个是完全不同的概念,性能更关乎体验,可伸缩性更关乎设计与部署

Randy:我同意独立于任何特定语言或框架来讨论伸缩性问题确实很有价值——不管实现策略如何,模式都是一样的。可是,首先让我们确保自己已经把性能和可伸缩性区分开了。性能是服务于一个单独请求时的资源使用问题。可伸缩性是当要服务更多(或更大)请求时资源消费量如何随之增长的问题。

它们是相关的,但是不是同一件事情:-)。幸运的是,许多改善其中一个问题的方法通常也会改善另一个问题。但是,速度非常快的系统可能并不是最具伸缩性的系统,反之亦然。

FiveRuns:我们关心性能、可伸缩性、可用性的对比。我们把性能定义为一个操作(或一些操作)如何快速地完成,比如,响应时间、每秒事件处理的数量等等;而可伸缩性——就是应用怎样很好地按比例扩大规模以应对更大的使用需求(比如,用户数、请求速度、数据容量)。

关于性能诊断,特别是紧急状况下的性能诊断,有几点基本要求,系统已经做好基本的Instrument,有比较好的Sence(通常要求对业务有很好的理解,有足够多的现场处理经验,以及相应的知识集)

Randy:通常我们会从注意到问题的地方开始,然后向前追溯。在应用栈的所有层次所进行的监测/勘测得越多,就越容易这样做。它还可以帮助有各种学科专长团队里的人们来检查这个问题。

性能因为更多关乎体验,关乎感觉,要很好的检测,就需要建立一些基本的基线, 是否达到标准,具体达到什么样的标准..

FiveRuns:我们得补充一下,适当地建立一个基线是很重要的:一个已知的好的性能表现。并且试图梳理出任何交织于最终用户功能瑕疵的性能问题——有时这些瑕疵看起来只和功能有关,但实际上也包含了性能问题。

Randy:性能绝对是基础。差的性能直接反映了底层基础架构的花销,以及用户的体验。这两者都是底线。一个性能低于预期的应用不是“完成”了的应用,一个缺乏必须功能的应用同样是没有完成的。

FiveRuns:感知的性能是最终用户感觉得到的,因此最应该修正。可是我认为感知的性能是很难测量的—— 即,它是依赖于上下文的,作为观察者,我们不能总是访问同一个上下文环境,而且我们不可能控制组成上下文的所有东西。

Randy:这两者都重要:-)。感知的性能影响了用户体验,而所谓的真实性能会影响成本。这最终就是一个业务决策:此刻最大的痛苦是什么,因此要看哪个相对更优先。

关于新技术的选择,不要盲目的跟进潮流,要仔细分析自己的业务,哪些是可以适用,哪些不能随便调整.

FiveRuns:作为这种产品的制造者,我们对这个问题特别感兴趣!我们认为它是好事——它鼓励创新并给我们带来新的思路。但是我们专注于使用最好的工具组合——新的不见得就是好的。

Randy:有选择是好事情。这取决于你怎么去选择。追赶潮流此刻不再比顽固坚持不能工作的东西更有生产效率。我要说的是在一个像eBay这样24×7都要运转的站点,我们在使用经证明是好的技术时需要非常小心。这是我们对公司的责任。在我们考虑引入任何新东西的时候,在我们考虑将其应用到站点之前都要经过非常广泛的评估。

Blaine:你只能通过使用软件实现伸缩性。“语言是不能伸缩的。框架是不能伸缩的。而架构是可以伸缩的。”

伸缩性是一个社会问题。协调你的业务、操作和工程师们是极其关键的,如果你在这方面不成功,你实现伸缩性的努力也会失败。如果你的公司不理解需要多方协调以培育成功,那么你也会失败。YouTube正是通过正确的处理这一社会问题实现了伸缩性。他们购买服务器、有一个好的投资计划、有足够的带宽。他们选择一件事情,把它做好,以组织的方式决策伸缩性,在天才工程师们的努力下,伸缩性如魔术般被实现了。

FiveRuns:性能改进/伸缩性提升是一件“容易”的事情——修正性能或伸缩性问题不总是像外界看得那么简单——很容易因此受到指责且很难真正解决“所有”给定的约束。以我们的经验,修正性能和伸缩性问题需要对技术和问题领域两方面都有深入了解和经验。

Randy:经常被曲解的是性能和可伸缩性这两者间的区别

架构师修炼之道
InfoQ几个编辑眼中的架构师. 涉及架构师的工作范围,架构师应该具备的技能与素质,个人感觉还是上次给出的51CTO的那个链接总结的更好一点..

赵劼:在我看来,一个合格的架构师需要具备开放的眼光,各种平台、系统、项目随手拈来皆可组合,唯一的目标则是针对合适的环境选择合适的做法,这显然需要在成本和质量之间进行权衡。作为一个架构师,应该具有很好的“弹性”,在真正的环境中,很少会遇见与过去一模一样的情况,因此也需要架构师能够大胆尝试,灵活应对,使用踏实而严谨的做法来进行推测。一个架构师也必须有着足够的沟通和交流能力,把自己的想法使用合适的方式告诉别人,并且根据别人的反馈进行不断调整自己的观点。没有东西是永远正确的,但是一个人往往会倾向于自己的结论,而作为一个合格的架构师,需要有能力认识到自己存在的缺陷,使用各种方式进行弥补。

宋玮:扩充知识面,学习了解众多技术及框架的特点和适用范围。了解非功能特性的相关技术和方法,包括可用性、容错性、可扩展性、可伸缩性等等;了解系统安全性方面的技术和框架以及系统性能和状态监测方面的知识及工具。除了技术方面,还架构师还应扩展自身的业务知识,不断提高业务分析能力。想要做到持续不断的学习,保持对各种技术、框架、产品的浓厚兴趣是必不可少的,另外还要掌握他们各自的优缺点及相应的适用场景。

李明:我觉得这个问题可以从两个方面去谈。一方面,架构师要紧跟技术潮流,了解技术的发展和趋势,利用新技术、新方法来提升团队的生产力,将技术转化为收益。…..。而另一方面,架构师要培养自己的专业领域。虽然从技术的层面上说,很多解决方案放之四海而皆准。但是,从业务的角度来说,很多行业的解决方案放到另外一个行业中,未必行得通。这就要求了架构师必须对所属行业的业务十分了解才行,这也是一个平日里需要修炼的地方。

怎么成为优秀的架构师?

本文主要是对51CTO的两篇专访的摘录, 只是两位大师指出的内容也与我自己内心对此的理解有契合点..

摘自独家专访Fred George:架构师是使用代码作画的大师的片段

一个架构师的价值在于,他不仅能看到系统的美,而且能够在建造系统的时候能够把这些美创造出来。

在我看来,系统是一个个有机的生命。跟企业一样,系统也需要施肥浇水,需要健康的成长。与企业一样,一个系统可能会在短期内被滥用(比如在需要短期内快速盈利的驱使下),不过如果滥用的时间过长,系统最终将会无法支持。与CEO一样,一个架构师对系统的这个特性了如指掌。他们能够识别什么是滥用,系统能够承受的限度,并将系统引回到健康的道路上。

驾驭概念的技能,在我看来是每一个人最高的潜力。

最好的架构师都在写代码。Kent Beck曾经写道:“代码就是设计与残酷现实之黄昏的交汇(Code is when design meets the harsh reality of dawn.)”。他的意思是,我们画出来的设计都是美好的,但最好的设计仅仅是被翻译为优雅代码的那些。一个无法将愿景带入代码的架构师将永远无法了解我们这个急速变化的行业所展示的深度。

所以说,不编程的架构师的职业生涯是短暂的。

另一个新手架构师经常遇到的问题是“优美”以及“简约”。每次当进行决策的过程中出现这些概念的时候,项目经理往往对这样的理由不置可否。项目经理通常有短期目标要实现,而对优美还是简约这样的概念并不感冒。但事实上,他们这是对系统未来健康状况的不重视。

架构师是艺术家,他们的成就往往不会在他们活着的时候被赞赏。

摘自独家专访Randy Shoup:架构师要学会权衡取舍的片段

在产品团队开始酝酿一个新的主意的时候,架构师是产品团队第一个接触的人:架构师会帮助他们把可行性、技术需求以及权衡取舍等因素一一剖析清楚。一个架构师之后的工作可总结为以下几条:

◆设计整体的技术实现步骤
◆与开发团队一起,完成设计与实施的细节
◆与开发团队和运维团队一起,完成部署的过程
◆与运维团队一起,进行部署之后的维护和故障排除

一个架构师设立好技术风向标,并确保整个项目的进展按照这些方向进行。一个架构师不爱下达命令,他往往通过影响力来领导团队。一个架构师考虑“大的”和“长期的”,并在各个因素之间做出权衡。

条理清晰的逻辑思维能力可能是一个架构师最重要的技能了,而我们往往发现拥有这种技能的人就像稀有动物那样难找。不过,这个能力仅仅在和大量的实际开发经验、丰富的理论背景和好的领导能力相结合的时候才能体现出它的价值。

一个架构师最基本的职能是往广处思考,把系统看做一个完整的个体来思考,以维护并增强可伸缩性和可用性这些系统级的特性为目标。一个架构师不能将实施细节抛之脑后,但她最大的价值在更高的层次。
大多数成功的架构师都喜欢与其他团队成员一同完成架构和设计这一块的工作。这不仅对架构本身有利,而且会令实施过程进展的更加平滑。

按:

抽象思维能力: 从我个人的理解就是,能够深入了解业务,又能够立足于长远的分析业务的走势,并从中提取出相关的元素,整理出整个业务的概念模型,再将此概念模型一步步细化到具体的业务模块,功能点,最后变成可编程实践的架构/代码..
沟通问题: 上面所有这些工作不可能有单个人充实完整,涉及到架构师与开发,项目经理,运维团队,DBA团队以及相关业务部门的深入的讨论,分析
权衡问题: 架构设计需要基于对业务的深入分析与了解,以及相关技术的深入领悟的基础上,做出的一种权衡取舍. 例如: 大规模的数据存储需要考虑使用分布式的KV Enging(如Cassandra,CouchDB), 还是使用关系型数据(如: Oracle,Mysql),还是直接基于NAS的存储, 各种相关的技术都有哪些优势,又会牺牲哪些掉哪些,公司之前的业务对现有技术的依赖如何,可见的将来需要付出的代价如何? 换成新的技术会涉及哪些潜在的风险, 潜在的收益又如何?