网络服务提供者收集和使用,网店产品seo如何优化,网页游戏开服表1区,wordpress手册下载首先让我们来了解一下Nginx_lua的设计指导思想#xff1a; 1、基于Nginx 快速开发高性能、大并发的网络服务。 2、提供“同步非阻塞” 的I/O 访问接口简化I/O 多路复用体系中的业务逻辑开发#xff1a; ■“同步”的主体是用户代码与其发起的I/O 请求处理流程之间的时序关系 1、基于Nginx 快速开发高性能、大并发的网络服务。 2、提供“同步非阻塞” 的I/O 访问接口简化I/O 多路复用体系中的业务逻辑开发 ■“同步”的主体是用户代码与其发起的I/O 请求处理流程之间的时序关系意即I/O 请求处理完成前用户代码将一直挂起。 ■“非阻塞”的主体是服务进程意即I/O 请求的处理不会导致服务进程阻塞等待而是可以继续处理其他请求的用户逻辑。 Nginx的特点是占有内存少并发能力强事实上nginx的并发能力确实在同类型的网页伺服器中表现较好。目前中国大陆使用nginx网站用户有新浪、网易、 腾讯另外知名的微网志Plurk也使用Nginx。 Nginx服务器及Lua版本的选择 1)Nginx高性能开源WEB服务器的选择 清无是在08年开始接触Nginx服务器的当时高性能的开源WEB服务器还有lighttpd那么一淘网技术专家清无为什么会选择Nginx呢Nginx哪方面比较有它的优势清无介绍说lighttpd和Nginx的比较中有一个很明显的缺点就是lighttpd的模块机制设计的很不好lighttpd的模块机制过多的把模块本身的请求处理逻辑和底层的网络事件的处理组合在一起所以不像Nginx的模块结构这么清晰当然Nginx的模块设计很大程度上也借鉴了Apache的这种模块设计所以这块有一个先天的优势。当时其实他最早接触lighttpd然后Nginx出来以后就对比它们模块结构上的差异后觉得Nginx似乎更有优势一些。实测对于我们这种网络I/O密集型的应用来说只要不是你实现的这个逻辑有多大缺陷其实在放lighttpd或者Nginx差别不是特别大。 在比较选择的过程中首先从架构出发如果有问题的话无论你实现如何它都是有问题的所以我的比较首先在架构搭建上每连接或者每请求单线程单进程这种服务模型直接就被刷掉肯定不可能做到很高的服务能力。余下来清一色的都是基于RO多路的这种结构体系那么在这个体系上我们才去检验实际上拿一个IPP的请求来压测看它实现的质量如何通常来说这部分一旦架构体系决定以后实测这个性能差异不是特别的大除非说是某个特性一个实现另一个没实现这种情况我们测出来的差异通常是在10%-20%上下波动而已。 2)Lua版本的选择 在小编与清无的交流中了解到目前一淘网所使用lua的版本是5.1.2当小编提出是否版本越高性能越强时清无则认为不太对。对于lua来说每一个版本的变化意味着它将加入新的语法元素或者变更了内部的一些实现的方式。严格意义上并不说明它的性能就好比如对5.2和5.1来说不管对于环境表或者其它的一些机制的修改上面严格的来说他都是一种新的语言了。所以目前来说迁移到5.2最大的障碍其实还是5.2里面对于底层接口的这种概念的变化。因为5.1里面对于一些方面下了很多工夫然后使用它的全局表加环境表这种机制。但是5.2里面彻底取消了全局表的概念也取消了CU级别上一系列对环境表操作的接口对我们来说肯定是不能平滑的迁移到5.2如果有这个需求的话我们可以做但目前还没有看到这个需求。另外一个阻碍我们升级版本号的问题是Lua JITlua JIT的性能比标准的lua要高很多所以深层里面我们通常用JIT但是luaJIT目前对lua5.2的支持并不是那么紧它目前还是以5.1为主所以这块我没可能较长的时间跟着lua JIT的脚步来。 在一淘网的应用中清无介绍说Nginx_lua主要应用在两块地方一块是传统的一淘数据库量子统计店铺经数据接口部分完全是用Nginx_lua来做。另一块是一淘的广告部门有一部分数据接口也使用着Nginx_lua。 Nginx_lua的性能测试比较 其实也有很多人一直还在使用Nginx_php这种组合搭配对于Nginx_lua组合的优势在哪里呢清无介绍说Nginxphp之间是要有进程之间通信的这样以来基础的性能开销就很大。lua是嵌在Nginx进程内部的它不需要有两套进程在那里独立工作。所以这块从结构上来说就有决定性的优势在里面。再加上线程之间通讯的时候需要大量的反序列化和序列化的工作然后两套进程带来额外情况是更多的进程更多的切换开销所以单机上面Nginx_php要比Nginx_lua要低很多。但是相对来说仍然要回到我们做什么事情上面因为Nginx_lua目前最大的劣势就是周边的模块相当的不健全我们需要大量的时间来积累这些模块。php积累了十几年的时间了如果说你对性能的要求并不是那么高我的并发数就是几十那么你用php就是最合适的。但是如果像一淘数据的数据接口机器数就那么一点因为我的大量成本在MySQL集群上面它是这块的主力那么对外的数据接口我希望尽可能降成本并发数又非常大php肯定是不行那么我们就要选择Nginx_lua。但这块的话对模块的劣势看起来不是那么大因为它的逻辑相对来说较为固定我们可以忍受这样的成本我们去为这个逻辑来定制一些模块。 从上面的两张性能测试图中我们总结Nginx_的适用场景 网络I/O 阻塞时间远高于CPU 计算占用时间、同时上游资源非瓶颈(可伸缩)的网络应用如高性能网络中间层、HTTP REST 接口服务等; 期望简化系统架构让服务向Nginx 同质化的Web 站点; Nginx_lua的优势和劣势 对于Nginx_lua的劣势在刚刚和Nginx_php的对比的时候清无也介绍了一个是周边模块不完善不健全的问题。如果你用到的这个东西比较复杂的时候可能生产力上不去目前Nginx_lua最适合的人员是数据接口层以及所有的网络中间层你需要最求并发高性能的网络中间层。因为它本身的逻辑相对来说比较简单或者完全用lua本身就可以变现出来这个用起来收效比例是最大的。那么如果你目前要做一个复杂的WEB访问站有大量模板要套有大量的复杂逻辑嵌在里面然后要访问mail要访问其他服务的话目前来说我觉得还是php或者其他比较成熟的语言。就我们目前应用来说也是这样中间层会大量的使用lua但是前端展现层的话要么全部移到浏览器上面用JS模板的形式来实现要么就是用PHP这样来做。 另外的劣势就是调试的辅助工具不太多因为高级点的php程序员会往往会使用XDebug或者其它的调试工具可以单步调试在线调试。跟php相比目前还欠缺这样的一个机制。到时候我们会仿照XDebug 去实现DPT V2协议我们实现兼容DPT V2这样的一种机制内连到Nginx_lua里面那样Nginx_lua也可以单步调试。到时候我们也会分享给大家。 最后我们来归纳一下清无介绍的几点优势和劣势 优势 同步非阻塞I/O 形式直观易懂并发服务能力强 CPU、内存运行开销低 同Nginx 结合度高可方便粘合现有Nginx 模块功能 劣势 属于新技术方案Lua 相比于PHP、Ruby 等广泛使用的开发 语言周边附属设施尚不够健全需要时间积累 Nginx_lua的需求以及性能的追求 在需求方面清无认为在一淘网的数据接口的这部分是完全可以满足的至于其他的需求我们还要具体发现寻找最佳决解方案。因为在计算机行业没有一招吃遍天这种事。 那么作为一名技术人员在性能的追求是适合而止还是无止境的追求呢清无表示这个要看我们是在做生意还是在个人事情如果是在公司比如在具体的事情上面然后是一个团队协作的情况下那么盲目的追求性能的极限是一个不合适的行为因为你的追求是要付出相应的成本和开销的而往往在一个企业的环境里面这个是不可容忍的。最合适的架构往往是针对你去解决问题的那个架构而不是去追求效率最高的架构。所以我们具体在企业里面做项目的时候显然适可而止是最好的。盖过了你这个用户的最大需求你就没必要去付出更多的精力来做因为其他的问题有很多你没必要停留在性能这个问题上性能只是其中的一个问题在一个问题上没必要投入太大的精力。但是从开发人员个人的角度来说追求性能的极限是一个很好的想法和行为因为开发者自己对性能极限的追求体现出对完美的追求对于完美的追求意味着它可以从上层到底层的专研而专研是提升个人素质最有效的动力。所以是分开来看这个问题。 转载于:https://www.cnblogs.com/xiaowangba/archive/2012/08/21/6314513.html