设为首页收藏本站

自学it网-公益PHP培训!

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 24120|回复: 40

[感谢信] PHP高性能架构班--phper一枚--税后12k [复制链接]

发表于 2014-3-5 23:29:48 |显示全部楼层
       计算机诞生60多年以来,全世界最聪明的人都在计算机行业贡献并奋斗着。
       这么多东西,想学完是不可能的,我们只能联系实际情况来选择自己需要学习,并且需要用到的。
       可是,我们总会忽略了隐形成本-时间。

性能篇之web服务器
       我曾经花了数周时间来研究nginx原理,来比较其和apache的不同。---虽然网上很多的配置模板和教程,可是我并不想要现成的结果,虽然它可以正常运行,但是我搞不懂它的原理,出了问题我也不知道如何解决!
       看了公司的nginx配置,结合网上的说明,终于算是有个模糊的印象。可是,我没玩过,没做过千万上亿pv的压力测试,也没做过几万并发的测试,我始终对于其真实性抱怀疑态度。和人聊起的时候也底气不足,就如雾里看花。
       人之所以有无法理解的事物,是因为他没直观感受到。
       去年工作之余,论坛中无意看到了18哥的高性能服务器架构班(立即报名),激动啊。
       曾经困惑我好久的问题,经18哥的点播豁然开朗。并且上课的时候用4台机器架构,千万级别数据负载,各种测试工具的使用,然后将其做不同配置优化,以达到不同目的。
       我想,这些知识,如果靠自己,首先要有真实服务器来练手,其次需要不停的测试,而分不清主次,与其相关的linux内核优化,进程优化,tcp/ip的相关优化,全部掌握大概需要很久(因为平时还要上班嘛,很少有机会做这些优化)。而18哥将所有最核心,最精华的原理,配置,以风趣幽默的语言和科学严谨的试验态度在短短3次课上就已经讲述的非常清楚,并且把工作中长用到的技能与方案分享了出来,如日志管理,日志切割,负载方案,链接优化等等等。
      虽然再次之前我没做过这些,但是18哥传道授业的方式让我切实感受到了给我,我就可以做!
      上完这几次课不久,我就在公司申请相关工作,并且很轻松胜任这些任务。恰好原公司要做相关高性能架构,我发现她们所讨论的方案,18哥基本都有说过,然后我可以在一群it工龄至少8,9年的人侃侃而谈,并且参与设计实施方案。真是一次不错的经验。

性能篇之缓存
      有点经验的人一定都听过memcache,我原来公司在处理缓存时就用的memcache。
      可是,如果有5台cache服务器,你会怎么分布key呢?
      取余?
      这是一个方案,也是最容易想到的方案,可是,如果其中一台cache服务器down掉了,而你又没有多余的服务器资源,那么mysql的压力就会瞬间增高,如果原本构架的设计里mysql的负载略有冗余,还可以坚持一段时间,可是如果长期高负载,就有可能引起连锁崩溃,一个请求在锁表,等待的请求越来越多。而这些我们要花很大的代价去解决。也许你会想,另外四台来承担down掉服务器的缓存不就好了。可是   如果把%5改为%4,那么所有缓存将都失效啊!结果就是mysql秒挂!
      多么常见的问题,其实早在上世纪90年代就有人提出了一种有效的算法来替代取余算法,叫做一致性哈希。
      通过这种算法,动态增加或者减少缓存节点,所减少和增加的压力,都会平均分布到所有节点上。
      
      此外,memcache是内存缓存,底层用libevent,可是不带安全验证,一旦服务器断电或者不可知原因挂掉,就会所有缓存失效,有没有更好的方案呢?
      有!
      redis,mongodb等nosql并且定期同步内存和硬盘数据,并且这些数据同步还可以根据需求配置!
      而且redis和mongodb等还提供更高级的功能。如原子性的查询与设置操作,分片构架等。
      过亿数据的短网址项目,仿微博热数据方案。在18哥的课上或者布置的作业里都接触并且做过!看起来很高大上吧?其实知道了原理也就那么回事。
      

性能篇之mysql篇
     搞php的基本都熟悉mysql吧。
     你知道什么是mysql优化吗?
     想必各位也都能说出一二,常用搜索字段建索引啦,什么几种索引类型啦,垂直水平切割表啦,还有网上谣传什么子查询和连接查询怎么代替的了,等等等。
     网上一搜一大把,可是却没有一个清晰的思路。

     其实,mysql优化真不是一两句说的清除,而比较清晰具体的思路和实施步骤应该是:
     先对服务器硬盘做基准测试。得出随机读取和顺序读取的硬件值。---mysql再优化也不会超过这个。
     然后估算数据库操作的数值,根据业务需求具体问题具体分析,通过慢查询日志,profie等工具分析瓶颈到底在哪。
     最终或者定位到sql语句,或者业务逻辑不合理,或者表结构不合理,或者索引不合理等等。一不小心就全表扫表了,情况太多不一一罗列。
     这每一种都有很复杂很琐碎很细节的东西需要了解。所以在这也偷懒说一句,具体问题具体分析。
   
    同样,三个臭皮匠昂熏死诸葛香。一台mysql优化到接近极限,业务逻辑优化到接近极限。缓存设计优化到接近极限,还是不能满足?嘿,那么集群就很容易想到了,不过集群和复制是俩概念要搞清除,而且复制配置起来很简单啊,然后读写分离啊,自己嫌麻烦用中间件mysql-proxy啊,单台优化做到了后面的思路就顺畅多啦。
     以上说的是王道。
     --------华丽小分割--------
     一个广泛流传的误区:
     select * from tablename where b = xxx and a = xxx and c = xxx;
     可以在a,b,c上分别建立索引,或者abc联合索引呗,就会用到所有索引。--但,这是错误的。
     如果你不知道错在哪里,那么你可能会去百度,可能会隐隐约约知道答案,其实18哥用三个字就总结了其原理--“桥接板”。
     
性能篇之构架
   
     上面3点都熟悉并且掌握了,其实简单构架思路也就顺其自然的形成。
      dns轮询这样基本都是花钱买的服务大概了解一下就好,我们用的也就是负载均衡,数据缓存,数据分流,数据一致性,另外基本知识带宽和硬盘读写速率也要考虑。
      负载均衡财大气粗的买f5等硬件设备,或者省点钱不怕麻烦的lvs做3,4,5层协议负载,简单容易部署几台服务器高峰一千并发的nginx绰绰有余。
      然后其他的根据具体需求方案总是有的嘛。
      唉?为毛我说的这么顺畅?因为18哥的课上做过实验嘛,每个人都要设计方案并且实行啊。
     
结束篇-代码之美
      我看过很多讲述面向对象设计模式的资料,有的简单的工厂,单例还好,比较容易掌握,复杂点的就比较吃力了,分明10行代码可以搞定的事情,干嘛要做这么多看起来很费解的步骤,造这么多类和对象,有的模式就差一点点?
      面向接口而不是面向对象编程,都听过把?但是本质是啥? 就俩字,解耦。
      说实在的,当时第一次上18哥讲这些,我以为我都知道,但是实际上很难在正确的场合用对。
      观察者模式,责任链模式等等   
      18哥的课上有实在的典型需求来吻合这些模式,思路秒通。

结束篇-感悟
     原理真的很重要,比如,太拘泥于具体api怎么使用,用的有多熟,那只是熟练工,需要的时候翻翻手册就有了。本质上理解这些原理才是最重要的。
     熟悉了nginx原理后,困惑我很久的系统调用和c封装的库函数突然就明白了(之前在ieee8.?.?文档上看到过,可是一直不理解),这就是触类旁通?虽然之前两者知道有区别,但是就不理解区别在哪,虽然用起来都一样。
     另外,nodejs听了18哥的介绍就弄明白了其原理优势,这也算是典型的不同设计比较所带来的触类旁通?
     --ps,后来接触erlang和golang原理优势越来越清晰。
     --再后来,自己用c写过简易的shell,(就是bash或者csh等类似的),就那么回事。
     --然后我现在感觉写一些常驻进程程序如聊天等,可以用单线程轮询,多进程epoll,偷懒点多进程select+socket来实现。可以遇见具体写起来会遇到困难,可是大的思路有了,细节的问题慢慢研究嘛。
      还有php设计模式从java山寨来的,但是因为php语法灵活又有不同实现,抽象的说法在18哥那总是能得到具体的解答。高山仰止,景行行止。
      
      
结束篇@真
       其实,还有很多很多要说的,言传身教的具体妙处很难语言描述。我们只是站在技术殿堂的门口被名为经验的枷锁束缚,总想更进一步的同时却容易找不到前进的捷径,很幸运有18哥的指点,让我少走不少弯路。
      知其然,知其所以然,感谢十八哥在我成长中路上的指点。
      

结束片完了还有结束语
     刚才不小心看到了张德志的感谢信啊,他说蹭饭啊,那啥,不止开课一顿,结课也来也来了一顿哈哈!好大的烤鱼没吃完!

      
      

使用道具 举报

发表于 2014-3-6 10:24:51 |显示全部楼层
烤鱼~~~~~~~

使用道具 举报

Rank: 4

发表于 2014-3-6 11:26:36 |显示全部楼层
高手啊。。。。。

使用道具 举报

Rank: 8Rank: 8

发表于 2014-3-6 12:14:56 |显示全部楼层
本帖最后由 燕十八 于 2014-3-6 15:29 编辑

命啊....他努力,他进取.
他周末也不闲着,去学"高性能架构班"课程.
从13年拼到14年, 好不容易拿到12K的offer,
然而人生无常,拿到正式offer才发现, 是睡后12K.

使用道具 举报

Rank: 1

发表于 2014-3-6 12:30:05 |显示全部楼层
想要学习

使用道具 举报

Rank: 6Rank: 6

发表于 2014-3-6 19:14:31 |显示全部楼层
围观大神

使用道具 举报

Rank: 2

发表于 2014-3-6 19:57:42 |显示全部楼层
kankankankna

使用道具 举报

Rank: 4

发表于 2014-3-6 22:55:24 |显示全部楼层
几年php经验?

使用道具 举报

Rank: 4

发表于 2014-3-6 22:55:57 |显示全部楼层
说的我都有点想辞掉现在工作去十八哥那边闭关3个月了

使用道具 举报

Rank: 6Rank: 6

发表于 2014-3-7 09:44:49 |显示全部楼层
哈哈!是啊!牛逼轰轰的!榜样!

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|自学it网 ( 京ICP备12009156号 )  

GMT+8, 2017-5-24 13:55 , Processed in 0.033195 second(s), 5 queries , Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部