AWS 的系统正确性实践
利用形式化和半形式化方法
构建可靠和安全的软件需要一系列方法来推理系统的正确性。除了行业标准的测试方法(例如单元测试和集成测试)之外,AWS 还采用了模型检查、模糊测试、基于属性的测试、故障注入测试、确定性模拟、基于事件的模拟以及执行轨迹的运行时验证。形式化方法一直是开发过程的重要组成部分——也许最重要的是,形式化规范作为测试预言,为 AWS 的许多测试实践提供了正确的答案。正确性测试和形式化方法仍然是 AWS 的关键投资领域,这些领域已经看到的卓越回报加速了投资。
数据中心计算机的中间表示
降低稳健且高性能分布式系统的负担
我们已经到了分布式计算无处不在的地步。内存应用程序数据大小超过了单台机器的容量,需要将其分区到集群中;在线服务具有高可用性要求,只有将系统部署为多个冗余组件的集合才能满足这些要求;高持久性要求只能通过数据复制来满足,有时甚至跨越广阔的地理距离。
模拟:分布式系统中未被充分利用的工具
模拟在人工智能系统的出现中发挥着巨大的作用:我们需要一种高效、快速且经济高效的方式来训练人工智能代理在我们的基础设施中运行,而模拟绝对提供了这种能力。
智能的代价
LLM 中固有的三个风险
LLM 容易出现幻觉、提示注入和越狱,这对它们的广泛采用和负责任的使用构成了重大但可以克服的挑战。我们认为这些问题是固有的,当然在当前这一代模型中可能是这样,在 LLM 本身中也可能是这样,因此我们的方法永远不能基于消除它们;相反,我们应该应用“深度防御”策略来缓解它们,并且在构建和使用这些系统时,要假设它们有时会在这些方向上失败。
你对人工智能一窍不通
ChatGPT 可能也不懂
长期以来,很难确定人工智能到底是什么。几年前,这样的讨论会演变成长达数小时的会议,绘制维恩图并试图绘制出人工智能的不同子领域。快进到 2024 年,我们现在都确切地知道人工智能是什么。人工智能 = ChatGPT。或者不是。
推动组织的可访问性
人们经常询问微软在可访问性和包容性方面的方法背后的秘诀。这很简单:我们像经营企业一样经营它。
在本文中,我们将探讨微软如何在整个组织中推动可访问性,并仔细研究促进包容性文化的基本框架和实践。通过检查诸如意识建设、战略发展、可访问性成熟度建模等方面,我们的目标是为开始可访问性之旅的组织提供指南。我们的想法是分享我们所学到的知识,希望您可以借鉴它,调整它以适应您公司的宗旨,并以一种不仅仅是打勾活动的方式来培养可访问性,而是真正融入您的文化中。
设计系统是可访问性交付工具
使应用程序的可访问性支持具有可扩展性、生产力和一致性
设计系统是为消费者(即设计师和开发人员)构建的基础设施,他们致力于应用程序。一个成功的设计系统允许组织中的消费者快速扩展跨应用程序的设计和开发,提高生产力并建立一致性。然而,许多消费者没有准备好为可访问性而构建。组织能否使应用程序的可访问性支持具有可扩展性、生产力和一致性?本文探讨了设计系统如何成为支持可访问性的重要工具。
移动应用程序的可访问性考虑因素
彭博 Connects 应用程序如何在产品和流程中支持可访问性
在创建移动应用程序时,考虑可访问性至关重要,以确保它们对尽可能广泛的受众可用且令人愉快。与桌面体验相比,移动可访问性具有独特的考虑因素,但它为那些在日常活动中依赖移动设备的用户提供了巨大的价值。通过牢记这些考虑因素,移动产品开发团队可以更好地支持和改善所有用户的 lives。本文探讨了移动应用程序的一些关键可访问性考虑因素,并重点介绍了彭博 Connects 应用程序如何在产品和流程中支持可访问性的几种方式。
系统级可访问性
使整个系统可供残疾人使用的架构支持
本文通过我们使 iPhone 能够使用 VoiceOver 屏幕阅读器进行非视觉使用的工作来说明系统级可访问性。我们为非视觉使用重新构想了触摸屏输入,引入了适用于屏幕阅读器控制的新手势,对于输出,我们添加了对合成语音和可刷新盲文显示器(输出触觉盲文字符的硬件设备)的支持。我们添加了应用程序可以采用的新可访问性 API,并使我们的用户界面框架默认包含它们。最后,我们添加了一个可访问性服务来桥接这些新的输入和输出以及应用程序。
数字可访问性的现状
如果您是数字可访问性的新手,甚至如果您不是,也很难跟上大局,而科技行业发展迅速。因此,我们请一组专家为我们介绍最新情况。他们不仅有涉及数字可访问性的日常工作,而且还亲身经历了残疾。我们向他们提出了以下问题:可访问性的现状如何?主要挑战是什么?我们为什么需要可访问的软件?我们如何为可访问性辩护?谁在带头?我们从哪里开始?
现在是时候让软件变得可访问了
以下是如何实现,从操作系统到组织
构成关于可访问性的本期特刊的文章表明,无论您是在后端、前端、设计工作,还是组织领导层的一员,您都可以采取措施来取得进展。然而,在我们开始编写软件和制定政策之前,还有一个更根本的问题:对残疾、辅助技术和可访问技术性质的广泛误解。如果我们要改变现状,我们必须从那里开始。
质疑评估非加密哈希函数的标准
也许我们需要更多地考虑非加密哈希函数。
虽然加密和非加密哈希函数无处不在,但它们的设计方式似乎存在差距。存在许多由各种安全要求驱动的加密哈希标准,但在非加密方面,存在一定的民间传说,尽管哈希函数历史悠久,但尚未得到充分探索。虽然针对现实世界数据集的均匀分布非常有意义,但在面对具有特定模式的数据集时,这可能是一个挑战。
评估 IT 项目的成功:感知与现实
如果没有 IT 项目的反复成功,我们就不会进入数字时代。
本研究通过提供对 IT 项目成功的新见解,对实践、研究和教育具有重要意义。它通过报告项目成功(而不仅仅是项目管理成功)来扩展项目管理知识体系,项目成功基于几个客观标准,例如项目后阶段客户对交付物的使用情况、客户对项目相关支持/维护服务的雇用、客户对新项目的承包以及客户向潜在客户的供应商推荐。研究人员可以找到一组标准,他们可以在研究和报告 IT 项目的成功时使用这些标准,从而扩展当前对评估的看法,并有助于得出更准确的结论。
机密计算证明
加密零知识的替代方案
证明是用于完整性和隐私的强大工具,使验证者能够委托计算并仍然验证其正确执行,并使证明者能够对计算的细节保密。CCP 和 ZKP 都可以实现可靠性和零知识,但存在重要差异。CCP 依赖于硬件信任假设,这会产生高性能并为证明者提供额外的机密性保护,但对于某些应用程序来说可能是不可接受的。CCP 也通常更易于使用,尤其是在现有代码的情况下,而 ZKP 带有很大的证明者开销,对于某些应用程序来说可能是不切实际的。
GPT 和幻觉
大型语言模型为何会产生幻觉?
本实验的发现支持以下假设:基于 LLM 的 GPT 在更受欢迎且已达成普遍共识的提示上表现良好,但在有争议的主题或数据有限的主题上表现不佳。应用程序响应的可变性强调模型依赖于其训练数据的数量和质量,这与依赖于多样化和可信贡献的众包系统相似。因此,虽然 GPT 可以作为许多日常任务的有用工具,但应谨慎解释它们对晦涩和两极分化主题的参与。
虚拟阴谋:将大型语言模型用作神经计算机
LLM 不仅可以充当数据库,还可以充当动态的、最终用户可编程的神经计算机。
我们探讨了大型语言模型 (LLM) 如何不仅可以充当数据库,还可以充当动态的、最终用户可编程的神经计算机。这种神经计算机的本机编程语言是一种受逻辑编程启发的声明性语言,它形式化并外化了思维链推理,就像它可能发生在一个大型语言模型内部一样。
迈向有效的 AI 开发人员支持
对愿望和担忧的调查
将 AI 集成到软件工程师日常生活中的旅程并非没有挑战。然而,它预示着开发人员如何将他们的创造性愿景转化为有形解决方案的变革性转变。正如我们所见,GitHub Copilot 等 AI 工具已经在重塑代码编写体验,使开发人员能够提高工作效率,并将更多时间花在创造性和复杂的任务上。从对工作保障的担忧到其现实世界的功效,围绕 AI 的怀疑态度突显了需要采取平衡的方法,优先考虑透明度、教育和道德考量。
你对带宽一窍不通
如果您是 ISP 并且所有客户都讨厌您,请振作起来。现在这是一个可以解决的问题。
当您的员工或客户说他们的互联网性能很差时,带宽可能不是问题。一旦他们拥有 50 到 100 Mbps 范围内的带宽,问题就是延迟,即 ISP 路由器处理他们的流量需要多长时间。如果您是 ISP 并且所有客户都讨厌您,请振作起来。现在这是一个可以解决的问题,这要归功于一群敬业的人,他们找到了它,消灭了它,然后在家庭路由器中验证了他们的解决方案。
事务和无服务器是天作之合
如果无服务器平台可以将函数包装在数据库事务中,它们将非常适合数据库支持的应用程序。
数据库支持的应用程序是无服务器计算令人兴奋的新领域。通过紧密集成应用程序执行和数据管理,事务性无服务器平台实现了许多现有无服务器平台或基于服务器的部署中不可能实现的新功能。
使用机密联邦学习的可信人工智能
联邦学习和机密计算不是竞争技术。
安全性、隐私性、问责制、透明度和公平性原则是现代人工智能法规的基石。经典的 FL 在设计时非常强调安全性和隐私性,但代价是透明度和问责制。CFL 通过将 FL 与 TEE 和承诺仔细结合来弥补这一差距。此外,CFL 还带来了其他理想的安全属性,例如基于代码的访问控制、模型机密性和推理期间的模型保护。机密计算的最新进展(例如机密容器和机密 GPU)意味着现有的 FL 框架可以无缝扩展以支持具有低开销的 CFL。
机密计算还是密码计算?
密码学与硬件飞地之间的权衡
通过 MPC/同态加密与硬件飞地进行安全计算,在部署、安全性和性能方面存在权衡。关于性能,您脑海中想到的工作负载非常重要。对于简单的求和、低度多项式或简单的机器学习任务等简单工作负载,这两种方法都可以在实践中使用,但对于复杂的 SQL 分析或训练大型机器学习模型等丰富的计算,目前只有硬件飞地方法对于许多现实世界的部署场景来说足够实用。
机密容器组
在 Azure 容器实例上实施机密计算
此处介绍的实验表明,Parma(驱动 Azure 容器实例上的机密容器的架构)增加的额外性能开销不到底层 TEE 增加的开销的百分之一。重要的是,Parma 确保了容器组的所有可达状态都扎根于证明报告的安全不变性。这允许外部第三方与容器安全地通信,从而实现各种需要机密访问安全数据的容器化工作流程。公司获得了在云中运行其最机密工作流程的优势,而无需在其安全要求上做出妥协。
使用 Arm CCA 提升安全性
证明和验证是采用机密计算不可或缺的一部分。
机密计算通过将监管系统移出 TCB,从而减小 TCB 的大小、攻击面和安全架构师必须考虑的攻击向量,从而大大提高通用计算平台的安全性。机密计算需要平台硬件和软件方面的创新,但这些创新有可能增强对计算的信任,尤其是在第三方拥有或控制的设备上。机密计算的早期消费者将需要就他们选择信任的平台做出自己的决定。
DevEx 实践
对其有形影响的研究
随着领导者寻求在财政紧缩和人工智能等变革性技术的背景下优化软件交付,DevEx(开发者体验)在许多软件组织中越来越受到关注。技术领导者凭直觉接受良好的开发者体验可以提高软件交付效率和开发者幸福感。然而,在许多组织中,旨在改进 DevEx 的拟议举措和投资难以获得支持,因为业务利益相关者质疑改进的价值主张。
解决机器学习众包工作者的受试者身份
什么伦理框架应该管理 ML 研究人员和众包工作者之间的互动?
近年来,机器学习 (ML) 严重依赖众包工作者来构建数据集和解决需要人工交互或判断的研究问题。执行的任务的多样性和结果数据的用途使得很难确定何时最好将众包工作者视为工作者而不是人类受试者。相互冲突的政策使这些困难更加复杂,一些机构和研究人员将所有 ML 众包工作者视为人类受试者,而另一些机构和研究人员则认为他们很少构成人类受试者。值得注意的是,很少有涉及众包工作的 ML 论文提及 IRB 监督,这引发了不遵守道德和监管要求的可能性。
如何设计 ISA
RISC-V 的普及已导致许多人尝试设计指令集。
在过去的十年中,我参与了几个项目,这些项目为各种类型的处理器设计了 ISA(指令集架构)扩展或全新的 ISA(您甚至可以在 RISC-V 规范的致谢中找到我的名字,一直追溯到第一个公开版本)。当我开始时,我对是什么构成好的 ISA 知之甚少,而且据我所知,这在任何地方都没有正式教授。
改进深度学习系统的测试
差异测试和变异测试的结合产生了更好的测试数据。
我们使用差异测试来生成测试数据,以提高测试数据集中数据点的多样性,然后使用变异测试来检查测试数据在多样性方面的质量。以这种方式结合差异测试和变异测试可以提高变异分数(一种测试数据质量指标),表明在测试深度学习系统时,测试有效性和测试数据质量总体得到提高。
低代码开发生产力
基于代码的技术的“冬天要来了”吗?
本文旨在通过展示使用基于代码、低代码和极低代码技术进行的实验室实验结果来研究生产力差异,从而为该主题提供新的见解。低代码技术已清楚地显示出更高的生产力水平,为低代码在短期/中期内主导软件开发主流提供了强有力的论据。本文报告了程序和协议、结果、局限性和未来研究的机会。
用例至关重要
用例提供了一种经过验证的方法,以简洁易懂的格式捕获和解释系统的需求。
虽然软件行业是一个快节奏且令人兴奋的世界,其中不断开发新的工具、技术和技术来服务于商业和社会,但它也很健忘。在其快速前进的过程中,它容易受到时尚的摆布,并且可能会忘记或忽略一些它面临的永恒问题的经过验证的解决方案。用例于 1986 年首次引入,后来普及,是这些经过验证的解决方案之一。
使用 FDO 和不受信任的安装程序模型进行设备入职
FDO 的不受信任模型与 Wi-Fi Easy Connect 进行了对比,以说明每种机制的优势。
设备的自动入职是处理正在安装的越来越多的“边缘”和物联网设备的重要技术。设备的入职与大多数设备管理功能不同,因为设备的信任从工厂和供应链转移到目标应用程序。为了加快自动入职的过程,必须在设备中形式化供应链中的信任关系,以允许自动化过渡。
创建首批机密 GPU
NVIDIA 的团队为加速计算的用户代码和数据带来了机密性和完整性。
今天的 数据中心 GPU 具有悠久而传奇的 3D 图形传统。在 1990 年代,用于 PC 和游戏机的图形芯片具有用于几何、光栅化和像素的固定管道,使用整数和定点算术。1999 年,NVIDIA 发明了现代 GPU,它将一组可编程内核置于芯片的核心,从而能够以极高的效率生成丰富的 3D 场景。
我为什么要信任你的代码?
机密计算使用户能够验证在 TEE 中运行的代码,但用户还需要证据证明此代码是值得信赖的。
为了使机密计算像 HTTPS 成为网络默认设置一样在云中变得无处不在,需要一种不同的、更灵活的方法。虽然不能保证每个恶意代码行为都会被预先捕获,但可以保证精确的可审计性:任何怀疑机密服务破坏了信任的人都应该能够审计其经过证明的代码库的任何部分,包括所有更新、依赖项、策略和工具。为了实现这一点,我们提出了一个架构来跟踪代码出处并追究代码提供商的责任。其核心是一个新的代码透明度服务 (CTS),它维护一个公共的、仅附加的分类账,记录为机密服务部署的所有代码。
云中的硬件 VM 隔离
使用 AMD SEV-SNP 技术实现机密计算
机密计算是一种非常适合公共云的安全模型。它使客户能够租用 VM,同时享受基于硬件的隔离,从而确保云提供商不会有意或无意地查看或损坏他们的数据。SEV-SNP 是第一个商业上可用的 x86 技术,可为云提供 VM 隔离,并已部署在 Microsoft Azure、AWS 和 Google Cloud 中。随着 SEV-SNP 等机密计算技术的发展,机密计算很可能 просто 成为云的默认信任模型。
机密计算:提升云安全性和隐私性
朝着更安全和创新的未来努力
机密计算 (CC) 通过大幅减少系统的攻击面,从根本上改善了我们的安全态势。虽然传统系统在静态和传输中加密数据,但 CC 将此保护扩展到使用中的数据。它提供了一个新颖、明确定义的安全边界,在计算期间将敏感数据隔离在可信执行环境中。这意味着可以设计服务,根据最小权限访问原则对数据进行分段,而系统中的所有其他代码只能看到加密数据。至关重要的是,隔离根植于新颖的硬件原语,有效地使云托管基础设施及其管理员也无法访问数据。
远内存中的指针
重新思考数据和计算的组织方式
有效利用新兴的远内存技术需要考虑在父进程上下文之外操作丰富连接的数据。正在开发中的操作系统技术通过公开诸如内存对象和全局不变指针之类的抽象来提供帮助,设备和新实例化的计算可以遍历这些抽象。这些想法将允许在具有分离内存节点的未来异构分布式系统上运行的应用程序利用近内存处理来获得更高的性能,并独立扩展其内存和计算资源以降低成本。
CXL 的内存保护有多灵活?
用手术刀代替大锤
CXL 是一种用于缓存一致性内存共享的新互连标准,正在成为现实——但其安全性仍有不足之处。分散式功能灵活且能够抵御恶意行为者,应在 CXL 处于积极开发阶段时予以考虑。
智能的回声
文本解释和大型语言模型
我们现在正处于一种伪装成旧文本的新媒介中,但该文本是由 LLM 生成的,没有作者意图——如果事先知道,这一方面完全改变了人类应该对一段文本的期望和反应。我们的解释能力应该被调动吗?如果可以,在什么条件下?语言游戏的规则应该明确说明;它们不应被沉默地跳过。
你对应用程序性能一窍不通
在启动项目时,知道您是否注定要失败很重要。
当您遇到性能或容量规划问题时,无需进行全面基准测试。一个简单的测量将提供您系统的瓶颈点:此示例程序在每 CPU 每秒 8 个请求后会显着变慢。这通常足以告诉您最重要的事情:您是否会失败。
货物崇拜 AI
科学思维能力是智能的本质吗?
大量证据表明,人类大脑并非天生就具有科学思维;然而,它可以被教导这样做。同一个物种围绕着对不明飞行物、超感官知觉以及在社交媒体上阅读到的任何内容的广泛且毫无根据的信念形成货物崇拜,也产生了像萨根和费曼这样的科学名人。今天的尖端 LLM 也不是天生就具有科学性的。但与人类大脑不同,有充分的理由相信它们永远不会,除非开发出新的算法范例。
超越存储库
开源生态系统研究人员的最佳实践
许多关于开源的现有研究选择研究软件存储库而不是生态系统。开源存储库通常指的是版本控制系统中记录的工件,偶尔包括围绕存储库本身的交互。开源生态系统指的是存储库的集合、社区、它们的交互、激励、行为规范和文化。开源的去中心化性质使得对生态系统进行整体分析成为一项艰巨的任务,社区和身份以有机的和不断发展的方式交叉。尽管存在这些复杂性,但对软件安全和供应链日益严格的审查使得在执行有关开源的研究时采取基于生态系统的方法至关重要。
DevEx:真正驱动生产力的因素
以开发者为中心的方法来衡量和提高生产力
开发者体验侧重于开发者的实际体验以及他们在日常工作中遇到的摩擦点。除了提高生产力外,DevEx 还通过提高效率、产品质量和员工保留率来推动业务绩效。本文提供了一个用于理解 DevEx 的实用框架,并提出了一个测量框架,该框架将来自开发人员的反馈与关于他们与之交互的工程系统的数据相结合。这两个框架为领导者提供了清晰、可操作的见解,让他们了解需要衡量什么以及需要关注哪些方面才能提高开发人员的生产力。
设计会话界面框架
将机器学习的最新进展与早期方法相结合
在可能的情况下,业务逻辑应通过代码而不是训练数据来描述。这使我们系统的行为保持原则性、可预测且易于更改。我们的会话界面方法允许像构建任何其他应用程序一样构建它们,使用熟悉的工具、约定和流程,同时仍然利用尖端的机器学习技术。
优化网络安全中的机会成本和错失良机
当选择一个替代方案时,因其他替代方案而损失的潜在收益
在制定安全决策时,机会成本不应是事后才考虑的因素。 考虑复杂替代方案的一种简便方法是考虑不作为的零基线,而不是手头的选择。 机会成本可能感觉抽象、难以捉摸且不精确,但只要有正确的介绍和框架,每个人都可以理解它。 使用本文介绍的方法将使其自然且易于理解。
磨砺你的工具
为 2020 年代更新 bulk_extractor
本文介绍了我们在最初发布十年后更新高性能数字取证工具 BE (bulk_extractor) 的经验。 在 2018 年至 2022 年期间,我们将程序从 C++98 更新到 C++17。 我们还进行了完整的代码重构并采用了单元测试框架。 必须经常更新 DF 工具,以跟上其使用方式的变化。 对 bulk_extractor 工具更新的描述可以作为可以而且应该做什么的示例。
献给尚未理解的程序经理的三部曲和谐
开源软件、开放标准和敏捷软件开发
本文探讨了系统采购工具箱中的三种工具,这些工具可以加快开发和采购速度,同时降低程序风险:OSS、开放标准以及敏捷/Scrum 软件开发流程都是 DoD 采购项目管理工具箱的强大补充。
是否采用 PiM
边缘设备上量化 CNN 的内存内推理案例
随着人工智能成为数十亿边缘 IoT(物联网)设备的普及工具,数据移动瓶颈对这些系统的性能和自主性施加了严格的限制。 PiM(内存内处理)正在兴起,成为一种缓解数据移动瓶颈的方法,同时满足依赖 CNN(卷积神经网络)的边缘成像应用的严格性能、能源效率和准确性要求。
使用 Copilot 起飞
人工智能驱动的结对编程工具的早期见解和机遇
在未来五年内,人工智能驱动的工具可能会在许多不同的任务中帮助开发人员。 例如,此类模型可用于改进代码审查,指导审查人员查看最需要审查的更改部分,甚至直接提供有关更改的反馈。 Codex 等模型可能会建议修复代码缺陷、构建失败或测试失败的错误。 这些模型能够自动编写测试,帮助提高代码质量和分布式系统的下游可靠性。 这项对 Copilot 的研究表明,开发人员花费在审查代码上的时间比实际编写代码的时间更多。
在 Google 重塑后端子集化
设计一种可以替代确定性子集化的连接抖动减少算法
后端子集化对于降低成本非常有用,甚至可能是在系统限制内运行所必需的。 十多年来,Google 一直使用确定性子集化作为其默认后端子集化算法,但尽管此算法平衡了每个后端任务的连接数,但确定性子集化具有较高的连接抖动水平。 我们在 Google 的目标是设计一种连接抖动减少的算法,该算法可以替代确定性子集化作为默认后端子集化算法。
OCCAM-v2:结合静态和动态分析以实现有效且高效的程序整体特化
利用可扩展的指针分析、值分析和动态分析
OCCAM-v2 利用可扩展的指针分析、值分析和动态分析,创建了一个有效且高效的工具,用于特化 LLVM bitcode。 代码大小缩减的程度取决于特定的部署配置。 每个要特化的应用程序都附带一个清单,其中指定了先验已知的具体参数,以及将在运行时提供的剩余参数的计数。 部分评估的最佳情况发生在参数完全具体指定时。 OCCAM-v2 使用指针分析来取消虚拟化调用,从而可以消除任何直接调用都无法访问的函数的整个主体。
全同态加密的兴起
商业 FHE 常被称为密码学的圣杯,即将到来。
一旦实现商业 FHE,数据访问将与不受限制的数据处理完全分离,并且在不受信任的平台上进行可证明的安全存储和计算将变得相对便宜且广泛可用。 与数据库、云计算、PKE 和 AI 的影响类似,FHE 将引发机密信息保护、处理和共享方式的巨大变化,并将从根本上改变计算的基础方向。
绘制中央银行数字货币的隐私格局
现在是塑造未来支付流将揭示您个人信息的时候了。
随着世界各国央行纷纷将现金数字化,隐私问题需要提到首位。 采取的路径可能取决于每个利益相关者群体的需求:注重隐私的用户、数据持有者和执法部门。
从零到一百
揭秘零信任及其对企业人员、流程和技术的影响
不断变化的网络格局和日益增长的安全威胁,使人们对新的安全方法产生了紧迫感。 零信任已被提议作为解决这些问题的一种方案,但有些人认为它是销售现有最佳实践的营销工具,而另一些人则称赞它是新的网络安全标准。 本文讨论了零信任的历史和发展,以及不断变化的威胁格局为何导致了网络安全领域的新讨论。
个人信息隐私
在金鱼缸里保持匿名
每次与外部服务的在线互动都会创建有关用户的数字记录和存储的数据。 这些外部服务可能是信用卡交易、医疗咨询、人口普查数据收集、选民登记等。 尽管表面上收集数据是为了向公民提供更好的服务,但个人隐私不可避免地会受到威胁。 随着互联网覆盖范围的扩大和生成的数据量增加,数据保护,特别是保护个人隐私,已变得尤为重要。
现实世界中 IoT、TLS 和随机数生成器的挑战
不良随机数仍然存在于我们身边,并在现代系统中激增。
密码学界的许多人嘲笑在实施 RNG 时犯的错误。 许多密码学家和 IETF 成员拒绝使 TLS 对此类故障更具弹性的呼吁。 本文讨论了 TLS 协议的历史、现状和脆弱性,并在结尾处提供了一个关于如何改进协议的示例。 目标不是提出解决方案,而是通过证明在没有完美随机数假设的情况下 TLS 的安全性是可能的,来开始对话以使 TLS 更具弹性。
设身处地为他们着想
通过四位技术工作者的视角看新冠疫情
新冠疫情在许多方面改变了人们的工作方式,但许多结果本质上是矛盾的。 对一个人有效的方法可能对另一个人无效(甚至对同一个人来说,第二天也可能无效),而且我们尚未弄清楚如何准确预测什么对每个人都有效。 正如您在此处描述的综合人物角色中所见,有些人与隔离和孤独作斗争,很难与他们的团队进行社交联系,或者发现与远程团队进行混合工作的时间压力令人难以承受。 其他人则喜欢这种新发现的工作方式,享受更多与家人共处的时间、白天锻炼的更大灵活性、更好的工作/生活平衡以及为世界做出更大贡献的愿望。
软件彩蛋万岁!
这是一个动荡的时期。 从持续部署服务器罢工的反叛开发者赢得了他们的首次胜利。 在战斗中,反叛间谍设法在 https://pro.sony 的 HTML 代码中推送了一个史诗般的提交。 在邪恶特工的追捕下,叛军躲藏在提交、按钮、工具提示、API、HTTP 标头和配置屏幕中。
自主计算
我们经常跨越自主边界进行计算,但很少讨论确保独立的模式的含义。
自主计算是一种业务工作模式,它使用协作来连接封地及其特使。 这种基于纸质表格的模式已经使用了几个世纪。 在这里,我们解释了封地、协作和特使。 我们研究了特使如何在自主边界之外工作,并且在保持局外人的同时也很方便。 我们还研究了如何启动、长期运行并最终完成跨不同封地的工作。
通过关键路径跟踪进行分布式延迟分析
CPT 可以提供可操作且精确的延迟分析。
低延迟是许多 Google 应用程序(例如搜索)的重要功能,延迟分析工具在以规模维持低延迟方面发挥着关键作用。 对于包含功能和数据不断发展的服务的复杂分布式系统,将总体延迟保持在最低水平是一项具有挑战性的任务。 在大型、真实的分布式系统中,现有的工具(例如 RPC 遥测、CPU 分析和分布式跟踪)对于了解整个系统的子组件很有价值,但不足以在实践中执行端到端延迟分析。
中间件 101
现在和未来需要了解的内容
无论是将复杂的软件组件分离为更小的服务、在计算机之间传输数据,还是创建用于无缝通信的通用网关,您都可以依靠中间件来实现不同设备、应用程序和软件层之间的通信。 随着敏捷运动的兴起,科技行业已采用快速瀑布模型来为每个结构需求创建层堆栈,包括集成、通信、数据和安全。 鉴于此范围,现在的重点必须放在端点连接和敏捷开发上。 这意味着中间件不应仅仅充当执行简单请求-响应命令的面向对象解决方案。
持久性编程
我们做得对吗?
几年前,我的团队正在为增强型 911 (E911) 紧急呼叫中心开发一个商业 Java 开发项目。 我们试图使用传统的 Java over SQL 数据库模型来满足该项目的数据存储要求,这让我们感到沮丧。 在对项目的特定要求(和非要求)进行一番思考后,我们深吸一口气,决定从头开始创建我们自己的自定义持久层。
客户端计算硬件中的 FPGA
尽管存在某些挑战,但 FPGA 在安全性和性能方面比 ASIC 具有优势。
FPGA(现场可编程门阵列)非常通用。 它们广泛用于各种应用和行业,在这些应用和行业中使用 ASIC(专用集成电路)在经济上不太可行。 尽管设计师在将 FPGA 集成到设备中时面临面积、成本和功耗方面的挑战,但它们提供了显着的安全性和性能优势。 其中许多优势可以在客户端计算硬件(例如笔记本电脑、平板电脑和智能手机)中实现。
王国之钥
已删除的私钥、迫在眉睫的截止日期以及将新的静态信任根修补到引导加载程序的最后机会
一次不幸的误操作引发了当前的危机:客户不小心删除了签署新固件更新所需的私钥。 他们有一些令人兴奋的新功能要发布,以及通常的一系列可靠性改进。 他们的客户越来越不耐烦,但当被问及发布日期时,我的客户不得不拖延。 他们如何才能提出一个有意义的日期? 他们已经失去了签署新固件版本的能力。
可解释的机器学习
从神话走向诊断
在过去的十年中,机器学习作为一种改变社会的技术的出现,引发了人们对无法理解日益复杂的模型的推理的担忧。 IML(可解释的机器学习)领域正是在这些担忧中发展起来的,其目标是使各种利益相关者能够应对用例,例如建立对模型的信任、执行模型调试以及普遍地为真实的人类决策提供信息。
联邦学习和隐私
在去中心化数据上构建用于机器学习和数据科学的隐私保护系统
如果数据管理不当,集中式数据收集可能会使个人面临隐私风险,并使组织面临法律风险。 联邦学习是一种机器学习设置,其中多个实体在中央服务器或服务提供商的协调下协作解决机器学习问题。 每个客户端的原始数据都存储在本地,不会被交换或传输; 相反,使用旨在立即聚合的重点更新来实现学习目标。
计算机程序中的含义和上下文
使用源代码作为媒介在程序员之间共享领域知识
当您查看函数程序的源代码时,您如何知道它的含义? 含义是在函数的返回值中找到,还是位于函数体内部? 函数名呢? 回答这些问题对于理解如何使用源代码作为媒介在程序员之间共享领域知识非常重要。 程序是程序员之间交流以分享其解决方案的媒介。
欺骗攻击者:新一代欺骗技术
软件工程团队可以通过构建欺骗环境来利用攻击者的人性。
本文的目的是教育软件领导者、工程师和架构师了解欺骗技术在系统弹性方面的潜力以及构建欺骗环境的实际考虑因素。 通过检查信息安全社区过去在欺骗工作方面的不充分性和停滞不前,本文还展示了为什么工程团队现在有能力成为更成功的欺骗系统所有者。
为静态分析工具设计 UI
使用 SWAN 评估工具设计指南
静态分析工具存在可用性问题,例如误报率高、响应速度慢以及警告描述和分类不明确。 在这里,我们探讨了将以用户为中心的方法和设计指南应用于 SWAN(一种针对 Swift 编程语言的以安全为中心的静态分析工具)的效果。 SWAN 是一个有趣的案例研究,用于探索静态分析工具的可用性,因为它具有庞大的目标受众、易于集成到开发人员工作流程中的潜力以及独立于现有分析平台的特性。
以人为中心的静态分析驱动的开发者工具方法
未来取决于良好的人机交互
复杂且不透明的系统不容易扩展。 以人为中心的方法来发展工具和实践对于确保软件安全可靠地扩展至关重要。 静态分析可以揭示有关程序行为的信息,但是导出此信息的目的不应是积累吹毛求疵的细节。 HCI 可以帮助将静态分析技术引导到面向开发人员的系统中,这些系统以密切反映程序员思想的表示形式来组织信息并体现关系。 优秀软件的生存取决于支持而不是抑制沟通、推理和抽象思维的编程语言。
GitHub 上的静态分析
一份经验报告
GitHub 的语义代码团队构建和运营一套技术,这些技术为 github.com 上的符号代码导航提供支持。 我们了解到,规模关乎采用、用户行为、渐进式改进和实用性。 特别是静态分析,在人类行为方面很难扩展; 我们经常想到复杂的分析工具致力于在代码中查找潜在的问题模式,然后尝试说服人们修复它们。
静态分析:简介
软件工程的基本挑战之一是复杂性。
现代静态分析工具为代码库提供了强大而具体的见解。 例如,Linux 内核团队开发了 Coccinelle,这是一种用于搜索、分析和重写 C 源代码的强大工具; 由于 Linux 内核包含超过 2700 万行代码,因此静态分析工具对于查找错误和在其众多库和模块中进行自动化更改至关重要。 另一个针对 C 语言系列的工具是 Clang scan-build,它附带了许多有用的分析,并为程序员提供了编写自己的分析的 API。 就像计算机科学中的许多事物一样,静态分析的实用性是自引用的:要编写可靠的程序,我们还必须为我们的程序编写程序。
声明式机器学习系统
机器学习的未来将取决于它掌握在我们其余人手中。
现在训练和使用 ML 模型的人通常是在大型组织中工作多年的经验丰富的开发人员,但是下一波 ML 系统应该允许更多的人(可能没有任何编码技能)执行相同的任务。 这些新的 ML 系统将不需要用户完全了解模型如何训练和用于获得预测的所有细节,而是将为他们提供一个更抽象的界面,该界面要求更低且更熟悉。
真实世界的字符串比较
如何正确处理 Unicode 序列
在许多语言中,字符串比较是初学者的陷阱。 以任何 Unicode 字符串作为输入,比较通常即使对于高级用户也会引起问题。 Unicode 中不同字符的语义等价性要求在比较字符串之前对其进行规范化。 本文介绍了如何正确处理 Unicode 序列。 比较两个字符串是否相等通常会引发关于按值比较、对象引用比较、严格相等和宽松相等之间差异的问题。 最重要的方面是语义等价性。
深入研究大数据溯源(使用 SPADE)
用于查询溯源的用户界面
存在多个用于查询溯源的界面。 许多界面在允许用户选择他们选择的数据库类型方面不够灵活。 有些界面在数据模型中提供查询功能,该数据模型与溯源自然的面向图形的数据模型不同。 其他界面具有用于查找结果的直观构造,但对有效链接响应的支持有限,而分面搜索需要这样做。 本文介绍了一种用于查询溯源的用户界面,该界面解决了这些问题,并且与正在使用的底层数据库无关。
量子抗性的复杂之路
您的组织准备好了吗?
地平线上出现了一种新技术,它将永远改变信息安全和隐私行业的格局。 量子计算与量子通信相结合,将有许多有益的应用,但也能够破解当今许多流行的加密技术,这些技术有助于确保数据保护?特别是敏感信息的机密性和完整性。 这些技术普遍嵌入于当今的数字结构中,并由许多行业实施,例如金融、医疗保健、公用事业以及更广泛的信息通信技术 (ICT) 社区。
AI 系统中的偏差
从业者调查
本文组织了 AI 管道中可能发生的各种偏差类型,从数据集创建和问题制定到数据分析和评估。 它强调了与偏差缓解策略设计相关的挑战,并概述了研究人员提出的一些最佳实践。 最后,提出了一组指南,可以帮助 ML 开发人员识别偏差的潜在来源,并避免引入不必要的偏差。 这项工作旨在作为 ML 开发人员处理和解决与 AI 系统偏差相关问题的教育资源。
动荡时期的软件开发
创建具有快速决策能力、敏捷项目管理和极致低代码技术的软件解决方案
在这个项目中,挑战是“部署软件的速度比冠状病毒传播的速度更快”。 在具有如此特殊特征的项目中,有几个因素会影响成功,但有些因素显然很突出:高层管理人员的支持、敏捷性、项目团队的理解和承诺以及所使用的技术。 传统的开发方法和技术根本无法及时满足要求。
WebRTC - 开放 Web 平台的实时通信
曾经是将音频和视频带到 Web 的一种方式,现在已扩展到我们无法想象的更多用例。
在这个疫情时期,世界比以往任何时候都更加依赖基于互联网的 RTC(实时通信)。 在过去十年中,RTC 产品的数量呈爆炸式增长,这在很大程度上是由于更便宜的高速网络接入和更强大的设备,但也由于一个名为 WebRTC 的开放、免版税平台。 WebRTC 正在从支持有用的体验发展成为在疫情期间让数十亿人继续工作和教育并保持重要的人际接触方面发挥至关重要的作用。 WebRTC 未来的机遇和影响确实引人入胜。
迈向机密云计算
将硬件强制加密保护扩展到使用中的数据
尽管现代云的发展主要由规模经济驱动,但也提高了安全性。 大型数据中心提供聚合的可用性、可靠性和安全保证。 确保操作系统、数据库和其他服务具有安全配置的运营成本可以在所有租户之间分摊,从而使云提供商能够聘请负责安全的专家; 这对于小型企业来说通常是不可行的,在小型企业中,系统管理员的角色通常与许多其他角色混淆。
开发者生产力的 SPACE
它比您想象的要复杂。
开发者生产力不仅仅关乎个人的活动水平或用于交付软件的工程系统的效率,它不能用单个指标或维度来衡量。 SPACE 框架捕获了生产力的不同维度,在这里我们演示了如何使用此框架来理解实践中的生产力,以及为什么使用它将帮助团队更好地理解开发者生产力并创建更好的措施来指导他们的工作和团队。
云中的飞地
法律考虑和更广泛的含义
随着组织数据实践受到越来越多的审查,对可以帮助组织履行其数据管理义务的机制的需求正在增长。 TEE(可信执行环境)提供基于硬件的机制,具有各种安全属性,可用于辅助计算和数据管理。 TEE 关注数据、代码和相应计算的机密性和完整性。 由于主要安全属性来自硬件,因此即使主机特权软件堆栈易受攻击,也可以提供某些保护和保证。
最佳实践:应用程序框架
虽然框架功能强大,但并非适用于所有人。
虽然框架可能是一个强大的工具,但它们也有一些缺点,可能并不适合所有组织。 框架维护者需要提供标准化和明确定义的行为,同时又不会过于规范。 然而,当框架达到适当的平衡时,它们可以为开发人员带来巨大的生产力提升。 框架的广泛使用所提供的一致性对于其他团队(例如 SRE 和安全团队)来说是一种福音,这些团队对应用程序的质量具有既得利益。 此外,框架的结构为构建更高级别的抽象(例如微服务平台)奠定了基础,这为系统架构和自动化开辟了新的机会。
VPN 又焕然一新
这个有 24 年历史的安全模型迎来了第二春。
VPN(虚拟专用网络)已有 24 年历史。 这个概念是为与我们今天所知的互联网截然不同的互联网而创建的。 随着互联网的增长和变化,VPN 用户和应用程序也随之发展。 VPN 在 2000 年代的互联网中经历了尴尬的青春期,与其他广泛流行的抽象概念交互不良。 在过去的十年中,互联网再次发生了变化,而这个新的互联网为 VPN 提供了新的用途。 全新的协议 WireGuard 的开发提供了一种构建这些新 VPN 的技术。
木已成舟
硬件安全无法保证
硬件安全的未来将随着硬件的发展而发展。 随着封装技术的进步以及重点转向超越摩尔定律的技术,硬件安全专家需要保持领先于不断变化的安全范式,包括系统和流程漏洞。 专注于量子黑客技术的研究象征着物理攻击平面上安全原则向新兴通信和计算技术的转化。 也许商业市场将会发展,以至于 GAO 将在不久的将来对受损的量子技术进行研究。
每个人口袋里的身份
通过智能手机保持用户安全
较新的手机以许多不同的方式和组合使用安全功能。 然而,与任何安全技术一样,不正确地使用某项功能可能会产生虚假的安全感。 因此,如今许多应用程序开发人员和服务提供商都不使用现代手机提供的任何安全身份管理设施。 对于那些属于此类阵营的人,本文旨在为您提供关于如何将硬件支持和基于生物识别的用户身份概念引入您的生态系统的想法。
将 SMS 作为第二身份验证因素的安全分析
基于 SMS 的多因素身份验证的挑战,包括蜂窝安全缺陷、SS7 漏洞利用和 SIM 卡交换
尽管基于 SMS 的身份验证令牌很受欢迎且易于使用,但它们可以说是最不安全的双因素身份验证形式之一。 然而,这并不意味着它是保护在线帐户的无效方法。 当前的安全形势与二十年前大不相同。 无论在线帐户的性质有多关键,或者拥有它的个人是谁,使用第二种形式的身份验证都应始终是默认选项,无论选择哪种方法。
Scrum 要素卡
Scrum 团队通过 Essence 改进的经验
本文介绍了一系列示例和案例研究,说明人们如何使用 Scrum 要素卡来使他们的团队受益并改进他们的工作方式。 Scrum 是在全球范围内成功使用的最流行的敏捷框架之一。 它已被教授和使用超过 15 年。 它是迄今为止开发软件时最常用的实践,并且已被推广到不仅适用于软件,还适用于各种产品。 它已根据 Scrum 指南教授给数百万开发人员。
外部数据与内部数据
保存在 SQL 外部的数据与保存在内部的数据具有不同的特征。
本文介绍了服务和信任对数据处理的影响。 它介绍了内部数据与外部数据的不同概念。 在讨论了不跨服务边界共享事务的时间影响后,本文考虑了外部数据中不变性和稳定性的必要性。 这导致将外部数据描绘为由不同服务独立生成的数据项的 DAG。
FPGA 的历史、现状和未来
现场可编程门阵列引起轰动
本文总结了作者于 2019 年 9 月在斯坦福大学举行的三个小时的讨论。 本文结合了在 Zilog、Altera、Xilinx、Achronix、Intel、IBM、Stanford、MIT、Berkeley、University of Wisconsin、the Technion、Fairchild、Bell Labs、Bigstream、Google、DIGITAL (DEC)、SUN、Nokia、SRI、Hitachi、Silicom、Maxeler Technologies、VMware、Xerox PARC、Cisco 等组织的工作经验。 这些组织对内容不负责任,但可能在某些方面启发了作者,从而形成了上述关于 FPGA 领域的精彩描述。
调试 Google 分布式系统中的事件
专家如何在复杂的分布式系统中调试生产问题
本文介绍了 2019 年对 Google 工程师如何调试生产问题进行的研究结果,包括工程师有效调试时以不同组合使用的工具类型、高级策略和低级任务。 它检查了用于捕获数据的研究方法,总结了生产调查的常见工程过程,并分享了专家如何调试复杂分布式系统的示例。 最后,本文扩展了这项研究的 Google 特性,以提供一些您可以在您的组织中应用的实用策略。
持久内存是否持久?
对故障原子更新机制的简单且廉价的测试
电源故障对应用程序数据完整性构成最严重的威胁,而痛苦的经验告诉我们,故障原子更新机制的完整性承诺不能完全相信。勤奋的开发人员和运维人员坚持通过广泛的第一手测试来确认完整性声明。本文介绍了一种简单且廉价的测试平台,能够每周对存储设备、系统软件和应用软件进行一万次突发的全系统断电测试。
黑暗模式:过去、现在和未来
欺骗性用户界面的演变
黑暗模式是对设计师手中巨大权力的滥用。随着公众对黑暗模式的认识不断提高,潜在的负面影响也在增加。记者和学者一直在仔细审查黑暗模式,而这些曝光带来的强烈反对可能会摧毁品牌声誉,并使公司受到监管机构的关注。设计就是力量。在过去的十年中,软件工程师不得不面对他们所掌握的权力伴随着对用户和社会的责任这一事实。在这个十年中,设计师也应该吸取这个教训。
揭秘稳定币
密码学与货币政策的结合
自主主权的稳定币很有趣,并且可能会长期存在;但是,它们面临来自银行、金融追踪和证券法的大量监管障碍。对于由政府货币支持的稳定币,其最终表现形式将是 CBDC。由于纸币一直在稳步下降(并且在合法交易中所占比例过高),CBDC 可以重新引入具有技术优势和高效结算的现金,同时最大限度地减少用户费用。
超越修复式循环
高绩效组织中事故后工件的使用
鉴于人类对安全社会学因素的研究已有近一个世纪的历史,技术行业的事故后分析实践以及我们如何创建和使用这些实践产生的工件仍然处于起步阶段。因此,不要惊讶于这些实践非常相似,用于剖析和理解事件和中断的认知和社会模型很少,并且固化在运营理念中,并且从事故后分析中寻求的副产品远远地侧重于补救项目和预防。
管理协调的隐性成本
当多个分布式视角至关重要时,控制协调成本
控制事件响应者的认知成本的一些初步考虑因素包括:(1)评估相对于事件认知需求的协调策略;(2)认识到适应何时代表多种竞争需求(协调和认知工作)之间的张力,并寻求更好地理解它们,而不是单方面消除它们;(3)扩大视角以研究联合认知系统(人机能力的整合)作为分析单元;以及(4)将联合活动视为在组织间和组织内边界之间实现互惠的机会。
异常响应期间的假设探索的认知工作
审视我们如何应对意外情况
来自网络软件公司的四个事件揭示了网络运营中出现异常时异常响应过程的重要方面,本文讨论了其中两个方面。详细检查的一个特定认知功能是假设生成和探索,考虑到模糊的自动化对工程师开发他们管理的系统的一致模型的影响。每个案例都使用认知系统工程的技术和概念进行分析。这组案例提供了一个窗口,了解复杂网络运营系统事件管理中“线上”的认知工作。
线上,线下
面向互联网的系统的弹性依赖于表示的线上内容。
对线下结构和功能的知识和理解不断变化。需要持续不断的努力来校准和刷新对存在于那里的工作原理、依赖关系、局限性和能力的理解。在这种动态情况下,任何个人或群体都永远无法了解系统状态。相反,个人和群体必须满足于部分、碎片化的心智模型,如果这些模型要有用,就需要或多或少地不断更新和调整。
揭示软件中人类绩效的关键作用
现在是时候重新审视我们对面向互联网的软件系统的人性化方面的认识了。
理解、支持和维持表示线以上的能力,需要所有利益相关者能够不断更新和修订他们对系统如何混乱但通常设法工作的模型。这种持续重新审视系统实际工作方式的开放性,需要扩大从事件中学习的努力。
区块链技术:它有什么用?
行业对这项新技术的梦想和担忧
企业高管、政府领导人、投资者和研究人员经常会问以下三个问题:(1)区块链技术到底是什么?(2)它提供什么能力?(3)有哪些好的应用?在这里,我们全面回答这些问题,对区块链技术进行全面的概述,将炒作与现实分开,并为未来讨论区块链技术的细节提出一个有用的词汇表。
企业应用程序的可靠性
理解企业可靠性
企业可靠性是一门学科,它确保应用程序以一致、可预测且具有成本效益的方式交付所需的业务功能,而不会损害可用性、性能和可维护性等核心方面。本文介绍了一套核心原则和工程方法,企业可以应用这些原则和方法来帮助他们在复杂的企业可靠性环境中导航,并交付高度可靠且具有成本效益的应用程序。
C++ 编译器中的优化
一次实践之旅
在向编译器提供更多信息方面需要做出权衡:这可能会使编译速度变慢。链接时优化等技术可以为您提供两全其美的优势。编译器中的优化在不断改进,即将到来的间接调用和虚函数分派方面的改进可能很快就会带来更快的多态性。
雇佣黑客
调查新兴的零售电子邮件帐户黑客服务黑市
发现按合同收费 100-400 美元的雇佣黑客服务能够产生复杂、持久且个性化的攻击,这些攻击能够通过网络钓鱼绕过 2FA。然而,对这些服务的需求似乎仅限于利基市场,可发现的服务数量很少,成功的服务数量更少,以及这些攻击者仅针对大约百万分之一的 Google 用户这一事实证明了这一点。
机器学习和人类判断混合的效果
人类与机器之间的协作不一定会带来更好的结果。
基于现有文献的理论发现,一些政策制定者和软件工程师认为,算法风险评估(如 COMPAS 软件)可以通过告知和改进有关警务、治疗和判刑的决策来缓解监禁流行和暴力犯罪的发生。综合考虑,这些发现表明,人类与机器之间的协作不一定会带来更好的结果,并且当算法出错或表现出令人担忧的偏见时,人类监督并不能充分解决问题。
传统硬件上的持久内存编程
持久内存编程风格可以显著简化应用软件。
在字节可寻址非易失性内存的推动下,持久内存编程风格将在开发人员中获得吸引力,并在管理持久应用程序状态的现有范例中占据应有的地位。在 NVM 在所有计算机上可用之前,开发人员可以使用本文中介绍的技术,在传统硬件上享受持久内存编程的好处。
软件工程中的速度
从构造板块到 F-16 战斗机
软件工程在各个行业的公司中都扮演着越来越重要的角色,但太多的软件计划最终都偏离目标并超出预算。更可靠的路径是针对速度进行优化,对实验和学习持开放态度,敏捷,并定期进行纠正。好的想法往往很丰富,但高速执行却难以捉摸。好消息是速度是可控的;公司可以系统地投资以提高速度。
开源固件
走进内核背后的世界。
开源固件可以通过使固件的行为更可见并且不太可能造成危害,从而帮助将计算带到更安全的地方。本文的目标是让读者感到有权要求供应商提供更多帮助,以推动这种改变。
软件依赖项的生存
软件重用终于到来了,但也带来了风险。
软件重用终于到来了,它的好处不应被低估,但我们在没有完全考虑潜在后果的情况下接受了这种转变。Copay 和 Equifax 的攻击清楚地警告了当今软件依赖项的消费方式中存在的实际问题。那里有很多优秀的软件。让我们共同努力,找出如何安全地重用它。
行业级知识图谱:经验和挑战
五家不同的技术公司展示了他们是如何做到的
本文着眼于五家不同技术公司的知识图谱,比较他们在构建和使用图谱方面的各自经验的异同,并讨论当今所有知识驱动型企业面临的挑战。此处讨论的知识图谱集合涵盖了广泛的应用,从搜索到产品描述再到社交网络。
垃圾回收作为合资企业
异构软件系统中回收内存的协作方法
跨组件跟踪是解决跨组件边界的引用循环问题的一种方法。只要组件可以形成任意对象图,并且 API 边界上的所有权不平凡,就会出现此问题。CCT 的增量版本在 V8 和 Blink 中实现,从而能够以安全的方式有效且高效地回收内存。
在线事件处理
在分布式事务失败的地方实现一致性
对跨异构存储技术的分布式事务的支持要么不存在,要么存在较差的运营和性能特性。相比之下,OLEP 越来越多地用于在这些设置中提供良好的性能和强大的 一致性保证。在数据系统中,日志非常常见,用作内部实现细节。OLEP 方法有所不同:它使用事件日志而不是事务,作为数据管理的主要应用程序编程模型。传统数据库仍然使用,但它们的写入来自日志,而不是直接来自应用程序。使用 OLEP 不仅仅是开发人员的实用主义,而且它还提供了许多优势。
网络中立性:区块链扩展的意外解决方案
云交付网络可以显著提高区块链的可扩展性,但云必须首先被证明是中立的。
可证明的中立云无疑是区块链扩展的可行解决方案。通过优化传输层,不仅可以从根本上扩大吞吐量,而且可以显著降低延迟。事实上,对于大多数流量而言,当今数据中心的延迟分布已经偏向微秒级时间尺度,而毫秒级时间尺度仅存在于分布的尾部。没有理由认为 BDN 存在点无法实现类似的性能。在这些 BDN 存在点之间添加专用光纤基础设施将进一步缓解吞吐量并降低延迟,从而创建先进 BDN 的骨干网。
以任何其他名称命名的身份
错综复杂的系统的复杂喧嚣
新兴的系统和协议既收紧又放松了我们对身份的概念,这很好!它们使完成工作变得更容易。REST、IoT、大数据和机器学习都围绕着故意保持灵活有时甚至含糊不清的身份概念。身份概念是我们分布式系统的基本机制的基础,包括互换性、幂等性和不变性。
实现数字永久性
维护存储信息和克服这些信息的许多挑战
当今的信息时代正在为世界所依赖的数据创造新的用途和新的管理方式。世界正在从熟悉的物理工件转向更接近其本质的信息的新表示方式。我们需要流程来确保知识的完整性和可访问性,以保证历史将被人们所知和真实。
重要的指标
每个 SRE 和产品负责人应该关心的关键但经常被忽视的服务指标
衡量您的站点可靠性指标,设定正确的目标,并努力准确衡量指标。然后,您会发现您的服务运行得更好,停机时间更少,用户采用率也更高。
区块链宇宙搭便车指南
尽管区块链的接受度越来越高,但它仍然是一个谜。
这些天很难避免听到关于区块链的消息。尽管区块链具有巨大的潜力,但也很难找到对它到底是什么的一致描述。本文着眼于区块链的基础知识:各个组件、这些组件如何组合在一起,以及可以进行哪些更改来解决区块链技术的一些问题。
拆除方法监狱!解放实践!
Essence:一种新的思维方式,有望解放实践并使真正的学习型组织成为可能
本文解释了为什么我们需要摆脱这种重复的、功能失调的行为,并介绍了 Essence,这是一种新的思维方式,有望将实践从方法监狱中解放出来,从而使真正的学习型组织成为可能。
理解公共数据上的数据库重建攻击
对统计数据库的这些攻击不再是理论上的危险。
随着计算机速度和 SAT 以及其他 NP-hard 求解器效率在过去十年中的显着提高,对统计数据库的 DRA 不再仅仅是理论上的危险。统计机构每年发布的大量数据产品可能会给有决心的攻击者提供足够的信息来重建部分或全部目标数据库,并侵犯数百万人的隐私。传统的披露避免技术并非旨在防范此类攻击。
“Hello, World!” 基准测试
“Hello, World!” 执行的六种不同视图显示了当今工具中经常缺少的内容
随着越来越多的软件从桌面转移到数据中心,越来越多的手机使用服务器请求作为应用程序的另一半,大规模分布式事务系统的观察工具并没有跟上步伐。这使得使用更简单的工具在路灯下寻找变得很有诱惑力。当您突然遇到复杂的性能危机时,您将浪费大量高压时间来走这条路。
使用 Bazel 的远程缓存服务
通过共享和重用构建和测试输出节省时间
远程缓存服务是一项新的发展,可显著节省运行构建和测试的时间。它对于大型代码库和任何规模的开发团队特别有用。Bazel 是一个积极开发的开源构建和测试系统,旨在提高软件开发的生产力。它有越来越多的优化措施来提高日常开发任务的性能。
为什么 SRE 文档很重要
文档如何使 SRE 团队能够管理新的和现有的服务
SRE(站点可靠性工程)是一种职位职能、一种思维方式以及一套工程方法,用于使 Web 产品和服务可靠地运行。SRE 在软件开发和系统工程的交叉点运作,以解决运营问题并设计解决方案,以可扩展、可靠和高效的方式设计、构建和运行大规模分布式系统。成熟的 SRE 团队很可能拥有与许多 SRE 功能相关的明确定义的文档体系。
如何在后 Meltdown 和 Spectre 时代生存
从过去中学习,为下一场战斗做好准备。
Spectre 和 Meltdown 创造了一个风险形势,其中问题多于答案。本文介绍了这些漏洞在宣布时是如何进行分类的,以及可用的实际防御措施。最终,这些漏洞呈现出一组独特的情况,但对于高盛的漏洞管理计划而言,响应只是办公室的又一天。
跟踪和控制微服务依赖项
依赖项管理是系统和软件设计的关键部分。
如果您曾经将钥匙锁在房屋或汽车内,您就会熟悉依赖项循环。没有钥匙您就无法打开锁,但没有打开锁您就无法拿到钥匙。有些循环是显而易见的,但更复杂的依赖项循环可能很难在它们导致中断之前找到。跟踪和控制依赖项的策略对于维护可靠的系统是必要的。
从公司到云:Google 的虚拟桌面
Google 如何将其虚拟桌面迁移到云端
超过四分之一的 Google 员工使用内部数据中心托管的虚拟桌面。这种本地产品位于公司网络中,允许用户开发代码、访问内部资源以及从世界任何地方远程使用 GUI 工具。在其最显著的功能中,虚拟桌面实例可以根据手头的任务调整大小,具有持久的用户存储,并且可以在公司数据中心之间移动以跟随旅行的 Google 员工。直到最近,我们的虚拟桌面都托管在使用名为 Ganeti 的自研开源虚拟集群管理系统的 Google 公司网络中的商用硬件上。今天,这项重要且对 Google 至关重要的工作负载在 GCP(Google Compute Platform)上运行。
模型可解释性的神话
在机器学习中,可解释性的概念既重要又难以捉摸。
监督机器学习模型拥有卓越的预测能力。但是你能信任你的模型吗?它能在部署中工作吗?它还能告诉你关于世界的什么?
注意您的状态,为了您的心境
存储和应用程序之间的交互可能既复杂又微妙。
随着应用程序进入分布式和可扩展的世界,它们经历了有趣的演变。同样,存储及其近亲数据库也与应用程序并肩发展。很多时候,存储和应用程序的语义、性能和故障模型都在微妙地跳舞,因为它们会随着不断变化的业务需求和环境挑战而变化。向混合中添加规模确实激起了波澜。本文着眼于其中的一些问题及其对系统的影响。
工作负载频率缩放定律 - 推导和验证
工作负载可扩展性通过缩放因子具有级联关系。
本文介绍了与每个 DVFS 子系统级别的工作负载利用率缩放相关的公式。建立了频率、利用率和缩放因子(其本身随频率变化)之间的关系。事实证明,验证这些公式非常棘手,因为工作负载固有的利用率在治理样本的粒度上也以看似未指定的方式变化。因此,应用了一种称为直方图脊线跟踪的新方法。在将 DVFS 视为构建块时,量化缩放影响至关重要。典型应用包括 DVFS 调速器和/或其他影响系统利用率、功耗和性能的层。
现代存储系统背后的算法
针对读取优化的 B 树和针对写入优化的 LSM 树的不同用途
本文更仔细地研究了大多数现代数据库中使用的两种存储系统设计方法(针对读取优化的 B 树和针对写入优化的 LSM(日志结构合并)树),并描述了它们的用例和权衡取舍。
C 不是低级语言
您的计算机不是快速的 PDP-11。
在最近的 Meltdown 和 Spectre 漏洞之后,值得花一些时间来研究根本原因。这两种漏洞都涉及处理器推测性地执行超出某种访问检查的指令,并允许攻击者通过侧信道观察结果。导致这些漏洞以及其他几个漏洞的功能被添加,是为了让 C 程序员继续相信他们正在使用低级语言进行编程,但这在几十年内一直不是这种情况。
汝勿依赖于我
深入了解野外的 JavaScript 库
大多数网站都使用 JavaScript 库,其中许多库已知存在漏洞。了解问题的范围以及包含库的许多意外方式,只是改进情况的第一步。这里的目标是本文中包含的信息将有助于为社区提供更好的工具、开发实践和教育工作。
为互联网规模服务设计集群调度器
拥抱失败以提高可用性
希望构建调度系统的工程师应考虑他们使用的底层基础设施的所有故障模式,并考虑调度系统的运营商如何在排除租户系统所有者故障期间配置补救策略,同时帮助保持租户系统尽可能稳定。
Canary 分析服务
自动化 Canarying 加快了开发速度,提高了生产安全性,并有助于防止中断。
期望从事产品开发或可靠性的工程师具备统计知识是不合理的;消除这个障碍导致了 CAS 的广泛采用。CAS 已被证明即使对于不需要配置的基本案例也很有用,并且显著提高了 Google 的推广可靠性。影响分析表明,CAS 可能已经阻止了数百起值得事后分析的中断,并且不使用 CAS 的组的事后分析率明显更高。
持续交付听起来很棒,但它在这里会奏效吗?
这不是魔法,它只是需要在各个层面持续、每天改进。
持续交付是一组旨在使部署成为可预测的、例行事务的原则、模式和实践,这些事务可以随时按需执行。本文介绍了持续交付,提出了实施持续交付的常见异议和实际障碍,并描述了如何使用真实案例克服这些障碍。持续交付不是魔法。它关乎组织各个层面的持续、每日改进。
容器不会修复您破碎的文化(以及其他残酷的真相)
复杂的社会技术系统很难;11 点播出。
我们经常关注技术反模式,而忽略了我们社会结构内部的类似问题。剧透警告:似乎是技术性的许多难题的解决方案可以通过检查我们与他人的互动来找到。让我们来谈谈您在与那些被称为人类的讨厌生物打交道时想要了解的五件事。
DevOps 指标
您最大的错误可能是收集了错误的数据。
通过软件为业务交付价值需要流程和协调,这些流程和协调通常跨越复杂系统中的多个团队,并且涉及开发和交付具有质量和弹性的软件。作为从业者和专业人士,我们知道软件开发和交付是一门越来越困难的艺术和实践,并且管理和改进任何流程或系统都需要深入了解该系统。因此,衡量对于创建有效的软件价值流至关重要。然而,准确的衡量绝非易事。
DevOps 世界中的监控
完美永远不应该是更好的敌人。
监控似乎非常令人不知所措。最重要的事情要记住,完美永远不应该是更好的敌人。DevOps 使组织内部能够进行高度迭代的改进。如果您没有任何监控,请获取一些;获取任何东西。有总比没有好,如果您已经接受了 DevOps,您已经注册了随着时间的推移使其变得更好。
比特币的潜在激励机制
控制比特币协议的看不见的经济力量
激励机制对于比特币协议的安全至关重要,并有效地驱动其日常运行。矿工竭尽全力最大化他们的收入,并且经常找到创造性的方法来做到这一点,这些方法有时与协议不一致。加密货币协议应建立在更强大的激励基础上。还有许多领域有待改进,从挖矿奖励的最基本方面以及它们如何与共识机制交互,到矿池中的奖励,一直到交易费用市场本身。
Titus:将容器引入 Netflix 云
在已经是云原生基础设施中采用容器的方法
我们相信我们的方法使 Netflix 能够快速采用容器并从中受益。虽然细节可能是 Netflix 特有的,但通过与现有基础设施集成并与合适的早期采用者合作来提供低摩擦容器采用的方法对于任何希望采用容器的组织来说都是一种成功的策略。
将天才从故障测试中抽象出来
普通用户需要工具来自动化选择定制的故障注入。
本文提出了分布式系统研究界改进容错测试技术的呼吁。普通用户需要工具来自动化选择定制的故障注入。我们推测,超级用户选择实验的过程可以在软件中有效地建模。本文描述了一个验证该推测的原型,介绍了来自实验室和现场的早期结果,并确定了可以使这一愿景成为现实的新研究方向。
网络应用程序是交互式的
网络时代需要新模型,用交互代替算法。
设备的微型化以及这些设备通过高速无线网络的广泛互连正在彻底改变商业的运作方式。这些变化(又名数字化)将深刻改变企业的运营方式。软件是这个数字世界的中心,但软件工具集和语言是为主机时代构思的。已经困扰软件实践的问题(例如高缺陷、软件生产力低下、信息漏洞、软件项目成功率低下等)在这种方法下将更加严重。现在是时候让软件变得更简单、更安全、更可靠了。
尽可能地缓存我
构建去中心化的网络交付模型
世界比以往任何时候都更加互联互通,随着我们口袋里的超级计算机和物联网(IoT)未来的发展,下一代网络可能以点对点模型交付。这是一个巨大的问题领域,但必要的工具和技术在今天已经存在。我们只需要更好地定义问题。
比特币的学术渊源
加密货币的概念建立在研究文献中被遗忘的思想之上。
我们已经反复看到,研究文献中的思想可能会逐渐被遗忘或不被赏识,特别是如果它们超前于时代,即使在流行的研究领域也是如此。从业者和学者都应该重新审视旧的思想,以便为当前的系统汲取见解。比特币的与众不同和成功之处,不在于它处于任何组件研究的前沿,而在于它结合了许多以前不相关领域的旧思想。这并非易事,因为它需要弥合不同的术语、假设等等,但它是创新的宝贵蓝图。
我们计算所用的隐喻
代码是一个解释如何解决特定问题的故事。
程序员必须能够用他们的代码讲述一个故事,解释他们如何解决一个特定的问题。像作家一样,程序员必须了解他们的隐喻。许多隐喻都能够解释一个概念,但你必须有足够的技巧来选择正确的隐喻,以便将你的想法传达给未来将阅读代码的程序员。因此,你不能使用你所知道的每一个隐喻。你必须掌握隐喻选择的艺术,意义放大的艺术。你必须知道何时添加,何时删减。你将学会像作家一样修改和重写代码。一旦没有什么可以添加或删除,你就完成了你的工作。
物联网是否存在单一方法?
Essence 可以防止物联网的软件开发变得难以控制。
工业互联网联盟预测,物联网(Internet of Things)将成为继工业革命和互联网革命之后的第三次技术革命。它对所有行业和业务的影响几乎无法想象。现有的软件(商业、电信、航空航天、国防等)预计将被修改或重新设计,并且必须开发大量解决新问题的新软件。因此,软件行业应该欢迎新的和更好的方法。
数据草图
近似方法通常更快更有效。
你是否曾感到被源源不断的信息淹没? 似乎新邮件和短信的狂轰滥炸需要持续关注,还有电话要接听,文章要阅读,以及敲门声要回应。 将这些碎片拼凑在一起以跟踪重要的信息可能是一个真正的挑战。 为了应对这一挑战,流数据处理模型越来越受欢迎。 目标不再是捕获、存储和索引每一个细微的事件,而是快速处理每个观察结果,以便创建当前状态的摘要。
服务可用性的微积分
你的可用性仅与你的依赖项的总和一样高。
谷歌提供的大多数服务旨在为用户提供 99.99%(有时称为“四个 9”)的可用性。 一些服务在合同中对外承诺较低的数字,但在内部设定 99.99% 的目标。 这种更严格的目标考虑了用户在合同违规发生之前很久就对服务性能感到不满的情况,因为 SRE 团队的首要目标是让用户满意。 对于许多服务,99.99% 的内部目标代表了平衡成本、复杂性和可用性的最佳点。
IDAR 图
UML 的改进
UML 是表示面向对象设计的 фактический 标准。 它在记录设计方面做得很好,但它有一个严重的问题:它的图表无法传达人类需要知道的内容,使得它们难以理解。 这就是为什么大多数软件开发人员仅在被迫时才使用 UML。 人们从控制层级的角度理解组织,例如公司。 当面对人员或对象的组织时,通常第一个问题是:“谁在控制这一切?” 令人惊讶的是,UML 没有一个对象控制另一个对象的概念。 因此,在每种类型的 UML 图表中,似乎没有哪个对象比其邻居具有更大或更小的控制权。
大到不能倒
拥抱失败,以免它拥抱你。
Web 规模的基础设施意味着大量服务器协同工作,通常是成千上万台服务器都朝着同一个目标努力。 如何管理这些环境的复杂性? 如何引入通用性和简洁性?
调试心态
理解学习策略的心理学有助于培养有效的问题解决能力。
软件开发人员将 35-50% 的时间用于验证和调试软件。 调试、测试和验证的成本估计占软件开发项目总预算的 50-75%,每年超过 1000 亿美元。 虽然工具、语言和环境减少了个人调试任务花费的时间,但它们并没有显着减少调试的总时间,也没有减少调试的成本。 因此,在开发过程中过分关注消除错误是适得其反的; 程序员应该将调试视为解决问题的练习来拥抱它。
MongoDB 的 JavaScript Fuzzer
fuzzer 用于那些你的测试没有捕捉到的边缘情况。
随着 MongoDB 随着时间的推移变得更加功能丰富和复杂,开发更复杂的方法来查找错误的需求也在增长。 三年前,MongDB 将一个自研的 JavaScript fuzzer 添加到其工具包中,它现在是我们最多产的错误查找工具,在两个发布周期中负责检测到近 200 个错误。 这些错误跨越了从分片到存储引擎的各种 MongoDB 组件,症状从死锁到数据不一致。 fuzzer 作为 CI(持续集成)系统的一部分运行,它经常在新提交的代码中捕获错误。
用数学赚钱
现代应用程序越来越多地使用概率机器学习模型。
人类编写的代码和学习模型之间的一个主要区别是,后者通常不是用文本表示的,因此人类开发人员无法理解,现有工具也无法操作。 结果是,传统的软件工程技术(如代码审查、源代码控制和调试)不再适用。 由于不可理解性并非学习代码所独有,因此这里不关注这些方面。
物理物品的普适、动态身份验证
硅 PUF 电路的使用
物理物品的身份验证是一个古老的问题。 常见的方法包括使用条形码、二维码、全息图和 RFID(射频识别)标签。 传统的 RFID 标签和条形码使用公共标识符作为身份验证的手段。 然而,公共标识符是静态的:每次查询时都相同,并且很容易被攻击者复制。 全息图也可以被视为公共标识符:知识渊博的验证者知道所有要目视检查的属性。 很难使基于全息图的身份验证普及; 随意的验证者不知道所有要查找的属性。
未初始化的读取
理解 C 语言的拟议修订
大多数开发人员都理解在 C 语言中读取未初始化的变量是一个缺陷,但有些人仍然这样做。 在当前版本的 C 标准 (C11) 中,读取未初始化的对象时会发生什么尚不确定。3 已经提出了各种提案来解决计划中的 C2X 标准修订中的这些问题。 因此,现在是了解现有行为以及拟议的标准修订以影响 C 语言发展的好时机。 鉴于未初始化读取的行为在 C11 中尚不确定,谨慎的做法是从代码中消除未初始化的读取。
异构计算:将长期存在
硬件和软件视角
在过去几年中,对流行语异构计算的提及一直在增加,并且在未来几年将继续听到,因为异构计算将长期存在。 什么是异构计算?为什么它正在成为常态? 我们如何从软件方面和硬件方面来处理它? 本文提供了对其中一些问题的答案,并提出了对其他问题的不同观点。
时间,但更快
关于时间的计算冒险之旅,透过镜子
第一个前提被已故的道格拉斯·亚当斯在《银河系漫游指南》中完美地概括出来:“时间是一种幻觉。午餐时间尤其如此。” 当时间与每秒运行数十亿次操作的解耦计算机网络碰撞时,时间的概念是……嗯,事实是,你根本永远不知道现在几点了。 这就是为什么莱斯利·兰波特的关于兰波特时间戳的开创性论文对该行业如此重要,但本文实际上是关于挂钟时间,或对其的合理有用估计。
分布式事务之外的生活
一位叛教者的观点
本文探讨并命名了在拒绝分布式事务的世界中,用于实现大规模关键任务应用程序的一些实用方法。 主题包括对细粒度的应用程序数据进行管理,这些数据可能会随着应用程序的增长而随时间重新分区。 设计模式支持在这些可重新分区的数据片段之间发送消息。
BBR:基于拥塞的拥塞控制
测量瓶颈带宽和往返传播时间
当瓶颈缓冲区很大时,基于丢包的拥塞控制会使其保持满状态,从而导致缓冲区膨胀。 当瓶颈缓冲区很小时,基于丢包的拥塞控制会将丢包误解为拥塞信号,从而导致吞吐量低。 解决这些问题需要一种替代基于丢包的拥塞控制的方法。 找到这种替代方案需要理解网络拥塞的起源地点和方式。
Faucet:在企业中部署 SDN
使用 OpenFlow 和 DevOps 进行快速开发
虽然 SDN 作为一种技术不断发展并变得更具可编程性,但 Faucet 和 OpenFlow 1.3 硬件的结合足以在今天实现收益。 本文具体描述了如何利用 DevOps 实践来快速开发和部署功能。 它还描述了几个实际的部署场景,包括防火墙和网络功能虚拟化。
工业规模的敏捷开发 - 从工艺到工程
Essence 在推动软件开发走向真正的工程学科方面发挥着重要作用。
有很多很多方法可以说明 IT 投资有多么脆弱。 你只需要看看,即使在教育和指导方面进行了巨额投资之后,许多组织仍在努力将其敏捷采用扩展到整个组织 - 或者其他组织正在努力维持其敏捷采用的势头,因为他们的团队发生变化并且他们的系统成熟。
大规模函数式
将函数式编程原则应用于分布式计算项目
现代服务器软件在开发和运行方面要求很高:它必须随时随地可用; 它必须在毫秒内回复用户请求; 它必须快速响应容量需求; 它必须处理大量数据甚至更多流量; 它必须快速适应不断变化的产品需求; 在许多情况下,它必须容纳一个庞大的工程组织,其众多工程师就像一个又大又乱的厨房里的谚语厨师。
在多核程序中扩展同步
高级同步方法可以提高多核软件的性能。
为现代多核处理器设计软件提出了一个难题。 传统的软件设计,其中线程操作共享数据,具有有限的可扩展性,因为对共享数据更新的同步会串行化线程并限制并行性。 替代的分布式软件设计,其中线程不共享可变数据,消除了同步并提供了更好的可扩展性。 但是,分布式设计使得实现共享数据结构自然提供的功能(例如动态负载均衡和强一致性保证)具有挑战性,并且根本不适合每个程序。 然而,通常,共享可变数据结构的性能受到当今使用的同步方法的限制,无论是基于锁的还是无锁的。
空闲时间垃圾回收调度
利用空闲时间来减少丢帧和内存消耗
谷歌的 Chrome 网络浏览器力求提供流畅的用户体验。 动画将以 60 FPS(每秒帧数)更新屏幕,为 Chrome 提供大约 16.6 毫秒的时间来执行更新。 在这 16.6 毫秒内,必须处理所有输入事件,必须执行所有动画,最后必须渲染帧。 错过截止日期将导致丢帧。 这些对用户可见并降低用户体验。 此处将此类零星的动画伪影称为卡顿。 本文介绍了 Chrome 使用的 JavaScript 引擎 V8 中实现的一种方法,用于在 Chrome 空闲时安排垃圾回收暂停。
变化的动态:为什么反应性很重要
通过将每个关注点集中在自己的模块中来驯服变化的动态。
专业编程是关于大规模处理软件。 当问题很小且受限时,一切都很简单:可以使用命令式编程或函数式编程或任何其他范例优雅地解决它。 当程序员必须处理大量数据、网络请求或交织的实体(如 UI(用户界面)编程)时,真正的世界挑战就会出现。
使用容器对容器进行集群级日志记录
基于容器的云部署的日志记录挑战
本文展示了如何使用开源工具实现集群级日志记录基础设施,并使用与用于组合和管理正在记录的软件系统相同的抽象来部署它。 收集和分析日志信息是运行生产系统以确保其可靠性并提供重要审计信息的必要方面。 已经开发了许多工具来帮助聚合和收集特定软件组件(例如,Apache Web 服务器)在特定服务器(例如,Fluentd 和 Logstash)上运行的日志(例如,Fluentd 和 Logstash)。
微服务的隐藏红利
微服务并非适合所有公司,而且旅程并非易事。
微服务是一种构建分布式系统的方法,其中服务仅通过强化的 API 公开; 服务本身围绕特定且界限明确的上下文或责任领域具有高度的内部内聚性,并且它们之间的耦合是松散的。 这样的服务通常很简单,但它们可以组合成非常丰富和精细的应用程序。 采用基于微服务的方法所需的工作量相当大,特别是在涉及从更单体架构迁移的情况下。 然而,微服务的显式优势是众所周知的且数量众多,并且可以包括提高敏捷性、弹性、可扩展性和开发人员生产力。
调试分布式系统
验证和调试的挑战和选项
分布式系统为软件开发人员带来了独特的挑战。 推理系统节点的并发活动,甚至理解系统的通信拓扑都可能很困难。 获得对系统活动洞察力的标准方法是分析系统日志。 不幸的是,这可能是一个乏味而复杂的过程。 本文着眼于区分分布式系统与其他类型软件的几个关键特性和调试挑战。 本文介绍了几种有希望的工具和正在进行的研究,以帮助解决这些挑战。
你应该上传还是将大数据运送到云端?
被接受的智慧并不总是成立。
人们普遍认为,当您希望移动到云端的数据达到太字节级及以上规模时,最好将其运送到云提供商,而不是上传。 本文从分析的角度考察了运输和上传策略的比较、它们所依赖的各种因素,以及在什么情况下您最好运输而不是上传数据,反之亦然。 鉴于千兆位速度互联网连接的日益普及,以及 SAS 和 PCI Express 等较新版本的驱动器接口支持的数据传输速度的爆炸性增长,这种分析性的确定非常重要。
火焰图
这种软件执行可视化是性能分析和调试的新必需品。
我们行业中每天都会遇到的一个问题是了解软件如何消耗资源,尤其是 CPU。 究竟是什么在消耗多少,自上次软件版本以来这发生了什么变化? 这些问题可以使用软件分析器来回答,这些工具可以帮助指导开发人员优化他们的代码和操作员调整他们的环境。 然而,分析器的输出可能很冗长,使得学习和理解起来很费力。 火焰图为分析器输出提供了一种新的可视化,可以实现更快的理解,从而减少根本原因分析的时间。
为什么逻辑时钟很容易
有时你需要的只是正确的语言。
任何计算系统都可以描述为执行一系列动作,其中动作是系统中状态的任何相关变化。 例如,将文件读取到内存,修改内存中文件的内容,或将新内容写入文件是文本编辑器的相关操作。 在分布式系统中,动作在多个位置执行; 在这种情况下,动作通常称为事件。 分布式系统中的事件示例包括发送或接收消息,或更改节点中的某些状态。 并非所有事件都相关,但有些事件可能会导致和影响其他后续事件的发生方式。
用例 2.0
软件开发的中心
用例作为一种需求方法已经存在了近 30 年,并且一直是用户故事等较新技术的灵感来源。 现在灵感已经朝另一个方向飞去。 用例 2.0 是新一代的用例驱动开发——轻量级、敏捷和精益——灵感来自用户故事和敏捷方法 Scrum 和 Kanban。
工程师统计学
将统计技术应用于运营数据
现代 IT 系统收集来自网络设备、操作系统、应用程序和其他组件的越来越多的数据财富。 需要分析这些数据以得出关于用户体验和业务绩效的重要信息。 例如,需要检测故障,需要测量服务质量,并且需要预测未来几天和几个月的资源使用情况。
Borg、Omega 和 Kubernetes
从十年来的三个容器管理系统中学到的教训
虽然对软件容器的广泛兴趣是一个相对较新的现象,但在谷歌,我们管理 Linux 容器已经超过十年,并在此期间构建了三个不同的容器管理系统。 即使每个系统都是为不同的原因开发的,但它们都深受其前辈的影响。 本文描述了我们从开发和运营它们中学到的教训。
分布式系统的验证
提高系统正确性信心的实践指南
莱斯利·兰波特以其在分布式系统方面的开创性工作而闻名,他曾说过一句名言:“分布式系统是指即使你不知道存在的计算机的故障也可能导致你自己的计算机无法使用的系统。” 鉴于这种黯淡的前景和大量可能的故障,你如何开始验证和确认你构建的分布式系统正在做正确的事情?
算法决策中的责任制
来自计算新闻学的视角
每个财政季度,自动化写作算法都会为美联社(Associated Press)批量生成数千篇公司盈利文章,而这些文章仅仅基于结构化数据。 为美联社制作文章的 Automated Insights 和 Narrative Science 等公司现在几乎可以在任何具有干净且结构良好的数据的领域编写直接的新闻文章:金融,当然,还有体育、天气和教育等。 这些文章也不是纸板; 它们具有可变性、基调和风格,在某些情况下,读者甚至难以区分机器生成的文章和人工编写的文章。
不变性改变一切
我们需要它,我们负担得起它,现在是时候了。
存储和发送不可变数据是一种不可阻挡的趋势。 我们需要不变性来远程协调,并且随着存储变得更便宜,我们可以负担得起不变性。 本文是一道开胃小菜,采样了利用不变性的重复计算模式。 在计算堆栈中上下攀爬确实会产生似曾相识的感觉。
时间是一种幻觉。
午餐时间尤其如此。 - 福特·普里弗克特在道格拉斯·亚当斯的《银河系漫游指南》中对亚瑟·登特说
关于数字系统——尤其是现代计算机——更令人惊讶的事情之一是它们在时间方面表现有多么糟糕。 当大多数程序在单个系统上运行时,这对大多数软件开发人员来说并不是一个重要的问题,但是一旦软件进入分布式系统领域,这种不准确性就变成了一个重大的挑战。
非易失性存储
数据中心转移中心的影响
对于大多数执业计算机科学家的整个职业生涯来说,一个基本的观察结果始终成立:CPU 的性能和成本都显着高于 I/O 设备。 CPU 可以极高的速率处理数据,同时为多个 I/O 设备提供服务,这一事实对各种规模系统的硬件和软件设计产生了广泛的影响,几乎只要我们一直在构建它们。
Schema.org:Web 上结构化数据的演进
大数据使通用模式更加必要。
内容和表示的分离一直是 Web 的重要设计方面之一。 然而,从历史上看,即使大多数网站都是由结构化数据库驱动的,但它们也纯粹以 HTML 格式发布其内容。 Web 搜索、价格比较、预订引擎等在此内容上运行的服务只能访问 HTML。 需要访问这些网页底层结构化数据的应用程序必须构建自定义提取器,以将纯 HTML 转换为结构化数据。 这些工作通常很费力,并且抓取器很脆弱且容易出错,每次站点更改其布局时都会崩溃。
专用全球网络:谷歌转向 SDN
与 Amin Vahdat、David Clark 和 Jennifer Rexford 的讨论
当然,关于谷歌的一切都是大规模的——传奇般的市值、无与伦比的人才库、足以让律师大军一生穿着古驰的知识产权,哦,对了,还有一个比你可能想象的更大的私人 WAN(广域网),而且它的增长速度也明显快于整个互联网。
它可能有效
概率算法无处不在——它们不仅可以接受,而且一些程序员实际上还在寻找使用它们的机会。
概率算法的存在是为了解决那些不可能或不现实(太昂贵、太耗时等)精确解决的问题。 在理想的世界中,你实际上永远不需要使用概率算法。 对于不熟悉它们的程序员来说,这个想法可能会让人感到紧张不安:“我怎么知道它真的会起作用? 如果它莫名其妙地错了怎么办? 我该如何调试它? 也许我们应该放弃这个问题,或者购买更多服务器……”
现代 NUMA 系统上内存管理的挑战
使用 Carrefour 优化 NUMA 系统应用程序
现代服务器级系统通常构建为在单个系统中组合在一起的多个多核芯片。 每个芯片都有一个本地 DRAM(动态随机存取存储器)模块; 它们一起被称为节点。 节点通过高速互连连接,系统完全一致。 这意味着,对程序员透明地,内核可以向其节点的本地内存以及其他节点的内存发出请求。 关键的区别在于远程请求将花费更长的时间,因为它们会受到更长的线路延迟的影响,并且可能必须跳转多个跃点才能遍历互连。
组件化 Web
我们可能正处于 Web 开发新革命的风口浪尖。
今天在软件工程中,没有哪项任务能像 Web 开发那样艰巨。 Web 应用程序的典型规范可能如下所示:该应用程序必须在各种浏览器中工作。 它必须以 60 fps 运行动画。 它必须立即响应触摸。 它必须符合一组特定的设计原则和规范。 它必须在几乎所有可以想象的屏幕尺寸上工作,从电视和 30 英寸显示器到手机和手表表面。 它必须在长期内得到良好的工程设计和可维护性。
大规模失败
在快速变化面前的可靠性
失败是工程设计任何大规模系统的一部分。 Facebook 的文化价值观之一是拥抱失败。 这可以在我们门洛帕克总部墙壁周围张贴的海报中看到:“如果你不害怕,你会做什么?” 和“财富青睐勇者。”
如何去识别你的数据
在大规模社会科学数据集中平衡统计准确性和受试者隐私
大数据风靡一时; 使用大型数据集有望为我们提供对过去难以或不可能回答的问题的新见解。 在医学和社会科学等领域尤其如此,在这些领域中,可以收集和挖掘大量数据,以找到变量之间有见地的关系。 然而,这些领域的数据涉及人类,因此会引发物理学或天文学等领域不会面临的隐私问题。
崩溃一致性
重新思考文件系统的基本抽象
数据的读取和写入是任何冯·诺依曼计算机最基本的方面之一,出人意料地微妙且充满细微差别。 例如,考虑在具有多个处理器的系统中访问共享内存。 虽然一种称为强一致性的简单直观方法最容易让程序员理解,但许多较弱的模型被广泛使用(例如,x86 总存储顺序); 这种方法提高了系统性能,但代价是使关于系统行为的推理更加复杂且容易出错。
测试分布式系统
即使在最佳情况下,测试分布式系统也可能很棘手。
由于多种原因,分布式系统可能特别难以编程。 它们可能难以设计,难以管理,而且最重要的是,难以测试。 即使在最佳情况下,测试普通系统也可能很棘手,而且无论测试人员多么勤奋,错误仍然可能通过。 现在,将所有标准问题乘以在可能都在不同操作系统上的多个框上以多种语言编写的多个进程,并且有可能发生真正的灾难。
人工智能和人机交互交叉点的自然语言翻译
用人工智能和人机交互回答旧问题
人工智能 (AI) 和人机交互 (HCI) 领域正在以前所未有的方式相互影响。 广泛使用的系统(如 Google 翻译、Facebook Graph Search 和 RelateIQ)将大规模 AI 系统的复杂性隐藏在直观的界面背后。 但关系并非总是如此吉祥。 这两个领域出现在计算机科学史上的不同时期,具有不同的影响、雄心和随之而来的偏见。 人工智能旨在构建人类智力的竞争对手,甚至可能是继任者。 早期的人工智能研究人员,如麦卡锡、明斯基和香农,都是数学家出身,因此定理证明和形式模型是有吸引力的研究方向。
超越页面对象:使用状态对象测试 Web 应用程序
使用状态驱动你的测试
Web 应用程序的端到端测试通常涉及通过 Selenium WebDriver 等框架与网页进行棘手的交互。 隐藏此类网页复杂性的推荐方法是使用页面对象,但首先要回答一些问题:在测试 Web 应用程序时应该创建哪些页面对象? 你应该在页面对象中包含哪些操作? 给定你的页面对象,你应该指定哪些测试场景?
消除准入壁垒
我们必须选择构建一个每个人都可以访问的网络。
一场战争正在 Web 开发世界中进行。 一方面是工具制造者和工具用户的先锋,他们以破坏糟糕的旧思想(在这个环境中,“旧”是指一个月前在 Hacker News 上首次亮相的任何东西)以及关于转译器等等的喧闹辩论而蓬勃发展。
Hadoop 超线性可扩展性
并行性能的永动机
我们经常看到超过 100% 的加速效率!这是对“你不可能拥有超过 100% 的任何东西”这一善意提醒的反驳。但这只是软件工程师在一次关于如何用加速指标量化计算机系统可扩展性的演示中所发出的第一声挑战。在随后的不同场合中,这种反驳似乎演变成了一种名副其实的合唱,他们不仅认为超线性加速是常见的现象,而且过去 20 年来用于量化可扩展性的模型在应用于超线性加速数据时也失效了。
演进与实践:金融领域的低延迟分布式应用
金融行业对低延迟分布式系统有着独特的需求。
实际上,所有系统都对延迟有一些要求,这里延迟定义为系统响应输入所需的时间。延迟需求出现在各种不同的问题领域,如飞机飞行控制、语音通信、多人游戏、在线广告和科学实验。分布式系统提出了特殊的延迟考虑因素。近年来,金融交易的自动化推动了对具有挑战性延迟需求和全球地理分布的分布式系统的需求。自动化交易为不断缩小的延迟需求的工程挑战提供了一个窗口,这可能对其他领域的软件工程师有所帮助。
数据科学管理科学
管理数据科学研究团队的经验教训
他们整天都在做什么?当我第一次接手一家从事数据挖掘和机器学习研究的初创公司担任工程副总裁时,这就是其他高管想知道的。他们知道团队非常聪明,而且他们看起来工作非常努力,但高管们对工作本身有很多疑问。他们如何知道他们正在做的工作是“正确”的工作?他们是否可以做其他项目来代替?我们如何才能更快地将这项研究成果交付给客户?
使用免费和开源工具来管理软件质量
敏捷流程的实现
敏捷软件开发的原则更强调个人和互动,而不是流程和工具。它们引导我们远离繁重的文档要求,并引导我们走上一条有效应对变化而不是僵化地坚持预定义计划的道路。为了支持这种灵活的运营方式,拥有合适的应用程序来管理团队的活动非常重要。实施有效的框架以确保质量在早期和所有级别都融入到产品中也至关重要。
从 EDVAC 到 WEBVAC
面向计算机科学家的云计算
到现在,每个人都听说过云计算,并且意识到它正在改变传统企业 IT 和新兴初创公司构建未来解决方案的方式。这种向云端发展的趋势仅仅是硬件和软件行业复杂经济学的一次转变,还是对计算方式的根本性不同思考?在行业工作过之后,我可以自信地说两者都是。
使用副作用增强 Dart 的活力
Dart 编程语言的一组扩展,旨在支持异步和生成器函数
Dart 编程语言最近合并了一组扩展,旨在支持异步和生成器函数。由于 Dart 是一种用于 Web 编程的语言,因此延迟是一个重要的考虑因素。为了避免阻塞,当计算结果需要相当长的时间时,开发人员必须使方法异步。生成器函数简化了计算可迭代序列的任务。
遍布全球的可靠 Cron
...或者我是如何不再担心并学会热爱时间的
本文介绍了 Google 分布式 Cron 服务的实现,该服务为绝大多数需要定期调度计算任务的内部团队提供服务。在其存在期间,我们吸取了许多关于如何设计和实现看似基本服务的经验教训。在此,我们讨论了分布式 Cron 面临的问题,并概述了一些潜在的解决方案。
没有“现在”
分布式系统中同时性的问题
现在。“我写下这个词”和“你读到这个词”之间经过的时间至少有几周。这种延迟是我们理所当然的,甚至在书面媒体中都不会考虑的。“现在。” 如果我们身处同一个房间,而我大声说出来,你可能会有更强烈的即时感。你可能会直觉地觉得你听到的这个词与我说出这个词的时间完全相同。这种直觉是错误的。如果,你不相信你的直觉,而是思考声音的物理学,你就会知道我的说话和你的听觉之间必然经过了一段时间。
使用 Promise 的并行处理
编写协作系统的简单方法
在当今世界,有很多理由编写并发软件。提高性能和增加吞吐量的愿望导致了许多不同的异步技术。然而,所涉及的技术通常很复杂,并且是许多微妙错误的根源,特别是当它们需要共享可变状态时。如果不需要共享状态,那么这些问题可以通过一个更好的抽象概念 Promise 来解决。这些概念允许程序员将异步函数调用连接在一起,等待每个函数返回成功或失败,然后再运行链中的下一个适当的函数。
META II:数字书写室中的数字羊皮纸
重温 Schorre 1962 年的编译器-编译器
有些人从事活态历史——通过重演滑铁卢战役或敲击燧石刀来复兴旧的技能和物质文化。在 2012 年一个宜人的雨天周末,我将目光投向了更近的时代,并沉浸在 1962 年左右的冥想式复古计算中,遵循古老的知识传播模式:讲座和背诵——或者更确切地说,生活在历史时代的恩典,讲座(此处为法语意义上的阅读)和转录(甚至更具体地说,后-后时代的恩典,讲座和重新实现)。
基于模型的测试:它的现状如何?
即使基于模型的测试 (MBT) 仅部分满足高期望,它也能对效率和有效性产生积极影响。
您可能听说过 MBT(基于模型的测试),但像许多未使用过 MBT 的软件工程专业人员一样,您可能对其他人使用这种测试设计方法的经验感到好奇。从 2014 年 6 月中旬到 2014 年 8 月初,我们进行了一项调查,以了解 MBT 用户如何看待其效率和有效性。2014 年 MBT 用户调查是 2012 年类似调查的后续调查,向所有评估或使用过任何 MBT 方法的人开放。它的 32 个问题包括 2013 年高级自动化测试用户会议上分发的调查问卷中的一些问题。一些问题侧重于 MBT 的效率和有效性,提供了管理者最感兴趣的数据。
要么静态,要么回家
最终,动态系统就是不如静态系统安全。
当前和历史上计算机与网络安全中的大多数问题都可归结为一个简单的观察:让其他人控制我们的设备对我们不利。在另一个时间,我将解释我所说的“其他人”和“不利”是什么意思。就本文而言,我将完全专注于我所说的控制是什么意思。我们失去对设备控制的一种方式是外部分布式拒绝服务 (DDoS) 攻击,这种攻击用不需要的流量填充网络,从而没有空间容纳真实的(“需要的”)流量。其他形式的 DDoS 类似:例如,低轨道离子炮 (LOIC) 的攻击可能不会完全填满网络,但它可以使 Web 服务器忙于响应无用的攻击请求,以至于服务器无法响应任何有用的客户请求。
保护网络时间协议
黑客发现如何将 NTP 用作滥用的武器。
在 1970 年代后期,David L. Mills 开始研究网络计算机上的时间同步问题,NTP(网络时间协议)版本 1 于 1980 年首次亮相。那时,网络还是一个友好的地方——ARPANET 时代。NTP 版本 2 大约在一年后出现,大约与 CSNET(计算机科学网络)同时出现。NSFNET(国家科学基金会网络)于 1986 年启动。NTP 版本 3 于 1993 年问世。
实用同步原语的可扩展性技术
在设计锁定原语时要考虑到性能
在理想的世界中,应用程序在越来越大的系统上执行时,应期望自动扩展。然而,在实践中,不仅这种扩展不会发生,而且在更大的系统上看到性能实际上恶化是很常见的。
内部访问控制
信任,但要验证
似乎每天都有关于另一起引人注目的高调安全事件的新闻,无论是广泛使用的软件(如 OpenSSL 或 Bash)中长期存在的漏洞被发现,还是名人照片被盗并公之于众。似乎有无穷无尽的零日漏洞和强大的国家支持的攻击者。面对如此多的威胁,甚至值得尝试保护您的系统和数据吗?系统安全设计人员和管理员可以做些什么?
消除数据库的歧义
使用为您的访问模型构建的数据库。
数据存储是一个在出现问题(数据消失)或一切顺利(客户过多)之前不需要很好理解的主题。由于数据库可以被视为带有 API 的黑匣子,因此它们的内部工作原理经常被忽视。它们通常被视为神奇的东西,只是在提供数据时接收数据,并在被询问时提供数据。由于这两个操作是该技术唯一被理解的活动,因此它们通常是比较不同技术时唯一呈现的功能。
一种新的软件工程
软件开发的严格、规范、专业实践的承诺发生了什么?
软件工程怎么了?软件开发的严格、规范、专业实践的承诺发生了什么?就像其他工程学科中观察到的那些实践一样?在“软件工程”的名义下采用的是一套主要从其他工程学科改编而来的实践:项目管理、设计和蓝图、过程控制等等。基本的类比是将软件视为一种制造产品,所有真正的“工程”都在上游进行——在需求分析、设计、建模等中进行。
没有通用处理器这种东西
并且相信这种设备是有害的
在计算机体系结构中,将处理器和加速器归类为“通用”的趋势越来越明显。在今年国际计算机体系结构研讨会 (ISCA 2014) 上发表的论文中,45 篇中有 9 篇明确提到了通用处理器;另一篇还提到了通用 FPGA(现场可编程门阵列),还有一篇提到了通用 MIMD(多指令多数据)超级计算机,将定义扩展到了崩溃的边缘。本文提出了一个论点,即没有真正通用的处理器,并且相信这种设备是有害的。
响应式企业:拥抱黑客之道
很快,每家公司都将成为一家软件公司。
截至 2014 年 7 月,成立于 2004 年的 Facebook 已跻身标准普尔 500 指数中最有价值的公司前 20 名,这家成立 10 年的软件公司与 IBM、Oracle 和可口可乐等公司处于同一级别。在 2014 年市值增长最快的五家公司中(表 1),有三家是软件公司:Apple、Google 和 Microsoft(事实上,有人可能会说 Intel 也是由软件驱动的,使其在五家中占四席)。
产品经理的演变
需要更好的教育来发展这门学科
软件从业人员知道,产品管理是软件开发的关键组成部分。产品经理与用户交谈,以帮助确定要构建什么、定义需求并编写功能规范。他们在整个软件构建过程中与工程师密切合作。他们充当想法的试金石,在出现技术挑战时帮助平衡进度,并在需要技术修改时反驳执行团队。产品经理从编写第一行代码之前就参与进来,直到代码发布之后。
并行编程的生产力:十年的进步
着眼于 X10 的设计和优势
2002 年,DARPA(国防高级研究计划局)启动了一项 HPCS(高生产力计算系统)的重大计划。该计划的动机是相信,下一代并行机器的利用受到在 peta 规模上编写、调试、调整和维护软件的难度的制约。
JavaScript 和 Netflix 用户界面
条件依赖关系解析
自推出以来的二十年中,JavaScript 已成为 Web 的事实官方语言。在运行时环境的数量方面,JavaScript 胜过所有其他语言。如今市场上几乎所有的消费硬件设备都以某种方式支持该语言。虽然这最常见的是通过集成 Web 浏览器应用程序来完成,但许多设备现在还在操作系统 UI(用户界面)中本地支持 Web 视图。
HTTPS 市场的安全崩溃
评估保护 HTTPS 的法律和技术解决方案
HTTPS(超文本传输协议安全)已发展成为安全 Web 浏览的事实标准。通过基于证书的身份验证协议,Web 服务和 Internet 用户首先使用 TLS/SSL 证书相互验证身份(“握手”),对 Web 通信进行端到端加密,并在浏览器中显示挂锁,以指示通信是安全的。近年来,HTTPS 已成为保护在线社交、政治和经济活动的基本技术。
为什么保护 Internet 路由需要这么长时间?
路由安全事件仍然可以绕过已部署的安全防御。
BGP(边界网关协议)是将 Internet 粘合在一起的胶水,它使不同组织运营的大型网络之间能够进行数据通信。BGP 通过为组织之间的流量设置路由来使 Internet 通信全球化——例如,从波士顿大学的网络,通过更大的 ISP(Internet 服务提供商),如 Level3、巴基斯坦电信和中国电信,然后到住宅网络,如 Comcast 或企业网络,如美国银行。
证书透明度
公共、可验证、仅附加日志
2011 年 8 月 28 日,一个错误颁发的 google.com 通配符 HTTPS 证书被用于对伊朗的多个用户进行中间人攻击。该证书由一家名为 DigiNotar 的荷兰 CA(证书颁发机构)颁发,DigiNotar 是 VASCO Data Security International 的子公司。后来的分析表明,DigiNotar 早在一个多月前(至少自 7 月 19 日起)就已意识到其系统遭到入侵。它还表明,至少已颁发了 531 个欺诈性证书。最终计数可能永远不会为人所知,因为 DigiNotar 没有所有错误颁发的证书的记录。
保护错综复杂的 Web
通过软件设计防止脚本注入漏洞
脚本注入漏洞是 Web 应用程序开发的祸根:原因和补救措施看似简单,但在大规模 Web 开发中却出奇地难以预防。
社会科学中的隐私、匿名和大数据
高质量的社会科学研究和人类受试者的隐私需要信任。
开放数据对科学具有巨大的潜力,但在人类受试者研究中,隐私与发布高质量开放数据之间存在张力。管辖学生隐私和学生记录发布的联邦法律表明,匿名化学生数据可以保护学生隐私。在这一标准的指导下,我们对来自 MITx 和 HarvardX 在 edX 平台上 16 个 MOOC(大规模开放在线课程)的数据集进行了去识别化并发布。在本文中,我们表明,这些以及其他去识别化程序导致对数据集的更改,从而威胁到基线分析的复制和扩展。为了平衡学生隐私和开放数据的好处,我们建议将重点放在保护隐私上,而无需匿名化数据,而是扩展政策,以迫使研究人员维护开放数据集中的受试者的隐私。
网络是可靠的
现实世界通信故障的非正式调查
网络是可靠的,这在 Peter Deutsch 的经典列表“分布式计算的八个谬误”中名列前茅,“所有谬误都证明从长远来看是错误的,并且所有谬误都会引起大麻烦和痛苦的学习经历。” 考虑和理解网络行为的含义是设计健壮的分布式程序的关键;事实上,Deutsch 的“谬误”中有六个直接与网络通信的限制有关。
本科软件工程:满足专业软件开发的需求
满足专业软件开发的需求
1996 年秋季学期,RIT(罗切斯特理工学院)在美国启动了第一个本科软件工程课程。该课程是五年规划、开发和审查的成果,从一开始就旨在培养毕业生从事商业和工业软件开发领域的专业职位。
将任意计算带到权威数据
许多不同的用例可以通过单个存储系统来满足。
虽然“大数据”这个术语非常模糊,以至于失去了很多意义,但今天的存储系统增长速度更快,管理的数据也比以往任何时候都多。消费设备生成大量的照片、视频和其他大型数字资产。机器正在通过广泛记录系统日志和指标以及视频捕获和基因组测序等应用程序在数据生成方面迅速赶上人类。大型数据集现在很常见,人们越来越希望对数据进行复杂的分析。
你必须信任谁?
如果你想完成任何事情,你必须有一定的信任。
在他的小说《钻石时代》中,作者尼尔·斯蒂芬森描述了一个基于对其同胞成员极端信任的社会(称为部落)。成员资格要求的一部分是,每个成员不时被要求承担某些任务以加强这种信任。例如,可能会告诉一个部落成员在特定时间去悬崖顶部的特定地点,在那里他会发现带有脚踝安全带的蹦极绳。绳索的另一端延伸到灌木丛中。在指定的时间,他要将安全带系在脚踝上,然后从悬崖上跳下去。
EA 的自动化 QA 测试:由事件驱动
与 Michael Donat、Jafar Husain 和 Terry Coatta 的讨论
对于数百万游戏极客来说,在 Electronic Arts 担任 QA(质量保证)测试员的职位一定像是一个梦想中的工作。但从公司的角度来看,与 QA 相关的管理费用可能看起来非常可怕,尤其是在大型多人游戏时代。
通过代码生成 DSL 进行设计探索
用于底层编程的高级 DSL
DSL(领域特定语言)使程序更短、更易于编写。它们可以是独立的——例如,LaTeX、Makefile 和 SQL——或者它们可以嵌入到宿主语言中。您可能会认为,嵌入到高级语言中的 DSL 将是抽象的或面向数学的,远离底层编程的细节。事实并非如此。本文演示了高级 EDSL(嵌入式 DSL)如何真正简化底层编程。这并不矛盾。
在苹果中发现不止一条虫子
如果你看到什么,就说出来。
今年 2 月,Apple 披露并修复了一个 SSL(安全套接层)漏洞,该漏洞自 2012 年 9 月发布 iOS 6.0 以来一直未被发现。由于 goto 语句重复导致 SSL/TLS(传输层安全)握手算法中的短路,该漏洞使用户容易受到中间人攻击。自从发现这个非常严重的错误以来,许多人撰写了关于潜在原因的文章。
使用 Haskell 的领域特定语言和代码合成
着眼于嵌入式 DSL
有很多方法可以向计算机发出指令:电气工程师可能会编写 MATLAB 程序;数据库管理员可能会编写 SQL 脚本;硬件工程师可能会用 Verilog 编写;会计师可能会编写带有嵌入式公式的电子表格。除了这些示例中使用的语言差异外,形式和习惯用法也存在重要差异。每种语言都使用为手头工作定制的语言,每种语言都以程序员熟悉且高效的形式构建计算请求(尽管会计师可能不认为自己是程序员)。
NSA 和斯诺登:保护全视之眼
NSA 的良好安全措施如何阻止他
爱德华·斯诺登在夏威夷的博思艾伦汉密尔顿公司担任 NSA(国家安全局)承包商期间,复制了多达 170 万份绝密及以上的文件,将副本走私到一个安全设施之外的拇指驱动器中,并在后来向媒体泄露了许多文件。这改变了美国政府与美国人民以及其他国家的关系。本文探讨了 NSA 如何能够阻止这一事件的计算机安全方面,这可能是美国历史上最严重的机密泄露事件。
排中律的诅咒
主要是函数式编程不起作用。
软件行业存在一种趋势,即推销“主要是函数式”编程,将其作为解决开发人员在并发、并行(多核)以及当然还有大数据方面面临的问题的灵丹妙药。当代命令式语言可以继续当前的趋势,拥抱闭包,并尝试限制突变和其他副作用。不幸的是,正如“主要是安全的”不起作用一样,“主要是函数式的”也不起作用。相反,开发人员应该认真考虑一个完全原教旨主义的选择:拥抱纯粹的惰性函数式编程,所有效果都使用 monad 在类型系统中显式地表面化。
不要满足于最终一致性
用于低延迟地理复制存储的更强属性
地理复制存储在多个地理位置不同的位置提供相同数据的副本。例如,Facebook 将其数据(个人资料、好友列表、点赞等)地理复制到美国东西海岸和欧洲的数据中心。在每个数据中心,一个独立的 Web 服务器层接受浏览器请求,然后通过从存储系统中读取和写入数据来处理这些请求。
关于出处的入门知识
更好地理解数据需要跟踪其历史和上下文。
评估一段数据的质量或有效性通常不是孤立完成的。您通常会检查数据出现的上下文,并尝试确定其原始来源或审查其创建过程。然而,在处理数字数据时,情况并非如此简单:计算结果可能源自众多来源,并通过应用复杂的连续转换而得出,可能需要很长时间。
多路径 TCP
与 IP 解耦后,TCP 终于能够支持多宿主主机。
Internet 在很大程度上依赖于两种协议。在网络层,IP(互联网协议)提供不可靠的数据报服务,并确保任何主机都可以与任何其他主机交换数据包。自 1970 年代创建以来,IP 已经增加了几个功能,包括组播、IPsec(IP 安全)和 QoS(服务质量)。最新修订版 IPv6(IP 版本 6)支持 16 字节地址。
大型 SEMAT:为什么高管应该关心?
变得更好、更快、更便宜、更快乐
在当今竞争日益激烈的世界中,董事会和高管要求 CIO 及其团队“以更少的资源交付更多成果”。研究表明,毫不奇怪的是,没有一种万能的方法可以满足所有软件计划,而采用基于实践的方法,并辅以一些轻量但有效的秩序和治理,是大多数软件开发部门的目标。
最终一致性:不是你所期望的那样?
最终一致性存储系统中量化一致性(或缺乏一致性)的方法
存储系统继续为现代 Internet 服务奠定基础,例如 Web 搜索、电子商务和社交网络。快速增长的用户群和数据集造成的压力已将系统设计从传统的集中式数据库转向更具可扩展性的分布式解决方案,包括简单的 NoSQL 键值存储系统,以及更精细的 NewSQL 数据库,这些数据库支持大规模事务。
使用锁消除扩展现有的基于锁的应用程序
锁消除使现有的基于锁的程序能够以较少的软件工程工作量获得非阻塞同步和细粒度锁定的性能优势。
多线程应用程序利用不断增加的内核数量来实现高性能。然而,此类程序通常要求程序员推理多个线程之间共享的数据。程序员使用互斥锁等同步机制来确保在多个线程访问的情况下正确更新共享数据。不幸的是,这些机制序列化了对数据的线程访问并限制了可扩展性。
速率限制状态
Internet 的边缘是一个不守规矩的地方
按照设计,Internet 核心是愚蠢的,而边缘是聪明的。由于核心没有复杂性,可以以需求的增长速度增长,因此这一设计决策促成了 Internet 的野蛮增长。不利的一面是,将所有智能都放在边缘的决定意味着,当涉及到 Internet 的总流量负载质量时,我们只能听天由命。并非所有设备和软件构建商都具备 Internet 如此规模应有的技能和质量保证预算。
API 性能合同
如何保证调用者和实现之间预期的交互?
当您调用 API 中的函数时,您期望它们能够正确运行;有时这种期望被称为调用者和实现之间的“契约”。调用者对这些函数也有性能期望,并且软件系统的成功通常取决于 API 是否满足这些期望。因此,除了正确性契约之外,还存在性能契约。性能契约通常是隐含的、常常是模糊的,有时会被(调用者或实现)违反。如何改进 API 设计和文档的这一方面?
传感器数据管理中的溯源
一个内聚的、独立的解决方案,为科学研究带来溯源
在当今信息驱动的工作场所中,数据不断地被移动和转换。通常的业务方法是使用电子邮件附件、共享网络位置、数据库,以及最近的云。通常,在不同的位置存在多个版本的数据,并且数据的用户因缺乏描述其来源或换句话说,其沿袭的元数据而感到困惑。本文描述的橡树岭国家实验室 (ORNL) 的 ProvDMS 项目旨在解决传感器数据环境中的这个问题。
Unikernels:虚拟库操作系统的崛起
如果虚拟机设备中的所有软件层都在同一个安全、高级语言框架内编译,会怎么样?
云计算一直在开创将大型数据中心中的计算资源出租给多个(甚至可能是竞争对手的)租户的业务。云的基本使能技术是操作系统虚拟化,例如 Xen1 或 VMWare,它允许客户在共享的物理机器集群上多路复用 VM(虚拟机)。每个 VM 都表现为一台独立的计算机,启动标准的操作系统内核并运行未修改的应用程序,就像它在物理机器上执行一样。
迈向软件定义的 SLA
公有云中的企业计算
公有云引入了可能重塑企业计算的新技术和架构。特别是,公有云是企业应用程序、平台软件和新型服务的设计中心。大规模、按需资源的 API 驱动的编排是一个重要的新设计属性,它将公有云与传统的企业数据中心基础设施区分开来。企业应用程序必须适应新的公有云设计中心,但同时,新的软件和系统设计模式可以为公有云服务增加企业属性和服务级别。
通往 SDN 之路
可编程网络的知识历史
在 SDN(软件定义网络)的帮助下,设计和管理网络在过去几年中变得更具创新性。这项技术似乎突然出现,但实际上它是使计算机网络更具可编程性的长期历史的一部分。
软件炼狱
软件架构师体验的但丁故事
《软件炼狱》是一个与但丁·阿利吉耶里在 1300 年代早期创作的《神曲》第一部《地狱》平行的故事。这部文学杰作描述了各种罪人在他们死后的地狱中因其尘世存在期间犯下的暴行而面临的谴责和惩罚。《软件炼狱》是一个类似的叙述,描述了一段旅程,其中“反对软件的罪人”在他们遭受折磨的地方,在他们被分配的永恒谴责区域内被遇到,并赎着他们的罪孽。
使用 HTTP 2.0 加快 Web 速度
HTTP 继续发展
HTTP(超文本传输协议)是互联网上使用最广泛的应用程序协议之一。自发布以来,RFC 2616(HTTP 1.1)一直是互联网空前增长的基础:数十亿各种形状和尺寸的设备,从台式计算机到我们口袋里微小的 Web 设备,每天都在说 HTTP,以传递新闻、视频和数百万个其他 Web 应用程序,我们都已在日常生活中依赖它们。
中间表示
中间表示在编译器中日益重要的意义
程序编译是一个复杂的过程。编译器是一个软件程序,它将高级源代码程序翻译成可以在计算机上执行的形式。在编译器的早期发展中,设计者引入了 IR(中间表示,也常被称为中间语言)来管理编译过程的复杂性。使用 IR 作为编译器的程序内部表示,使编译器能够分解为多个阶段和组件,从而受益于模块化。
跨语言互操作性的挑战
语言之间的接口变得越来越重要。
自从第二种编程语言被发明以来,语言之间的互操作性一直是一个问题。解决方案范围从与语言无关的对象模型(如 COM(组件对象模型)和 CORBA(公共对象请求代理体系结构))到旨在集成语言的 VM(虚拟机)(如 JVM(Java 虚拟机)和 CLR(公共语言运行时))。随着软件变得越来越复杂,硬件变得越来越不均匀,对于整个程序来说,单一语言是正确工具的可能性比以往任何时候都低。随着现代编译器变得更加模块化,新一代有趣的解决方案具有潜力。
Agile 和 SEMAT - 完美伙伴
将敏捷和 SEMAT 相结合比单独使用任何一个都产生更多优势
今天,和以往一样,许多不同的举措正在进行中,以改进软件开发的方式。其中最流行和最普遍的是敏捷运动。SEMAT(软件工程方法和理论)倡议是较新的成员之一。与任何新倡议一样,人们都在努力了解它如何融入世界,以及它与所有其他正在发生的事情的关系。例如,它是否改进或取代了他们目前的工作方式?
在质量保证中采用 DevOps 实践
融合软件开发的艺术和科学
长期以来,软件生命周期管理是一项受控的活动。产品设计、开发和支持的持续时间足够可预测,以至于公司及其员工围绕产品发布安排他们的财务、假期、手术和合并。当开发人员忙碌时,QA(质量保证)就很轻松。随着发布周期的编码部分接近尾声,QA 接管,而支持部门开始增加。然后,当产品发布时,开发人员松了一口气,休息了一下,然后再次开始循环,而支持人员则过渡到忙碌地支持新产品。
被动测量 TCP 往返时间
仔细观察 TCP 的 RTT 测量
测量和监控网络 RTT(往返时间)对于多种原因很重要:它允许网络运营商和最终用户了解他们的网络性能并帮助优化他们的环境,并且它帮助企业了解其服务对其用户群的响应能力。
空间泄漏
消除内存占用大户
当计算机程序使用的内存多于必要的内存时,就会发生空间泄漏。与内存泄漏(泄漏的内存永远不会被释放)相反,空间泄漏消耗的内存会被释放,但比预期的时间晚。本文介绍了空间泄漏的示例,以及如何发现和消除它们。
网关的野蛮人
高频交易和交易所技术
我曾经是一名高频交易员。在美好的几年里,我领导了一群才华横溢的工程师和数学家,我们一起在电子市场进行交易,并将系统推向了其能力的边缘。
高频交易中的在线算法
竞争性 HFT 算法面临的挑战
HFT(高频交易)已成为现代金融市场中一股强大的力量。仅在 20 年前,大部分交易量发生在纽约证券交易所等交易所,在那里,穿着鲜艳服装的人们会手舞足蹈并喊叫他们的交易意图。如今,交易主要发生在数据中心的电子服务器中,计算机通过网络消息传达他们的交易意图。从实体交易所到电子平台的这种转变对于 HFT 公司来说尤其有利可图,这些公司在新环境的基础设施上投入了大量资金。
选择非阻塞特性的平衡行为
非阻塞系统的设计要求
什么是非阻塞进展?考虑一个简单的示例,即递增多个线程之间共享的计数器 C。一种方法是通过互斥锁 L 保护递增 C 的步骤(即,acquire(L); old := C ; C := old+1; release(L);)。如果线程 P 持有 L,则不同的线程 Q 必须等待 P 释放 L,然后 Q 才能继续操作 C。也就是说,Q 被 P 阻塞。
NUMA(非统一内存访问):概述
NUMA 变得越来越普遍,因为内存控制器靠近微处理器上的执行单元。
NUMA(非统一内存访问)是一种现象,即处理器地址空间中各个点的内存具有不同的性能特征。在当前的处理器速度下,从处理器到内存的信号路径长度起着重要作用。信号路径长度的增加不仅增加了内存的延迟,而且如果信号路径被多个处理器共享,也会很快成为吞吐量瓶颈。内存的性能差异首先在大型系统上变得明显,在这些系统中,数据路径跨越了主板或机箱。这些系统需要修改后的操作系统内核,其中包含 NUMA 支持,该支持显式地理解系统的内存拓扑属性(例如内存区域所在的机箱),以避免过长的信号路径长度。
可扩展性的 20 个障碍
注意这些可能阻止 Web 应用程序扩展的陷阱。
Web 应用程序可能会断断续续地增长。客户数量可能会迅速增加,应用程序使用模式可能会随季节变化。这种不可预测性需要一个可扩展的应用程序。实现可扩展性的最佳方法是什么?
移动性能优化的规则
加速页面加载的技术概述
性能一直是网站成功的关键。越来越多的研究证明,即使页面加载时间的小幅改进也会为从小电商到沃尔玛等大型连锁店的企业带来更多的销售额、更多的广告收入、更多的粘性和更高的客户满意度。
移动领域的最佳实践:为移动设备构建 Web 应用程序
开发人员应为移动 Web 修改或完全避免哪些实践?
如果去年或前年它不是您的优先事项,那么今年肯定会成为您的优先事项:在 2013 年将您的网站或服务带到移动设备,否则将承担后果。早期采用者自 1999 年以来一直在谈论移动设备接管——仅提前了大约十年预测了这一趋势。今天,移动 Web 流量急剧上升,创造流畅的移动体验是每个人都最关心的问题。到 2017 年,移动数据总流量预计将超过每月 10 艾字节。
反脆弱组织
拥抱失败以提高弹性和最大化可用性
失败是不可避免的。磁盘会发生故障。软件错误潜伏着,等待合适的条件来发作。人们会犯错误。数据中心建立在不可靠的商品硬件农场之上。如果您在云环境中运行,那么许多这些因素都在您的控制之外。更糟糕的是,故障是不可预测的,并且不会以均匀的概率和频率发生。缺乏均匀的频率会增加系统中的不确定性和风险。
非阻塞算法和可扩展的多核编程
探索一些基于锁的同步的替代方案
具有复杂的服务质量保证的实际系统可能需要在吞吐量和延迟之间取得微妙的平衡,以经济高效的方式满足运行要求。商品多核和众核系统的日益普及和成本降低使得并发性和并行性对于满足苛刻的性能要求变得越来越必要。不幸的是,正确、高效和可扩展的并发软件的设计和实现通常是一项艰巨的任务。
证明非阻塞数据结构的正确性
因此,您已决定使用非阻塞数据结构,现在您需要确定其正确性。如何实现这一点?
非阻塞同步可以在可扩展性和实时响应方面产生惊人的结果,但这以验证状态空间为代价。
结构化延迟:通过拖延进行同步
我们根本没有可以强制执行互斥的同步机制。
开发人员通常对软件设计采取积极主动的方法,尤其是那些来自重视勤奋胜过拖延的文化的人。然而,懒惰的方法已经证明了它们的价值,例如引用计数、垃圾回收和惰性求值。这种结构化延迟采取了通过拖延进行同步的形式,特别是引用计数、危害指针和 RCU(读取-复制-更新)。
实时 GPU 音频
使用图形处理器进行基于有限差分的声音合成
今天的 CPU 能够支持许多流行应用程序的实时音频,但某些计算密集型音频应用程序需要硬件加速。本文着眼于一些实时声音合成应用程序,并分享了作者在 GPU(图形处理单元)上实现它们的经验。
就是无法回避:您正在构建一个分布式系统
构建分布式系统需要一种有条不紊的需求方法。
分布式系统难以理解、设计、构建和操作。它们在设计中引入了比单台机器指数级更多的变量,使得应用程序问题的根本原因更难发现。应该说,如果应用程序没有有意义的 SLA(服务级别协议),并且可以容忍长时间的停机时间和/或性能下降,那么进入门槛会大大降低。然而,大多数现代应用程序都对用户的弹性抱有期望,并且 SLA 通常以“几个 9”来衡量(例如,每月 99.9% 或 99.99% 的可用性)。
一个完全属于自己的文件系统
闪存已经取得了长足的进步。现在是软件赶上的时候了。
在过去的五年中,闪存已从一个有希望的加速器(其在数据中心的位置仍然不确定)发展成为存储性能关键数据的已建立的企业组件。它在消费世界的普及以及随之而来的规模经济推动了它的崛起(参见图 1)。借助 SSD(固态设备),闪存以一种针对兼容性优化的形式出现——只需用 SSD 替换硬盘驱动器即可获得更好的性能。但是 SSD 使用的 NAND 闪存的属性与它们经常取代的硬盘驱动器中的磁介质的属性显着不同。
今天的最终一致性:局限性、扩展和超越
在不保证安全性的情况下,如何基于最终一致性基础设施构建应用程序?
在 2000 年 7 月的会议主题演讲中,现任 Google 工程副总裁兼加州大学伯克利分校教授 Eric Brewer 公开假设了 CAP(一致性、可用性和分区容错性)定理,这将改变分布式存储系统的架构格局。Brewer 的猜想——基于他在 Inktomi 构建一些最早的互联网搜索引擎的基础设施的经验——指出,在存在网络分区(切断活动服务器之间的通信)的情况下,需要始终在线、高可用性运行的分布式系统无法保证连贯、一致的单系统操作的错觉。
在线广告投放中的歧视
Google 广告、黑人名字和白人名字、种族歧视和点击广告
在搜索听起来像黑人的名字时,比搜索听起来像白人的名字时,更频繁地出现暗示逮捕记录的在线广告吗?什么是听起来像黑人的名字或听起来像白人的名字,无论如何?广告必须多出现多少次才能对一个种族群体产生不利影响,才能被认为是歧视?在线活动是否如此普遍,以至于计算机科学家必须考虑技术设计中的结构性种族主义等社会后果?如果是这样,这种技术应该如何构建?让我们科学地深入研究在线广告投放以找到答案。
您的网站有多快?
网站性能数据从未如此容易获得。
压倒性的证据表明,网站的性能(速度)与其成功直接相关,跨越行业和业务指标。由于存在如此清晰的相关性(甚至已证明的因果关系),因此监控您的网站性能非常重要。那么,您的网站有多快?
面向大众的 FPGA 编程
如果 FPGA 要成为主流计算的一部分,则必须提高其可编程性。
在研究硬件如何影响计算性能时,我们在一端有 GPP(通用处理器),另一端有 ASIC(专用集成电路)。处理器具有高度可编程性,但在功耗和性能方面通常效率低下。ASIC 实现专用和固定功能,并提供最佳的功耗和性能特性,但任何功能更改都需要完全(且极其昂贵)地重新设计电路。
移动设备的 Web 开发演变
构建在移动设备上表现良好的网站仍然是一项挑战。
过去几年 Web 开发的最大变化是移动计算的显着兴起。移动电话曾经是非常有限的设备,最好用于拨打电话和发送短信。今天的移动电话比将阿波罗 11 号送上月球的计算机更强大,并且能够几乎从任何地方发送和接收数据。
DHTML 中茶壶的故事
很容易做令人惊奇的事情,例如在 HTML 和 CSS 中渲染经典的茶壶。
在 SVG(可缩放矢量图形)、WebGL(Web 图形库)、Canvas 或浏览器中用于图形的大部分内容出现之前,有可能做更多最初不明显的事情。为了演示,我们创建了一个 JavaScript 程序,该程序仅使用 HTML 和 CSS 渲染多边形 3D 图形。我们的概念验证足够快,可以支持基于物理的小游戏内容,但我们从标志性的 3D“犹他茶壶”开始,因为它在一张图片中讲述了整个故事。仅使用常规 DIV 元素、CSS 样式和少量 JavaScript 代码来渲染这个经典对象是可行的。
加快移动 Web 速度
移动性能问题?修复后端,而不仅仅是客户端。
移动客户端一直在兴起,并且只会继续增长。这意味着,如果您通过 Internet 为客户端提供服务,则不能忽略移动设备上的客户体验。有很多关于移动性能的信息性文章,以及许多关于通用 API 设计的文章,但是您会发现很少有讨论优化移动客户端后端系统所需的设计考虑因素的文章。无论您有应用程序、移动网站还是两者兼有,这些客户端都可能正在使用您后端系统的 API。
Hazy:使构建和维护大数据分析更容易
竞相使用最新的统计和机器学习技术释放大数据的全部潜力。
大数据的兴起为从企业到科学的各个领域带来了巨大的机遇和巨大的挑战。这些机遇包括更明智的业务决策、更高效的供应链管理和资源分配、更有效地定位产品和广告、更好地“组织世界信息”、更快地实现科学发现等等。
操作系统访问控制可扩展性的十年
移动和嵌入式设备的开源安全基础
讨论操作系统安全性就是惊叹于已部署的访问控制模型的多样性:Unix 和 Windows NT 多用户安全性;SELinux 中的类型强制;反恶意软件产品;Apple OS X、Apple iOS 和 Google Android 中的应用程序沙箱;以及面向应用程序的系统,例如 FreeBSD 中的 Capsicum。这种多样性是从狭隘的 1990 年代 Unix 和 NT 现状到“安全本地化”的惊人转变的结果——操作系统安全模型适应站点本地或特定产品的要求。
重新思考密码
我们的身份验证系统存在缺陷。改进是可能的吗?
这片土地上流行着一种身份验证瘟疫。我们必须反复向一大堆身份验证巨魔声明和断言我们的身份,每个巨魔都嫉妒地守护着某种互联网服务。每个巨魔都有特定的密码规则,并且这些规则差异很大且难以理解。
有条不紊地思考性能
USE 方法弥补了其他常用方法中的缺点。
性能问题可能既复杂又神秘,几乎没有或根本没有线索表明其来源。在没有起点的情况下,性能问题通常是随机分析的:猜测问题可能在哪里,然后更改事物直到问题消失。虽然这可以产生结果,但也可能非常耗时、具有破坏性,并且最终可能会忽略某些问题。本文描述了系统性能问题以及当今用于分析它们的方法,并提出了一种新的方法来处理和解决一类问题。
中国防火墙后的“裂联网”
一旦中国向世界敞开大门,它就无法再次关闭。
如果您无法访问 YouTube、Facebook、Twitter 和 Wikipedia 会怎么样?如果 Google 通知您,您的连接在搜索期间已重置,您会感觉如何?如果 Gmail 只是定期可用,而用于撰写本文的 Google 文档完全无法访问,又会怎么样?真是一团糟!
公寓和云
环境中的约束赋予服务权力。
住在公寓里有其约束和服务。通过定义生活方式和使用模式限制,可以将许多房屋紧密地组合在一起,并为居民提供许多便利设施。公寓生活可以为那些有兴趣并愿意在其约束范围内生活并享受共享公共服务的人提供巨大的价值。
在打破 Web 之前,Web 不会安全可靠
除非您采取了非常特殊的预防措施,否则请假定您访问的每个网站都知道您的真实身份。
互联网的设计目的是传递信息,但很少有人预料到会涉及大量信息或信息的个人性质。同样,很少有人能预见到互联网设计中存在的潜在缺陷,这些缺陷会暴露这些个人信息,从而危及个人和公司的数据。
软件工程的本质:SEMAT 内核
一种可操作内核形式的思维框架
每个开发软件的人都知道这是一项复杂且有风险的业务,参与者总是在寻找能够带来更好软件的新想法。幸运的是,软件工程仍然是一个年轻且不断发展的行业,每年都会看到最佳实践方面的创新和改进。例如,看看精益和敏捷思维为软件开发团队带来的改进和好处。
固态硬盘的剖析
虽然无处不在的 SSD 与硬盘驱动器共享许多功能,但在表面之下,它们完全不同。
在过去的几年中,一种新型存储设备已进入笔记本电脑和数据中心,从根本上改变了人们对存储的功率、尺寸和性能动态的期望。SSD(固态驱动器)是一项已经存在了 30 多年的技术,但由于价格过于昂贵而无法广泛采用。
发送方缓冲区和多媒体自适应案例
一项旨在提高流视频和其他时间敏感媒体的性能和可用性的提议
互联网/Web 架构已经发展到这样的程度:最受欢迎的网站通常能够以几乎无限的规模运行,许多网站现在为数亿独立用户提供服务。性能和可用性通常对于吸引和维持如此庞大的用户群至关重要。因此,网络和服务器基础设施在激烈的用户竞争中起着关键作用。网页应在最多几十到几百毫秒内加载完成。
应对意外情况
故障时有发生,而弹性演练有助于组织为此做好准备。
无论是飓风刮倒电线,火山灰云导致整个大陆的航班停飞,还是不起眼的啮齿动物啃咬地下光纤——意外总会发生。我们无法阻止意外发生,但我们可以做很多事情来为此做好准备。为此,谷歌每年都会举办一次公司范围内的、为期多天的灾难恢复测试活动——DiRT——其目的是确保谷歌的服务和内部业务运营在灾难发生后能够继续运行。
从文件系统的角度看磁盘
磁盘会撒谎。而运行它们的控制器是同谋。
大多数应用程序并不直接与磁盘打交道,而是将数据存储在文件系统中的文件中,这保护了我们免受那些无赖磁盘的侵害。毕竟,文件系统的一个关键任务是确保文件系统在计划外的系统崩溃(例如,电源故障)后始终能够恢复到一致状态。虽然好的文件系统能够使磁盘屈服,但所需的工作量可能很大,性能降低也会令人恼火。
迈向更高精度
PTP 简介及其对 NTP 从业者的意义
同步时间对现代计算机系统的重要性怎么强调都不为过。我们今天的生活依赖于金融交易、电信、发电和输电、高速制造业以及“大型物理学”的发现等等,这些都由快速、强大的计算设备彼此协调时间驱动。
生产环境中的故障注入
为弹性测试辩护
当我们在 Etsy 构建 Web 基础设施时,我们的目标是使其具有弹性。这意味着仔细设计它们,以便它们能够在面对故障时维持其(日益关键的)运营。值得庆幸的是,过去几十年已经投入了大量的研究论文,研究如何将容错和优雅降级引入计算机系统。这有助于实现目标。
你的所有数据库都属于我们
在开放的云世界中,高可用的分布式对象将占据主导地位。
在数据库世界中,原始物理数据模型是宇宙的中心,查询自由地假定数据表示的详细信息(索引、统计信息、元数据)。这种封闭世界的假设以及由此产生的抽象缺乏,带来了数据可以比应用程序更长寿的 приятный 效果。另一方面,这使得独立于模型上的查询来演化底层模型变得困难。
软件需要安全带和安全气囊
在已部署的软件中查找和修复错误既困难又耗时。这里有一些替代方案。
就像死亡和税收一样,代码错误是生活中不幸的事实。几乎每个程序在发布时都带有已知错误,并且可能所有程序最终都会出现仅在部署后才发现的错误。造成这种可悲状况的原因有很多。
一种新的 Objective-C 运行时:从研究到生产
向后兼容性始终胜过新功能。
从研究原型(Étoilé 运行时)到发布版本(GNUstep 运行时)的路径涉及完整的重写和重新设计。这不一定是坏事:构建原型的部分意义在于了解哪些是合理的,哪些是不合理的,以及在您可以控制整个系统但在生产环境中不一定可行的情况下,研究什么是可行的。
Hop 中的多层编程
迈向 21 世纪应用程序编程的第一步
Web 正在成为创建计算机应用程序的最丰富的平台。它的力量来自三个要素:(1)现代 Web 浏览器支持高度复杂的 GUI,包括 3D、多媒体、精美的排版等;(2)通过 Web API 调用现有服务使得从独立可用的组件开发复杂的应用程序成为可能;(3)开放数据可用性允许应用程序访问广泛的以前无法访问或根本不存在的信息。这三个要素的结合已经催生了革命性的应用程序,例如 Google 地图、无线电播客和社交网络。
OpenFlow:网络领域的全新理念
一种支持软件定义网络的开放标准
计算机网络在历史上是逐个盒子演变的,各个网络元素占据特定的生态位,如路由器、交换机、负载均衡器、NAT(网络地址转换)或防火墙。软件定义网络建议颠覆这种生态,将整个网络转变为一个平台,并将各个网络元素转变为可编程实体。在网络平台上运行的应用程序可以优化流量以采取最短路径,就像当前分布式协议所做的那样,但它们也可以优化网络以最大化链路利用率,为不同的用户创建不同的可达域,或使设备移动性无缝化。
扩展调度优先级的语义
日益增长的并行性需求需要新的范例。
应用程序性能直接受到应用程序所需的硬件资源、此类资源的可用程度以及操作系统如何解决其相对于系统中其他进程的需求的影响。理想情况下,应用程序将能够访问它可以使用的所有资源,并被允许完成其工作而无需与系统中的任何其他活动竞争。然而,在硬件资源高度共享和基于通用分时操作系统的世界中,无法保证应用程序的资源配置有多好。
你衡量什么,得到什么
在项目管理中使用软件度量的四个常见陷阱
软件度量 - 有用的工具还是浪费时间?对于每个珍视这些软件系统数学抽象的开发人员来说,都有一位开发人员认为软件度量只是为了让项目经理保持忙碌而发明的。软件度量可以是帮助实现目标的非常强大的工具,但正确使用它们很重要,因为它们也可能使项目团队失去动力并将开发引导到错误的方向。
使用互联网照片集对人和地点进行建模
从海量的在线照片中了解世界
本文介绍了我们使用在线照片集重建关于世界及其居民在全球和本地范围内信息的工作。这项工作受到了社交内容共享网站 dramatic 增长的推动,这些网站创建了大量的用户生成视觉数据在线集合。仅 Flickr.com 目前就托管了超过 60 亿张由超过 4000 万独立用户拍摄的图像,而 Facebook.com 表示其每天增长近 2.5 亿张照片。
控制队列延迟
现代 AQM 只是解决缓冲区膨胀问题的一个组成部分。
在首次诊断近三十年后,“持久性满缓冲区问题”最近被揭露为“缓冲区膨胀”的一部分,仍然存在,并且由于两个趋势而变得越来越关键。首先,廉价的内存和“多多益善”的心态导致了缓冲区的膨胀和扩散。其次,动态变化的路径特征在今天更加普遍,并且是消费者互联网边缘的常态。当链路速率和路径延迟降至标称值以下时,合理大小的缓冲区变得极其过大。
数据中心网络导览
良好的用户体验取决于数据中心网络内可预测的性能。
云的魔力在于它始终开启且始终可从任何地方访问。用户已经开始期望服务在他们需要时就在那里。数据中心(或仓库规模的计算机)是所有服务流出的中心。它通常位于一栋不起眼的仓库大小的建筑物中,没有任何迹象表明里面有什么。在呼呼作响的风扇和冰箱大小的计算机机架中,电气电缆和光纤交织在一起,将一切连接在一起——数据中心网络。
使用 OpenCV 的实时计算机视觉
移动计算机视觉技术很快将变得像触摸界面一样普及。
计算机视觉是一个快速发展的领域,致力于分析、修改和对图像进行高层次的理解。其目的是确定相机前方正在发生的事情,并利用这种理解来控制计算机或机器人系统,或为人们提供比原始相机图像更具信息性或更美观的新图像。计算机视觉技术的应用领域包括视频监控、生物识别、汽车、摄影、电影制作、Web 搜索、医学、增强现实游戏、新用户界面等等。
幂等性不是一种疾病
可靠系统的基本属性
分布式计算的定义可能会令人困惑。有时,它指的是紧密耦合的计算机集群协同工作,看起来像一台更大的计算机。然而,更常见的情况是,它指的是一群松散相关的应用程序在没有大量系统级支持的情况下相互通信。分布式计算环境中缺乏支持使得编写协同工作的应用程序变得困难。系统之间发送的消息对于交付没有明确的保证。它们可能会丢失,因此,在超时后,它们会被重试。通信另一端的应用程序可能会看到到达多条消息,而预期只收到一条。
CPU DB:记录微处理器历史
借助这个开放数据库,您可以挖掘过去 40 年的微处理器趋势。
1971 年 11 月,英特尔推出了世界上第一款单芯片微处理器 Intel 4004。它拥有 2,300 个晶体管,时钟速度高达 740 KHz,每秒可执行 60,000 条指令,同时功耗为 0.5 瓦。在随后的四十年中,计算能力呈指数级增长,这一趋势促成了气候建模、蛋白质折叠和计算愤怒的小鸟实时弹道轨迹等各种应用程序的出现。
你的鼠标是一个数据库
Web 和移动应用程序越来越多地由异步和实时流服务以及推送通知组成。
IT 行业目前最热门的流行语之一是“大数据”,但“大”在某种程度上是一种误称:大数据不仅仅是关于数量,还关于速度和多样性。数据量从存储在传统 RDMS(关系数据库管理系统)封闭世界中的少量项目到分布在大型机器集群或整个万维网上的大量项目不等。
管理技术债务
今天节省金钱和时间的捷径可能会在未来付出代价。
1992 年,Ward Cunningham 在 OOPSLA(面向对象编程、系统、语言和应用)上发表了一份报告,其中他提出了技术债务的概念。他根据不成熟的代码来定义它:“首次发布代码就像欠债。” 然而,技术债务不仅限于首次发布的代码。有很多方法和理由(并非都是坏的)来承担技术债务。
用于可视化分析的交互式动态
支持流畅和灵活使用可视化的工具分类
数字数据的日益增长的规模和可用性为公共政策、科学发现、商业战略甚至我们的个人生活提供了非凡的资源。然而,为了充分利用这些数据,用户必须能够理解它:提出问题、发现感兴趣的模式以及识别(并可能纠正)错误。与数据管理系统和统计算法相结合,分析需要针对在数据中发现的集群、趋势和异常值的特定领域意义进行情境化的人工判断。
为什么 LINQ 很重要:云可组合性保证
可组合性的好处在软件工程中变得显而易见。
在本文中,我们使用 LINQ(语言集成查询)作为可组合性的指导示例。LINQ 是专门设计为可组合的更高阶运算符的规范。此规范广泛适用于任何符合“集合”的宽松定义的事物,从内存中的对象到异步数据流再到云中分布的资源。通过这种设计,开发人员通过以各种顺序链接转换和过滤器并通过嵌套链(即,通过构建运算符的表达式树)来构建复杂性。
重新审视网络 I/O API:netmap 框架
在现代操作系统上处理数据包的方式有可能实现巨大的性能提升。
如今,10 吉比特接口在数据中心和服务器中得到越来越广泛的应用。在这些链路上,数据包的流速高达每 67.2 纳秒一个,但现代操作系统仅将一个数据包在线路和应用程序之间移动就需要 10-20 倍的时间。我们可以做得更好,不是通过更强大的硬件,而是通过修改很久以前关于设备驱动程序和网络堆栈设计的架构决策。
SAGE:用于安全测试的白盒模糊测试
SAGE 在微软产生了显著的影响。
大多数 读者可能会认为“程序验证研究”主要是理论性的,对整个世界影响不大。再想一想。如果您正在运行某种形式 Windows 的 PC 上阅读这些文字(例如 93% 以上的 PC 用户 - 即超过 10 亿人),那么您已经受到了这项工作的影响 - 在不知情的情况下,这正是我们希望的方式。
你对共享变量或内存模型一无所知
数据竞争是邪恶的。
Google 搜索“线程是邪恶的”会产生 18,000 个结果,但线程无处不在。现代 Windows PC 上运行的几乎所有进程都使用它们。软件线程通常是程序员让多核机器协同工作以更快地解决问题的方式。通常,它们也是允许用户界面在应用程序执行后台计算时保持响应的方式。
日志分析的进展和挑战
日志包含大量信息,有助于管理系统。
计算机系统日志提供了对运行系统状态的 glimpse。Instrumentation 偶尔会生成短消息,这些消息收集在特定于系统的日志中。日志的内容和格式可能因系统而异,甚至在系统内的组件之间也可能不同。打印机驱动程序可能会生成指示其与打印机通信时遇到问题的消息,而 Web 服务器可能会记录请求了哪些页面以及何时请求。
缓冲区膨胀:互联网中的黑暗缓冲区
没有有效 AQM 的网络可能再次容易受到拥塞崩溃的影响。
今天的网络正遭受不必要的延迟和糟糕的系统性能之苦。罪魁祸首是缓冲区膨胀,即网络内部存在过大且经常满的缓冲区。大型缓冲区已在整个互联网中插入,但没有经过充分的思考或测试。它们破坏或击败了互联网最常见传输协议的基本拥塞避免算法。来自缓冲区膨胀的长延迟经常被错误地归因于网络拥塞,而对问题的这种误解导致提出了错误的解决方案。
I/O 虚拟化
将逻辑设备与其物理实现分离提供了许多引人注目的优势。
术语虚拟被过度使用,唤起了从云中运行的虚拟机到跨虚拟世界运行的化身的一切。即使在计算机 I/O 的狭窄figureer 上下文中,虚拟化也具有悠久而多样的历史,以与物理实例化故意分离的逻辑设备为例证。
在 Racket 中创建语言
有时你只需要制造一个更好的捕鼠器。
为简单的工作选择合适的工具很容易:当您需要更换玩具中的电池时,螺丝刀通常是最佳选择,而 grep 是检查文本文档中单词的明显选择。对于更复杂的任务,工具的选择很少如此简单——对于编程任务而言更是如此,程序员拥有无与伦比的构建自己的工具的能力。程序员经常通过创建新的工具程序来解决编程问题,例如从数据表中生成源代码的脚本。
编码指南:在科学中发现艺术
是什么将好的代码与伟大的代码区分开来?
计算机科学既是一门科学,也是一门艺术。它的科学方面包括从计算理论和算法研究到代码设计和程序架构。然而,当涉及到实施时,艺术天赋、细致的风格和技术实力的结合将好的代码与伟大的代码区分开来。
天文档案馆将如何在大数据海啸中幸存下来?
天文学家正在收集比以往更多的数据。哪些实践可以让他们领先于数据洪流?
天文学已经充斥着数据:目前 1 PB 的公共数据可以通过电子方式访问,并且这个 volume 每年以 0.5 PB 的速度增长。这些数据的可用性已经改变了天文学的研究,STScI 现在报告说,使用存档数据集发表的论文比使用新获取的数据集发表的论文更多。随着 LSST、ALMA 和 SKA 等新项目投入运营,这种数据规模的增长和预期的使用量将在未来几年加速。这些新项目将使用比现在使用的更大的望远镜和探测器阵列或更高的数据采集率。
动态环境中的事后调试
现代动态语言缺乏用于理解软件故障的工具。
尽管软件工程师尽最大努力生产高质量的软件,但不可避免地,一些错误会逃脱即使是最严格的测试过程,并首先被最终用户遇到。当这种情况发生时,必须快速理解这些故障,修复底层错误,并修补部署以避免另一个用户(或同一个用户)再次遇到相同的问题。
面向大众的 OCaml
为什么您学习的下一种语言应该是函数式语言
函数式编程是一个历史悠久的古老思想。Lisp 是一种受 Alonzo Church 的 lambda 演算启发的函数式语言,是计算时代曙光时期开发的第一批编程语言之一。静态类型函数式语言(如 OCaml 和 Haskell)更新,但它们的根基很深。
Java 安全架构再探
艰难的技术问题和严峻的商业挑战
本文回顾了设计和工程角度来看的一些最困难的技术问题,以及研究科学家很少接受培训的一些严峻的商业挑战。Li Gong 在这里回顾了他在之前四次有机会深入研究旧笔记并刷新记忆时收集到的内容。
LINQ 的世界
大数据不仅仅关乎规模,而 LINQ 完全胜任这项任务。
构建 Web 和云应用程序的程序员将来自传感器、社交网络、用户界面、电子表格和股票行情自动收录器等许多不同来源的数据连接在一起。这些数据中的大多数不适合传统关系数据库的封闭和干净的世界。它太大、非结构化、非规范化且实时流式传输。首先,跨所有这些不同的数据模型和查询语言呈现统一的编程模型似乎是不可能的。然而,通过关注共性而不是差异,大多数数据源将接受某种形式的计算来过滤和转换数据集合。
安全关键软件的验证
航空电子软件安全认证是通过基于目标的标准实现的。
航空电子软件已成为当今飞机设计的基石。航空电子系统的进步减轻了飞机重量,从而降低了燃油消耗,实现了精确导航,提高了发动机性能,并提供了许多其他好处。这些进步已将现代飞机变成了飞行数据中心,计算机控制或监控着机上的许多关键系统。运行这些飞机系统的软件必须尽可能安全。
硬件系统设计中的抽象
使用 Bluespec SystemVerilog 将软件语言的经验教训应用于硬件语言
软件工程的历史是不断开发旨在解决日益增长的复杂性的抽象机制的历史。然而,硬件设计并没有那么先进。例如,两种最常用的 HDL 可以追溯到 20 世纪 80 年代。标准的更新滞后于现代编程语言的结构抽象,如类型、封装和参数化。它们的行为语义甚至更加滞后。它们是根据在单处理器冯·诺依曼机器上运行的事件驱动模拟器指定的。
商业计划中的傲慢
假设没有竞争(永远)的技术商业计划
在互联网寻址和命名市场中,竞争非常激烈,利润率很薄,而良好计划和良好执行的溢价 Nowhere 更高。为了生存,投资者和企业家必须大胆。然而,一些企业家超越了“大胆”,通过做出他们创建新的有利可图的利基市场时将没有竞争对手的疯狂假设,进入了“傲慢”的领域。那些单方面取代或重新绘制现有互联网资源治理或分配系统的人也是如此。
实现 LINQ 提供程序的痛苦
对于 NoSQL 来说,这并非易事
我记得坐在座位边缘观看 2005 年 PDC(专业开发人员会议)视频,这些视频首次展示了 LINQ(语言集成查询)。我想要 LINQ:它几乎提供了我所希望的一切,使数据处理变得容易。将查询构建到语言中的动力非常简单;它是一直都在使用的东西;统一查询模型的承诺已经足够好了,即使在您添加所有 language goodies 之后,它们也被丢在了我们身上。能够在 C# 中编写,并让数据库神奇地理解我在做什么?
无处理器计算
异构系统允许我们将编程目标定位于适当的环境。
从程序员的角度来看,硬件和软件之间的区别正在变得模糊。随着程序员努力满足当今系统的性能要求,他们将面临越来越大的需求,即利用替代计算元素,例如 GPU(图形处理器),它们是被颠覆用于数据并行计算的显卡,以及 FPGA(现场可编程门阵列),或软硬件。
重新思考鲁棒性原则
寻求中间立场
1981 年,Jon Postel 制定了鲁棒性原则,也称为 Postel 定律,作为当时新的 TCP 的基本实现指南。鲁棒性原则的目的是最大化网络服务实现之间的互操作性,尤其是在面对模糊或不完整的规范时。如果生成协议的某个服务的每个实现都使用对规范的最保守解释来执行此操作,并且接受该协议段的每个实现都使用最慷慨的解释来解释它,那么这两个服务能够相互交谈的机会将最大化。
面向新手的 DSL
领域特定语言弥合了编程中的语义差距。
软件项目失败的主要原因之一是业务用户(他们实际上了解问题域)与设计和实施软件模型的开发人员之间缺乏沟通。业务用户理解领域术语,并且他们说的词汇可能对软件人员来说非常陌生;难怪沟通模型可能会在项目生命周期的开始阶段就崩溃。
如果你的数据太多,那么“足够好”就足够了
在当今庞大的数据库系统中,清晰度可能会有所降低,但仍然可以满足业务需求。
经典的数据库系统为相对少量的数据提供清晰的答案。这些系统将数据保存在一台或相对少量的计算机中。凭借严格定义的模式和事务一致性,从查询返回的结果清晰而准确。新系统拥有海量的数据内容、变化率和查询率,需要大量的计算机来存储和处理。数据质量和含义是模糊的。模式(如果存在)可能因数据而异。数据的来源可能可疑,其时效性也可能各不相同。
让语言穿过针眼
Lua 的可嵌入性如何影响其设计
脚本语言是当前编程语言领域的重要组成部分。脚本语言的一个关键特性是其与系统语言集成的能力。这种集成主要有两种形式:扩展和嵌入。在第一种形式中,您可以使用系统语言编写的库和函数来扩展脚本语言,并使用脚本语言编写您的主程序。在第二种形式中,您将脚本语言嵌入到宿主程序(用系统语言编写)中,以便宿主可以运行脚本并调用脚本中定义的函数;主程序是宿主程序。
可扩展的 SQL
大型站点和应用程序如何保持基于 SQL?
NoSQL 创新的主要动机之一是希望实现非常高的可扩展性,以处理互联网规模工作负载的不可预测性。然而,据报道,许多大型社交网站以及许多其他需要高可扩展性的网站和分布式一级应用程序仍然以 SQL 为基础,用于其核心数据存储和服务。问题是,他们是如何做到的?
移动应用开发:Web 与原生应用之争
Web 应用程序的开发和部署成本低于原生应用程序,但它们能否与原生用户体验相媲美?
几年前,大多数移动设备用“笨”这个词来形容再合适不过了。当然,当时也有一些早期的智能手机,但它们要么完全专注于电子邮件,要么缺少可以不用手写笔的复杂触摸屏。更少的设备配备了能够显示除简单文本、链接和可能还有图片之外的任何内容的像样的移动浏览器。这意味着,如果您拥有其中一款设备,那么您要么是沉迷于电子邮件的商务人士,要么是希望今年成为智能手机元年的一位技术先锋。
大规模赋值武器
一个 Ruby on Rails 应用程序突显了一些严重但又易于避免的安全漏洞。
2010 年 5 月,在用户对 Facebook 隐私政策普遍反感的新闻周期中,来自纽约大学的四个学生组成的团队发布了一份捐款 10,000 美元的请求,以构建一个注重隐私的 Facebook 替代品。该软件 Diaspora 将允许用户托管自己的社交网络并拥有自己的数据。该团队承诺开源他们编写的所有代码,通过公开代码以供公众审查来保证用户数据的隐私和安全。在《纽约时报》头版报道的帮助下,该团队最终筹集了超过 20 万美元。
大型共享数据库的协同关系数据模型
与流行的看法相反,SQL 和 noSQL 实际上只是同一枚硬币的两面。
由于它们承诺解决从大数据中提取有价值的信息和商业见解的问题,并且以可扩展且对程序员友好的方式进行,noSQL 数据库已成为我们领域最近最热门的话题之一。然而,由于开放源代码和商业产品过剩,以及周围充斥着各种技术术语,企业和从业人员很难看清问题的本质。
IPv6 成功部署的策略。真的。
知道从哪里开始就成功了一半。
TCP/IP 的设计始于 1973 年,当时 Robert Kahn 和我开始探索互连不同类型分组交换网络的后果。我们在 1974 年 5 月发表了一份概念性论文,并在 1974 年 12 月发布了一个相当完整的 TCP 规范。到 1975 年底,已经完成了几个实现,并发现了许多问题。迭代开始了,到 1977 年,得出结论,TCP(当时称为传输控制协议)应拆分为两个协议:一个简单的互联网协议,该协议通过网关互连的分组网络端到端传输数据报;以及一个 TCP,用于管理在预期互联网上的主机之间交换的数据包的流和排序。
将控制权还给程序员
在解释型语言中公开 SIMD 单元可以简化程序并释放大量未开发的处理器能力。
服务器和工作站硬件架构不断改进,但解释型语言未能跟上现代处理器的正确利用率。SIMD(单指令,多数据)单元几乎在当前每台桌面和服务器处理器中都可用,但尤其是在解释型语言中,其利用率严重不足。如果多核处理器继续保持当前的增长模式,解释型语言的性能将开始落后,因为当前的本机编译器和语言提供更好的自动化 SIMD 优化和直接 SIMD 映射支持。
可测试的系统管理
不确定性模型正在改变 IT 管理。
在过去的 20 年中,系统管理的方法几乎没有变化。虽然核心 IT 技术在许多方面都得到了改进,但对于许多(如果不是大多数)组织而言,系统管理仍然基于生产线构建物流(又名配置)和被动事件处理。随着我们进入信息时代,人类需要减少像他们使用的机器一样工作,并拥抱基于知识的方法。这意味着利用简单的(无需人工干预的)自动化,让我们不受约束地发现模式并做出决策。
国家互联网防御 - 处于冲突前沿的小国
爱沙尼亚和格鲁吉亚的袭击事件突显了国家互联网基础设施中的关键漏洞。
尽管互联网的基础协议和驱动理念具有全球性和无国界性,但在很大程度上,互联网仍然具有实质性的地域性。国家制定了政策和法律来管理并试图捍卫“他们的互联网”。这远不如一个国家的物理领土,甚至不如“它的空气”或“它的水”那样显而易见。网络空间仍然是一个更加狂野的边疆,难以定义和衡量。当其影响被注意到和可衡量时,往往很难将其归咎于责任方。
通过自动化测试发现可用性错误
自动化可用性测试可以成为现场测试的宝贵补充。
理想情况下,所有软件都应该易于使用,并且对各种各样的人来说都易于访问;然而,即使是看起来现代且直观的软件,也常常达不到最基本的可用性和可访问性目标。为什么会这样呢?一个原因是,有时我们的设计看起来很吸引人,因此我们跳过了测试其可用性和可访问性的步骤;所有这些都是为了速度、降低成本和竞争优势。
系统管理软技能
系统管理员如何减少工作场所的压力和冲突?
系统管理既有压力又有回报。压力通常来自外部因素,例如系统管理员 (SA) 与其同事之间的冲突、资源匮乏、高干扰环境、相互冲突的优先级以及系统管理员对超出其控制范围的故障负责。系统管理员及其经理可以做些什么来减轻压力?有一些众所周知的人际交往和时间管理技巧可以提供帮助,但在危机时期或仅仅是出于习惯,这些技巧可能会被遗忘。
来自系统管理员的软件供应商呼吁 - 10 条须知和禁忌
软件供应商可以做些什么来让系统管理员的生活更轻松一些?
我的一个朋友是汽车爱好者:那种在周六晚上为了乐趣而重建发动机的汽车发烧友。他向我解释说,某些品牌的汽车在设计时就考虑到了方便机械师的工作。然而,另一些汽车的设计,就好像该公司与阿司匹林行业达成了一项协议,以确保有足够多的机械师头痛。他说这些汽车公司讨厌机械师。我完全理解,因为作为一名系统管理员,我可以分辨出软件供应商何时讨厌我。这体现在他们的产品中。
系统管理中的协作
对于系统管理员来说,解决问题通常涉及与他人协作。我们如何才能使其更有效?
乔治遇到麻烦了。看似简单的部署花费了整个上午,而且似乎遥遥无期。他的经理不断进来查看他的进度,因为客户渴望完成部署。他本应离开去参加一位即将离职的同事的告别午餐,这增加了压力。他寻求了各种帮助,包括同事、应用程序架构师、技术支持,甚至其中一位系统开发人员。他使用电子邮件、即时消息、面对面交流、他的手机,甚至他办公室同事的手机与每个人交流。而且乔治绝不是新手。
虚拟化:福音还是诅咒?
大规模管理虚拟化充满了隐藏的挑战。
虚拟化通常被吹捧为解决许多具有挑战性问题的方案,从资源利用率不足到数据中心优化和碳排放减少。然而,虚拟化的隐藏成本(主要源于它带来的复杂而困难的系统管理挑战)常常被忽视。要收获虚拟化的成果,企业需要应对可扩展性限制,改造传统的运营实践,管理性能并实现前所未有的跨部门协作。虚拟化不是诅咒:它可以带来实质性的好处,但仅对有准备的人而言。
反对数据锁定的案例
想留住您的用户?让他们轻松离开即可。
工程师在编写软件时采用了许多不同的策略来关注用户:例如,听取用户反馈、修复错误以及添加用户 clamoring 的功能。由于基于 Web 的服务使用户更容易迁移到新的应用程序,因此专注于建立和保持用户信任变得越来越重要。我们发现,赢得和维护用户信任的一种非常有效的方法是让用户轻松地携带数据离开您的产品。这不仅可以防止锁定并赢得信任,还可以迫使您的团队在技术优势方面进行创新和竞争。
保持位安全:有多难?
随着存储系统变得越来越大,保护其数据以进行长期存储变得越来越具有挑战性。
如今,我们都是数据囤积者。存储很便宜,因此如果有机会数据可能有用,我们就会保留它。我们知道存储并非完全可靠,因此我们也保留备份副本。但是,我们保留的数据越多,保留的时间越长,当我们需要它时,其中一些数据将无法恢复的可能性就越大。
通过建模应对架构复杂性
组件模型可以帮助诊断新系统和现有系统中的架构问题。
现代计算机日益增长的威力使得解决曾经被认为过于困难的问题成为可能。然而,在这些功能复杂的难题领域中,系统架构常常过于复杂。在本文中,我使用术语架构来指代系统的整体宏观设计,而不是指代各个部分的实现细节。系统架构是可用功能背后的东西,包括内部和外部通信机制、组件边界和耦合,以及系统将如何利用任何底层基础设施(数据库、网络等)。
清晰地思考性能
改进复杂软件的性能很困难,但了解一些基本原则可以使其更容易。
当我于 1989 年加入 Oracle Corporation 时,性能非常难以捉摸。只有少数人声称他们可以做得非常好,这些人索取高额咨询费。当情况迫使我进入“Oracle 调优”领域时,我完全没有准备。最近,我被介绍到“MySQL 调优”世界,情况似乎与 20 多年前我在 Oracle 中看到的情况非常相似。
计算机在患者护理中的应用:希望与挑战
信息技术有可能彻底改变医疗保健。为什么进展如此缓慢?
一位来自纽约市的 29 岁女性在凌晨 3 点来到加利福尼亚州的急诊室 (ED),主诉严重的急性腹痛,将她痛醒。她报告说她正在加利福尼亚州参加婚礼,并且最近也曾遭受过类似的腹痛,最近一次导致了阑尾切除术。急诊医生进行了腹部 CAT 扫描,并看到他认为是阑尾切除术后腹腔内的伪影。除了她能够告诉他的内容外,他对患者的既往病史一无所知;他无法访问阑尾切除术之前或之后拍摄的任何图像,也无法获得有关手术记录或其他重要信息的任何其他信息。
注入错误以获得乐趣和利润
错误检测和纠正功能的好坏仅取决于我们测试它们的能力。
生活中的一个不幸事实是,任何带有运动部件的东西最终都会磨损和发生故障,电子电路也不例外。当然,在这种情况下,运动部件是电子。除了电迁移(移动的电子逐渐将金属原子推出位置,导致导线变细,从而增加其电阻并最终产生开路)和树枝状生长(相邻导线之间的电压差导致位移的金属原子相互迁移,就像磁铁会相互吸引一样,最终导致短路)的磨损机制之外,电子电路也容易受到背景辐射的影响。
信件中的教训
大型组织中的安全漏洞
我最近收到一封信,一家公司在信中通知我,他们泄露了我的一些个人信息。虽然个人数据被盗现在已很常见,但这封信让我感到惊讶,因为它很好地指出了丢失数据的公司系统中的两个主要缺陷。我将在此处插入三个具有启发意义的段落,然后讨论它们实际上可以教给我们什么。
使用代码地图进行软件开发
那些无处不在的手绘代码图会成为过去吗?
为了更好地了解专业软件开发人员如何使用其代码的可视化表示,我们采访了微软的九位开发人员以确定常见场景,然后调查了 400 多位开发人员以更深入地了解这些场景。
理想的 HPC 编程语言
也许是 Fortran。或者也许这无关紧要。
DARPA HPCS 计划旨在将 HPC 中 trans-petaflop 系统的生产力提高十倍。本文介绍了 Sun Microsystems 在其 HPCS 参与中进行的 programmability 研究。这些研究不同于 Sun 正在进行的新的 HPC 编程语言 (Fortress) 的开发以及公司更广泛的 HPCS 生产力研究,尽管与这两项活动肯定存在重叠。
可视化系统延迟
热图是可视化延迟数据的一种独特而强大的方式。然而,解释结果仍然是一个持续的挑战。
当 I/O 延迟以可视化热图形式呈现时,可能会出现一些有趣而美观的模式。这些模式提供了对系统实际运行状况以及最终用户应用程序体验到的延迟类型的深入了解。在这些模式中看到的许多特征仍然不为人所知,但到目前为止,它们的分析正在揭示以前未知的系统行为。
可视化动物园之旅
强大的可视化技术概览,从显而易见的到晦涩难懂的
得益于传感、网络和数据管理方面的进步,我们的社会正以惊人的速度产生数字信息。据估计,仅在 2010 年,我们将生成 1,200 艾字节的数据 - 是美国国会图书馆内容量的 6000 万倍。在这大数据洪流中蕴藏着关于我们如何开展业务、政府和个人生活的宝贵信息财富。为了充分利用这些信息,我们必须找到有意义地探索、关联和交流数据的方法。
保护云中的弹性
弹性计算具有巨大的潜力,但仍然存在许多安全挑战。
作为某种技术炒作的抱怨者,直到最近我才相信云计算只不过是多年来一直存在的一个想法的最新营销驱动的炒作。外包 IT 基础设施服务,又名 IaaS(基础设施即服务),自 1980 年代以来就已存在,由电信公司和主要的 IT 外包商提供。托管应用程序,又名 PaaS(平台即服务)和 SaaS(软件即服务),在 1990 年代以 ASP(应用程序服务提供商)的形式流行起来。
互联网上可靠定时的原则
通过网络同步时钟的关键在于驯服延迟变化。
每个人,以及大多数事物,都需要时钟,计算机也不例外。然而,时钟如果放任自流,往往会发生漂移,因此有必要通过与一些更高精度的参考时钟同步来定期使其回到正轨。一种经济且方便的方法是通过计算机网络来实现。
为什么云计算永远不会免费
云提供商之间的竞争可能会压低价格,但代价是什么?
IT 行业上次向企业交付外包共享资源计算是在 1980 年代的 timesharing 中,当时它发展成为一种高级艺术,交付了企业要求的可靠性、性能和服务。今天,云计算有望满足同一市场的需求,它基于新技术的革命、企业数据中心中大量未使用的计算能力以及高度强大的互联网数据通信基础设施的开发。从集中式共享基础设施交付计算的规模经济性使客户期望云计算成本将显着低于他们自己提供计算的成本。
背叛的简单性
模拟视频系统展示了即使是简单的界面也可能比看起来更复杂且更强大。
模拟器是一个程序,它运行为主机平台支持模拟器的不同计算机架构构建的程序。方法各不相同,但大多数模拟器都以某种方式模拟原始硬件。模拟器至少解释原始 CPU 指令,并为输入和输出提供模拟的硬件级设备。例如,键盘输入来自主机平台并转换为原始硬件格式,从而导致模拟程序“看到”相同的击键序列。相反,模拟器会将原始硬件屏幕格式转换为主机上的等效形式。
使用跟踪增强调试
模拟器开发中使用的一项基本技术是任何程序员工具箱的有用补充。
创建模拟器来运行旧程序是一项艰巨的任务。您需要深入了解目标硬件以及模拟器要执行的原始程序的正确功能。除了功能正确之外,模拟器还必须达到以原始实时速度运行程序的性能目标。实现这些目标不可避免地需要大量的调试。错误通常是模拟器本身中的细微错误,但也可能是对目标硬件的误解或原始程序中的实际已知错误。(原始程序的二进制数据也可能已被微妙地损坏或不是预期的版本。)
数据中心降温
可以做些什么来提高数据中心冷却系统的能源效率?
发电约占美国和英国一次能源供应的 40% 到 45%,其中很大一部分用于建筑物供暖、制冷和通风。该领域的一个新的且日益增长的挑战涉及计算机数据中心和其他用于冷却计算机数据系统的设备。2006 年,美国数据中心使用了大约 60 亿千瓦时的电力,约占该国电力消耗的 1.5%。
迈向节能计算
要使服务器端计算更节能,需要做些什么?
到目前为止,大多数人都意识到了最高级别的能源问题:我们的主要能源正在耗尽,而商业和家庭环境对能源的需求都在增加,能源使用的副作用具有重要的全球环境影响。温室气体(如二氧化碳)的排放,现在被大多数气候学家认为与全球变暖有关,只是其中一个问题。
管理多核处理器上共享资源的争用
高速缓存、内存控制器和互连的争用可以通过感知争用的调度算法来缓解。
现代多核系统旨在允许核心集群共享各种硬件结构,例如 LLC(末级高速缓存;例如,L2 或 L3)、内存控制器和互连,以及预取硬件。我们将这些资源共享集群称为内存域,因为共享资源主要与内存层次结构有关。
节能软件
电源可管理硬件可以帮助节省能源,但软件开发人员可以做些什么来解决这个问题?
电源管理功能的演进速度简直令人惊叹。如今,几乎每种尺寸和级别的计算机系统,从最小的传感器和手持设备到数据中心中的“大型机”服务器,都提供了无数用于减少、计量和限制功耗的功能。如果没有这些功能,风扇噪音将主导办公室氛围,而无线笔记本电脑将仅能使用几个小时(前提是人们可以忍受高温),而数据中心的电力和冷却成本及容量将变得难以管理。
三重奇偶校验 RAID 及更高版本
随着硬盘容量持续超过其吞吐量,新级别的 RAID 时代已经到来。
当前的 RAID 技术还能坚持多久?RAID 级别在 1980 年代后期被编纂;双奇偶校验 RAID(称为 RAID-6)是当前高可用性、空间效率存储的标准。然而,硬盘容量的惊人增长可能会对 RAID-6 系统的可靠性造成严重限制。硬盘的最新趋势表明,三重奇偶校验 RAID 必须很快变得普遍。2005 年,《科学美国人》报道了 Kryder 定律,该定律预测硬盘密度将每年翻一番。虽然翻番速度尚未完全保持该速度,但已非常接近。
飞行中的数据
流式 SQL 技术如何帮助解决 Web 2.0 数据危机。
Web 应用程序以惊人的速度生成数据,随着 Web 在我们的生活中变得越来越重要,这些速度每年都在复合增长。其他数据源(例如环境监控和基于位置的服务)是我们日常体验中快速扩展的一部分。即使吞吐量在增加,用户和企业主也希望看到他们的数据具有越来越低的延迟。计算机硬件的进步(更便宜的内存、更便宜的磁盘和更多的处理核心)在某种程度上有所帮助,但不足以跟上吞吐量上升和延迟降低的双重需求。
使用非对称多核系统最大化电源效率
非对称多核系统有望比传统的对称处理器使用更少的能量。我们如何开发软件来最大限度地发挥这种潜力?
在计算系统中,CPU 通常是最大的能源消耗者之一。因此,在过去几年中,降低 CPU 功耗一直是学术界和工业界的热门话题。为了创建更节能的 CPU,一些研究人员提出了一种非对称多核架构,该架构有望节省大量电力,同时提供与传统对称多核处理器相似的性能。
其他人的数据
公司可以访问比以往任何时候都更多类型的外部数据。他们如何才能最有效地整合它?
每个组织都将其一些关键决策基于外部数据源。除了传统的平面文件数据馈送之外,Web 服务和网页在数据仓库中也扮演着越来越重要的角色。Web 服务的增长使得数据馈送在部门甚至最终用户级别都易于消费。现在有超过 1,500 个公开可用的 Web 服务和数千个数据混搭,范围从零售销售数据到天气信息再到美国人口普查数据。这些混搭证明,当用户需要信息时,他们会找到获取信息的方法。
DNS 不是什么
DNS 对许多人来说是许多东西——也许对太多人来说是太多东西。
DNS(域名系统)是一个分层、分布式、自治、可靠的数据库。它是同类中的第一个也是唯一一个,它为全球受众和全球贡献者提供实时性能水平。每个 TCP/IP 流量流,包括每个万维网页面视图,都以至少一个 DNS 事务开始。DNS 总之,是光荣的。
你对软件维护一窍不通
长期以来被认为是事后才考虑的软件维护,在从头开始构建到系统中时最容易且最有效。
每个人都知道维护既困难又无聊,并且避免这样做。此外,他们的尖头老板会说这样的话:“没有人需要做维护 - 那是浪费时间。”
蜕变:转化系统生物学的未来转型
未来,计算机将挖掘患者数据以提供更快、更便宜的医疗保健,但我们将如何设计它们以提供信息丰富的因果解释?来自哲学、模型检查和统计测试的思想可以为所需的转化系统生物学铺平道路。
一天早上,当格雷戈里娜·萨姆莎从焦虑的梦中醒来时,她发现自己患上了一些神秘的流感样症状,这些症状没有任何警告就出现了。同样令人恼火的是,这种反复无常的蜕变似乎无法用因果关系来合理解释。“我怎么了?”她想。在去看医生之前,她决定更多地了解可能困扰她的事情。她登录到一个网站,在那里她用自己能记住的内容注释了一个时间线。自从三月份以来,她的头痛比平时更频繁,然后在四月份她开始在运动后感到更加疲劳,并且从七月份开始,她也经历过偶尔的记忆力衰退。
使用图形处理器探测生物分子机器
GPU 处理器和编程工具的演进正在使先进的模拟和分析技术为越来越多的生物医学科学家所用。
计算机模拟已成为生物分子结构和功能研究不可或缺的一部分。多年来,并行计算机一直被用于进行这些计算量大的模拟并分析其结果。这些模拟充当“计算显微镜”,使科学家能够观察传统仪器难以捕捉的分子过程的细节,这些细节太小、太快或太精细。随着时间的推移,商品 GPU(图形处理单元)已发展成为大规模并行计算设备,最近,可以使用流行的 C/C++ 编程语言的方言对其进行编程。
使用 HDF5 统一生物图像格式
生物科学需要一种能够实现高性能和长期维护的图像格式。HDF5 是答案吗?
生物科学需要一种通用的图像格式,该格式适合长期存储并且能够处理非常大的图像。图像传达了生物学中的深刻思想,跨越了各个学科。数字图像处理始于 50 年前,是一种晦涩的技术现象。现在它已成为不可或缺的计算工具。它产生了各种不兼容的图像文件格式,其中大多数已经过时。
RFID 护照的威胁分析
RFID 护照是否使我们容易遭受身份盗窃?
飞机降落在机场的那天真是美好。经过漫长的假期,你感到精神焕发、神清气爽、放松自在。当你回到家时,一切都和你离开时一样。一切都一样,除了地板上的一堆信封,它们在你试图用力打开门时卡住了门。你注意到答录机上的指示灯在闪烁,意识到你错过了几十条留言。当你点击机器并拿起信封时,你发现大部分留言和信件都来自收债公司。大部分信封都盖有“紧急”印章,当你翻阅这堆信封时,你可以听到愤怒的债权人要求你立即给他们回电话的留言。
通信监控:隐私和安全面临风险
随着窃听技术的日益精进,它对我们的隐私和安全造成的风险也越来越大。
我们都熟悉这样的场景:公寓楼的地下室,灯光昏暗。那个人穿着风衣,戴着一顶压得很低的软呢帽,遮住了脸。在帽子和外套之间,我们看到一副耳机,他似乎正全神贯注地听着连接到电话线的鳄鱼夹的输出。他是一名侦探,正在窃听嫌疑人的电话。这就是电话窃听。它与现代电子窃听关系不大,后者与比特、数据包、交换机和路由器有关。
四十亿个小老弟?隐私、手机和无处不在的数据收集
参与式传感技术可以改善我们的生活和社区,但我们为此付出的隐私代价是什么?
它们可以拨打电话、上网冲浪,全球有近 40 亿部这样的设备。它们内置的麦克风、摄像头和位置感知功能可以收集图像、声音和 GPS 数据。除了聊天和短信之外,这些功能还可以使手机成为普及、熟悉的工具,用于量化个人模式和习惯。它们也可以成为数千人记录社区、收集证据来立案或研究移动性和健康的平台。这些数据可以帮助您了解您的日常碳足迹、空气污染暴露情况、锻炼习惯以及与家人和朋友互动的频率。
理解版本控制系统
无论是分布式还是集中式,所有版本控制系统都带有一系列复杂的权衡。如何找到工具和团队之间的最佳匹配?
现代软件极其复杂,团队用来管理其开发的方法也反映了这种复杂性。虽然许多组织使用版本控制软件来跟踪和管理项目演进过程中的复杂性,但关于如何对版本控制工具做出明智选择的主题却鲜少受到关注。直到最近,版本控制领域还死气沉沉,因此在这个主题上没有什么可说的。
使用 MonALISA 监控和控制大型系统
MonALISA 开发人员描述了它的工作原理、其背后的关键设计原则以及构建它所面临的最大技术挑战。
加州理工学院的 HEP(高能物理)小组于 2002 年开始开发 MonALISA(使用大型集成服务架构的监控代理)框架,旨在提供一个分布式服务系统,能够控制和优化大规模、数据密集型应用程序。其最初的目标应用领域是网格系统以及支持 HEP 协作的数据处理和分析的网络。我们在努力满足数据密集型应用程序的需求方面的策略是转向应用程序、计算和存储设施以及网络基础设施之间更具协同作用的关系。
大数据的病理学
足够扩大您的数据集,您所有的应用程序都将崩溃。典型的问题是什么?瓶颈通常出现在哪里?
“大数据”到底是什么?千兆字节?太字节?拍字节?一段简短的个人记忆可能会提供一些视角。在 20 世纪 80 年代后期,在哥伦比亚大学,我有机会把玩当时真正巨大的“磁盘”:IBM 3850 MSS(海量存储系统)。MSS 实际上是一个全自动机器人磁带库和相关的暂存磁盘,使随机访问,如果不是完全即时的,至少是完全透明的。在哥伦比亚大学的配置中,它总共存储了大约 100 GB。当我拿到它时,它已经快要过时了,但在它的鼎盛时期,即 20 世纪 80 年代初中期,它曾被用来支持社会科学家访问当时毫无疑问的“大数据”:整个 1980 年的美国人口普查。
浏览器安全:来自 Google Chrome 的经验教训
Google Chrome 开发人员专注于三个关键问题,以保护浏览器免受攻击。
Web 已成为人们与计算机交互的主要方式之一,将人们与各种内容、服务和应用程序连接起来。用户可以轻松地在 Web 上找到新的和有趣的内容,但这带来了一个安全挑战:恶意网站运营商可以通过 Web 浏览器攻击用户。浏览器面临着在为 Web 应用程序提供丰富的平台的同时,确保用户安全的挑战。
套接字何去何从?
高带宽、低延迟和多宿主对套接字 API 提出了挑战。
套接字 API 是软件中最普及、最持久的接口之一。套接字 API 由加州大学伯克利分校的计算机系统研究组开发,于 1982 年首次作为 4.1c BSD 操作系统的一部分发布。虽然有更长寿命的 API,但一个 API 能够保持使用并基本保持不变 27 年,这令人印象深刻。套接字 API 的唯一重大更新是扩展了辅助例程以适应 IPv6 使用的更大地址。
网络前端处理器,又来了
NFE 处理器的历史揭示了设计网络堆栈软件所涉及的权衡。
NFE(网络前端)处理器的历史,目前最著名的名称是 TOE(TCP 卸载引擎),可以追溯到 Arpanet IMP(接口消息处理器),甚至更早。这个概念非常简单:将执行通信协议的工作与执行需要这些协议服务的“应用程序”的工作分开。这样,应用程序和网络机制就可以实现最高的性能和效率,并可能利用特殊的硬件性能辅助。虽然这在白板上看起来非常引人注目,但架构和实施的现实情况却会侵入,而且往往具有相当大的力量。
与物理定律作斗争:一场艰难的战斗
考虑进行长途 IPC 吗?再想想。物理定律说你没戏了。
在过去的几年中,SaaS(软件即服务)已成为希望节省资金并简化其计算基础设施的公司的有吸引力的选择。SaaS 是一组有趣的技术,用于将计算从桌面转移到云端;然而,随着它越来越受欢迎,工程师应该意识到他们在开发此类分布式应用程序时面临的一些基本限制——特别是光速是有限的。
网络犯罪 2.0:当云端变暗时
基于 Web 的恶意软件攻击比以往任何时候都更加阴险。可以采取哪些措施来阻止这一趋势?
随着 Web 已成为日常交易的关键,它也已成为网络犯罪的有吸引力的途径。我们今天在 Web 上看到的犯罪在经济上受到驱动,与更传统的网络攻击截然不同。几年前,互联网攻击者主要依靠远程利用通过扫描互联网以查找易受攻击的网络服务而识别的服务器。自主传播的计算机蠕虫,如红色代码和 SQLSlammer,就是此类扫描攻击的例子。它们巨大的规模甚至使整个互联网都处于危险之中;例如,SQLSlammer 生成的流量足以使骨干网崩溃。
我该如何建模状态?让我数数方法
对 Web 服务规范的技术和社会学进行研究
没有什么比对一个神秘的技术问题产生分歧更能展现软件架构师和开发人员的最佳(和最差)一面了。正如每位读者从经验中知道的那样,很难弄清正在争论的确切内容。造成这种缺乏清晰度的一个原因通常是不同的人关心问题的不同方面。在没有就问题达成一致意见的情况下,就解决方案达成一致意见可能很困难。
浏览器中的安全
Web 浏览器使用户容易受到越来越多的攻击。我们能否在保持其可用性的同时使其安全?
密封在海底的贫铀球体中。这是经常被提及的使计算机相当安全的方法描述。显然,在互联网时代或任何其他时代,这样的机器都将相当无用。
奥巴马竞选活动
奥巴马竞选活动因其对技术的创新使用而受到赞扬。其成功的关键是什么?
2008 年 1 月 3 日,我坐在锅炉房里等待党团会议开始。晚上 7 点,大门已经敞开大约一个小时:数月的准备工作即将取得成果。电话已经拨出,志愿者一直在拉票,现在时刻已经到来。巴拉克·奥巴马能赢得爱荷华州党团会议吗?大门关闭了,第一条短信来自一个选区:看起来出席人数很多。然后是第二条、第三条、第四条。每条都输入到我们的模型中,预测开始形成。第五条、第六条,现在是第七条。
专用语言
虽然经常打破传统语言设计的规则,但不断增长的专用“小型”语言生态系统是系统开发的重要组成部分。
在我的大学计算机科学实验室里,在漫长的编码和调试之夜的休息期间,两种永恒的争论蓬勃发展:“emacs 与 vi?”;以及“什么是最好的编程语言?”后来,当我开始在工业界工作时,我注意到关于编程语言的争论也在硅谷园区的走廊里进行。那是 90 年代,在 Sun 公司,我们中的许多人都在关注 Java 在开发人员中占据重要的市场份额,特别是那些以前使用 C 或 C++ 进行开发的人员。
代码探险重温
这个主题是否重要到足以在五年内发表两篇文章?我认为是。
自从我第一次写关于代码探险的文章以来已经五年了,虽然系统继续在规模和范围上增长,但我们用来理解这些系统的工具并没有以相同的速度增长。事实上,我认为我们正在稳步倒退。那么,我们为什么要再次重蹈覆辙呢?这个主题是否重要到足以在五年内发表两篇文章?我认为是。
更好的脚本,更好的游戏
更智能、更强大的脚本语言将提高游戏性能,同时使游戏玩法开发更有效率。
视频游戏行业在 2007 年创造了 88.5 亿美元的收入,几乎与电影票房收入一样多。这些收入的大部分是由大型团体创作的大片游戏产生的。虽然大型开发团队在软件行业中并不少见,但游戏工作室往往拥有独特的开发人员集合。软件工程师在游戏开发团队中只占相对较小的比例,而团队的大部分由内容创作者组成,如艺术家、音乐家和设计师。
游戏和虚拟世界中的扩展
在线游戏和虚拟世界具有熟悉的扩展要求,但不要被愚弄了:您所知道的一切都是错误的。
我曾经是一名系统程序员,致力于为银行、电信公司和其他工程师使用的基础设施。我从事操作系统的工作。我从事分布式中间件的工作。我从事编程语言的工作。我编写工具。我做了硬核系统程序员所做的一切。
XML 热
不要让对 XML 的妄想发展成 XML 热的毒株。
XML(可扩展标记语言)刚刚庆祝了它的 10 周年,是 Web 的巨大成功故事之一。除了基本的 Web 技术(URI、HTTP 和 HTML)以及驱动 Web 2.0 浪潮的高级脚本之外,XML 是迄今为止最成功和最普及的 Web 技术。然而,能力越大,责任越大,因此,虽然 XML 作为第一个真正通用的结构化数据标准而取得的成功是当之无愧的,但它现在必须应对围绕它产生的众多问题。
高性能网站
想让您的网站飞起来吗?关注前端性能。
Google 地图、Yahoo! 邮箱、Facebook、MySpace、YouTube 和亚马逊都是为扩展而构建的网站示例。它们访问拍字节的数据,以每秒太比特的速度向全球数百万用户发送数据。这种规模令人敬畏。用户从更狭窄的角度看待这些大型网站。典型的用户拥有兆字节的数据,这些数据以每秒数百千比特的速度下载。用户对每秒服务的海量请求数量不太感兴趣;他们更关心他们个人的请求。
提高互联网性能
鉴于互联网的瓶颈,我们如何构建快速、可扩展的内容交付系统?
在为商业级 Web 应用程序实现性能、可靠性和可扩展性方面,最大的瓶颈在哪里?在当今的许多情况下,我们看到限制瓶颈是中间一英里,或者数据在源服务器和最终用户之间通过互联网来回传输所花费的时间。
最终一致性
构建全球范围内的可靠分布式系统需要在一致性和可用性之间进行权衡。
亚马逊云计算的基础是基础设施服务,如亚马逊的 S3(简单存储服务)、SimpleDB 和 EC2(弹性计算云),这些服务为构建互联网规模的计算平台和各种各样的应用程序提供了资源。对这些基础设施服务的要求非常严格;它们需要在安全性、可扩展性、可用性、性能和成本效益方面取得高分,并且它们需要在持续不断地为全球数百万客户提供服务的同时满足这些要求。
构建可扩展的 Web 服务
只构建您真正需要的。
在 Web 的早期,我们严重缺乏工具和框架,事后看来,早期 Web 服务能够扩展似乎值得注意。如今,虽然工具已经进步,但对交互的丰富性、性能和可扩展性的期望也提高了。鉴于这些提高的期望,建议只构建您真正需要的,并在可能的情况下依赖他人的工作。最重要的是,在选择何时、什么以及如何优化时要谨慎。
软件事务内存:为什么它只是一个研究玩具?
STM 的前景很可能因其开销和工作负载适用性而受到损害。
TM(事务内存)是一种并发控制范例,为代码区域提供原子和隔离执行。许多研究人员认为 TM 是解决多核处理器编程问题最有希望的解决方案之一。它最吸引人的特点是大多数程序员只需要在本地考虑共享数据访问,标记要以事务方式执行的代码区域,并让底层系统确保正确的并发执行。该模型有望提供细粒度锁定的可扩展性,同时避免锁组合的常见陷阱,如死锁。
使用事务内存进行并行编程
虽然有时即使编写常规的单线程程序也可能非常具有挑战性,但尝试将程序拆分成多个可以并行执行的部分会增加一个全新的额外问题维度。事务内存借鉴了大多数程序员熟悉的事务概念,旨在解决其中一些问题,并使并行编程更容易。来自红帽的 Ulrich Drepper 向我们展示了它是如何完成的。
随着单个内核的速度不再以我们在过去几十年中喜爱的速度增长,程序员必须寻找其他方法来提高我们日益复杂的应用程序的速度。CPU 制造商提供的功能是增加执行单元或 CPU 内核的数量。
用于并发编程的 Erlang
编程语言在处理并发方面可以发挥什么作用?一个答案可以在 Erlang 中找到,Erlang 是一种从头开始为并发设计的语言。
Erlang 是一种旨在让凡人编写、测试、部署和调试容错并发软件的语言。它于 20 世纪 80 年代后期在瑞典电信公司爱立信开发,最初是开发用于管理电话交换机的软实时软件的平台。此后,它已开源并移植到多个通用平台,不仅在分布式互联网服务器应用程序中找到了自然的契合点,而且在图形用户界面和普通批处理应用程序中也找到了自然的契合点。
真实世界的并发
在本次对并发如何影响现实世界从业者的观察中,Cantrill 和 Bonwick 认为,对并发的大部分焦虑是不必要的。
如果当今的软件从业者对最近的微处理器发展感到对软件的未来有些担忧,那是可以原谅的。虽然摩尔定律继续成立(即晶体管密度大约每 18 个月翻一番),但由于难以解决的物理限制和实际工程考虑,这种不断增加的密度不再用于提高时钟频率。相反,它被用于在单个 CPU 芯片上放置多个 CPU 内核。
五年法则 20 年后:以及闪存如何改变规则
旧规则继续演变,而闪存增加了两条新规则。
1987 年,Jim Gray 和 Gianfranco Putzolu 发表了他们现在著名的五年法则,用于权衡内存和 I/O 容量。他们的计算比较了将记录(或页面)永久保存在内存中的成本与每次访问记录(或页面)时执行磁盘 I/O 的成本,使用了 RAM 芯片和磁盘驱动器价格的适当比例。他们的规则的名称指的是访问之间的盈亏平衡间隔。如果记录(或页面)被更频繁地访问,则应将其保存在内存中;否则,它应保留在磁盘上并在需要时读取。
企业级 SSD
固态硬盘终于为企业做好了准备。但请注意,并非所有 SSD 都是一样的。
对于企业系统的设计人员来说,确保硬件性能与应用程序需求保持同步是一项令人头痛的工作。最令人困扰的性能挑战是存储 I/O。旋转介质虽然在扩展面密度方面非常出色,但不幸的是,永远无法跟上 I/O 需求。突破这些存储 I/O 限制的最具成本效益的方法是将高性能 SSD(固态硬盘)集成到系统中。
今天的闪存存储
闪存能否成为存储层次结构中新层级的基础?
过去几年是闪存令人兴奋的时期。随着制造变得更加高效,市场不断增长,成本已大幅下降;随着更好的工艺和每个单元格更多位数的出现,密度得到了提高;闪存已被广泛应用于各种应用程序中。闪存生态系统已经扩展并继续扩展,尤其是在消费领域的 U 盘、相机、加固型笔记本电脑和手机方面。
服务器应用程序的闪存盘机会
与传统磁盘相比,未来的基于闪存的磁盘可以在 IOPS、功耗、可靠性和体积容量方面提供突破。
自 1996 年以来,NAND 闪存密度每年翻一番。三星宣布其 32 千兆位 NAND 闪存芯片将于 2007 年上市。这与黄昌圭的闪存增长模型 1 一致,即 NAND 闪存密度将在 2010 年之前每年翻一番。黄最近将 2003 年的预测延长至 2012 年,表明密度将是目前的 64 倍,即每个芯片 250 GB。这很难让人相信,但自他 2003 年发表文章时 2 GB 芯片刚刚出现以来,黄和三星已经实现了 16 倍的增长。因此,我们应该为闪存驱动器达到太字节 (!) 的那一天做好准备。
先驱者的闪光洞察
Jim Gray 对基于闪存的存储的愿景锚定了本期主题。
在《Queue》五/六月刊中,Eric Allman 写了一篇纪念 Jim Gray 的文章,提到《Queue》将在未来几个月刊登 Jim 的一些最佳作品。我很惭愧地承认,当这个想法最初被讨论时,我假设这些论文将主要由 Jim 关于数据库的开创性工作组成,这只表明我(与《Queue》编辑委员会上的所有人不同)从未真正了解 Jim。为了更多地了解他的工作和 Jim 本人,我参加了 5 月在加州大学伯克利分校为他举行的纪念活动。
分布式计算经济学
计算经济学正在发生变化。如今,以下各项的价格大致相当:(1)一次数据库访问;(2)10 字节的网络流量;(3)100,000 条指令;(4)10 字节的磁盘存储;以及(5)兆字节的磁盘带宽。这对如何构建互联网规模的分布式计算具有重要意义:人们将计算尽可能地靠近数据,以避免昂贵的网络流量。
计算是免费的。世界上最强大的计算机是免费的(SETI@Home 是一台 54 万亿次浮点运算的机器)。谷歌每年向世界上最大的在线数据库(2 拍字节)免费提供一万亿次搜索。Hotmail 每年免费传输一万亿封电子邮件。Amazon.com 提供免费图书搜索工具。许多网站提供免费新闻和其他免费内容。电影、体育赛事、音乐会和娱乐节目可以通过电视免费观看。
水手颂
水手,你转瞬即逝的情绪意象;所有水手都带着熊般的优雅,粗糙的双手和诗意的梦想;
纪念 Jim Gray
向 Jim Gray 致敬
计算机科学吸引了许多非常聪明的人,但少数人脱颖而出,他们似乎天生就具有我们大多数人被剥夺的那种创造力。艾伦·图灵、埃兹格·迪杰斯特拉和约翰·巴科斯等人的名字浮现在脑海中。Jim Gray 也是其中一位。
BASE:ACID 的替代方案
在分区数据库中,为了可用性而牺牲一些一致性可以显着提高可扩展性。
Web 应用程序在过去十年中越来越受欢迎。无论您是为最终用户还是应用程序开发人员(即服务)构建应用程序,您最有可能希望您的应用程序能被广泛采用,并且随着广泛采用,交易增长也会随之而来。如果您的应用程序依赖于持久性,那么数据存储可能会成为您的瓶颈。
揭示 ORM 缓存
熟悉 ORM 缓存问题可以帮助防止性能问题和错误。
在 20 世纪 90 年代初期,当面向对象的语言进入软件开发的主流时,开发人员看到了创建软件程序的新方法和更好的方法,生产力显着提高。尽管新的高效对象编程范例受到越来越多组织的欢迎和接受,但关系数据库管理系统仍然是管理企业数据的首选技术。因此,ORM(对象关系映射)应运而生,这是出于必要,并且随后将对象环境的持久状态保存在关系数据库中的复杂挑战称为对象关系阻抗失配。
动态语言中的 ORM
用于 Groovy 等动态语言的 O/R 映射框架提供了不同风格的 ORM,可以大大简化应用程序代码。
大多数企业应用程序的主要组成部分是将对象移入和移出关系数据库的代码。最简单的解决方案通常是使用 ORM(对象关系映射)框架,该框架允许开发人员声明式地定义对象模型和数据库模式之间的映射,并以对象的形式表达数据库访问操作。这种高级方法显着减少了需要编写的数据库访问代码量,并提高了开发人员的生产力。
弥合对象关系鸿沟
ORM 技术可以简化数据访问,但请注意引入这个新的抽象层带来的挑战。
现代应用程序是使用两种截然不同的技术构建的:用于业务逻辑的面向对象编程;以及用于数据存储的关系数据库。面向对象编程是实现复杂系统的关键技术,提供可重用性、健壮性和可维护性的好处。关系数据库是持久数据的存储库。ORM(对象关系映射)是两者之间的桥梁,允许应用程序以面向对象的方式访问关系数据。
软件开发的阴阳
基础设施元素如何使开发团队在不限制创造力的情况下提高生产力
Parasoft 的 C/C++ 解决方案管理器解释了基础设施元素如何使开发团队在不限制创造力的情况下提高生产力。
管理协作
TechExcel 的 Jeff Johnstone 解释了为什么需要一种新的应用程序生命周期管理方法,该方法可以更好地反映开发团队面临的业务需求和挑战。
我认为从根本上讲,开发被认为是,并且已经变得更像是一个业务流程,而不仅仅是一组工具。过去,就像您说的那样,开发人员和开发组织有点孤立无援。他们相当自主,他们会做适合流程每个部分的事情,并且他们会采用在技术和工具级别上合适的 technology,但他们并没有真正将自己视为任何更高业务流程的组成部分。
通过语音获得更广泛的覆盖范围
开发人员有机会通过语音启用他们的应用程序来显着扩展其应用程序的吸引力和覆盖范围,但这是否足够?
BlueNote Networks 产品战略副总裁 Mark Ericson 认为,为了利用新的语音技术,您必须制定一个计划,将该功能直接集成到驱动现有业务流程的应用程序中。
从负债到优势:与 John Graham-Cumming 和 John Ousterhout 的对话
软件生产已成为许多开发组织中的瓶颈。
软件生产(软件开发的后端,包括构建、测试、打包和部署等任务)已成为许多开发组织中的瓶颈。在本次访谈中,Electric Cloud 创始人 John Ousterhout 解释了如何将软件生产从负债转变为竞争优势。
武装您的应用程序以实现万无一失的部署:与 Tom Spalthoff 的对话
公司可以实现可靠的桌面环境,同时减少准备高质量应用程序包所花费的时间和成本。
应用程序、更新和补丁的部署是任何 IT 部门最常见且风险最高的功能之一。部署任何未正确配置为分发的应用程序都可能中断或崩溃关键应用程序,并使公司在生产力损失和帮助台费用方面付出惨重代价——而公司每天都在这样做。事实上,Gartner 报告称,即使经过 10 年的经验,大多数公司也无法以 90% 或更高的成功率自动部署软件。
知识产权和软件盗版
知识产权保护和软件许可的力量,与 Aladdin 副总裁 Gregg Gronowski 的访谈
我们今天在这里讨论知识产权和整个软件盗版问题,而我们在 Aladdin 的朋友被认为是当今保护软件 IP、防止软件盗版以及实现软件许可和合规性的事实标准之一。因此,今天加入我们讨论该主题的是 Aladdin 副总裁 Greg Gronowski。
可重构的未来
生产更便宜、更紧凑芯片的能力是一把双刃剑。
预测未来是出了名的难。有时候我觉得唯一能真正保证的是未来一定会发生,而且总会有人指出未来和预测的不一样。尽管如此,我们似乎仍然执着于试图弄清楚未来会发生什么,更糟糕的是,记录下这些观点,以便日后用来反驳我们。所以,我就开始了…… 规模化一直在推动整个电子产业的发展,使其能够以更低的成本生产出集成更多晶体管的芯片。
iSCSI 的兴起
现代 SCSI,正如 SCSI-3 架构模型(或 SAM)所定义的那样,实际上将连接到存储的电缆和物理互连仅视为更高级别层次结构中的一个层次。
当大多数 IT 专业人士想到 SCSI 时,脑海中会浮现出带有许多易碎引脚的粗电缆的图像。当然,这是一种表现形式。但是,现代 SCSI,正如 SCSI-3 架构模型(或 SAM)所定义的那样,实际上将连接到存储的电缆和物理互连仅视为更高级别层次结构中的一个层次。通过将发送到设备和从设备发送的指令或命令与物理层及其协议分离,您可以获得一种更通用的存储通信方法。
DAFS:一种新型高性能网络文件系统
这种新兴的文件访问协议显著增强了网络上的数据流动,使数据中心的生活更加轻松。
直接访问文件系统 (DAFS) 是一种远程文件访问协议,旨在利用新型高吞吐量、低延迟网络技术。
未来图形架构
GPU 继续快速发展,但方向是什么?
图形架构正处于重大转型之中。过去,这些是专门的架构,旨在支持单一渲染算法:标准 Z 缓冲。实时 3D 图形现在已经发展到 Z 缓冲算法在生成下一代更高质量的视觉效果方面存在严重缺陷的程度,而这些效果正是游戏和其他交互式 3D 应用程序所需要的。人们也希望利用图形架构的高计算能力来支持碰撞检测、近似物理模拟、场景管理和简单的人工智能。
使用 CUDA 进行可扩展的并行编程
CUDA 是应用程序开发人员一直在等待的并行编程模型吗?
多核 CPU 和众核 GPU 的出现意味着主流处理器芯片现在是并行系统。此外,它们的并行性随着摩尔定律继续扩展。挑战在于开发主流应用程序软件,使其并行性能够透明地扩展,从而利用越来越多的处理器内核,就像 3D 图形应用程序透明地将其并行性扩展到具有数量差异很大的内核的众核 GPU 一样。
数据并行计算
数据并行性是利用当今众核 GPU 强大功能的一个关键概念。
用户始终关心性能。虽然通常只是确保软件只做它应该做的事情,但在许多情况下,深入了解底层硬件并利用处理器的基本特性至关重要。
GPU:更深入的了解
随着 GPU 和 CPU 之间的界限开始变得模糊,了解 GPU 的工作原理非常重要。
游戏玩家在近乎电影级别的细节渲染的虚拟世界中漫步。几秒钟后,屏幕上充满了 3D 爆炸,这是隐藏在物理上精确的阴影中的看不见的敌人的结果。用户失望地退出游戏,返回到计算机桌面,该桌面展示了现代窗口管理器的时尚 3D 外观。这两种视觉体验都需要数百 GFlops 的计算性能,而这正是每台消费级 PC 中存在的 GPU(图形处理单元)所满足的需求。
OSGi 如何改变了我的生活
乐高假设的承诺尚未完全实现,但它们仍然是一个值得追求的目标。
在 20 世纪 80 年代早期,我发现了 OOP(面向对象编程)并深深地爱上了它。像往常一样,这种爱意味着说服管理层投资这项新技术,最重要的是,送我去参加酷炫的会议。所以我向我的经理推销了这项技术。我向他描绘了美好的未来,有一天我们将从现成的类创建应用程序。我们将从存储库中获取这些类,将它们组合在一起,瞧,一个新的应用程序就诞生了。今天,我们或多或少地认为对象是理所当然的,但如果我诚实地说,我在 1985 年向我的经理所做的推销从未真正实现。
网络虚拟化:突破性能瓶颈
虚拟化平台中的共享 I/O 已经取得了长足的进步,但性能问题仍然存在。
虚拟化最近的人气复苏导致其在越来越多的环境中使用,其中许多环境需要高性能网络。例如,考虑服务器整合。网络虚拟化的效率直接影响可以有效地整合到单台物理机上的网络服务器数量。不幸的是,现代网络虚拟化技术会产生显著的开销,这限制了可实现的网络性能。我们需要新的网络虚拟化技术来充分发挥虚拟化在网络密集型领域的优势。
虚拟化的成本
软件开发人员需要意识到在使用虚拟化技术时面临的妥协。
虚拟化可以通过多种不同的方式实现。它可以有硬件支持,也可以没有硬件支持。虚拟化操作系统可以预期会进行更改以准备虚拟化,或者可以预期它在不更改的情况下工作。无论如何,软件开发人员都必须努力实现 Gerald Popek 和 Robert Goldberg 提出的虚拟化的三个目标:保真度、性能和安全性。
超越服务器整合
服务器整合帮助公司提高资源利用率,但虚拟化在其他方面也能提供帮助。
虚拟化技术在 20 世纪 60 年代后期被开发出来,目的是更有效地利用硬件。硬件很昂贵,而且可用性不高。处理工作主要外包给少数拥有计算机的地方。在单台 IBM System/360 上,可以并行运行多个环境,这些环境保持完全隔离,并给每个客户一种拥有硬件的错觉。虚拟化是以粗粒度级别实现的分时,隔离是该项技术的关键成就。
认识一下 Virts
虚拟化技术并不新鲜,但它在过去 30 年中已经成熟了很多。
当你深入研究所谓的“一夜成名”的故事时,你经常会发现它们实际上已经酝酿多年。虚拟化已经存在了 30 多年,自从你们中的一些人还在向非常物理的机器中输入成堆的穿孔卡片的日子开始,但在 2007 年,它发生了转折。VMware 是当年 IPO 的轰动事件;2007 年 11 月,不少于四家主要的操作系统供应商(Microsoft、Oracle、Red Hat 和 Sun)宣布了重要的新虚拟化功能;在时尚的技术专家中,虚拟似乎已成为新的潮流。
大型游戏,小型屏幕
为移动设备开发 3D 游戏充满了挑战,但丰富且不断发展的工具集能够实现一些惊人的效果。
在创建和分发移动 3D 游戏时,立即显而易见的一件事是,手机市场与更传统的游戏市场(如游戏机和掌上游戏设备)之间存在根本差异。其中最引人注目的是交付平台的数量;设备的严重限制,包括可以改变方向的小屏幕;有限的输入控制;处理其他任务的需求;非物理交付机制;以及手机性能和输入能力的变化。
理解 DRM
认识到与不同 DRM 系统相关的权衡,可以为更灵活和功能更强大的 DRM 铺平道路。
互联网和数字媒体的爆炸性增长为内容创作者带来了巨大的机遇和新的威胁。数字技术的进步为营销、传播、互动和盈利创意作品提供了新的方式,催生了仅仅几年前还不存在的不断扩大的市场。然而,与此同时,这些技术也给寻求控制其作品分发和防止盗版的版权所有者带来了重大挑战。
文档和媒体挖掘
DOMEX 的挑战是将数字比特转化为可操作的情报。
基地组织使用的计算机最终落入《华尔街日报》记者手中。发现了一台来自伊朗的笔记本电脑,其中包含该国核武器计划的详细信息。照片和视频从恐怖分子网站下载。正如这些以及无数其他案例所证明的那样,数字文档和存储设备掌握着许多正在进行的军事和刑事调查的关键。使用这些媒体和文档最直接的方法是使用普通工具探索它们——使用 Microsoft Word 打开 word 文件,使用 Internet Explorer 查看网页等等。
降低功耗
智能电源管理的关键是用我们拥有的资源做更多的事情。
电源管理是每个人都感兴趣的话题。最初是台式电脑。它以固定速度运行,功耗低于与之连接的显示器。在便携式电脑方面,它们的巨大尺寸和重量意味着你更有可能受到体力的限制,而不是电池寿命的限制。那不是电源管理的好时代。现在考虑一下现在的情况。笔记本电脑的速度提高了 5000 多倍。可悲的是,电池容量却没有。然而,随着硬件变得越来越移动化,用户要求电池寿命开始与他们的工作方式相匹配。
存储虚拟化变得智能
过度配置、利用率不足的存储资源的日子可能很快就会成为过去。
在过去的 20 年里,我们已经看到存储从具有固定可靠性、性能和容量的“哑”资源转变为更智能的资源,它实际上可以在数据管理中发挥作用。然而,尽管存储系统的功能不断增强,但传统的存储管理模型使得有效地利用这些数据管理功能变得困难。最终结果是过度配置和利用率不足。简而言之,尽管承诺智能共享存储将简化数据管理,但现实却并非如此。
硬盘驱动器:好的、坏的和丑陋的!
硬盘就像花生酱和果冻三明治中的面包。
硬盘就像花生酱和果冻三明治中的面包——一种不那么令人兴奋的硬件,对于容纳“软件”是必要的。它们仅仅是达到目的的一种手段。然而,硬盘的可靠性一直是数据存储中的一个重大薄弱环节,也许是最薄弱的环节。在 20 世纪 80 年代后期,人们认识到硬盘的可靠性不足以满足大型数据存储系统的需求,因此在系统级别通过一些出色的软件算法添加了冗余,RAID(廉价磁盘冗余阵列)成为现实。RAID 将可靠性要求从硬盘本身转移到数据磁盘系统。
标准化存储集群
pNFS 会成为并行数据访问的新标准吗?
数据密集型应用,如数据挖掘、电影动画、石油和天然气勘探以及天气建模,会生成和处理海量数据。文件数据访问吞吐量对于良好的性能至关重要。为了良好地扩展,这些 HPC(高性能计算)应用程序会在众多客户端机器之间分配其计算。HPC 集群的范围可以从数百个到数千个客户端,聚合 I/O 需求范围达到每秒数十千兆字节。
敏捷 Memeplex 之旅
在敏捷开发的世界中,上下文是关键。
敏捷流程不是一项技术,不是一门科学,也不是一种产品。它们构成了一个有些难以定义的空间。敏捷方法,或者更准确地说,敏捷软件开发方法或流程,是一系列用于开发软件系统的方法和实践。任何试图定义它们都可能遇到自我和营销姿态。对于我们这里的目的,我们可以通过两种方式定义这个空间:通过枚举。指出该集合的可识别成员:XP、scrum、精益开发、DSDM、Crystal、FDD、Agile RUP 或 OpenUP 等。
Web 的可用性测试
如今复杂的 Web 应用程序使得跟踪和倾听用户比以往任何时候都更加重要。
如今的互联网用户比以往任何时候都有更多的选择,许多竞争网站提供类似的服务。这种选项的激增为用户探索不同的网站并找出哪个网站最适合他们对任何特定服务的需求提供了充足的机会。最新一代的 Web 技术和服务(通常被称为 Web 2.0)进一步为用户服务,这些技术和服务实现了更好、更个性化的用户体验,并鼓励用户生成内容。
禁止网络钓鱼
当前的反网络钓鱼技术可以防止用户上当受骗。
网络钓鱼是当今互联网用户面临的重大风险。通过电子邮件或即时消息,用户被引导到旨在欺骗他们泄露用户名、密码、帐号和个人信息的假冒网站。确保网站的真实性取决于用户。浏览器提供了一些工具,但这些工具至少受到三个问题的限制。
构建安全的 Web 应用程序
信不信由你,这并非毫无希望。
在网络钓鱼和几乎每天都宣布通过大规模数据丢失导致身份盗用的日子里,谈论保护 Web 安全似乎几乎是荒谬的。在这一点上,大多数人似乎准备放弃这个想法,或者锁定他们可以控制的一个小组件,以控制感知到的混乱。
迈向商品化企业中间件
AMQP 能否开启消息传递中间件的新时代?深入了解基于标准的 AMQP 消息传递
AMQP 的诞生源于我在投资银行开发前台和后台处理系统方面的经验和挫折。在我看来,我们似乎生活在集成“土拨鼠日”中——连接系统的相同问题会令人沮丧地反复出现。每次都会发生关于使用哪些产品的相同讨论,并且每次某个系统的架构都会受到限制,以允许选择的中间件令人放心地昂贵。从 1996 年到 2003 年,我一直在等待这个显而易见的需求的解决方案以标准的形式出现,从而成为一种商品。
Linux 安全的七宗罪
像躲避魔鬼一样避开这些常见的安全风险。
安全建议的问题在于,它太多了,而那些负责安全的人肯定没有足够的时间来实施所有建议。挑战在于确定最大的风险是什么,并首先担心这些风险,并在时间允许的情况下担心其他风险。这里介绍的是七个常见问题——安全的七宗罪——最有可能对您的系统或银行帐户造成重大损害。
API:设计至关重要
为什么更改 API 可能会成为刑事犯罪。
在做了 25 多年的软件工程师之后,我仍然发现自己低估了完成特定编程任务所需的时间。有时,由此导致的进度延误是由于我自身的缺点造成的:当我深入研究问题时,我只是发现它比我最初想象的要困难得多,因此解决问题需要更长的时间——这就是程序员的生活。同样经常发生的情况是,我确切地知道我想实现什么以及如何实现它,但它仍然比预期的要花费更长的时间。当这种情况发生时,通常是因为我正在努力使用一个 API,这个 API 似乎尽其所能地在我的道路上扔石头,让我的生活变得艰难。
超越 Beowulf 集群
随着集群规模和复杂性的增长,管理其配置变得越来越困难。
在 90 年代初期,David Culler 领导下的伯克利 NOW 项目提出,可以使用性能较低的机器组来解决科学和其他计算问题,其成本仅为大型计算机的一小部分。1994 年,Donald Becker 和 Thomas Sterling 通过采用当时刚起步的 Linux 操作系统在 NASA 戈达德太空飞行中心构建 Beowulf 集群,进一步降低了成本。通过将桌面机器与 PVM、MPI 和 PBS 等开源工具捆绑在一起,早期的集群(通常是将 PC 塔堆放在金属架子上,并用一堆电线将它们互连)从根本上改变了科学计算的平衡。
安全性的演变
大自然能告诉我们关于如何最好地管理我们的风险吗?
除非发生了严重的尴尬事件,否则安全人员永远不会负责。否则,他们的建议会受到“经济现实”的制约,也就是说,安全是一种手段,而不是目的。这应该是这样。由于手段是关于权衡,安全也是关于权衡,但您已经知道所有这些。我们的权衡决策可能很难做出,而这些难以做出的决策有两种类型。一种类型发生在备选方案的不确定性太大,以至于无法根据可能的效应进行排序时。因此,其他因素(如熟悉度或便利性)将驱动决策。
DNS 复杂性
尽管 DNS 只包含几个简单的规则,但它已经发展成为一个极其复杂的系统。
DNS 是一个分布式、一致、可靠、自主、分层数据库,是同类数据库中的第一个也是唯一一个。DNS 创建于 20 世纪 80 年代,当时互联网还很年轻,但已经超出了其用于将主机名转换为 IP 地址的原始系统,DNS 是使全球互联网成为可能的基础技术之一。然而,这一切并非一帆风顺,DNS 技术一直在定期更新和改进。尽管仍然可以用简单的术语来描述 DNS,但底层的细节现在已经非常精妙。
使用 SIP 的统一通信
SIP 可以将实时通信作为一种网络服务提供。
基于 SIP(会话发起协议)标准的通信系统在过去几年中取得了长足的进步。SIP 现在已基本完成,甚至涵盖了高级电话和多媒体功能以及功能交互。来自不同供应商的解决方案之间的互操作性在 SIP 论坛组织的 SIPit(互操作性测试)会议等活动中反复得到证明,并且多家制造商已经证明,对该标准的专有扩展不再受技术需求驱动,而是受商业考虑驱动。
让 SIP 产生价值
使用 SIP 的 P2P 支付可以实现新型微支付应用程序和商业模式。
会话发起协议 (SIP) 用于在基于 IP 的网络中建立实时会话。这些会话可能是用于音频、视频或 IM 通信,也可能用于中继状态信息。SIP 服务提供商主要专注于提供一种服务,该服务复制 PSTN(公共交换电话网络)或 PLMN(公共陆地移动网络)提供的服务到基于互联网的环境。
分散式 SIP
如果您正在寻找低维护的 IP 通信网络,点对点 SIP 可能正是您所需要的。
SIP(会话发起协议)是当今使用最广泛的 VoIP 协议。1 它被企业、消费者甚至运营商广泛用于其网络的核心。由于 SIP 旨在建立任何类型的媒体会话,因此它也被用于 VoIP 之外的各种多媒体应用程序,包括 IPTV、视频会议甚至协作视频游戏。
SIP:基础知识和超越
SIP 不仅仅是一个简单的电话应用程序协议,它还是一个用于开发通信系统的框架。
您很可能已经在使用 SIP(会话发起协议)。它是推动当前通信系统演进的关键创新之一。它的第一个主要用途是互联网电话中的信令。大型运营商多年来一直在其网络内部使用 SIP 进行互连和跨长途干线传输。如果您拨打了长途电话,则该通话的一部分可能使用了 SIP。
实时垃圾回收
现在可以使用 Java 开发实时系统了。
传统的计算机科学处理正确结果的计算。实时系统与物理世界交互,因此它们具有第二个正确性标准:它们必须在限定的时间内计算出正确的结果。仅仅构建功能正确的软件就已经足够困难了。当将时间添加到需求中时,构建软件的成本和复杂性会大大增加。
开放与封闭
哪个来源更安全?
在开发者群体中引发争论的最佳方式莫过于宣称操作系统 A 比操作系统 B“更安全”。我从亲身经历中知道这一点,因为我之前发表的关于这个主题的论文导致了大量针对我的激烈电子邮件——包括一些确实是人身威胁的邮件。尽管试图调查不同软件项目的相对安全性会产生热量(而不是光明!),但我们必须进行调查。
领先一步
安全漏洞比比皆是,但一些简单的步骤可以最大限度地降低您的风险。
IT 部门每天都在与试图闯入公司网络的黑客进行持续的斗争。入侵可能会带来高昂的代价:有价值信息的丢失、公司形象和品牌的玷污、服务中断以及数百小时的恢复时间。与其他方面的信息技术不同,安全性是对抗性的。它使 IT 部门与黑客对抗。
更好、更快、更安全
谁来掌控互联网的未来?
自从 2005 年 3 月我开始担任 IETF 主席以来,我经常被问到“接下来会发生什么?”,但我通常拒绝回答。没有人掌控互联网,这是一件好事,但这使得预测变得困难。缺乏中央控制是一件好事的原因在于,它使互联网在其整个生命周期中成为创新的实验室——并且对于一个主要的运营系统来说,充当其自身的开发实验室是罕见的。
虚拟化现实
虚拟机监控器是系统软件的新基础吗?
与当代计算基础设施的部署和配置相关联的许多重要挑战。考虑到操作系统的种类及其众多版本——包括容纳各种流行的应用程序通常所需的特定配置——建立和管理此类系统已成为一个难题。
解锁并发性
使用事务内存的多核编程
多核架构是主流软件开发的一个拐点,因为它们迫使开发人员编写并行程序。在之前发表在 Queue 上的一篇文章中,Herb Sutter 和 James Larus 指出,“并发革命主要是一场软件革命。困难的问题不是构建多核硬件,而是以一种让主流应用程序能够从 CPU 性能的持续指数增长中受益的方式对其进行编程。”在这个新的多核世界中,开发人员必须编写显式并行应用程序,这些应用程序可以利用每个后续多核世代将提供的越来越多的内核。
玩真的了
安全威胁会终结通用计算吗?
拐点会在你毫无准备的情况下到来,并迅速消失在触手可及的范围之外。我们现在可能正接近一个拐点。如果是这样,我们现在即将玩真的了,“我们”不仅仅是指我们这些安全极客。如果说有什么的话,那是因为我们这些安全极客还没有创造必要的奇迹,所以拐点似乎正在高速逼近。
犯罪代码:网络罪犯的形成
关于恶意软件创作者及其经历的虚构故事
这是一个关于恶意软件创作者及其经历的虚构故事。尽管角色是虚构的,但技术和事件是根据许多不同群体开发恶意软件的真实活动模式化的。“赚点钱!”米沙的父亲喊道。“你把所有时间都花在一个愚蠢的比赛上,它给你带来了什么?什么都没有!你没有工作,甚至没有赢!你需要停止玩愚蠢的电脑游戏,赚点钱!”
电子邮件身份验证:是什么、为什么、如何?
也许我们应该在 Usenet 开始变坏时就弄清楚会发生什么。
互联网电子邮件的构想与我们今天生活的世界不同。那是一个小型、紧密联系的社区,我们真的不必太担心坏人。通常,如果有人做错了事,可以通过社会手段来解决问题;“排斥”在小型社区中非常有效。也许我们应该在 Usenet 开始变坏时就弄清楚会发生什么。Usenet 基于一个名为 UUCP 的廉价网络,该网络很容易加入,因此它让我们体验到了当社区变得更大、更分散且更难管理时会发生什么。
网络犯罪:一种流行病
谁犯下这些罪行,他们的动机是什么?
从最广泛的角度来看,网络犯罪本质上是利用信息系统和技术来实施盗窃、敲诈勒索、身份盗窃、欺诈,在某些情况下,还包括商业间谍活动。谁是犯下这些罪行的坏人,他们的动机是什么?人们可能会想象他们与在现实世界中犯罪的个人不同。银行抢劫犯和诈骗艺术家在他们的罪行发生几次后就会获得一定的公众知名度,但网络罪犯在很大程度上仍然是隐形的和默默无闻的。根据粗略的新闻报道和一些公开逮捕事件(如 Mafiaboy,被指控瘫痪了亚马逊、CNN 和其他网站),公众可能会推断这些坏人仅仅是青少年亚文化的一部分。
打破重大版本发布的习惯
敏捷开发能否使您的团队更有效率?
跟上快速变化的步伐可能是一项艰巨的任务。正如您最终让您的软件与一项新技术一起工作以满足昨天的需求一样,更新的技术被引入或新的业务趋势出现以打乱计划。无论您的新挑战是 Web 服务、SOA(面向服务的架构)、ESB(企业服务总线)、AJAX、Linux、《萨班斯-奥克斯利法案》、分布式开发、外包还是竞争压力,都越来越需要开发方法来帮助缩短开发周期时间、更快地响应用户需求并同时提高质量。
Eclipse 的核心
深入了解可扩展的插件架构
ECLIPSE 既是一个开放的、可扩展的软件开发环境,也是一个开放的、可扩展的应用框架,可以在其上构建软件。作为最受欢迎的 Java IDE,它为工具使用提供了一个通用的 UI 模型,并基于插件组件模型促进模块化功能的快速开发。Eclipse 基金会设计该平台可在多种操作系统(包括 Macintosh、Windows 和 Linux)上原生运行,与每个操作系统提供强大的集成,并提供丰富的客户端,支持每个人都熟悉的 GUI 交互:拖放、剪切和粘贴(剪贴板)、导航和自定义。
通往 64 位的漫长道路
加倍,加倍,辛劳和苦恼
莎士比亚的文字常常涵盖超出他最狂野梦想的情境。即使人们提前计划,辛劳和苦恼也伴随着重大的计算转型。为了校准“今天的明日遗产”,我们应该研究“昨天的明日遗产”。明天的许多软件仍将由数十年前的决策驱动。过去的决策具有意想不到的副作用,这些副作用会持续数十年,并且难以撤销。
在 IT 合规性游戏中保持得分
ALM 可以帮助组织满足严格的 IT 合规性要求。
让开发人员接受从开发到发布的应用程序管理标准化程序是当今组织面临的最大障碍之一。建立标准化的开发到发布工作流程(通常称为 ALM(应用程序生命周期管理)流程)对于组织努力满足严格的 IT 合规性要求尤为重要。这说起来容易做起来难,因为不同的开发团队已经创建了自己的独特程序,这些程序没有文档记录、不清晰且不可追溯。
合规性解构
当您分解它时,合规性主要在于确保业务流程按预期执行。
合规性主题每年都变得越来越复杂。数十项监管要求可能会影响公司的业务流程。而且,这些要求通常含糊不清且令人困惑。当负责合规性的人员被问及他们的业务流程是否合规时,他们很难简洁而自信地回应,这是可以理解的。本文探讨了公司如何解构合规性,以系统的方式处理合规性,并应用技术来自动化与合规性相关的业务流程。它还专门探讨了 Microsoft 如何处理 SOX 合规性。
击败他们的 SOX
积极主动地进行 SAS 70 Type II 审计有助于供应商关系中的双方。
数据对于任何大型组织来说都是宝贵的资源。组织越大,它在某种程度上就越有可能依赖第三方供应商和合作伙伴来帮助其管理和监控其关键任务数据。在针对上市公司的新法规(例如 SOX 第 404 条)出台后,财富 1000 强公司的 IT 部门负责人越来越需要知道,在 24/7/365 全天候监控其关键数据交易方面,他们拥有程序完善且有据可查的业务合作伙伴。为了响应验证第三方控制和程序日益增长的需求,一些公司坚持要求某些供应商接受 SAS 70 Type II 审计。
遵守合规性
不理会它不是一个选项。
“嘿,合规性很无聊。真的,真的很无聊。而且,我既不在金融行业工作,也不在医疗保健行业工作。我为什么要关心 SOX 和 HIPAA?” 是的,您绝对正确。您编写工资单应用程序、操作系统、用户界面或(天哪)电子邮件服务器。您为什么要担心合规性问题?
要求入门
一个简短的入门,提供了有关组织当今面临的四个最重要合规性挑战的背景信息。
许多软件工程师和架构师通过越来越多的规则、法规和标准接触到合规性,他们的雇主必须遵守这些规则、法规和标准。其中一些要求(例如 HIPAA)主要侧重于一个行业,而另一些要求(例如 SOX)则跨越多个行业。有些仅适用于一个国家,而另一些则跨越国界。
信息过载
两个应用程序揭示了使情境感知计算成为现实的关键挑战。
随着移动计算设备和各种传感器变得无处不在,应用程序和服务的新资源(通常统称为情境感知计算)正变得可供设计师和开发人员使用。在本文中,我们考虑了利用情境感知在包括 VoIP(IP 语音)和传统信息技术融合在内的新通信服务中产生的潜在好处和问题。
隐形助手
一个实验室对普适计算的实验
普适计算旨在将计算机放置在我们周围的每个地方——融入日常生活的结构中1——从而改善我们的生活。无论是提高我们的工作效率、与家人和朋友保持联系的能力还是我们的娱乐,目标都是通过让所有这些计算机(无论大小、可见和不可见)协同工作,找到让技术为我们工作的方法。
社会感知
为下一代通信服务建模人机交互
Bob 管理着一个设计和制造小部件的团队。生活本来会很美好,但 Bob 的团队分布在三个站点,位于三个不同的时区。Bob 过去常常收集大量的飞行常客里程来参加会议。然而,最近,商务旅行已经演变成一种有损人格、浪费的苦差事。因此,Bob 投资了一个高带宽视频通信系统,以减少商务旅行。计算直接成本,该系统应该在三个月内收回成本。但是,存在一个问题。
人机交互的未来
HCI 革命即将到来吗?
个人计算随着 IBM PC 的推出而启动。但大众计算——面向大众的计算——随着现代 WIMP(窗口、图标、鼠标、指针)界面的推出而启动,这使得普通人可以使用计算机。随着大众计算的增长,HCI(人机交互)的作用也随之增加。如今,大多数软件都是交互式的,与界面相关的代码占所有代码的一半以上。HCI 在应用程序设计中也起着关键作用。在消费市场中,产品的成功取决于每个用户的使用体验。
ASP:集成挑战
软件即服务的承诺正通过许多 ASP 成为现实。
使用 ASP 和向 ASP 提供增值产品的第三方供应商的组织需要与它们集成。ASP 通过提供基于 Web 服务的 API 来实现这种集成。通过 Internet 与 ASP 集成和与本地应用程序集成之间存在显着差异。与 ASP 集成时,用户必须考虑许多问题,包括延迟、不可用性、升级、性能、负载限制和缺少事务支持。
解开企业 Java
一种新型框架有助于消除横切关注点。
关注点分离是计算机科学中最古老的概念之一。该术语由 Dijkstra 在 1974 年提出。1 它很重要,因为它简化了软件,使其更易于开发和维护。关注点分离通常通过将应用程序分解为组件来实现。但是,存在横切关注点,这些关注点跨越(或横切)多个组件。这些类型的关注点无法通过传统的模块化形式来处理,并且会使应用程序更加复杂且难以维护。
CORBA 的兴衰
我们可以从 CORBA 的错误中吸取很多教训。
确切地说,从何时开始计算,CORBA 大约有 10-15 年的历史。在其生命周期中,CORBA 已经从早期采用者的前沿技术,发展成为流行的中间件,再到相对默默无闻的小众技术。有必要研究一下为什么 CORBA——尽管曾经被誉为“下一代电子商务技术”——遭受了这种命运。CORBA 的历史是计算行业多次见证的历史,而且目前的中间件工作,特别是 Web 服务,似乎很可能会重演类似的历史。
从 COM 到通用
组件软件迈向普及的 10 年旅程
十年前,“组件软件”一词意味着相对具体和具体的事物。少数软件组件框架或多或少为大多数人定义了这个概念。如今,在软件行业中,很少有术语比组件软件更不精确。现在有许多不同形式的软件组件,用于许多不同的目的。10 年前的技术和方法已经发生了根本性的演变,并且加入了大量重新定义了我们之前持有的组件软件概念的新技术和方法。
网络的新角色
面向应用程序的网络可以帮助弥合企业之间的差距。
公司一直面临着跨组织边界集成系统的挑战。随着互联网原生系统的出现,这种集成对于现代组织而言已变得至关重要,但也变得越来越复杂,特别是由于下一代业务系统依赖于敏捷、灵活、可互操作、可靠和安全的跨企业系统。
搜索被认为是不可或缺的
标签、分类和导航的组合可以帮助最终用户利用企业搜索的力量。
大多数公司都必须利用其数据来获得竞争优势。知识工作者可用的数据量在过去几年中急剧增长,虽然其中很大一部分存在于大型数据库中,但重要的子集仅以非结构化或半结构化数据的形式存在。如果没有正确的系统,这会导致信噪比不断下降,从而为试图快速定位信息的繁忙用户造成障碍。三种企业搜索解决方案有助于改进知识发现。
人工智能获得大脑
新技术使软件能够利用真正的人类智能。
自从 John McCarthy 提出人工智能这个词以来,在识别、理解和自动化许多曾经是人类智能专属领域的符号和计算问题方面,已经取得了很大进展。该领域仍有许多工作要做,因为人类在完成诸如识别照片中的物体等简单任务时仍然明显优于最强大的计算机——孩子们甚至在学会说话之前就可以做到这一点。
茶杯中的 Java
使用 J2ME 编程支持蓝牙的设备
很少有技术领域的演变速度能像无线行业那样快。随着市场和设备的成熟,移动应用程序的需求(和潜力)也在增长。越来越多的移动设备在交付时安装了 Java 平台,这使得大量的 Java 程序员可以尝试嵌入式编程。不幸的是,并非所有 Java 移动设备都是相同的,这给新的 J2ME(Java 2 平台,微型版)程序员带来了许多挑战。本文使用一个示例游戏应用程序,说明了与 J2ME 和蓝牙编程相关的一些挑战。
TiVo 革命
向大众提供可靠、易于使用的 DVR 服务的挑战
设计计算机系统的最大挑战之一是确保系统本身对用户“不可见”。系统应该只是达到预期结果的管道。有许多此类专用系统的示例,从现代汽车到手机。
(并非那么)隐藏的计算机
专用系统的日益复杂性使得难以隐藏其中的计算机。
普适计算可能尚未到来,但普适计算机肯定已经到来。摩尔定律的实现所带来的持续改进导致微处理器在大量消费产品中的使用。一辆典型的汽车包含 50 到 100 个处理器。您的微波炉有一个或多个。它们在您的电视、手机、冰箱、孩子们的玩具中,在某些情况下,甚至在您的牙刷中。
在新管理下
自主计算正在彻底改变我们管理复杂系统的方式。
在全球竞争日益激烈的环境中,企业面临着降低运营成本的巨大压力。与此同时,他们必须具有响应动荡市场带来的商机的敏捷性。
最佳实践 (BPM)
在业务流程管理中,找到合适的工具套件仅仅是开始。
正如 BPM(业务流程管理)技术与传统的应用程序支持方法明显不同一样,BPM 开发的方法也与传统的软件实施技术明显不同。以 CPI(持续流程改进)作为 BPM 的核心学科,驱动公司工作的模型不断演变。事实上,最近的研究表明,公司至少每季度对其基于 BPM 的应用程序进行一次微调(有时甚至每年八次)。关键在于,没有“完成”的流程;需要多次迭代才能产生高效的解决方案。每个正在运行的基于 BPM 的流程都只是未来的起点。
人员和流程
最大限度地减少业务流程变更的痛苦
当我和 Mike Hammer 在 1992 年出版《再造企业》时,我们理解真正的业务流程变更会对人员产生影响。我说“真正的”流程变更,是因为管理者使用“再造”一词来描述任何和所有的公司变更计划。一位被误导的高管告诉我,他的公司不知道如何进行真正的再造;因此,它只是缩减了大型部门和业务部门的规模,并期望剩下的人会弄清楚如何完成他们的工作。可悲的是,这就是一些公司仍然实践流程再设计的方式:让人们过度劳累和士气低落,而客户则体验到糟糕的服务和糟糕的质量。
顺势而为
工作流系统可以提供超出自动化业务流程的价值。
一个组织由两个世界组成。现实世界包含组织的结构、实物商品、员工和其他组织。虚拟世界包含组织的计算机化基础设施,包括其应用程序和数据库。工作流系统弥合了这两个世界之间的差距。它们既提供了组织设计的模型,又提供了执行模型的运行时。
现代性能监控
当今多样化和分散的计算机世界需要对性能监控和分析进行新的思考。
现代 Unix 服务器机房可能是一个由多家供应商的硬件和多个来源的软件组成的多样化宇宙。通常,解决服务器机房性能问题所需的人员不可用,或者出于安全原因,不允许在事件发生时在场。即使幸运的是,合适的人员实际上在场见证了性能“事件”,但传统上用于测量和分析硬件和软件性能的工具也很少且特定于供应商。
性能反模式
希望您的应用程序运行得更快?以下是不应该做的事情。
几乎在任何软件中都可以找到性能病理,从用户到内核、应用程序、驱动程序等。在 Sun,我们花费了过去几年时间将最先进的工具应用于 Unix 内核、系统库和用户应用程序,并且发现许多表面上不同的性能问题实际上具有相同的根本原因。由于软件模式被认为是积极经验的抽象,因此我们可以将导致这些性能问题的各种方法称为反模式:应该避免而不是效仿的东西。
高性能团队
从设计到生产,性能应该是流程的一部分。
您在一家软件公司的产品开发组工作,该公司的产品经常在性能方面与竞争对手进行比较。性能是您业务的重要组成部分;但添加新功能、修复错误和从事新项目也很重要。那么,您如何领导您的团队开发高性能软件,以及完成所有其他工作?您如何在维护和增强周期中保持高性能?
隐藏在眼皮底下
软件可观察性的改进可以帮助您诊断最严重的性能问题。
1997 年 12 月,Sun Microsystems 刚刚宣布推出其新的旗舰机器:一台 64 处理器对称多处理器,支持高达 64 GB 的内存和数千个 I/O 设备。与任何新机器发布一样,Sun 也在疯狂地进行基准测试,以证明机器的性能。虽然基准测试总体上令人印象深刻,但有一项特别表现出出乎意料的低性能。基准测试机器偶尔会变得神秘地分心:基准测试活动实际上会停止,但操作系统内核仍然忙个不停。在花费几分钟进行未知工作后,操作系统会突然恢复正常:基准测试活动将以全速恢复并运行完成。
为代码编码
模型可以为软件开发提供 DNA 吗?
尽管行业和学术界在诸如 UML(统一建模语言)等建模标准上投入了大量精力,但软件建模长期以来在商业软件开发中一直处于从属地位。尽管建模通常被认为是最先进的技术,因此是应该做的事情,但随着软件项目从早期、更概念性的阶段发展到实际手工制作的阶段,人们对建模的重视程度似乎也在下降。
监控,为您服务
自动化监控可以提高当今在线软件服务的可靠性和可扩展性。
互联网服务正日益成为我们日常生活的一部分。我们从中获得价值,依赖它们,并且现在开始像对待电话系统和电网一样假设它们的普遍存在。然而,互联网服务的实施仍然是一个尚未解决的问题,互联网服务离充分发挥其在世界上的潜力还差得很远。
从车间吸取的教训
制造业可以教给我们很多关于衡量大规模互联网服务性能的知识。
一月份的月度服务质量会议如常开始。来自开发、运营、营销和产品管理的代表围坐在桌子旁,议程重点关注上个月的绩效。与往常一样,影响客户的事件和服务质量是关键主题,我准备了数字,显示我代表的服务部门(MSN,Microsoft 服务系列,包括电子邮件、即时通讯、新闻、天气和体育等)的平均正常运行时间。
信息提取
从非结构化文本中提取结构化数据
2001 年,美国劳工部受命建立一个网站,以帮助人们在美国各地的社区学院、大学和组织中找到继续教育机会。该部门希望其网站支持对地点、日期、时间、先决条件、讲师、主题领域和课程描述进行字段布尔搜索。最终,它还对挖掘其新数据库中的模式和教育趋势感兴趣。这是一个重大的数据集成项目,旨在每三个月从数万个个体机构自动收集详细的结构化信息。
没有痛苦的线程
多线程编程不必如此令人焦虑。
当今的大部分软件都在处理多个并发任务。Web 浏览器支持多个并发 HTTP 连接,图形用户界面处理多个窗口和输入设备,Web 和 DNS 服务器处理来自大量客户端的并发连接或事务。需要处理的并发任务数量不断增加,而软件变得越来越复杂。以一种既能满足不断增长的可扩展性要求,又能保持足够简单、结构化和安全的方式来构建并发软件,以允许凡人程序员构建越来越复杂的系统,这是一项重大的工程挑战。
使用信誉系统打击垃圾邮件
用户提交的垃圾邮件指纹
垃圾邮件无处不在,堵塞了全球电子邮件用户的收件箱。它不仅令人讨厌,而且还侵蚀了信息技术的出现所带来的生产力提升。每天处理数小时合法电子邮件的员工还必须处理删除大量非法电子邮件的问题。自动垃圾邮件过滤器已大大减少了最终用户看到的垃圾邮件数量,但所需的培训量与仅在没有过滤器帮助的情况下删除垃圾邮件所需的时间相当。
企业中的社交书签
您的组织可以从社交书签工具中受益吗?
使用大型信息空间的人们面临的最大挑战之一是记住和检索他们以前找到并认为有趣的项目。解决此问题的一种方法是允许个人保存特定的搜索字符串,以便将来重新创建搜索。另一种方法是允许人们创建个人资料集合。引文集合可以由读者手动创建,也可以通过执行(和警报到)已保存的搜索来创建。
为什么您的数据无法混合
新工具和技术可以帮助减轻协调模式的痛苦。
当独立方为同一领域开发数据库模式时,它们几乎总是彼此完全不同。这些差异被称为语义异构性,它也出现在多个 XML 文档、Web 服务和本体中——或者更广泛地说,只要存在不止一种方式来构建数据体时。半结构化数据的存在加剧了语义异构性,因为半结构化模式一开始就更加灵活。为了使多个数据系统相互协作,它们必须理解彼此的模式。
从混乱中获得秩序
本体将帮助您构建半结构化数据吗?
对于过去十年在线信息量的“大爆炸”,人类和机器都可以处理这些信息,这可能没有什么争议。它刺激的趋势之一(在许多其他趋势中)是:首先,与以前存储大多数电子数据的传统集中式关系数据库相比,已经转向更灵活和流动的(半结构化)模型;其次,今天可用的信息太多,无法由人类处理,我们确实需要机器的帮助。
XML <和半结构化数据>
XML 为分层结构和重复字段或结构提供了自然的表示形式。
词汇表设计者可以要求 XML 数据完全规则,或者他们可以允许少量或大量变化。在极端情况下,XML 词汇表可以有效地表示除了所有格式良好的 XML 所需的规则之外,根本没有其他规则。由于 XML 语法仅记录存在的内容,而不是可能存在的所有内容,因此稀疏数据不会使 XML 表示形式显得笨拙;XML 存储系统通常构建为优雅地处理稀疏数据。
从 Web 学习
Web 已经教会了我们关于分布式计算的许多教训,但其中一些最重要的教训尚未完全扎根。
在过去的十年中,我们看到了计算领域的一场革命,它在范围和影响方面超越了迄今为止所见的一切,而且在我们如何看待构成“好”和“坏”计算方面也超越了以往。
管理半结构化数据
我清楚地记得在我的第一堂大学课程中,我对关系数据库的着迷。
在那堂课上,我学习了如何为我的信息构建模式,并且我了解到,要获得准确的模式,必须先验地了解要建模的信息的结构和属性。我还学习了 ER(实体关系)模型作为所有进一步数据建模的基本工具,以及就信息的一般结构和所有生成、处理或使用此信息的社区使用的词汇表达成先验协议的必要性。
软件和并发革命
充分利用多核处理器的强大功能需要软件行业的新工具和新思维。
长期以来,并发一直被吹捧为“下一个重大事件”和“未来的方向”,但在过去的 30 年中,主流软件开发一直能够忽略它。我们的并行未来终于到来了:新机器将是并行机器,这将需要在我们开发软件的方式上进行重大更改。本期中的介绍性文章描述了计算机体系结构从单处理器转向多核处理器(也称为 CMP)的硬件必然性。
性能的代价
芯片多处理的经济案例
在 1990 年代后期,我们在 DEC 的研究小组是越来越多倡导 CMP(芯片多处理器)作为高度复杂的单线程 CPU 替代方案的团队之一。我们正在设计 Piranha 系统 1,这是 CMP 设计空间中的一个激进点,因为我们使用了非常简单的内核(类似于 80 年代后期的早期 RISC 设计)来提供更高水平的线程级并行性。我们的主要目标是在给定的硅预算下实现最佳的商业工作负载性能。今天,在开发 Google 的计算基础设施时,我们的关注范围不仅仅是性能。衡量特定架构优缺点的标准是回答以下问题:您是否能够负担得起您需要的计算能力?
极限软件扩展
芯片多处理器为应用程序开发人员、操作系统设计人员和部署专家引入了新的扩展维度。
SMP(对称多处理)的出现为计算机系统增加了一个新的可扩展性程度。SMP 系统不是从增量更快的微处理器获得额外的性能,而是利用多个处理器来获得系统总性能的巨大提升。软件中的并行性允许在系统上同时执行多个作业,从而相应地提高系统吞吐量。给定足够的软件并行性,这些系统已被证明可以扩展到数百个处理器。
微处理器的未来
芯片多处理器实现巨大性能提升的承诺现在已成为现实。
多年来,为现代计算机提供动力的微处理器的性能持续呈指数级增长,这主要有两个原因。首先,作为所有处理器和内存芯片电路核心的晶体管随着时间的推移变得更快,这符合摩尔定律的描述,这直接影响了使用这些晶体管构建的处理器的性能。此外,实际处理器性能的增长速度快于摩尔定律的预测,因为处理器设计人员已经能够利用现代芯片上可用晶体管数量的增加,从软件中提取更多的并行性。
企业网格计算
网格计算为企业数据中心带来了巨大的希望,但仍存在许多技术和运营障碍。
我不得不承认,当 IT 大众面对围绕网格技术的炒作浪潮时,尤其是企业内部,我深感同情。各个供应商都试图在名义上的处女技术领土上插上他们的旗帜,并宣称这是他们自己的,使用的术语包括网格、自主、自愈、自管理、自适应、实用程序等等。分析师,嗯,分析并试图理解这一切,并且在此过程中,每个人都独立创建了他或她自己的这片未知领域的地图,将其命名为基于策略的计算、有机计算等等。不幸的是,这只会进一步混淆大多数人的视听。
Web 服务和 IT 管理
Web 服务不再仅仅用于应用程序集成。
平台和编程语言的独立性,再加上行业动力,使 Web 服务成为大多数企业集成项目的首选技术。它们与 SOA(面向服务的架构)的密切关系也帮助它们获得了更高的知名度。考虑一下 SOA 的这个定义:“一种架构风格,其目标是实现交互式软件代理之间的松耦合。服务是服务提供商完成的工作单元,旨在为服务消费者实现期望的最终结果。
企业软件即服务
在线服务正在改变软件的性质。
虽然外包工资单等业务职能的做法已经存在了几十年,但将其作为在线软件服务来实现只是最近才开始流行。在在线服务模型中,提供商开发应用程序并运营托管该应用程序的服务器。客户使用行业标准浏览器或 Web 服务客户端通过 Internet 访问该应用程序。各种各样的在线应用程序(包括电子邮件、人力资源、业务分析、CRM(客户关系管理)和 ERP(企业资源计划))都可用。
描述大象:IT 即服务的不同面孔
诸如网格、按需和面向服务的架构等术语都陷入了混乱,但在所有这些术语背后都存在一个总体趋势。
在一个广为人知的寓言中,一群盲人被要求描述大象。每个人都摸到了大象的不同部位,因此毫不奇怪地给出了不同的描述。今天我们在IT行业中也看到了类似的困惑,诸如面向服务的架构、网格、效用计算、按需、自适应企业、数据中心自动化和虚拟化等术语被随意使用。就像倾听盲人描述大象一样,我们很难了解这些词语背后的真实含义,不同的部分是否以及如何组合在一起,以及我们应该如何应对正在被描述的“动物”。
程序员也是人
编程语言和API设计师可以从人机工程学设计领域学到很多东西。
我想以一个看似奇怪但又出人意料地没有争议的断言开始本文,那就是:程序员是人。我希望以此为前提,探讨如何改善程序员的处境。所以,请允许我为了论证的缘故,接受这个假设,无论您对此主题有何看法。
攻击趋势:2004年和2005年
黑客行为已经从以追求声誉为目标的业余爱好转变为以金钱为目标的犯罪活动。
Counterpane Internet Security Inc. 监控着35个国家、每个时区的450多个网络。2004年,我们看到了5230亿次网络事件,我们的分析师调查了648,000个安全“工单”。接下来是对当前互联网上正在发生的事情以及我们预计未来几个月将要发生的事情的概述。
安全 - 问题解决了吗?
许多安全问题的解决方案已经存在,那么为什么我们仍然如此脆弱?
有很多安全问题已经有解决方案。然而,我们的安全问题似乎并没有消失。这里出了什么问题?是消费者被提供假冒伪劣产品并拒绝接受吗?是他们没有采纳他们应该采纳的解决方案吗?或者,是否有完全不同的原因在起作用?我们将考察一些世界本可以变得更美好的地方,但事实并非如此,并深入了解原因。
答案当然是42
如果我们希望我们的网络足够难以渗透,我们就必须提出正确的问题。
为什么安全如此困难?作为一名安全顾问,我很高兴人们有这种感觉,因为这种看法能支付我的抵押贷款。但是,构建坏人无法 проникнуть 的系统真的那么困难吗?
你根本不懂网络性能
带宽只是问题的一部分。
为什么在局域网 (LAN) 上运行良好的应用程序在广域网 (WAN) 上会变得非常缓慢?当您尝试从远程文件共享打开文档或通过 VPN 远程登录到总部运行的应用程序时,您可能已经亲身经历过这种情况。为什么在您办公室运行良好的应用程序在 WAN 上会变得几乎毫无用处?如果您认为这仅仅是因为 WAN 中没有足够的带宽,那么你根本不懂网络性能。
流媒体和标准:交付移动视频
为手机提供视频的时代已经到来,并有可能成为继无线通话之后的下一个“杀手级应用”。
不相信我?请继续往下看……手机无处不在。每个人都有一部。想想你上次乘坐飞机并在地面延误的情况。在听到可怕的通知后,您立即听到每个人都拿起手机开始拨号。
移动媒体:使其成为现实
两个原型应用程序揭示了交付移动媒体服务所面临的挑战。
许多未来的移动应用程序都基于丰富、交互式媒体服务的存在。此类服务的承诺和挑战是在最恶劣的条件下,并以低成本向期望很高的用户群体提供应用程序。情境感知服务需要有关用户是谁、在哪里、何时以及正在做什么的信息,并且必须及时且以最小的延迟交付。本文揭示了一些当前最先进的“魔力”和研究挑战。
企业级无线
无线技术已经取得了长足的进步,但它是否足以满足当今企业的需求?
我们以某种形式在无线领域工作超过 10 年,并参与了其成熟过程的每个阶段。我们看到无线技术从互联网泡沫前的玩具技术发展到泡沫期间真正有前景的技术,但在泡沫破裂后却令人失望,因为发现该技术尚未为黄金时代做好准备。幸运的是,我们似乎终于达到了技术和企业期望最终融合的阶段。
超越关系数据库
数据访问不仅仅是 SQL。
环境中计算设备的数量和种类正在迅速增加。真正的计算机不再束缚于桌面或锁在服务器机房中。PDA、高度移动的平板电脑和笔记本电脑设备、掌上电脑和移动电话手机现在为交付新的应用程序和服务提供了强大的平台。然而,这些设备只是冰山一角。隐藏在视线之外的是支持实现普适计算基础设施所需的许多计算和网络元素。
发现数据库
开放式数据库生态系统促进了生物技术的新发现。它们也能帮助您的组织吗?
美国国家生物技术信息中心 (NCBI) 负责处理大量数据。部分列表包括生物医学领域最大的公共书目数据库、美国国家 DNA 序列数据库、在线免费全文研究文章数据库、基因、基因组和染色体参考集的组装、注释和分发、在线文本搜索和检索系统以及专门的分子生物学数据搜索引擎。在撰写本文时,NCBI 每天收到约 5000 万次网站点击,峰值速率约为每秒 1,900 次点击,每天从约 250 万用户处收到约 40 万次 BLAST 搜索。
战斗号角
期待已久的、经过彻底改造的数据库架构的到来现在终于指日可待。
我们生活在一个剧烈变革的时代,其中大部分变革是由信息雪崩引发的,否则信息雪崩将吞噬我们。在不断增加的冲击下,我们传统的关系数据库结构——充其量总是很笨重——现在显然面临着彻底崩溃的风险。事实上,现在很少能找到不再为在线分析处理提供支持的 DBMS。决策树、贝叶斯网络、聚类和时间序列分析也已成为标准软件包的一部分,并允许添加更多算法。此外,还添加了文本、时间和空间数据访问方法,以及相关的概率逻辑,因为越来越多的应用程序需要近似结果。
UML 热:诊断和恢复
承认只是从这种潜在的毁灭性疾病中恢复的第一步。
传染病研究所最近发表的研究证实,多种多样的 UML 热1菌株继续在全球范围内传播,不加选择地感染软件分析师、工程师和经理。已观察到发烧最严重的副作用之一是开发软件产品的成本和持续时间显着增加。这种增加很大程度上归因于生产力下降,原因是受发烧影响的个人将时间和精力投入到对生产可交付产品几乎没有或根本没有价值的活动中。例如,开放循环热的受害者继续为未知的利益相关者创建 UML(统一建模语言)图。
关于插件和可扩展架构
Eclipse 等可扩展应用程序架构具有许多优势,但必须小心避免“插件地狱”。
在计算需求日益复杂的世界中,作为软件开发人员,我们不断寻找最终的通用架构,使我们能够高效地开发高质量的应用程序。这种追求导致了许多新的抽象和工具的采用。最近一些最有希望的进展是新的纯插件架构。最初作为扩展应用程序的回调机制已经成为应用程序本身的基础。插件不再只是应用程序的附加组件;今天的应用程序完全由插件组成。
修补企业
各种规模的组织都在花费大量精力来正确进行补丁管理——他们的业务依赖于此。
软件补丁管理已发展成为一项对业务至关重要的问题——从风险和财务管理角度来看都是如此。根据 Aberdeen Group 最近的一项研究,公司在 2002 年在操作系统补丁管理上的花费超过 20 亿美元。1 Gartner 研究进一步指出,管理良好的 PC 的运营成本每年比未管理的 PC 大约低 2,000 美元。2 您可能会认为,随着临界质量和更复杂的工具的出现,大型组织中每个端点的管理成本会降低,但实际上可能并非如此。
了解软件补丁
开发和部署补丁是软件开发过程中越来越重要的组成部分。
软件补丁是当今计算环境中越来越重要的一个方面,因为软件运行的卷、复杂性和配置数量已大大增加。软件架构师和开发人员尽一切努力构建安全、无错误的产品。为了确保质量,开发团队利用他们掌握的所有工具和技术。例如,软件架构师将安全威胁模型纳入其设计中,QA 工程师开发自动化测试套件,其中包括复杂的代码缺陷分析工具。
通往印度之路
外包供应商忘记提及的陷阱
大多数美国 IT 员工对外包持悲观看法。它被认为是不爱国的,并且将宝贵的知识资本和工作岗位从美国转移到印度或中国等目的地。isyourjobgoingoffshore.com 等网站上的在线讨论论坛的标题是“你将如何应对?”和“你的职业生涯有危险吗?”。《商业周刊》杂志几年前的一篇封面报道总结了大多数人在面临外包时所遭受的焦虑:“你的工作是下一个吗?”
编排自动化测试实验室
创作乐谱可以帮助我们管理测试分布式应用程序的复杂性。
网络和互联网正在鼓励人及其软件之间更高程度的互动和协作。无论是用户玩游戏还是撰写法律文件,他们的应用程序都需要管理来自多台机器的动作在可能不可靠的连接上的复杂交织。例如,Silicon Chalk 是一款旨在增强教师和学生课堂体验的分布式应用程序。它的分布式特性要求我们使用多台机器进行测试。手动测试过于繁琐、昂贵且不一致,无法有效。然而,在自动化测试过程中,我们发现维护一组描述给定测试中每台机器部分的脚本非常费力。
筛选软件沙箱:SCM 遇到 QA
源代码控制——它不仅仅用于跟踪更改。
得益于现代 SCM(软件配置管理)系统,当开发人员在代码行上工作时,他们会留下线索,可以揭示代码的哪些部分已被修改、何时、如何以及由谁修改。从 QA(质量保证)和测试工程师的角度来看,这仅仅是“数据”,还是有可以提高测试覆盖率和产品整体质量的有用信息?
太大而无法测试
测试大型系统是一项艰巨的任务,但我们可以采取一些步骤来减轻痛苦。
软件规模和复杂性的不断增加,加上并发性和分布式系统,已经使仅使用手工测试的无效性显而易见。代码覆盖率的误用和避免随机测试加剧了问题。我们必须重新开始,从良好的设计(包括依赖性分析)、良好的静态检查(包括模型属性检查)和良好的单元测试(包括良好的输入选择)开始。代码覆盖率可以帮助选择和确定测试的优先级以提高效率,全对技术也可以控制配置的数量。
质量保证:不仅仅是测试
良好的 QA 不仅与技术有关,还与方法和途径有关。
质量保证不仅仅是测试、分析或一厢情愿的想法。虽然它可能很枯燥、困难且乏味,但 QA 仍然是必不可少的。确保系统在交付时能够正常工作需要大量的计划和纪律。说服他人系统将正常运行需要更加认真和周到的努力。QA 在项目的各个阶段执行,而不仅仅是在最后才匆忙进行。它是一种生活方式。
现代操作系统中的自愈
一些早期的步骤表明,未来还有很长(且崎岖)的路要走。
每天驾驶连接旧金山和门洛帕克的 101 公路,广告牌上的笑脸向我保证,2004 年计算机领域一切安好。他们告诉我,网络和服务器可以自防御、自诊断、自愈,甚至有足够的计算能力从所有这些内省中节省下来,以执行所有者分配的任务。
如何在任何语言中不编写 Fortran
优秀的编码具有超越所有编程语言的特性。
没有混淆的 Perl 竞赛,因为它是毫无意义的。
21 世纪的可扩展编程
一个开放、更灵活的编程环境即将到来吗?
Sun Microsystems Fellow Guy L. Steele Jr. 在 OOPSLA '98 的主题演讲中说:“从现在开始,语言设计的主要目标应该是规划增长。” 函数、用户定义的类型、运算符重载和泛型(例如 C++ 模板)已不再足够:未来的语言必须允许程序员向程序添加全新的信息种类,并控制其处理方式。本文认为,下一代编程系统可以通过结合三种特定技术来实现这一目标。
模糊的界限:对象、组件和 Web 服务
将对象转换为组件和 Web 服务很容易,但我们如何知道哪种适合这项工作?
如果您是面向对象的程序员,即使您不熟悉该语言(C#,但这并不重要),您也会理解这段代码片段。您不会惊讶地得知该程序将在控制台上打印以下行:woof。
语言、级别、库和寿命
每天都有新的编程语言诞生。为什么有些语言成功而有些语言失败?
在过去的 50 年里,我们已经看到无数的编程系统出现并(大部分)消失,尽管有些系统已经存在很长时间,并且可能会持续存在:几十年?几个世纪?几千年?关于语言设计、抽象级别、库和由此产生的寿命的问题有很多。为什么会出现新的语言?为什么有时编写新软件比修改可以工作的旧软件更容易?多少个不同的语言级别才有意义?为什么有些语言在面对“更好”的语言时仍然存在?
缺乏优先级队列被认为是有害的
我们非常需要关键的互联网基础设施保护。
大多数现代路由器由多个线路卡组成,这些线路卡执行数据包查找和转发,所有这些都由充当路由器大脑的控制平面控制,执行诸如管理功能、错误报告、包括路由计算和邻接维护在内的控制功能等基本任务。该控制平面有许多名称;在本文中,它是路由处理器或 RP。路由处理器计算转发table 并使用控制平面总线将其下载到线路卡。线路卡执行实际的数据包查找和转发。
外包:制定行动计划
哪些类型的项目适合外包?
您的首席信息官 (CIO) 刚刚召唤您履行职责,将决定是否外包明年重写内部账单系统的大型开发项目的决策权移交给您。这是一项艰巨的任务!您如何才能开始决定外包是否是您公司的正确选择?您可以遵循一些策略来帮助您避免外包的陷阱并做出明智的决定。外包不仅仅是一个技术问题,但它是一个架构师或开发经理通常最适合做出的决定,因为他们最清楚哪些技术适合保留在内部。
错误消息
问题是什么?
计算机用户花费大量时间追查错误——沿着从错误消息开始的线索追查,有时会找到解决方案,有时会感到沮丧。错误消息的问题对于系统管理员(sysadmin)来说尤其严重——系统管理员负责配置、安装、管理和维护现代世界的计算基础设施——因为他们花费大量精力来保持计算机在错误和故障中运行。
自动化软件故障报告
我们只能修复我们知道的错误。
有很多方法可以在软件发布前后衡量质量。对于商业和仅供内部使用的产品,最重要的衡量标准是用户对产品质量的看法。不幸的是,看法难以衡量,因此公司尝试通过客户满意度调查和从其客户群收集的故障/行为数据来量化它。本文重点介绍了从客户站点捕获故障数据的问题。
哎呀!应对 IT 系统中的人为错误
错误时有发生。如何处理。
人为操作员错误是当今 IT 环境中故障和数据丢失最隐蔽的来源之一。2001 年初,由于在配置名称解析系统时发生人为错误,微软的网络资产遭受了近 24 小时的中断。同年晚些时候,由于技术人员在测试开发系统时犯了一个错误,纳斯达克证券交易所的交易中断了一个小时。最近,人为错误被指责为即时消息网络中断、安全和隐私泄露以及银行系统故障的原因。
调试并发的试验和磨难
你可以跑,但你无法隐藏。
我们现在稳稳地坐在 21 世纪,现代程序员面临的巨大挑战既不是内存泄漏也不是类型问题(这两个问题现在都已得到有效解决),而是并发问题。如何编写并发是首要考虑因素的日益复杂的程序。或者更危险的是,如何调试这样的野兽?这些问题让即使是最优秀的程序员也感到恐惧。
FreeBSD 5.2 中的线程调度
为了更好地掌握线程调度,我们来看看 FreeBSD 5.2 是如何处理它的。
繁忙的系统每秒会做出数千个调度决策,因此做出调度决策的速度对于整个系统的性能至关重要。本文——摘自即将出版的书籍《FreeBSD 操作系统设计与实现》——使用开源 FreeBSD 系统为例,帮助我们理解线程调度。最初的 FreeBSD 调度程序是在 20 世纪 80 年代为大型单处理器系统设计的。尽管它今天在那种环境中仍然运行良好,但新的 ULE 调度程序专门设计用于优化多处理器和多线程环境。本文首先研究了最初的 FreeBSD 调度程序,然后描述了新的 ULE 调度程序。
集成 RFID
数据管理和库存控制即将变得更加有趣。
在过去的几年里,RFID(射频识别)在商业世界中受到了极大的关注。这种兴奋源于一系列事件的汇合。首先,通过前 Auto-ID 中心及其赞助公司的努力,低成本 RFID 标签和联网供应链的前景已在许多公司触手可及。其次,多家商业公司和政府机构,例如美国的沃尔玛和塔吉特、欧洲的乐购以及美国国防部,已经宣布了响应技术改进的 RFID 计划。
RFID 的魔力
那些小东西到底是如何工作的?
许多现代技术给人一种它们通过魔法运作的印象,特别是当它们自动运行且其机制不可见时。一种称为 RFID(射频识别)的技术,对大众市场来说相对较新,就具有这种特性,并且对许多人来说似乎很像魔法。RFID 是一种电子标签技术,允许在无需直接视线的情况下,使用电磁挑战/响应交换,在远处自动识别物体、地点或人。
标准的时机和地点
历史表明,滥用标准流程如何阻碍进步。
在未来十年中,我们将遇到至少三个主要机遇,成功将在很大程度上取决于我们定义适当标准的能力。这是因为在恰当的时间出现的精心设计的标准可以通过为互操作性创建可信赖和可靠的基础,从而在很大程度上促进新兴产业并鼓励产品开发。从我的角度来看,我认为特别有希望的三个具体领域是:(1) 共同促进协作工作的所有电信和计算能力;(2) 提供音频和/或视频内容在线分发的混合计算/家庭娱乐产品;(3) 无线传感器和网络平台(有些人希望 802.15.4 和 ZigBee 联盟标准最终能够实现的那种)。
VoIP 安全:并非事后诸葛亮
DDOS 呈现全新的意义。
IP 语音 (VoIP) 有望通过打破公共交换电话网络 (PSTN) 的传统单片服务模型,并将控制和供应点从中心局交换机更改为最终用户的设备,从而颠覆一个世纪以来的语音电话模型。
VoIP:它有什么好处?
如果您认为 VoIP 只是电信的 IP 版本,请重新考虑。许多应用程序正在改变我们所知的电话通话。
VoIP(IP 语音)技术是一个快速扩张的领域。越来越多的 VoIP 组件正在开发中,而现有的 VoIP 技术正在以快速且仍在加速的速度部署。这种增长是由两个目标推动的:降低成本和增加收入。
不是你父亲的 PBX?
将 VoIP 集成到企业中可能意味着电信业务的终结。
也许没有什么办公设备比普通的商务电话更理所当然了。然而,这种基本通信设备背后的技术正处于重大转型之中。企业现在正在融合其语音和数据网络,以简化其网络运营,并利用融合网络带来的新的功能优势和能力,从更高的生产力和成本节约到增强的移动性。
你根本不懂 VoIP
通信正在发生变化。
全球电信在近年来经历了重大的变革。长期以来对网络融合的承诺正在加速实现。这种使用基于 IP 的网络的数据、语音和视频的融合正在以较低的成本在整个领域提供先进的服务,包括住宅用户、各种规模的商业客户和服务提供商。
利用应用程序框架
为什么框架很重要以及如何有效地应用它们
在当今竞争激烈、节奏快速的计算行业中,成功的软件必须日益:(1) 可扩展,以支持快速更新和添加,以满足新需求并利用新兴市场;(2) 灵活,以支持不断增长的各种多媒体数据类型、流量和端到端 QoS(服务质量)要求;(3) 可移植,以减少在异构操作系统平台和编译器上支持应用程序所需的工作量;(4) 可靠,以确保应用程序的健壮性和容错性;(5) 可伸缩,以使应用程序能够同时处理更多的客户端;(6) 经济实惠,以确保软件购置和发展的总拥有成本不会过高。
安全比你想象的更难
这不仅仅是缓冲区溢出。
许多开发人员将缓冲区溢出视为软件最大的安全威胁,并认为有一个简单的两步过程来保护软件:从 C 或 C++ 切换到 Java,然后开始使用 SSL(安全套接字层)来保护数据通信。事实证明,这种幼稚的策略是不够的。在本文中,我们将探讨为什么软件安全比人们预期的更难,重点关注 SSL 的示例。
模拟器:过去(和未来)的虚拟机
告别旧硬件的时代已经到来吗?
模拟器是“虚拟机”的一种形式,旨在解决一个简单的问题:缺少真实硬件。过去系统的模拟器解决了真实硬件丢失的问题,并在真实硬件消失后保留了软件的可用性。未来系统的模拟器解决了未来硬件设计的可变性问题,并促进了在真实硬件存在之前开发软件。
构建可安全共享的系统
想要安全地隔离虚拟机?一个选择是将它们放入 Jail 中。
计算机的历史以持续的变革为特征,这种变革源于摩尔定律所描述的性能的显著提升和价格的下降。计算能力已从集中式大型机/服务器迁移到分布式系统和商品化桌面。尽管发生了这些变化,系统共享仍然是计算的重要工具。从桌面环境的多任务处理、文件共享和虚拟机,到主机托管中心服务器级 ISP 硬件的大规模共享,在互不信任的各方之间安全地共享硬件需要解决意外和恶意损坏的关键问题。
构建可安全共享的系统
想要安全地隔离虚拟机?一个选择是将它们放入 Jail 中。
计算机的历史以持续的变革为特征,这种变革源于摩尔定律所描述的性能的显著提升和价格的下降。计算能力已从集中式大型机/服务器迁移到分布式系统和商品化桌面。尽管发生了这些变化,系统共享仍然是计算的重要工具。从桌面环境的多任务处理、文件共享和虚拟机,到主机托管中心服务器级 ISP 硬件的大规模共享,在互不信任的各方之间安全地共享硬件需要解决意外和恶意损坏的关键问题。
虚拟机的重生
虚拟化卷土重来。
虚拟机的术语最初描述的是 20 世纪 60 年代的操作系统概念:一种软件抽象,外观类似于计算机系统的硬件(真实机器)。四十年后,该术语涵盖了范围广泛的抽象概念?例如,与现有真实机器不匹配的 Java 虚拟机。尽管存在差异,但在所有定义中,虚拟机都是程序员或编译系统的目标。换句话说,软件是为在虚拟机上运行而编写的。
生物形态软件的搭便车指南
自然世界可能是我们解决计算机问题所需的灵感。
自然世界可能是我们解决计算机问题所需的灵感。虽然“地图不是实际地域”是正确的,但大多数到外国旅游的游客确实更喜欢随身携带至少一本指南,以便在开始探索时帮助他们定位自己。这正是本文的目的。尽管没有足够的时间参观所有主要的旅游景点,但只要稍加努力,并使用本文中的信息作为路标,大胆的探险家就可以轻松找到许多其他有趣的探索路径。
内部人员、幼稚和敌意:安全完美风暴?
将坏人拒之门外只是成功的一半。
每年,公司和政府机构花费数百万美元来加强其网络基础设施。防火墙、入侵检测系统和防病毒产品在网络边界站岗,个人监控无数的日志和传感器,以查找哪怕是最细微的网络渗透迹象。供应商和 IT 管理人员专注于将狡猾的黑客挡在网络边界之外,但很少有技术措施来防范内部人员 - 那些在强化的网络边界内运作的实体。2002 年 CSI/FBI 调查估计,70% 的成功攻击来自内部。其他一些估计甚至更高。
网络取证
优秀的侦探工作意味着在攻击之前、期间和之后都要注意。
字典将取证定义为“在刑事或民事法庭上使用科学和技术来调查和确定事实”。然而,我更感兴趣的是计算机世界中常见的用法:使用计算机攻击后留下的证据来确定攻击是如何进行的以及攻击者做了什么。取证的标准方法是查看攻击发生后可以检索到什么,但这还有很多不足之处。第一个也是最明显的问题是,成功的攻击者通常会竭尽全力确保他们掩盖自己的踪迹。
安全:问题的根源
为什么我们似乎无法生成安全、高质量的代码?
安全漏洞?我的编程语言让我这么做的!似乎每天都有人宣布一些关键软件或其他软件存在严重缺陷。软件有那么糟糕吗?程序员如此无能吗?到底是怎么回事,为什么问题越来越严重而不是越来越好?
冲击波病毒再探
重新审视冲击波病毒的成本,可以为当今的混合威胁带来新的启示。
我们可以从冲击波蠕虫造成的破坏中学到什么教训?以下故事基于企业在 2003 年 8 月面临和根除冲击波蠕虫的实际情况。这个故事从多个角度提供了观点,说明了对抗新的混合威胁所需的复杂性和精细度。
从信息检索到搜索,以及更远
自 60 年代以来,搜索已经走了很长一段路,但我们才刚刚开始吗?
自从 Vannevar Bush 发表具有开创意义的文章《诚如所思》以来,已经过去了近 60 年,文章描绘了一位学者在机器的帮助下的形象,“一种个人在其中存储他所有的书籍、记录和通信的设备,并且该设备是机械化的,因此可以以极快的速度和灵活性进行查阅。”
TCP 卸载来救援
初步了解 TCP 卸载引擎—以及我们为什么需要它们
近年来,TCP/IP 卸载引擎(称为 TOE)引起了业界的广泛关注和大量的风险投资。TOE 是一种专用网络设备,它在硬件中实现了 TCP/IP 协议的很大一部分,从而将 TCP/IP 处理从通用 CPU 上运行的软件中卸载出来。本文探讨了对 TOE 感兴趣的原因,并研究了其实现和部署中涉及的挑战。
桌面 Linux:你在哪里?
赶上、迎接新挑战、向前迈进
桌面 Linux 已经走了很长一段路 - 而且这是一段过山车般的旅程。在互联网泡沫的高峰期,大约在红帽公司首次公开募股的时候,人们期望 Linux 在短时间内在桌面上起飞。几年后,在股市崩盘和几家备受瞩目的 Linux 公司倒闭之后,评论员迅速宣布桌面 Linux 胎死腹中。
没有免费的(软件)午餐
每个开发人员都应该了解的关于开源许可的内容
大多数软件的许可证旨在剥夺您共享和更改它的自由。相比之下,GNU 通用公共许可证旨在保证您共享和更改自由软件的自由,以确保该软件对其所有用户都是自由的。GNU 通用公共许可证(或 GPL)就是这样开始的,它已成为使用最广泛的开源软件许可证。自由是口号;编写 GPL 的组织被称为自由软件基金会,并且世界各地的开源开发人员都宣称“信息渴望自由”,这绝非巧合。
开源适合您吗?
商业软件商店中开源的虚构案例研究
媒体经常将开源软件描绘成商业软件的直接竞争对手。这种描述,通常将大卫(Linux)与歌利亚(Microsoft)对立起来,在周末报纸上读起来很有趣。然而,它主要错过了开源对开发组织意味着什么。在本文中,我使用 GizmoSoft(一家虚构的软件公司)的经验来介绍关于开源软件使用对软件开发商店的影响的一些观点。
核心开源
在现实世界的软件产品中使用开源:好的、坏的和丑陋的
开源开发模式并非完全是新的。个别工程师数十年来一直将开源用作协作开发方法。现在它已经引起了中高层管理人员的注意,然而,它最终被公开承认为商业工程力量倍增器和避免重大软件开发成本的重要选择。
即时消息还是即时头痛?
IM 在企业中找到了归宿,但它远非安全。
这是一个现实。您的环境中存在 IM(即时消息)客户端。您已经认识到它正在消耗越来越多的网络带宽,并且随着 Microsoft 将 IM 功能构建到其 XP 操作系统和应用程序中,您知道这种情况只会变得更糟。管理层也对个人对话通过这种媒介造成的用户生产力损失表示担忧。您已尝试阻止这些对话渠道,但这是一场持续的战斗。
游戏图形:革命之路
从落后者到领导者,游戏图形正在将我们带向新的方向。
从平铺块背景上的彩色精灵到现代游戏的沉浸式 3D 环境,这已经是一段漫长的旅程。过去由一位游戏创作者完成的工作现在已成为一项多方面的制作,涉及各个创意学科的工作人员。下一代游戏机和家用电脑硬件将带来可用计算能力的革命性飞跃;商品硬件将提供每秒万亿次浮点运算(teraflop)或更高的运算能力。
构建 Nutch:开源搜索
编写开源搜索引擎的案例研究
搜索引擎对于互联网的使用与网络基础设施的任何其他部分一样重要,但它们在两个重要方面与其他组件不同。首先,它们的内部运作是秘密的,不像 DNS(域名系统)的运作那样。其次,它们掌握着政治和文化力量,因为用户越来越依赖它们来浏览在线内容。
为什么编写自己的搜索引擎如此困难
无论大小、专有还是开源、Web 还是 Intranet,这都是一项艰巨的工作。
一定有 4,000 名程序员在他们的地下室里敲代码,试图构建下一个“世界上最具可扩展性”的搜索引擎。它只完成过几次。从来没有一个大型团队完成过;始终是一到四个人完成了核心工作,大型团队随后加入以构建详细说明和生产基础设施。为什么这么难?我们将深入探讨编写搜索引擎时要考虑的各种问题。本文的目标读者是那些正在考虑为其网站或 Intranet 进行这项工作的个人或小型团队。
企业搜索:难事
为什么搜索 Intranet 比搜索 Web 困难得多?
过去十年见证了信息检索从信息和图书馆科学领域的一门专业学科发展成为全球数十亿人的日常体验。这场革命在很大程度上是由互联网驱动的,供应商专注于 Web 资源的搜索和导航以及 Web 内容管理。与此同时,企业已投入资金将所有信息联网在一起,以至于员工越来越有可能拥有进入企业的单一窗口。
搜索与查找
为什么系统需要知识才能找到您真正想要的东西
查找信息并组织信息以便可以找到信息是任何公司知识管理战略的两个关键方面。几乎每个人都熟悉使用 Web 搜索引擎进行搜索以及使用搜索界面搜索特定网站的体验。 (您甚至可能注意到,后者的效果通常不如前者。)在获得点击列表后,您通常会花费大量时间跟踪链接、等待页面下载、通读页面以查看它是否具有您想要的内容、确定它没有、返回以尝试另一个链接、决定尝试另一种措辞您的请求,等等。
BPM:承诺与挑战
一切都与从构思到执行再到反馈的闭环有关。
在过去十年中,企业和政府越来越关注业务流程 - 对其描述、自动化和管理。这种兴趣源于简化业务运营、整合组织和节省成本的需求,这反映了流程是组织内业务价值的基本单位这一事实。
死于 UML 热
自我诊断和早期治疗对于对抗 UML 热至关重要。
一种可能致命的疾病,临床上称为 UML(统一建模语言)热,正在困扰当今许多软件工程工作。这种热病有许多不同的毒株,其致命性和传染性各不相同。然而,其中一些毒株在症状上是相关的。严格的实验室分析表明,每种毒株的起源和组成都是独一无二的。UML 热病的一个特别阴险的特征,大多数相关毒株都具有,是个人和组织在自我诊断疾病时遇到的困难。结果是,许多热病病例未经治疗,并且经常演变成更复杂和致命的毒株。
数字辅助模拟集成电路
弥合模拟和数字之间的差距
在过去的几十年中,“摩尔定律”1 一直主导着微电子领域的革命。通过器件和制造技术的不断进步,该行业在晶体管小型化和集成密度方面保持了指数级的进步速度。因此,微芯片变得更便宜、更快、更复杂、更节能。
流处理器:可编程性和效率
这个新来者会挤掉 ASIC 和 DSP 吗?
许多信号处理应用既需要效率又需要可编程性。例如,3G 蜂窝基站中的基带信号处理需要数百 GOPS(每秒千兆或数十亿次运算),功耗预算为几瓦,效率约为 100 GOPS/W(GOPS/瓦),或 10 pJ/op(皮焦耳/次运算)。与此同时,需要可编程性来遵循不断发展的标准、支持多种空中接口以及在不同的空中接口上动态调配处理资源。数字电视、监控视频处理、自动光学检测以及移动相机、摄像机和 3G 蜂窝手机具有类似的需求。
DSP:回到未来
要了解 DSP 的未来发展方向,我们必须回顾它们的过去。
从 DSP(数字信号处理器)的黎明时期开始,一句古老的谚语仍然在回响:“哦,不!我们将不得不使用最先进的 5µm NMOS!”说话者的名字已消失在历史的迷雾中,就像 5µm 芯片设计古老时代的许多事物一样。这句话指的是第一个贝尔实验室 DSP,其掩模组实际上经历了 10% 的线性光刻收缩至 4.5µm NMOS(N 沟道金属氧化物半导体)沟道长度,并在 1979 年末通过积极的全定制电路设计流片。
关于将算法映射到 DSP 架构
对算法和目标架构的了解至关重要。
我们复杂的世界以信息的表示、传输和存储为特征 - 而信息主要以数字形式处理。随着 DSP(数字信号处理器)的出现,工程师能够相对容易地实现复杂的算法。今天,我们到处都可以找到 DSP - 在汽车、数码相机、MP3 和 DVD 播放器、调制解调器等等中。它们在复杂系统中的广泛使用和部署引发了 DSP 架构的革命,这反过来又使工程师能够实现日益复杂的算法。
关于处理器和处理
DSP 的方法不止一种
数字信号处理是一种隐形技术。它是从您的手机到火星探测器等一切事物的核心使能技术。它不仅仅是实现一次性的突破性产品。它提供了不断增长的功能;将拨号调制解调器的性能提升与 DSL 和有线调制解调器最近的性能提升进行比较。值得注意的是,数字信号处理已经变得无处不在,但鲜为人知,并且它的大多数用户甚至都不知道它是什么。
我们软件中的人
以人为中心的方法可以使软件栩栩如生,但代价是什么?
在当今的软件中,人没有得到很好的体现。除了 IM(即时消息)客户端之外,当今的应用程序几乎没有提供人实际上是生物的线索。静态字符串描绘了与人相关的事物,如电子邮件地址、电话号码和主页 URL。应用程序也倾向于显示关于一个人的相同信息,无论谁在查看它。
明智的身份验证
《超越恐惧》的作者认为,仅仅知道你是谁是不够的;你必须证明这一点。
保护资产及其功能的问题在于,根据定义,您不想保护它们免受所有人的侵害。保护资产免受其所有者或免受其他授权个人(包括维护安全系统的受信任人员)的侵害是没有意义的。因此,实际上,所有安全系统都需要允许人员进入,即使它们阻止人员外出。设计一个准确识别、验证和授权受信任个人的安全系统非常复杂且充满细微差别,但对安全至关重要。
可扩展性问题
高端系统和廉价 PC 的共存可能会让游戏开发人员的生活苦不堪言。
早在 1990 年代中期,我就在一家开发多媒体信息亭演示的公司工作。我们最大的客户是英特尔,我们经常创建演示,这些演示出现在 CompUSA 等主要计算机零售商的端盖上的新 PC 中。当时,从商业到消费者,所有应用程序类都对性能有需求。我们创建了演示,例如,演示了在新的处理器上重新计算电子表格(那时您必须手动执行此操作)比前一年的处理器快多少。即使是普通的观察者也能立即注意到这些差异 - 而且这很重要。
计算机游戏中的 AI
更智能的游戏正在带来更好的用户体验。未来会怎样?
如果您一直在关注游戏开发领域,您可能已经听到许多评论,例如:“计算机游戏中图形的主要作用很快就会结束;人工智能是下一个重要的事情!”虽然您几乎不应该相信这些说法,但其中有一些道理。人工智能(AI)的质量是游戏迷在做出购买决定时排名很高的功能,并且是提高玩家沉浸感和乐趣的具有巨大潜力的领域。
乐趣与游戏:多语言开发
游戏开发可以教会我们很多关于在单个项目中组合多种语言的常见做法。
计算机游戏(或“电子游戏”,如果您包含那些在游戏机级硬件上玩的游戏)是世界上增长最快的应用市场之一。在创造这些娱乐奇迹的开发社区中,随着游戏变得越来越复杂,多语言开发正变得越来越普遍。今天,要求开发团队构建一个支持数据库的网站,并要求完全用 C++ 编写,会招致嘲笑和白眼,但在不久前,完成给定任务需要多种语言的想法还被嘲笑。
大型多人在线中间件
为超大型在线游戏构建可扩展的中间件教会了我们一个道理:大型项目,简单设计。
Wish 是由 Mutable Realms 开发的多人在线幻想角色扮演游戏。它与类似的在线游戏的不同之处在于,它允许数万名玩家参与到同一个游戏世界中。允许如此大量的玩家需要将处理负载分布到多台机器上,并提出了选择适当的分布式技术的问题。
游戏开发:比您想象的更难
十年前或二十年前,一切都充满乐趣和游戏。现在是血汗和代码。
制作游戏最难的部分一直是工程。在过去,游戏工程主要与低级优化有关——编写能够在目标计算机上快速运行的代码,尽可能利用巧妙的小技巧。但在过去的十年中,游戏的复杂性已经膨胀。现在,主要的技术挑战仅仅是让代码能够工作,以产生与所需功能有些相似的最终结果。在某种程度上,我们进行优化,我们通常关注的是高级算法选择。
黑盒调试
一切都与应用程序边界发生的事情有关。
现代软件开发实践将应用程序构建为协作组件的集合。与将编译后的组件链接到单个单片应用程序的旧实践不同,现代可执行文件由任意数量的可执行组件组成,这些组件作为单独的二进制文件存在。这种设计意味着,当应用程序组件需要来自另一个组件的资源时,会调用以将控制或数据从一个组件传输到另一个组件。因此,我们可以通过观察应用程序组成组件边界上发生的活动来观察外部可见的应用程序行为。
沉没还是游泳:知道何时该弃船
一种诊断方法,可帮助您衡量组织功能失调并采取行动
新创建的企业面临着无穷无尽的生存挑战。企业成功应对这些挑战的程度在很大程度上取决于组织的性质以及在组织内部演变形成的文化。也就是说,虽然市场规模、技术质量和产品设计显然是至关重要的因素,但公司失败通常根植于某种形式的组织功能失调。
远程软件开发团队中的文化惊喜
当您的团队跨越时区,而您的截止日期没有跨越时,“入乡随俗”无济于事。
技术使组织能够构建不在同一地点的人员团队,采用一家公司所谓的“虚拟主机托管”。全球范围内的软件开发人员、金融分析师、汽车设计师、顾问、定价分析师和研究人员都是从不同地点一起工作的团队的例子,他们使用各种协作技术来实现跨空间和时间的通信。
将协作构建到 IDE 中
编辑>编译>运行>调试>协作?
软件开发很少是单独的编码工作。更常见的情况是,它是一个协作过程,由开发人员团队共同设计解决方案并生成高质量的代码。这些紧密联系的团队成员经常查看彼此的代码,共同制定关于如何进行下去的计划,甚至在必要时修复彼此的错误。然而,团队合作并不止于此。一个扩展的团队可能包括项目经理、测试人员、架构师、设计师、文案人员和其他专家,以及其他编程团队。
太阳永不落山的分布式开发
世界各地的人们可以全天候处理分布式项目,但真正的挑战在于驯服社会动态。
越来越多的软件开发正在分布在越来越远的距离。动机各不相同,但最主要的动机之一是努力降低成本。既然人才无处不在,为什么不在您找到人才的地方使用它,而不是花钱将其重新安置到某个表面上更“中心”的位置?互联网日益普及,使得遥远的人才更容易获得。
分布式开发:经验教训
如果您不必重复过去的错误,为什么要重复?
交付基于技术的项目具有挑战性,即使在控制良好、熟悉的情况下也是如此。而紧密的团队可能是成功的关键因素。因此,大多数小型、新的技术团队选择在车库(有时真的是字面意义上的车库)中工作也就不足为奇了。让每个人的精力都集中在手头的开发任务上意味着最少的非工程管理费用。
从源头消除软件缺陷
源代码分析是软件行业中一项新兴技术,它允许在程序运行之前检测到关键的源代码缺陷。
虽然在编译时检测编程错误的概念并不新鲜,但构建有效工具的技术长期以来一直让市场难以捉摸,这些工具可以处理数百万行代码,并仅报告少量噪声的实质性缺陷。与此同时,需要一种不同的解决方案来对抗当前软件行业中正在稳步削弱传统软件测试和质量保证有效性的趋势。
通过多样化的设备社会进行有感知能力的数据访问
当今的普适计算环境无法从对分层文件系统的传统理解中受益。
自从 ATM 和杂货店 UPC 收银台等“信息设备”被引入以来,已经过去了十多年。对于办公环境,Mark Weiser 开始阐明 UbiComp 的概念,并在 1991 年确定了该趋势的一些显着特征。嵌入式计算也变得越来越普遍。例如,微处理器发现自己被嵌入到看似传统的钢笔中,这些钢笔可以记住它们写了什么。汽车中的防抱死制动系统由模糊逻辑控制。
九个 IM 帐户还在增加
当今即时消息传递的关键在于互操作性。
即时消息传递几乎与电子邮件一样普及,在某些情况下,其受欢迎程度远远超过电子邮件。但它已经远远超出了青少年封闭的世界,进入了商业领域,在那里它正成为一种有用的沟通工具。与电子邮件不同,问题在于 IM 没有通用标准,因此用户感到不得不维护多个帐户,例如 AOL、Jabber、Yahoo 和 MSN。
广播消息传递:向大众发送消息
这种强大的通信形式既具有社会影响,也具有技术挑战。
我们可以通过 Web 搜索即时访问拍字节的存储数据。在消息传递方面,我们拥有空前的通信工具数量,这些工具提供对人员的同步和异步访问。电子邮件、留言板、新闻组、IRC(互联网中继聊天)和 IM(即时消息)只是几个例子。这些工具都特别重要,因为它们已成为基本的生产力权利。它们导致了我们沟通方式的根本转变。许多读者可以证明,当邮件服务器宕机或无法访问 IM 时,他们会感到与世隔绝。
超越即时消息传递
这些服务的平台和标准必须预测并适应未来的发展。
IM(即时消息传递)最近的兴起推动了平台的发展和支持 IM 的标准的出现。尤其是在 IM 的使用已从家庭在线社交迁移到商业环境的情况下,有必要提供强大的平台,并提供商业客户用于与其他工作应用程序集成的接口。然而,在匆忙开发成熟的 IM 基础设施的过程中,认识到 IM 的功能和用途仍在不断发展也很重要。例如,大众媒体报道1 提出了在工作场所 IM 交互可能过于分散注意力的担忧。
阅读、写作和代码
编写可读代码的关键是培养良好的编码风格。
四十年前,当计算机编程是一种个人体验时,对易于阅读的代码的需求不在任何优先列表中。然而,今天,编程通常是一项基于团队的活动,编写其他人可以轻松理解的代码已成为一种必需品。创建和开发可读代码并不像听起来那么容易。
IDE 的大爆炸理论
思考不断扩展的 IDE 宇宙的浩瀚,您可能会怀疑是否要求一个可用的 IDE 是否太过分了。
还记得开发只需要文本编辑器、编译器和某种调试器(在 printf() 或两个 printf() 无法满足需求的情况下)的平静日子吗?在计算的早期,这些是黄金圈开发中迭代使用的独立工具。在某个时候,我们意识到更紧密地集成这些工具可以加快开发过程。因此诞生了集成开发环境 (IDE),这是一个用于软件开发的框架和用户环境,实际上是一个对软件创建至关重要的工具包。起初,IDE 只是简单地连接了三大件(编辑器、编译器和调试器),但如今大多数 IDE 都远远超出了这些最低要求。
现代系统电源管理
对更高功率和更高效率的需求不断增长,这迫使软件和硬件开发人员提出问题并寻找答案。
高级配置与电源接口 (ACPI) 是笔记本电脑、台式机和服务器系统最广泛使用的电源和配置接口。它也非常复杂,目前的规范超过 500 页。毋庸置疑,选择支持 ACPI 的操作系统需要大量的额外软件支持,甚至包括根本的操作系统架构更改。ACPI 的定义和实现所付出的努力是值得的,因为它为操作系统(以及最终用户)提供了极大的灵活性来控制电源管理策略和实施。
为高效超级计算辩护
现在是计算界使用替代指标评估性能的时候了。
超级计算机让人联想到“大型机”和速度;它是计算领域的 F1 赛车。然而,当我们步入新的千年时,我认为效率、可靠性和可用性将成为本十年末的主导问题,不仅对于超级计算,而且对于整个计算领域也是如此。
手持设备上的能源管理
无论其来源如何,所有手持设备都有一个共同的阿喀琉斯之踵:电池。
手持设备正变得无处不在,并且随着其功能的增强,它们开始取代笔记本电脑——就像笔记本电脑在许多角色中取代了台式电脑一样。手持设备正在从今天的 PDA、管理器、手机和游戏机演变成各种新形式。尽管低功耗电子技术的进步部分抵消了这一点,但功能的增加也带来了相应的能耗增加。其次,由于取代了其他设备,手持设备在两次充电之间被更频繁地使用。最后,电池技术的进步速度跟不上手持电子设备的能源需求增长速度。
可重构系统的必然性
从基于指令的电路到可重构电路的转变并非易事,但时机已到吗?
1971 年微处理器的引入标志着电子系统设计方法停滞 30 年的开始。工业界正在通过从程序化系统转向可重构系统来摆脱这种停滞。在程序化系统中,线性配置位序列(组织成称为指令的块)配置固定硬件以模拟定制硬件。在可重构系统中,逻辑元件之间的物理连接随时间变化以模拟定制硬件。向可重构系统的转变将是痛苦的,但这是不可避免的,因为设计重点从成本性能转向每瓦成本性能。以下是故事。
获得千兆级芯片
延续摩尔定律的挑战与机遇
在过去的三十年中,处理器性能提高了五个数量级,这归功于遵循摩尔定律,即持续的技术扩展、改进晶体管性能以提高频率、增加(避免重复)集成容量以实现复杂的架构,以及降低每次逻辑运算的能耗以将功耗控制在限制范围内。软件技术的进步,例如丰富的多媒体应用程序和运行时系统,利用了这种性能爆炸,为最终用户带来了更高的生产力、无缝的互联网连接,甚至多媒体和娱乐。
垃圾邮件、垃圾邮件、垃圾邮件、垃圾邮件、垃圾邮件、联邦贸易委员会和垃圾邮件
联邦贸易委员会赞助的一个论坛突显了垃圾邮件的危害程度,以及如果不进行干预,情况只会变得更糟。
联邦贸易委员会于 4 月 30 日至 5 月 2 日在华盛顿特区举行了一个关于垃圾邮件的论坛。令我惊讶的是,这是一次非常棒、内容丰富的活动。联邦贸易委员会的工作人员做了功课,并召集了从坚定的反垃圾邮件者到顽固的垃圾邮件发送者,以及介于两者之间的所有人的小组成员:律师、合法的营销人员和来自供应商团体的代表。
又一天,又一个错误
我们询问读者他们使用哪些工具来消除错误。以下是他们的说法。
作为本期关于程序员工具的一部分,Queue 决定就调试主题进行一次非正式的网络调查。我们请您告诉我们您使用的工具以及您如何使用它们。我们还收集了一些关于那些难以追踪的错误的故事,这些错误有时会让我们考虑换个职业。
没有源代码?没问题!
如果您必须移植一个程序,但您只有二进制文件怎么办?
典型的软件开发涉及两个过程之一:创建新软件以满足特定需求,或修改(维护)旧软件以修复问题或满足新需求。这些转换发生在源代码级别。但是,如果问题不是维护旧软件,而是需要创建原始软件的功能副本怎么办?如果源代码不再可用怎么办?
代码探险:探索洞穴般的代码库
深入研究不熟悉的代码库比从头开始编写新代码更频繁——确保您有合适的工具来完成这项工作。
试着回忆一下您在第一份软件工作的第一天。您还记得人力资源部的人处理完您之后,您被要求做什么吗?您被要求编写一段全新的代码吗?可能不是。更有可能的是,您被要求修复一个或多个错误,并尝试理解一个大型、文档记录不佳的源代码集合。当然,这不仅仅发生在应届毕业生身上;每当我们开始一份新工作或查看一段新代码时,都会发生这种情况。凭借经验,我们都开发了一套用于处理大型、不熟悉的源代码库的技术。
智能编码:人与工具
工具可以帮助开发人员提高效率,但它们不能替代思考。
酷炫的工具具有诱惑力。当我们考虑软件生产力时,工具自然而然地浮现在脑海中。当我们看到漂亮的新工具时,我们倾向于相信它们令人惊叹的功能将帮助我们更快地完成工作。由于每位软件工程师每天都使用软件生产力工具,并且所有团队经理都必须决定他们的成员将使用哪些工具,因此最新和最出色的工具看起来很有吸引力。
异步世界中的调试
当您无法保证顺序执行时,可能会出现难以追踪的错误。合适的工具和技术可以提供帮助。
寻呼机、手机、智能家电和 Web 服务——这些产品和服务在我们这个世界几乎无处不在,并且正在刺激一种新型软件的创建:必须处理来自各种来源的输入、提供实时响应、提供强大的安全性——并在提供积极的用户体验的同时做到这一切的应用程序。作为回应,一种新的应用程序编程风格正在兴起,这种风格基于多线程控制和数据的异步交换,并导致应用程序从根本上变得更加复杂。
闭源反击
SCO vs. 世界——他们是怎么想的?
2003 年 5 月,Linux 操作系统供应商 SCO Group 向其客户发送了一封信。其中,它指出,“我们认为 Linux 在很大程度上是 Unix 的未经授权的衍生产品。”是什么让 SCO 这样做?
商业化开源软件
许多人尝试过,少数人正在成功,但挑战依然存在。
开源软件的使用在生产环境以及研究和软件开发中变得越来越流行。一个明显的吸引力是低廉的购置成本。商业软件的初始成本较高,但通常具有支持和培训等优势。用户和供应商设计了许多商业模式,将开源和商业软件结合起来;他们尽可能多地使用开源软件,并根据需要添加商业软件。
企业开源启蒙时代
不管你喜不喜欢,狂热分子和异教徒都在开源圣战中找到了共同点。
将政治和宗教混为一谈是一个坏主意。传统智慧告诉我们,将它们分开——并且不要在晚宴上讨论任何一个。软件世界也是如此。当涉及到将开源教堂与专有国家(或者反过来?)混合在一起时,只有一个规则适用:不要这样做。
从服务器机房到客厅
开源和 TiVo 如何成为完美匹配
以 Linux 的日益普及为例的开源运动,不仅正在进入企业环境,而且正在进入您附近的家庭。长期以来,软件开发、计算机辅助设计和制造以及繁重的计算应用程序等高端应用程序一直使用 Linux 和通用 PC 硬件来实现。
存储系统:不再只是一堆磁盘
当今可用数据的庞大规模和范围对存储系统施加了巨大压力,要求其以从未想象过的方式执行。
存储设备的概念已经发生了巨大的变化,从 IBM RAMAC 在 1956 年推出的第一个磁盘驱动器到今天的服务器机房,其中包含分离且完全联网的存储服务器。存储在大小方向上都得到了扩展。所有这些都使用相同的底层技术,但它们很快就从那里分道扬镳。在这里,我们将重点关注通常与服务器主机分离的较大型存储系统。我们将介绍协议和翻译层,这些协议和翻译层发生在位从磁盘驱动器上的磁域和接口传输到您的桌面时。
你对磁盘一窍不通
柱面和磁道怎么了?
传统上,程序员的磁盘存储工作模型由一组统一的柱面组成,每个柱面都有一组统一的磁道,而磁道又容纳固定数量的 512 字节扇区,每个扇区都有唯一的地址。柱面由多盘驱动器中每个磁盘盘片上的同心圆(或磁道)组成。每个磁道像馅饼一样被分成扇区。
开放频谱
实现普遍连接的途径
正如开放标准和开放软件震撼了网络和计算行业一样,开放频谱有望成为通信无线电频谱使用中的颠覆性力量。与此同时,开放频谱将成为继续推动互联网使用开放标准和商品硬件整合和促进所有电子通信的主要因素。
自愈网络
修复自身损坏的通信链路的无线网络可能会加速其广泛接受。
无线通信相对于有线通信的明显优势在于,正如房地产行业所说的那样,位置、位置、位置。个人和行业选择无线是因为它允许位置的灵活性——无论是移动性、便携性,还是仅仅是在固定点易于安装。无线通信的挑战在于,与电缆提供的几乎无错误的传输环境不同,无线通信传输的环境是不可预测的。强大的电机、其他无线设备、微波炉——甚至空气中的水分含量——产生的环境射频 (RF)“噪声”会使无线通信变得不可靠。
设计便携式协作网络
一种中间件解决方案,用于跟上移动工作人员协作方式的不断变化。
点对点技术和无线网络为在办公桌外协同工作提供了巨大的潜力——但它们也带来了独特的软件和基础设施挑战。工作环境的传统概念锚定在中心位置——办公桌和办公室——工作所需的资源都位于这里。
802.11 的家族动态
802.11 系列标准正在帮助无线 LAN 进入有希望的新领域。
三个趋势正在推动无线 LAN (WLAN) 的快速增长:笔记本电脑和个人数字助理 (PDA) 的使用增加;WLAN 数据速率的快速进步(在过去四年中从每秒 2 兆比特到 108 Mbps);以及 WLAN 价格的急剧下降(目前客户端低于 50 美元,接入点低于 100 美元)。
为移动性缓存 XML Web 服务
面对不可靠的连接和低带宽,缓存可能为 Web 服务提供可靠的无线访问。
Web 服务正在成为互联网上的主要应用程序。Web 不再仅仅是信息的存储库,而是演变为服务提供商和消费者的活跃媒介:个人提供点对点服务以访问其他个人的个人联系信息或相册;个人为企业提供服务以访问个人偏好或税务信息;基于 Web 的企业提供消费者服务,例如旅行安排 (Orbitz)、购物 (eBay) 和电子邮件 (Hotmail);供应链管理等多种企业对企业 (B2B) 服务构成了互联网的重要应用。
WLAN 的未来
克服无线网络中的十大挑战——它是否能使广域网状网络变得无处不在?
自从詹姆斯·克拉克·麦克斯韦在一个半世纪前首次用数学方法描述电磁波以来,世界已经看到在更好、更多样化的方式中使用电磁波方面取得了稳步进展。在过去的一个世纪里,语音一直是无线技术的杀手级应用。随着工程所有领域的性能不断提高,无线语音已从大众广播媒介转变为点对点媒介。从地球上的任何地方与地球上的任何人交谈的能力从根本上改变了社会的工作方式以及社会变革的速度。
将所有内容整合在一起
组件集成是嵌入式系统设计中的难题之一。设计人员寻找保守的设计风格和可靠的接口和验证技术。
随着嵌入式系统复杂性的日益增加,系统中越来越多的部分被重用或提供,通常来自外部来源。这些部分包括从单个硬件组件或软件进程到硬件-软件 (HW-SW) 子系统。它们必须与新开发的部分合作并共享资源,以便满足所有设计约束。简单来说,这就是集成任务,理想情况下,集成应该是一个即插即用程序。然而,这在实践中并没有发生,不仅因为不兼容的接口和通信标准,还因为专业化。
硬件和软件之间界限的模糊
嵌入式系统的软件开发显然超越了传统的“编程”,需要对硬件有深入的了解,并深入理解要实现的底层应用程序。
在技术的推动下,芯片上可提供数百万个门电路,一种新的设计范式正在兴起。这种新范式允许在一个芯片上集成和实现整个系统。
嵌入式系统中的劳动分工
您可以选择多种策略来在不连贯的处理器内核上划分嵌入式应用程序。以下是关于每种方法的优点和缺点的实用建议。
越来越多的嵌入式应用程序需要的处理能力超过了单个处理器所能提供的能力,即使是高度流水线的处理器,即使是使用高性能架构(如超长指令字 (VLIW) 或超标量)的处理器也是如此。仅仅提高时钟频率在嵌入式世界中通常是令人望而却步的,因为更高的时钟频率需要成比例地增加功率,而功率在嵌入式系统中通常是很稀缺的商品。多处理,即应用程序在两个或多个处理器上同时运行,是在固定功率预算内获得更多处理器周期的自然途径。
SoC:软件、硬件、噩梦、幸福
片上系统设计通过将整个计算机缩小到一个芯片来提供巨大的前景。但是,在前景背后,也存在着在 SoC 充分发挥其潜力之前需要克服的挑战。
片上系统 (SoC) 设计方法允许设计人员使用较小的工作模块或系统创建复杂的硅系统。通过提供一种在包含许多现有设计部件的更大环境中轻松支持专有功能的方法,SoC 设计向更广泛的受众开放了硅设计工艺。
无网络编程
嵌入式系统编程对不熟悉该环境的工程师提出了特殊挑战。
嵌入式系统编程对不熟悉该环境的工程师提出了特殊挑战。在某些方面,它比为桌面使用编写应用程序更接近于在操作系统内核内部工作。以下是需要注意的事项。
Web 服务:承诺与妥协
Web 服务最初的许多承诺将通过企业内部的集成来实现。
Web 服务最初的许多承诺将通过企业内部的集成来实现,无论是与遗留应用程序还是跨组织孤岛的新业务流程集成。企业需要支持这种新范式的组织结构。
开放 Web 服务架构
游戏的名字是 Web 服务。
游戏的名字是 Web 服务——旨在通过我们选择的任何设备,在我们需要的任何时候为我们带来所需内容的复杂网络软件。我们正越来越接近这个理想,因为近年来,客户端/服务器模型已经演变为基于 Web 的计算,而现在又演变为 Web 服务模型。在本文中,我将讨论 Sun Microsystems 对 Web 服务的看法,特别是 Sun ONE:一个开放的、基于标准的 Web 服务框架。我将与您分享 Sun 关于 Web 服务的决策理由,并讨论我们正在努力的方向。
深思熟虑的革命
使用 XML Web 服务改造集成
虽然批评者嘲笑 XML Web 服务是带有重量问题的 CORBA,但行业啦啦队表示,这些服务正在迎来无缝集成计算的新时代。但是,对于我们这些工作不涉及建立行业兴奋感的人来说,Web 服务能提供什么?