搜索
首页后端开发php教程PHP开发人员分布式计算的8个谬误

The 8 Fallacies of Distributed Computing for PHP Developers

PHP开发者构建分布式应用需警惕的八大误区

Peter Deutsch在1997年提出了七个分布式计算的误区,后来James Gosling(Java之父)又补充了一个。这些误区对PHP开发者来说至关重要,因为我们每天都在构建分布式应用:mashup、与SOAP和REST服务交互的应用、通过Facebook、Google或Twitter API进行用户身份验证、从远程数据库和缓存服务检索信息等等。我们构建的正是分布式计算应用。因此,理解这八个误区及其影响至关重要。

关键要点:

  • Peter Deutsch和James Gosling提出的八大分布式计算误区对PHP开发者至关重要:网络可靠、延迟为零、带宽无限、网络安全、拓扑不变、只有一个管理员、传输成本为零以及网络同构。
  • 尽管网络可靠性和带宽有了显着提升,但这些因素并非完美无缺。开发者必须预见潜在的故障,并在应用程序设计和部署中纳入相应的处理策略。
  • 网络安全始终是一个重要问题,开发者必须优先考虑良好的安全实践,并评估其合作厂商的安全措施。
  • 开发者应准备好应对拓扑结构的变化、更换供应商的可能性以及数据传输相关的成本。他们还应该采取灵活的方法,能够处理多个数据库和数据源,并且不假设网络是同构的。
  1. 网络可靠

这显然是不正确的。尽管自1995年以来,网络延迟降低,带宽显着增加,但说网络可靠是错误的。假设我们搭建了一个简单的应用程序,它不使用太多服务——一个使用MySQL作为后端的PHP应用程序。似乎没什么问题。然而,假设我们后来决定使用像Xeround这样的MySQL托管服务提供商来满足我们的数据库需求。即使具有良好的可扩展性和高可用性,如果他们的系统出现问题怎么办?如果他们的基础设施遭受DDoS攻击或由于内部问题而出现停机怎么办?我们经常听说99.999%的正常运行时间,但这仍然不是100%。随着服务的激增和当今通常高度可用的带宽,很容易忘记没有什么是完美的。您如何在应用程序中考虑服务的故障?

  1. 延迟为零

虽然延迟可能很低,确实比几年前低得多,但它永远不会为零。引用Arnon Rotem-Gal-Oz在其《分布式计算误区详解》文章中的话:以大约300,000公里/秒(3.6 * 10E12 teraangstrom/两周)的速度,即使处理是实时完成的,从欧洲到美国再返回的ping也至少需要30毫秒。

这是坏事吗?好坏参半。根据我们应用程序的结构和可用的资源,我们可以很大程度上减轻延迟问题。我们可以使用Amazon Web Services之类的服务托管我们的应用程序,并利用S3,以便我们的数据位于世界各地的多个区域,使其更接近我们的最终用户,并减少网络上应用程序的延迟。但即使我们可以减少延迟,我们也无法消除它。我们可以采用一系列方法和架构来减少它对我们的影响,但无论我们做什么,它都将始终存在。您在设计应用程序时是否考虑过这一点?

  1. 带宽无限

带宽真的可以无限吗?如果是这样,无限的代价是什么?当我们考虑到网络正日益转向移动化时,一切旧事物都焕发了新生。我并不是说我们从拨号上网的速度开始重新开始,更新的4G网络比早期的2G和3G网络快得多。但是,即使是它们的峰值数据速率目前也低于标准宽带连接。此外,随着移动宽带的普及,寻求使用我们服务的潜在用户数量(我们都想受欢迎,至少取得Facebook的一些成功)正在以惊人的速度增长。考虑来自mobithinking的这些统计数据:

  • 有59亿移动用户。
  • 有12亿拥有3G覆盖范围的移动网络用户。
  • 移动设备占全球点击量的8.49%。

鉴于此,可以公平地说,尽管带宽速率及其在世界范围内的普及率正在提高,但用户增长率却抵消了这一点。更进一步说,随着移动宽带提供的巨大灵活性,自然而然地出现了明确的临时服务消耗。您是否为服务上潜在的巨大负载做好了准备?你能处理这种可用性带来的峰值吗?

  1. 网络安全

我认为无需过多细节就可以公平地说,这是,并且将永远是错误的。如果您有任何疑问,也许您应该与LinkedIn或eHarmony成员谈谈。当我们设计和部署我们的应用程序时,我们在应用程序的托管位置(例如Rackspace、PagodaBox或cloudControl)以及应用程序本身的设计中,对安全性投入了多少精力?根据SecurityAffairs,Prolexic报告:

  • 针对金融服务行业的恶意数据包流量环比增长3000%。
  • 2011年第四季度针对金融服务行业的恶意流量数据量为19.1TB,数据包为140亿个,2012年有所增加。
  • 2012年识别并缓解的数据量为65TB,数据包为1.1万亿个,是2011年的80倍。

鉴于网络并不安全,我们需要确保我们正在将良好的安全实践作为当然的事情来使用。鉴于Chris Shiflett的博客、Essential PHP Security、PHP安全联盟等来源的大量良好建议,很难不知道如何在我们的应用程序核心融入安全性以及为什么要这样做。您的安全实践是什么?您是否评估了您部署的供应商?

  1. 拓扑不变

不会吗?真的吗?它不会改变,还是我们只是不知道?当我们将应用程序托管给其他人时,我们只是不知道。如果提供商重新配置他们的数据中心、升级它、调整它,无论出于何种原因,拓扑结构都会发生变化。鉴于前面提到的智能手机使用率的提高,拓扑结构经常发生变化。从用户和提供商的角度来看,拓扑结构几乎每天都在变化!如果拓扑结构发生变化,并且它依赖的外部服务无法再访问,导致例如无法访问数据库,那么这肯定是一个问题。但是,如果在我们的提供商内部发生变化,并且应用程序继续运行,那么它可能不是问题。当然,编写一个小型且以简单配置托管的应用程序很容易。但应用程序会发生变化,那些越来越受欢迎的应用程序更是如此。您是否在设计中考虑了拓扑结构的变化?您如何解释或处理应用程序设计和部署设计中的故障?

  1. 只有一个管理员

“但是我的应用程序由单个服务提供商托管。他们提供操作系统、数据库和Web服务器支持,”你说。好吧,假设那是您的应用程序,真的只有一个管理员吗?如果真的只有一个管理员,你会真的相信提供商会处理你的应用程序吗?如果他们生病或休假,我会讨厌想到会发生什么。通常,至少会有几个管理员,尽管每个管理员的技术和更广泛的敏锐程度可能不同。应该制定策略,例如网络入侵检测和其他安全策略,但不能保证他们都会以相同的彻底性和尽职尽责来遵守这些策略。鉴于当今可用的众多托管提供商以及更新DNS记录所需的时间很少,我们有很多选择和灵活性,如果一个提供商没有满足我们的需求和期望,我们可以转向另一个提供商。您是否考虑过这会如何影响您?如果您无法轻松更换供应商怎么办?如果您有大量的供应商锁定,或者移动成本很高怎么办?如果您的应用程序架构不够灵活怎么办?您可以采取哪些措施来减轻此类风险?

  1. 传输成本为零

与迄今为止的所有陈述一样,这的有效性也很不可能。如果支持我们应用程序的服务器位于同一数据中心的同一机架中,那么传输成本可以大大降低,但就时间成本而言。货币成本呢?是的,我们可以根据需要无限地弹性地向上和向下扩展,并且可以在地理位置分散的数据中心之间存储我们的应用程序数据,以便它尽可能接近我们的最终用户,但代价是什么?您的应用程序或服务的架构组成是什么?就成本或时间而言,它是否接近于零?如果您能减少一个,它是否会增加另一个?

  1. 网络同构

与其他误区不同,我认为作为PHP开发者,我们天生就理解这一点。我们在Windows、Linux、Solaris、BSD和Mac OS X服务器上托管我们的应用程序。我们使用MySQL、SQLServer、SQLite、PostgreSQL、mongoDB、Hadoop和Oracle来存储数据。我们通过需要不同接口的XML或JSON使用外部服务。作为一个多操作系统和多服务社区,可以说从早期开始,我们就从未期望过同构网络。但问题仍然需要提出,您的方法是否灵活?您可以处理多个数据库和数据源吗?您是否使用相关的设计模式,例如抽象工厂,来使用透明的代码接口从各种来源和类型消费数据?或者如果需要执行像从XML切换到JSON这样简单的事情,您的代码是否会中断?

结论

我认为,作为PHP开发者,分布式计算的八大误区与以往一样重要。鉴于大量可用的信息和资源,我们处于一个非常有利的地位来理解它们并减轻由此产生的风险。您怎么看?在开发应用程序和服务时,您是否考虑到了它们?您认为这八个误区如何影响您的应用程序?

(图片保持不变)

以上是PHP开发人员分布式计算的8个谬误的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
哪些常见问题会导致PHP会话失败?哪些常见问题会导致PHP会话失败?Apr 25, 2025 am 12:16 AM

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

您如何在PHP中调试与会话相关的问题?您如何在PHP中调试与会话相关的问题?Apr 25, 2025 am 12:12 AM

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

如果session_start()被多次调用会发生什么?如果session_start()被多次调用会发生什么?Apr 25, 2025 am 12:06 AM

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

您如何在PHP中配置会话寿命?您如何在PHP中配置会话寿命?Apr 25, 2025 am 12:05 AM

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。

使用数据库存储会话的优点是什么?使用数据库存储会话的优点是什么?Apr 24, 2025 am 12:16 AM

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

您如何在PHP中实现自定义会话处理?您如何在PHP中实现自定义会话处理?Apr 24, 2025 am 12:16 AM

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

什么是会话ID?什么是会话ID?Apr 24, 2025 am 12:13 AM

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

您如何在无状态环境(例如API)中处理会议?您如何在无状态环境(例如API)中处理会议?Apr 24, 2025 am 12:12 AM

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器