Nginx 关注:
一、性能
1)高并发下资源不浪费在处理进程切换休眠等,保持高的吞吐量
2)高并发下如何保持平均时延低
3)提高网络效率,例如长连接代替短链接,高压缩算法提高信息量,使用缓存减少网络交互次数
二、可伸缩性
可以通过添加组件来提升服务,允许组件之间有交互功能,可通过简化组件、降低组件间耦合度、将服务分散到许多组件等
三、简单性
简单性通常指组件的简单程度,每个组件越简单,就会越容易理解和实现,也就越容易 被验证(被测试)。一般,我们通过分离关注点原则来设计组件,对于整体架构来说,通常 使用通用性原则,统一组件的接口,这样就减少了架构中的变数。
四、可修改性
1)可进化性
可进化性表示我们在修改一个组件时,对其他组件产生负面影响的程度。当然,每个组 件的可进化性都是不同的,越是核心的组件其可进化性可能会越低,也就是说,对这个组件 的功能做出修改时可能同时必须修改其他大量的相关组件。
2)可扩展性
可扩展性表示将一个新的功能添加到系统中的能力(不影响其他功能)。与可进化性一 样,除了静态可扩展性外,还有动态可扩展性(如果已经部署的服务在不停止、不重启情况 下添加新的功能,就称为动态可扩展性)。
3)可定制性
可定制性是指可以临时性地重新规定一个组件或其他架构元素的特性,从而提供一种非 常规服务的能力。如果某一个组件是可定制的,那么是指用户能够扩展该组件的服务,而不 会对其他客户产生影响。支持可定制性的风格一般会提高简单性和可扩展性,因为通常情况 下只会实现最常用的功能,不太常用的功能则交由用户重新定制使用,这样组件的复杂性就 降低了,整个服务也会更容易扩展。
4)可配置性
可配置性是指在Web服务部署后,通过对服务提供的配置文件进行修改,来提供不同的 功能。它与可扩展性、可重用性相关。
5)可重用性
可重用性指的是一个应用中的功能组件在不被修改的情况下,可以在其他应用中重用的 程度。
四、可见性
在Web服务器这个应用场景中,可见性通常是指一些关键组件的运行情况可以被监控的 程度。例如,服务中正在交互的网络连接数、缓存的使用情况等。通过这种监控,可以改善 服务的性能,尤其是可靠性。
五、可移植性
可移植性是指服务可以跨平台运行,这也是当下Nginx被大规模使用的必要条件。
六、可靠性
可靠性可以看做是在服务出现部分故障时,一个架构容易受到系统层面故障影响的程 度。可以通过以下方法提高可靠性:避免单点故障、增加冗余、允许监视,以及用可恢复的 动作来缩小故障的范围。
Nginx的模块:
在这5种模块中,配置模块与核心模块都是与Nginx框架密切相关的,是其他模块的基 础。而事件模块则是HTTP模块和mail模块的基础。
这个例子中大致分为7个阶段,这些阶段是可以重复发生的,因此,一个下载静态资源 请求可能会由于请求数据过大、网速不稳定等因素而被分解为成百上千个表8-1中所列出的 阶段。
异步处理和多阶段是相辅相成的,只有把请求分为多个阶段,才有所谓的异步处理。也 就是说,当一个事件被分发到事件消费者中进行处理时,事件消费者处理完这个事件只相当 于处理完1个请求的某个阶段。什么时候可以处理下一个阶段呢?这只能等待内核的通知, 即当下一次事件出现时,epoll等事件分发器将会获取到通知,再继续调用事件消费者处理请 求。这样,每个阶段中的事件消费者都不清楚本次完整的操作究竟什么时候会完成,只能异步被动地等待下一次事件的通知,这样将减少进程休眠状况。