- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章PHP之父谈MVC和网站设计架构 貌似他不支持php用mvc由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Q:越来越多Web 2.0网站走向应用平台,你认为打造这类平台的关键为何?
A:简单来看,应用平台就是API,任何Ajax或 Web 2.0类型的网站,都是在应用平台上运用了API来创造出视觉介面的互动效果。例如Yahoo Mail,透过简单的Request呼叫,来读取後续的信件。打造这类网站,如何规画解决问题的方式,会决定了网站未来的扩充性(Scalability),而非效能决定网站的发展.
Q:如何规画网站架构,才会具有扩充性?
A:将一个网站应用,分成几十个独立小程式,前端透过 API提供服务,後端是应用程式引擎,这样做自然会有扩充性。因为应用的每一个部分,都有不同等级的使用方式,需要有不同的扩充程度(scaling level),需要不同的机制来处理。以开发Yahoo Mail而言,是要开发一个地址服务程式丶一个读信服务丶一个送信服务,而送信程式完全和读信程式无关。以Yahoo的规模而言,需要让这些工作完全分离,才有扩充性.
Q:这种规画网站的方式,什麽是最重要的关键?
A:关键是你必须建立分离丶模组化的独立端点,而不是全部放在同一个大篮子里。大多数现今MVC架构(MVC framework)的开发框架(Framework),使用所谓的前端控制器(Front Control),每一次浏览器提出Request请求时,就会呼叫这个前端控制器,再由前端控制器来分辨,使用者想要执行哪一支程式。这样做,一点意义都没有.
在浏览器层次,程式完全能知道使用者想要做什麽事情,例如使用者只是要读信,程式就不用再把需求送到伺服器,让伺服器判断使用者要读信还是送信。将这类决策工作拉出浏览器,由伺服器处理,就会浪费大量伺服器资源,来处理那些对使用者没有实际功用的工作。扩充性来自架构,很多开发框架,将所有事情绑在一起,限制了架构。选错开发框架,你就没有扩充性.
Q:你是说MVC模式不利於网站扩充性?
A:MVC模式比较适合用在网页控制器(Page Control)的层次。基本上,每一个网页控制器都是独立模组,读信和查地址是不同的网页控制器,所以,读信程式就不会干扰到查地址程式。所以,在每一个端点使用MVC模式来打造小型的网页控制器,是不会有问题。但是,大多数采用MVC模式的框架,预设在网站中采用前端控制器,而非用网页控制器的方式,这样的MVC模式,只适合在小型或单一伺服器的网站.
Q:你会如何选择开发框架呢?
A:一个框架都不要用。但是,我会从这些开发框架中,找出我需要的功能,拿出那个我需要的程式模组来用,或者参考其中的设计想法,而不是套用整个框架。我所看到的大多数框架,都没有专注在打造有效能的扩充性和可模组性.
Q:难道开发者不需要框架或架构吗?
A:网站的确需要有架构,每一个人都需要框架,框架是一种解决问题的方法。但是你并不需要通用型框架,用一个前端控制器,来解决所有问题,这样通常没办法成功。每一个问题都不同,你需要引导框架,使用正确的设计模式,直接解决真正要处理的问题。只生产一款汽车,怎麽可能满足全世界人的需求.
用框架开发雏形系统就好,但真正的产品就不要全部套用。从框架开始比较容易,但你要拆开全部的框架,移除Runtime检查丶拿掉不需要的功能,只留下你会用到的程式模组。你不需要一个通用型框架,因为它无法提供未来的扩充性,但也不用重头写起,你需要的是介於两者之间.
Q:网站需要规画到多久以後的扩充需求?
A:我总是痛恨要帮未来考虑太多。当你无法预测未来,你就无法帮未来作决定.
网路变化太快,我通常只规画半年内的事情。现在决定半年以後的事情,可能会做出错误决策,反而让事情更糟。如果你没有解决当下的问题,而是想像未来会发生的问题,我认为不值得,我宁可解决眼前看得到的问题,真正聚焦在当下需要的产品.
Q:那麽,有任何准则是架构人员可以遵循的吗?
A:最主要的原则是,仔细考虑如何分配程式模组,尽可能将程式拆解成更小的元件,调校出适当的API,你应该规画的是使用者端点的事情,例如浏览器请求的类型是什麽?应用程式要如何回应?是否可以切割?是否可以把这些工作分配到完全分离的伺服器上执行?即使是在同一台伺服器上,你也能从使用者端点的角度来架构应用程式,有一天,当你的规模变大後,就可以很容易加入第二台伺服器,只要在前端伺服器不储存任何资料,就能进行流量分担。一般开发者最大的错误是,让程式码之间的交互关连(interrelation)太深,每个不同的元件都需要和其他外元件沟通,这样做很难调校出很乾净的API。开发者会无法抽离出效率慢的API放到辅助伺服器中,而让主要伺服器只执行必要API.
Q:切割服务丶拆解程式的难度是什麽?
A:必须在开始之前,就要非常了解问题。当你写完第一个版本的程式,才着手拆解问题,那几乎是不可能,很难事後处理。这的确很难,因为问题会一直改变。但是,若你从简单的架构开始,并且保持这个精神来区隔程式模组。每次当网站发生变化时,问题的变化也只会影响到一小部分,你就能够非常清楚那个地方,能够直接解决问题。就好像乐高游戏一样,盖好每一个小块积木,哪边还有不足,就只需要再补上一小块就好,不用对整体改变太多.
Q:除了扩充性以外,如何提高网站效能呢?
A:要提高效能,得先知道每一支程式花了多少时间。我会问,使用者送出Request请求後,要多久才会收到第一个Byte的资料?很多开发人员不晓得这个时间(First Byte Latency)是多久,不晓得自己的程式码用掉多少时间?可以透过Profile来追踪效能,画出视觉化的效能流程图,来了解瓶颈在哪.
甚至要考虑到单一机器上的延迟,透过系统层级的追踪程式,知道程式执行的每一个系统呼叫(System Call)耗费多久。还要考虑浏览器中的延迟,从使用者实际感受的速度来改善网页执行方式等.
每次你增加一个新功能,要能计算出新功能会增加多少毫秒,想一想这麽做值不值得.
Q:那麽,网站的安全性又需注意哪些原则?
A:基本精神很简单,只要用资料防火墙的概念来设计网站。网路防火墙会严密监控每一个通讯埠,只让没有安全疑虑的封包通过,但网站开发者刚好相反,只挡掉自以为有危险的内容。开发者不能信赖任何从外部取得的资料,借用防火墙概念和手法,建立资料防火墙,就能提高网站安全性.
Q:好的架构师需要什麽样的条件?
A:必须非常了解技术,了解每一个细节,例如设计资料储存机制,要了解哪种资料可以储存丶可以存多大的档案,放多少资料丶每秒钟可以放多快?如何复制资料?前端必须使用哪种资料格式等。架构师可以不用像 DBA,知道如何修复Oracle资料库的错误,但是要能够了解Oracle资料库拥有的能耐。这种人很难找,必须要失败过很多次,才会有足够的经验.
Q:台湾还有不少旧网站使用PHP 4,他们应该现在升级到PHP 5吗?还是等待PHP 6?
A:尽快升级到PHP 5。只要作一些测试和修改,就能得到更好的效能和安全,为什麽不做?不需等待PHP 6,开源社群的运作方式,无法承诺推出时间。很多新功能已经放到PHP 5.3版中,赶快从4升到5最重要.
最后此篇关于PHP之父谈MVC和网站设计架构 貌似他不支持php用mvc的文章就讲到这里了,如果你想了解更多关于PHP之父谈MVC和网站设计架构 貌似他不支持php用mvc的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
是否可以简化在裸机上运行的这条链: 具有随时间变化的副本数的 StatefulSet 服务 使用 proxy-next-upstream: "error http_502 timeout invali
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我需要为应用程序制定架构。它专为销售产品而设计。 系统每天将接受大约 30-40k 的新产品。它将导致在表 product 中创建新记录。 系统应保留价格历史记录。用户应该能够看到产品 A 的价格在去
我需要一些帮助来理解 PHP 的内部工作原理。 还记得,在过去,我们曾经写过 TSR(Terminate and stay resident)例程(pre-windows 时代)吗?一旦该程序被执行,
1.Nginx 基础架构 nginx 启动后以 daemon 形式在后台运行,后台进程包含一个 master 进程和多个 worker 进程。如下图所示: master与
本文深入探讨了Kubernetes(K8s)的关键方面,包括其架构、容器编排、网络与存储管理、安全与合规、高可用性、灾难恢复以及监控与日志系统。 关注【TechLeadCloud】,
我知道 CNN 的工作原理,包括每一层的用途(Dropout、Pooling 等)。但是,在为新数据集设计 CNN 时,我不知道要使用多少个 Conv-Relu-Pool 层,在最终获得输出之前我应该
在基于 REST 的架构中,资源和方法之间有什么区别。有吗? 最佳答案 资源是您的应用程序定义的东西;它们与物体非常相似。方法是 HTTP 动词之一,例如 GET、POST、PUT、DELETE。它们
我想用 oneOf仅在 xyType 的值上不同的模式属性(property)。我想要其中两个:一个是 xyType设置为 "1"第二个在哪里xyType是 任何其他值 .这可以使用 json 模式完
寻求 PHP 架构师的建议! 我对 PHP 不是很熟悉,但已经接管了一个用该语言编写的大型分析包的维护工作。该架构旨在将报告的数据读取到大型键/值数组中,这些数组通过各种解析模块传递,以提取每个模块已
这些存在吗? 多年来,我一直是大型强类型面向对象语言(Java 和 C#)的奴隶,并且是 Martin Fowler 及其同类的信徒。 Javascript,由于它的松散类型和函数性质,似乎不适合我习
我已经阅读了 Manning 的 Big Data Lambda Architecture ( http://www.manning.com/marz/BD_meap_ch01.pdf ),但仍然无法
在过去的几年里,我做了相当多的 iOS 开发,所以我非常熟悉 iOS 架构和应用程序设计(一切都是一个 ViewController,您可以将其推送、弹出或粘贴到选项卡栏中)。我最近开始探索正确的 M
我有以下应用程序,我在其中循环一些数据并显示它。 {{thing.title}} {{thing.description}}
昨天我和我的伙伴讨论了我正在开发的这个电子购物网站的架构。请注意,我为此使用 ASP.NET。他非常惊讶地发现我没有将添加到购物车的项目保留在 ArrayList 或其他通用列表中,而是使用 LINQ
我正在使用在 tridion 蓝图层次结构中处于较低位置的出版物。从蓝图中较高级别的出版物继承的一些内容和模式不适合我的出版物,并且永远不会被我的出版物使用。 我将跟进添加这些项目的内部团队,并尝试说
我目前已经在 Cassandra 中设计了一个架构,但我想知道是否有更好的方法来做事情。基本上,问题在于大多数(如果不是全部)读取都是动态的。我构建了一个分段系统作为应用程序服务,读取动态自定义查询(
我正在按照 documentation 中给出的 icingaweb UI v 2.0 布局执行在服务器上设置 icinga 的步骤。 。我成功进入设置页面,该页面要求您输入 token ,然后按照步
我必须保存来自不同社交媒体的用户的不同个人资料。例如用户可能有 1 个 Facebook 和 2 个 Twitter 个人资料。如果我保存每个配置文件它作为新文档插入不同的集合中,例如 faceboo
我的团队使用 Puppet 架构,该架构目前可在多个环境(流浪者、暂存、生产)中容纳单个应用程序。 我们现在想要扩展此设置的范围以支持其他应用程序。他们中的许多人将使用我们已经定义的现有模块的子集,而
我是一名优秀的程序员,十分优秀!