设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

PHP系统设计与云架构

2014-11-25 12:15| 发布者: joejoe0332| 查看: 2192| 评论: 0|原作者: 程序师|来自: 程序师

摘要: 这几年我比较少写 PHP 了.有阵子很迷它, 但是因为工作关系, 把较多的时间花在网络封包和数据库的分析工作上.而且因为年记较大了所以也很难找到写程序的工作多半都在做工程师的 “工头”对于这几年 PHP 的变化我来不 ...

  这几年我比较少写 PHP 了.


  有阵子很迷它, 但是因为工作关系, 把较多的时间花在网络封包和数据库的分析工作上.


  而且因为年记较大了所以也很难找到写程序的工作多半都在做工程师的 “工头”


  对于这几年 PHP 的变化我来不及参与.


  在这裡收集这几年对 PHP 的变化, 写篇心得过过本人自己的乾隐:


  回顾您以往的职业生涯, 您有好好的管理您写的 CODE 吗?


  还是每次都写到需求超级肥大了, 才延伸出一大堆的程序码管理问题.


  在这裡本人设计一个开发框架的架构, 让你的程序更简洁而且让你的程序更有条有理的被应用.


  当然这些架构教程我己经简化很多, 如果放入太多的设计反而会得到反效果.


  如果您是比较重口味的 PHP 设计者, 先说声报歉了.


  如果您常为了需求肥大难以管理你的程序,


  这篇文章对您来说会是个值得参考的文章, 至少它有著我十几年的需求开发经验.


一.常见的 PHP 应用的架构:



  在往下教程下去前, 本人先定义一些名词, 以方便大家接下去阅读教程.


  • DB :
    这一块不用多介绍, 我相信大家对 DB 的经验独道, 我们直接跳过去.
  • Access Layer :
    这一块全部都是放一些 Access Logic 在裡头, 主要的工作是负责跟 DB 还有 MEMCACHE 沟通, 你可以使用现成的开发框架达成这一层的目地, 也可以自己开发.但是这些逻辑建议您都保留在这一层.
  • MEMCACHE :
    这一块主要是做为分散式架构的存取层, 大家有没有注意到一件事?它是走 TCP 11211 PORT .


它可以用在什麽地方?

a.让你可以把从 DB 的资料捞到快取一份到 MEMCACHE ,来减轻资料库的工作负担, 这在大型而且流量很高的系统上, 它辨演很重要的角色就是可以减轻 DB 的工作量.
*我们这裡不多介绍 Memcahe 的使用及方式, 您可以多参考官方网站或其它网络上的教程.

b.有一些不用储存用完就不要的资料, 也可以利用 memcache 直接存取不用再交给 DB 去处理.

c.注意一件事:
在过去裡我的下属们在使用它时常会犯一个错就是烂用 Memcache ,

memcache 本身是一个 TCP 的服务在单台 linux 伺服器下最多只能使用1024个请求, 当然你可以用 ulimit 提高它, 但是请先了解它的本质用对地方.

它本身并不能做为程序本身加快程序效能的工具, 但是它是一个可以做到分散式的存取架构, 并且可以减轻 DB 负担的工具, 的好用工具.

所以在使用它时要选对时机, 千万不要烂用.

  • Access Layer :这一层的工作主要是存取资料层的逻辑, 我将会2.会有更详细的说明.
  • Content Logic Layer :这一层的工作主要是负责处理存取层从 资料层要来的资料的逻辑, 我将会3.会有更详细的说明.
  • Presentation Layer :这一层的工作意义重大, 它主要是标准化 Presentation Logic 与 Content Logic Layer 沟通的标准,让你的画面逻辑不会愈来愈肥大及复杂, 我将会4.会有更详细的说明.
  • Presentation Logic Layer :这一层的工作是做为让 你的画面逻辑可以采用标准化的介面来与伺服器沟通, 如果 Presentation Layer 标准化了, 你的画面逻辑的可重覆利用性就会更高及有弹性, 我将会5.会有更详细的说明.
  • Client Layer :这一层就是我们平时便用的浏览器,云端服务等等的应用, 相信大家非常了解这一层可以做到的事, 所以我们就不多介绍 Client Layer 了.


二.功能方块介绍:

  到这裡我们必需要将图裡的方块切的更细让大家理解请耐心的看完下一张图:


1. 数据库逻辑层 :

Access Logic Layer 主要的工作是做为与 DB 和 Content Logic 沟通的区块, 在这裡本人建议大家在设计物件库或函式库前, 先参考这个架构.

把所有跟资料库存取的逻辑全部包装在这个区块下, 例如大家在设计DB时最爱用 Factory 来做 DB 的切换, 同时把这些逻辑全部整到这一层让您的程序更有层次更好管理.

看到这裡大家一定对一些使用 Factory 设计的 OOP DB 存取函式库不漠生.

这时我要介绍大家一个名词, Object-relational_mapping :

http://en.wikipedia.org/wiki/Object-relational_mapping

什麽地方有 ORM ?就是大家常用的.

CAKE PHP
ZEND FRAMEWORK.
Doctrine
Propel
CoughPHP
Symphony

当然…您也可以自己写, 重点是, 要懂得怎麽有效率的去管理你的存取层的逻辑.

而一但定义了这一层.

强烈建议在接下来的 Content Logic Layer , Presentation Logic Layer 严格禁止其它逻辑层的逻辑跳过它来存取资料库.

这麽做有什麽好处? :
1.确保其它工作者不会写出不良的DB存取逻辑造成你的系统不好维护
2.你可以不用再担心会有严重的存取层 BUG
3.它在使用上变的更安全, 不会让你的资料库暴露在 Content & Presentation Logic Layer ,让你的 DB 有一定程度的保障.
4.如果你的 ORM TOOL 有提供管理器, 你还可以把所有的 SQL 语法倒出来检示有没有什麽存取过重的语法.
5.最重要的!!你可以把常用的存取层资料跟 MEMCACHE 做有效的资源管理, 让你的 DB 的资源更有效的被利用!!

补充说明:

  • Access MYSQL :资料库的新增改查逻辑全部放在这.
  • Access Memcache :与 MEMCACHE 存取的新增改查逻辑全部放在这.
  • Access NOSQL :现在最流行的 NOSQL ,你可以分别的去包装你要的逻辑在这裡面.
  • Other :如果你有别的使用资料存取的逻辑, 可以参造上述的方式一一的去整理….

酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部