php怎么开启并发,怎样成为IT架构师?
你听着XX是阿里腾讯首席架构师,是不是觉得很牛?
其实,据我所知,目前来说,能成为架构师的,要么就是技术实力过硬,要么就是跟对了老板,你看阿里云的王X博士,就属于后者,当然,前提是自身实力不能差。
一般来说,你不要急,你才进这个行业3-5年,就想成为架构师,是不是太快了?
架构师的工作就像是他打造一棵树的主干和枝干,然后让别人在这棵树上长出树叶和果实。
一个公司,一个项目能不能成功,架构师占了很多,毕竟现在很多公司都号称是技术驱动,对吧。
架构师的职责都有哪些?
成为一名架构师,需要什么样的能力?
别觉得这些假大空,自己去对标能力组成,把标准调到最高,你就知道自己差什么了。
架构上最大的困难是什么?
如果觉得这些对你没价值,还是老老实实做好本职工作吧。
如何设置Web服务器的权限?
服务器的mvc被淘汰了。
用mvc也是在前端,在js框架上用mvc,这样服务器完全变成json的数据获取api了,当然权限控制需要设置在服务器,但这个是很个简单的需求,如jsp中只要用session在头文件中判断一下是否有权限,一行程序就可以解决,根本不用犯病用mvc,引入spring这种严重影响性能的反射机制。
如果你在html和js中用mvc,又在服务器中用mvc,这完全是过度设计,需要考虑二个mvc,考虑n层的问题,根本没有必要,服务器的mvc会导致性能低下,如果大量使用spring的反射速度会非常慢,而且把问题变得非常复杂。
web开发框架不断变化,但最终回到了通信量最小化的模式,即同样的服务器下客户端和服务器传输量最小的模式,即为最好模式,也为最优模式。
一、最早的是cgi开发,也就是一个http请求一个html文件被程序拼接出来输出,这个方法是所有方法的基础,通信应答方式,但每次请求需要传输最大化重复数据。
二、后来出现了类似java的servlet,c#的httphandler这个在cgi开发上的包装,主要可以处理session,get,post,request,response各种情况,通过get参数,post参数来获取动态内容,对服务器程序有一定复用。
三、再后来发现通过http处理框架,不能热布署,需要重启才能有效。这时发展出来了php,asp,asp dot net,jsp这种热加载框架,工作原理就像定时器一样把这些网页翻译成类似cgi来工作。
四、人们总是不断追求,发现php,jsp,就是代码和html混杂在一起,如是发展出了以java mvc为代表的分离绑定,出现了struts,spring,.net mvc,php zend mvc这种框架。
五、mvc出现后,发现开发一个界面需要改m,v,c三个部分,html视图出现支离破碎的情况,可能一部分html代码出现在m层,一部分html代码出现在v层,一部分html代码出现在c层,不方便美工分工合作,也不方便用于内容与视图的分离,于是又出现了模板开发,模板可能存在于数据库中动态生成内容,Velocity/NVelocity,FreeMarker,Thymeleaf,Razor等等。
五、模板开发号称简化了开发结果很多主流编辑器都不支持,很多有性能有问题,很多web应用需要无刷新需求,如gmail,来一个邮件可以显示出来,而不是需要用户不断刷新页面才能显示,不断的页面转跳影响用户体验,以jquery为代表ajax前端框架出现,直接从服务器获取json数据,动态绑定到html内容上。
六、大型web应用用面向过程的事件驱动开发会程序可能会像一根面条一样,动一根而动全身,加上各大浏览器竞争,在解析javascript性能得到很大的提升,html5和移动互联网的发展让web开发更加复杂,这时出现了前端使用mvc框架,把服务器当做通信api,用js获取json动态绑定到mvc的模板上。由于js都是在前端运行,多是开源的,出现了很多js框架,如Angular, Ember,Vue,React等,同时出现了大量的js ui库,如jquery ui,extjs,bootstrap等。在后端出现了微服务,webapi,websokect这种通信框架也需要js配对。在js上各种框架层出不穷,程序的业务功能不断向前端实现。
人们很多时候还是排列组合使用这些开发模式,但过去的很多框架受技术限制,只能委屈求全,折中出各种模式,通信量最小化无疑是一种最优选择,服务器端mvc性能差,向前端mvc发展是必然,在ajax+js mvc出现后,服务器理论上实现了通信量最小化(不考虑数据压缩的同等情况下),可实现更高并发,服务器也就变成了获取json的api,根本不需要在服务器上实现mvc,未来web程序的主要焦点在前端程序上。M变成了json,C变成了js,V变成了html,app,实现了真正意义上的分离设计。
这种设计抽象好api完全可以复用于移动互联网的app,有了很好的软件复用效果,节约开发成本,是必然发展趋势。
成为PHP高级工程师或者架构师需要了解哪方面的专业技能?
技术方面:多帮助队友解决问题,思考如何做到更好,高并发,高可用。
管理方面:知道如何带领团队做出成绩
各个方面全面发展吧,哪里需要你,你就出现在哪里
用PHP编写支持高并发的网站?
PHP语言开发高并发的网站,需要加缓存,复杂逻辑走消息队列异步处理,mysql查询必须走索引,还搞不定就加机器分流,mysql配置升高并且一主多从,使用codis集群,增加消息队列的消费者,如果还搞不定就随机拒绝请求,当然这是最后的退路。
缓存缓存是避免业务查询过多的请求mysql,导致业务不可用,根据场景来判断是否需要使用codis集群,如果并发量没有达到某个级别,16G的redis也可以,但是要避免redis在高并发下容易发生的缓存穿透,尽量做成高可用,并保证缓存实现的命中率。
消息队列这也是高并发情境下的杀手锏,削峰填谷,将耗时的业务逻辑直接以队列的形式异步慢慢处理,防止请求过度积压,导致的服务器不可用。
mysql优化有些场景下必须查询mysql的,也应该走索引,避免多表联合查询,甚至mysql的事务隔离级别都尽量的降低,或者直接去掉事务,采用最终一致性的补偿机制。升级mysql的配置,核心数和内存的提升对查询速度的优化是显而易见的,最好能一步到位的走一主多从,查询路由到从服务器上。
随机拒绝请求这不是开玩笑,我们必须保证服务器可用,宁愿拒绝掉一些请求,也不能让服务器大量请求阻塞,最终导致大家都用不了。
tomcat与nginx?
Tomcat与Nginx、Apache的关系如下图。由配送中心选择Apache、Nginx中的某一辆货车将包裹送给客户。虽然Apache、Nginx两辆车的用途是一样的,仔细区分它们两还是有区别的,比如:货物装载的速度、方式不一样,Apache有水箱可以直接运送活鱼而Nginx没有。
Tomcat有点像装活鱼的特殊包装。经过特殊包装打包的活鱼就可以通过Nginx和Apache运送到用户手中。另外,使用Tomcat包含了一种慢速的配送服务,所以配送中心一般都采用Nginx、Apache等配送。
通过上面的比方引申Apache、Nginx、Tomcat的实际用途Apache全称Apache HTTP Server,它是Apache软件基金会的一个开放源码的网页伺服服务器软件。
Apache支持模块多,性能稳定。Apache本身是静态解析(静态页面),适合静态的HTML、图片等,但可以通过扩展脚本、模块来支持动态页面等。Apche可以支持PHP、CGI、Perl,但要使用Java就需要Tomcat,Java请求会通过Apache转发给Tomcat处理;
Nginx同样也是一款开源的HTTP Server,它是由俄罗斯人编写的轻量级HTTP服务。
Nginx是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP、POP3、SMTP代理服务器。Nginx本身不支持生成动态页面,很大部分Web服务器使用Nginx,主要通过Nginx的反向代理来实现负载均衡器。
Apache、Nginx本质上就是一种运用在HTTP服务器上某种应用程序,它们通过绑定服务器的IP地址并监听某一个TCP端口来接收并处理HTTP请求,这样用户(一般通过IE、Chrome、Firefox等发送请求并显示内容)就能够通过HTTP协议来获取服务器上的网页(HTML+CSS样式)、文档(PDF、txt、rar等)、音频、视频等资源。如下图:
不仅Apache和Nginx,绝大多数编程语言所包含的类库中也可以实现简单的HTTP服务供开发者使用,如:Java HTTP Server、Python SimpleHTTPServer。
Apache和Nginx的对比
Nginx使用异步非阻塞型事件驱动的方法来处理请求,而Apache则是通过同步阻塞型的方法来处理请求。
Apache接收一个请求后,就会创建一个进程,每个进程内单线程。对于一个负载相对较高的网站来说,256的进程,也就是256个线程。线程处理请求时是同步阻塞模式,会一直等待该请求读取程序文件(IO)(同步),执行业务逻辑,返回给客户端,所有操作完成之后才能处理下一个请求(阻塞)。
如果服务器已经达到256的极限,那么接下去的访问就需要排队。这也就是为什么某些服务器负载不高的原因了。
而Ngnix接收一个请求后,不会等待这个请求的文件读取操作完成之后才接收下一个请求,它不会等待这个请求的后续的处理结果。而是会马上循环处理下一个请求(不阻塞)。请求的程序文件执行完成之后,会主动通知该线程,不用你主动去等待或者轮询查看(异步)。最后返回给客户端。
这样做,每个请求过来就不需要等待很长的时间排队,而是马上就能接收,开始进行处理了。等处理完成之后,会主动通知回调这个线程进行数据返回。
基于上述特性Nginx更轻量级,比Apache占用更少的内存及资源抗并发,Nginx静态处理性能比Apache高3倍以上。在高并发下Nginx能保持低资源低消耗高性能高度模块化的设计。但Apache组件比Nginx多,对PHP的支持比较简单,Apche的Rewrite也比Nginx强大一些。
Tomcat用于扩充Apache和Nginx的动态性能从上面我们知道了Apache和Nginx的优势在于静态解析,那么动态解析就会交给其他模块处理,如Tomcat。
Tomcat是由Apache软件基金会旗下Jakarta项目开发的Servlet容器,实现对Servlet和JavaServer Page(jsp)的支持。Tomcat本身也包含了HTTP服务,也可单做独立的Web服务,但用的不多。
Tomcat一共设计了 4 种容器,它们分别为Engine、Host、Context、Wrapper,各个容器组件之间的关系是由大到小,即父子关系,它们之间关系形成一个树状的结构,它们的实现类都实现了 Container 接口。
总结如果Apache、Nginx、Tomcat打一局LOL,Apache和Nginx像是冲在最前面的英雄。而Tomcat攻击性能弱,它主要负责打辅助,奶前面的英雄。
Nginx并发性好,CPU、内存占用低。但如果rewrite频繁,那还是选择Apache好一些,Apache在处理动态请求更有优势。
以上个人浅见,欢迎批评指正。
认同我的看法,请点个赞再走,感谢!
喜欢我的,请关注我,再次感谢!