首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
100
篇与
的结果
2023-08-30
一款开源即时性能监控系统
一款开源即时性能监控系统
2023年08月30日
11 阅读
0 评论
0 点赞
2023-08-30
常用数据库选型!你做对了吗?
常用数据库选型!你做对了吗?
2023年08月30日
8 阅读
0 评论
0 点赞
2023-08-30
互联网后端技术大全!
互联网后端技术大全!一. 系统开发高内聚/低耦合高内聚高内聚指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。模块的内聚反映模块内部联系的紧密程度。低耦合模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。一个完整的系统,模块与模块之间,尽可能的使其独立存在。通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。过度设计过度设计就是进行了过多的面向未来的设计或者说把相对简单的事情想复杂了,过度追求模块化、可扩展性、设计模式等,为系统增加了不必要的复杂度。过早优化过早指的不是在开发过程的早期,而是在还没弄清楚需求未来的变化的走向的时候。你的优化不仅可能导致你无法很好地实现新的需求,而且你对优化的预期的猜测有可能还是错的,导致实际上你除了把代码变复杂以外什么都没得到。正确的方法是,先有质量地实现你的需求,写够testcase,然后做profile去找到性能的瓶颈,这个时候才做优化。扩展阅读:为什么过早的优化是万恶之源?重构 (Refactoring)重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。扩展阅读:重构代码的技术破窗效应又称破窗理论,破窗效应(Broken windows theory)是犯罪学的一个理论。 此理论 认为环境中的不良现象如果被放任存在,会诱使人们仿效,甚至变本加厉 。一幢有少许破窗的建筑为例,如果那些窗不被修理好,可能将会有破坏者破坏更多的窗户。最终他们甚至会闯入建筑内,如果发现无人居住,也许就在那里定居或者纵火。应用在软件工程上就是,一定不能让系统代码或者架构设计的隐患有冒头的机会,否则随着时间的推移,隐患会越来越重。反之,一个本身优质的系统,会让人不由自主的写出优质的代码。互不信任原则指在程序运行上下游的整个链路中, 每个点都是不能保证绝对可靠的,任何一个点都可能随时发生故障或者不可预知的行为 ,包括机器网络、服务本身、依赖环境、输入和请求等,因此要处处设防。扩展阅读:程序世界里的不信任原则持久化 (Persistence)持久化是 将程序数据在临时状态和持久状态间转换的机制 。通俗的讲,就是 临时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库或者本地磁盘中,能够长久保存)。临界区临界区用来表示 一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有一个线程使用它 ,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。阻塞/非阻塞阻塞和非阻塞 通常形容多线程间的相互影响 。比如 一个线程占用了临界区资源,那么其它所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞 。此时,如果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。 而非阻塞允许多个线程同时进入临界区 。同步/异步通常同步和异步是指函数/方法调用方面。同步就是在发出一个函数调用时,在没有得到结果之前,该调用就不返回。异步调用会瞬间返回 ,但是异步调用瞬间返回并不代表你的任务就完成了,他 会在后台起个线程继续进行任务,等任务执行完毕后通过回调callback或其他方式通知调用方。并发/并行并行(parallel)指在 同一时刻,有多条指令在多个处理器上同时执行 。所以无论从 微观 还是从 宏观 来看,二者都是 一起执行 的。并发(concurrency)指在 同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行 ,使得在 宏观 上具有 多个进程同时执行 的效果,但在 微观 上并不是同时执行的,只是把时间分成若干段,使 多个进程快速交替的执行 。 扩展阅读:并发和并行的区别二. 架构设计高并发 (High Concurrency)由于分布式系统的问世, 高并发(High Concurrency)通常是指通过设计保证系统能够同时并行处理很多请求 。通俗来讲,高并发是指 在同一个时间点,有很多用户同时的访问同一 API 接口或者 Url 地址 。它经常会发生在有大活跃用户量,用户高聚集的业务场景中。扩展阅读:高并发(水平扩展,垂直扩展)高可用 (High Availability)高可用HA(High Availability) 是分布式系统架构设计中必须考虑的因素之一,它通常是指, 一个系统经过专门的设计,以减少停工时间,而保持其服务的高度可用性。 扩展阅读:什麽是高可用读写分离为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是, 第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作 。冷备/热备冷备两个服务器,一台运行,一台不运行做为备份。 这样一旦运行的服务器宕机,就把备份的服务器运行起来。冷备的方案比较容易实现,但冷备的缺点是主机出现故障时备机不会自动接管,需要主动切换服务。热备即是通常所说的 active/standby 方式,服务器数据包括数据库数据同时往两台或多台服务器写。当active服务器出现故障的时候,通过软件诊测(一般是通过心跳诊断)将standby机器激活,保证应用在短时间内完全恢复正常使用。 当一台服务器宕机后,自动切换到另一台备用机使用。 扩展阅读:集成平台的高可用-双机冷备和热备异地多活异地多活一般是指在不同城市建立独立的数据中心 ,“活”是相对于冷备份而言的,冷备份是备份全量数据,平时不支撑业务需求,只有在主机房出现故障的时候才会切换到备用机房,而多活,是指这些机房在日常的业务中也需要走流量,做业务支撑。扩展阅读:业界异地多活高可用架构设计方案总结负载均衡 (Load Balance)负载均衡,是 对多台服务器进行流量分发的负载均衡服务 。可在多个实例间自动分配应用程序的对外服务能力,通过消除单点故障提升应用系统的可用性,让您实现更高水平的应用程序容错能力,从而无缝提供分配应用程序流量所需的负载均衡容量,为您提供高效、稳定、安全的服务。扩展阅读:关于负载均衡的一切:总结与思考 动静分离动静分离是指 在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。 扩展阅读:动静分离架构集群单台服务器的并发承载能力总是有限的,当单台服务器处理能力达到性能瓶颈的时,将多台服务器组合起来提供服务,这种组合方式称之为集群,集群中每台服务器就叫做这个集群的一个“节点”,每个节点都能提供相同的服务,从而成倍的提升整个系统的并发处理能力。分布式分布式系统就是将一个完整的系统按照业务功能拆分成很多独立的子系统,每个子系统就被称为“服务”,分布式系统将请求分拣和分发到不同的子系统,让不同的服务来处理不同的请求。在分布式系统中,子系统独立运行,它们之间通过网络通信连接起来实现数据互通和组合服务。CAP理论CAP理论,指的是 在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),不能同时成立。一致性:它要求在同一时刻点,分布式系统中的所有数据备份都相同或者都处于同一状态。可用性:在系统集群的一部分节点宕机后,系统依然能够正确的响应用户的请求。分区容错性:系统能够容忍节点之间的网络通信的故障。简单的来说,在一个分布式系统中,最多能支持上面的两种属性。但显然既然是分布式注定我们是必然要进行分区,既然分区,我们就无法百分百避免分区的错误。因此,我们只能在一致性和可用性去作出选择。在分布式系统中,我们往往追求的是可用性,它的重要性比一致性要高,那么如何实现高可用,这里又有一个理论,就是 BASE 理论,它给 CAP 理论做了进一步的扩充。BASE理论BASE 理论指出:Basically Available(基本可用)Soft state(软状态)Eventually consistent(最终一致性)BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。水平扩展/垂直扩展水平扩展 Scale Out通过增加更多的服务器或者程序实例来分散负载,从而提升存储能力和计算能力。垂直扩展 Scale Up提升单机处理能力。 垂直扩展的方式又有两种 : 增强单机硬件性能 ,例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G; 提升单机软件或者架构性能 ,例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;平行扩容与水平扩展类似。集群服务器中的节点均为平行对等节点,当需要扩容时,可以通过添加更多节点以提高集群的服务能力。一般来说服务器中关键路径(如服务器中的登录、支付、核心业务逻辑等)都需要支持运行时动态平行扩容。弹性扩容指对部署的集群进行动态在线扩容。 弹性扩容系统可以根据实际业务环境按照一定策略自动地添加更多的节点(包括存储节点、计算节点、网络节点)来增加系统容量、提高系统性能或者增强系统可靠性,或者同时完成这三个目标。状态同步/帧同步状态同步状态同步是指服务器负责计算全部的游戏逻辑,并且广播这些计算的结果,客户端仅仅负责发送玩家的操作,以及表现收到的游戏结果。状态同步安全性高,逻辑更新方便,断线重连快,但是开发效率较低,网络流量随游戏复杂度增加,服务器需要承载更大压力。帧同步服务端只转发消息,不做任何逻辑处理,各客户端每秒帧数一致,在每一帧都处理同样的输入数据。帧同步需要保证系统在相同的输入下,要有相同的输出。帧同步开发效率高,流量消耗低而且稳定,对服务器的压力非常小。但是网络要求高,断线重连时间长,客户端计算压力大。 扩展阅读:帧同步与状态同步的区别三. 网络通信连接池预先建立一个连接缓冲池,并提供一套连接使用、分配、管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了连接频繁建立、关闭的开销。断线重连由于网络波动造成用户间歇性的断开与服务器的连接,待网络恢复之后服务器尝试将用户连接到上次断开时的状态和数据。会话保持会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关连的访问请求都会分配到一台机器上。用人话来表述就是:在一次会话过程中发起的多个请求都会落到同一台机器上。扩展阅读:会话(session)保持机制长连接/短连接通常是指TCP的长连接和短连接。长连接就是建立TCP连接后,一直保持这个连接,一般会中间彼此发送心跳来确认对应的存在,中间会做多次业务数据传输,一般不会主动断开连接。短连接一般指建立连接后,执行一次事务后(如:http请求),然后就关掉这个连接。扩展阅读:HTTP长连接、短连接究竟是什么?流量控制/拥塞控制流量控制防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理。拥塞控制防止发送方发的太快,使得网络来不及处理产生拥塞,进而引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿。 扩展阅读:TCP之 流量控制(滑动窗口)和 拥塞控制(拥塞控制的工作过程)惊群效应惊群效应也有人叫做雷鸣群体效应,不过叫什么,简言之,惊群现象就是多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只可能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。扩展阅读:Linux惊群效应详解NATNAT(Network Address Translation,网络地址转换),就是替换IP报文头部的地址信息。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力。扩展阅读:NAT详解四. 故障异常宕机宕机,一般情况下指的就是计算机主机出现意外故障而死机。其次,一些服务器例如数据库死锁也可以称为宕机,一些服务器的某些服务挂掉了,就可以这么说。coredump当程序出错而异常中断时,OS会把程序工作的当前状态存储成一个coredunmp文件。通常情况下coredump文件包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。 扩展阅读:coredump简介与coredump原因总结缓存穿透/击穿/雪崩缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。缓存击穿缓存击穿是指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到db。缓存雪崩缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。与缓存击穿不同的是:存击穿是热点key失效;缓存雪崩是大量的key同时失效。 扩展阅读:十分钟彻底掌握缓存击穿、缓存穿透、缓存雪崩500/501/502/503/504/505500Internal Server Error. 内部服务错误,一般是服务器遇到意外情况,而无法完成请求。可能原因:1、程序错误,例如:ASP或者PHP语法错误;2、高并发导致,系统资源限制不能打开过多的文件所致。501Not implemented. 服务器不理解或不支持请求的HTTP请求。502Bad Gateway. WEB服务器故障,可能是由于程序进程不够,请求的php-fpm已经执行,但是由于某种原因而没有执行完毕,最终导致php-fpm进程终止。可能原因:1、Nginx服务器,php-cgi进程数不够用;2、PHP执行时间过长;3、php-cgi进程死掉;503Service Unavailable. 服务器目前无法使用。系统维护服务器暂时的无法处理客户端的请求,这只是暂时状态。可以联系下服务器提供商。504Gateway Timeout. 服务器504错误表示超时,是指客户端所发出的请求没有到达网关,请求没有到可以执行的php-fpm,一般是与nginx.conf的配置有关。505HTTP Version Not Supported. 服务器不支持请求中所用的 HTTP 协议版本。(HTTP 版本不受支持)除了500错误可能是程序语言错误,其余的报错,都大概可以理解为服务器或者服务器配置出现问题。内存溢出/内存泄漏内存溢出内存溢出(Out Of Memory)指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。内存泄漏内存泄漏(Memory Leak)指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 扩展阅读:何为内存溢出,何为内存泄露句柄泄漏句柄泄漏是进程在调用系统文件之后,没有释放已经打开的文件句柄。一般句柄泄漏后的现象是,机器变慢,cpu飙升,出现句柄泄漏的cgi或server的cpu使用率增加。扩展阅读:http://km.oa.com/group/19143/articles/show/162768死锁死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都抑制处于阻塞状态并无法进行下去,此时称系统处于死锁状态或系统产生了死锁。扩展阅读:死锁百度百科软中断/硬中断硬中断我们通常所说的中断指的是硬中断(hardirq)。由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。软中断1.通常是硬中断服务程序对内核的中断;2.为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。扩展阅读:https://www.cnblogs.com/widic/p/7392485.html毛刺在短暂的某一刻,服务器性能指标(如流量、磁盘IO、CPU使用率等)远大于该时刻前后时间段。毛刺的出现代表这服务器资源利用不均匀,不充分,容易诱发其他更严重的问题。重放攻击攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。它是一种攻击类型,这种攻击会不断恶意或欺诈性地重复一个有效的数据传输,重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。网络孤岛网络孤岛指集群环境中,部分机器与整个集群失去网络连接,分裂为一个小集群并且发生数据不一致的状况。数据倾斜对于集群系统,一般缓存是分布式的,即不同节点负责一定范围的缓存数据。我们把缓存数据分散度不够,导致大量的缓存数据集中到了一台或者几台服务节点上,称为数据倾斜。一般来说数据倾斜是由于负载均衡实施的效果不好引起的。脑裂脑裂是指在集群系统中,部分节点之间网络不可达而引起的系统分裂,不同分裂的小集群会按照各自的状态提供服务,原本的集群会同时存在不一致的反应,造成节点之间互相争抢资源,系统混乱,数据损坏。五. 监控告警服务监控服务监控主要目的在服务出现问题或者快要出现问题时能够准确快速地发现以减小影响范围。服务监控一般有多种手段,按层次可划分为:系统层(CPU、网络状态、IO、机器负载等)应用层(进程状态、错误日志、吞吐量等)业务层(服务/接口的错误码、响应时间)用户层(用户行为、舆情监控、前端埋点)全链路监控服务拨测服务拨测是探测服务(应用)可用性的监控方式,通过拨测节点对目标服务进行周期性探测,主要通过可用性和响应时间来度量,拨测节点通常有异地多个。节点探测节点探测是用来发现和追踪不同的机房(数据中心)节点之间网络可用性和通畅性的监控方式,主要通过响应时间、丢包率、跳数来度量,探测方法一般是ping、mtr或其他私有协议。告警过滤对某些可预知的告警进行过滤,不进入告警统计的数据,如少量爬虫访问导致的http响应500错误,业务系统自定义异常信息等。告警去重当一个告警通知负责人后,在这个告警恢复之前,不会继续收到相同的告警。告警抑制为了减少由于系统抖动带来的干扰,还需要实现抑制,例如服务器瞬间高负载,可能是正常的,只有持续一段时间的高负载才需要得到重视。告警恢复开发/运维人员不仅需要收到告警通知,还需要收到故障消除告警恢复正常的通知。告警合并对同一时刻产生的多条相同告警进行合并,如某个微服务集群同一时刻出现多个子服务负载过高的告警,需要合并成为一条告警。告警收敛有时某个告警产生时,往往会伴随着其它告警。这时可以只对根本原因产生告警,其它告警收敛为子告警一并发送通知。如云服务器出现CPU负载告警时往往伴随其搭载的所有系统的可用性告警。故障自愈实时发现告警,预诊断分析,自动恢复故障,并打通周边系统实现整个流程的闭环。六. 服务治理微服务微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通(通常是基于HTTP的Restful API).每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。扩展阅读:大神告诉你如何理解微服务框架服务发现服务发现是指使用一个注册中心来记录分布式系统中的全部服务的信息,以便其他服务能够快速的找到这些已注册的服务。服务发现是支撑大规模 SOA 和微服务架构的核心模块,它应该尽量做到高可用。扩展阅读:服务治理-服务发现流量削峰如果观看抽奖或秒杀系统的请求监控曲线,你就会发现这类系统在活动开放的时间段内会出现一个波峰,而在活动未开放时,系统的请求量、机器负载一般都是比较平稳的。为了节省机器资源,我们不可能时时都提供最大化的资源能力来支持短时间的高峰请求。所以需要使用一些技术手段,来削弱瞬时的请求高峰,让系统吞吐量在高峰请求下保持可控。削峰也可用于消除毛刺,使服务器资源利用更加均衡和充分。常见的削峰策略有队列,限频,分层过滤,多级缓存等。扩展阅读:高并发架构系列:什么是流量削峰?如何解决秒杀业务的削峰场景版本兼容在升级版本的过程中,需要考虑升级版本后,新的数据结构是否能够理解和解析旧数据,新修改的协议是否能够理解旧的协议以及做出预期内合适的处理。这就需要在服务设计过程中做好版本兼容。过载保护过载是指当前负载已经超过了系统的最大处理能力,过载的出现,会导致部分服务不可用,如果处置不当,极有可能引起服务完全不可用,乃至雪崩。过载保护正是针对这种异常情况做的措施,防止出现服务完全不可用的现象。服务熔断服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。服务降级服务降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。降级往往会指定不同的级别,面临不同的异常等级执行不同的处理。根据服务方式:可以拒接服务,可以延迟服务,也有时候可以随机服务。根据服务范围:可以砍掉某个功能,也可以砍掉某些模块。总之服务降级需要根据不同的业务需求采用不同的降级策略。主要的目的就是服务虽然有损但是总比没有好。熔断VS降级相同点目标一致:都是从可用性和可靠性出发,为了防止系统崩溃;用户体验类似:最终都让用户体验到的是某些功能暂时不可用;不同点触发原因不同:服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;服务限流限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延迟处理,拒绝处理,或者部分拒绝处理等等。扩展阅读:谈谈高并发系统的限流故障屏蔽将故障机器从集群剔除,以保证新的请求不会分发到故障机器。七. 测试方法黑盒/白盒测试黑盒测试黑盒测试不考虑程序内部结构和逻辑结构,主要是用来测试系统的功能是否满足需求规格说明书。一般会有一个输入值,一个输入值,和期望值做比较。白盒测试白盒测试主要应用在单元测试阶段,主要是对代码级的测试,针对程序内部逻辑结构,测试手段有:语句覆盖、判定覆盖、条件覆盖、路径覆盖、条件组合覆盖单元/集成/系统/验收测试软件测试一般分为4个阶段:单元测试、集成测试、系统测试、验收测试。单元测试单元测试是对软件中的最小可验证单元进行检查和验证,如一个模块、一个过程、一个方法等。单元测试粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。集成测试集成测试也叫做组装测试,通常在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既验证“设计”,又验证“需求”。系统测试系统测试时将经过集成测试的软件,作为计算机系统的一部分,与系统中其他部分结合起来,在实际运行环境下进行一系列严格有效的测试,以发现软件潜在的问题,保证系统的正常运行。系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。验收测试验收测试也称交付测试,是针对用户需求、业务流程进行的正式的测试,以确定系统是否满足验收标准,由用户、客户或其他授权机构决定是否接受系统。验收测试与系统测试相似,主要区别是测试人员不同,验收测试由用户执行。 扩展阅读:单元测试、集成测试、系统测试、回归测试、用户验收测试简介回归测试当发现并修改缺陷后,或在软件中添加新的功能后,重新测试。用来检查被发现的缺陷是否被改正,并且所做的修改没有引发新的问题。冒烟测试这一术语源自硬件行业。对一个硬件或硬件组件进行更改或修复后,直接给设备加电。如果没有冒烟,则该组件就通过了测试。在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程。冒烟测试是在软件开发过程中的一种针对软件版本包的快速基本功能验证策略,是对软件基本功能进行确认验证的手段,并非对软件版本包的深入测试。比如:对于一个登录系统的冒烟测试,我们只需测试输入正确的用户名、密码,验证登录这一个核心功能点,至于输入框、特殊字符等,可以在冒烟测试之后进行。性能测试性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。基准测试基准测试(Benchmark)也是一种性能测试方式,用来测量机器的硬件最高实际运行性能,以及软件优化的性能提升效果, 同时也可以用来识别某段代码的CPU或者内存效率问题. 许多开发人员会用基准测试来测试不同的并发模式, 或者用基准测试来辅助配置工作池的数量, 以保证能最大化系统的吞吐量.A/B测试A/B测试,是用两组及以上随机分配的、数量相似的样本进行对比,如果实验组和对比组的实验结果相比,在目标指标上具有统计显著性,那就可以说明实验组的功能可以导致你想要的结果,从而帮你验证假设或者做出产品决定。扩展阅读:如何搞定A/B测试代码覆盖测试代码覆盖(Code coverage)是软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率。在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。扩展阅读:单元测试代码覆盖率的浅谈八. 发布部署DEV/PRO/FAT/UATDEVDevelopment environment开发环境,用于开发人员调试使用,版本变化较大。FATFeature Acceptance Test environment功能验收测试环境,用于软件测试人员测试使用。UATUser Acceptance Test environment用户验收测试环境,用于生产环境下的功能验证,可作为预发布环境。PROProduction environment生产环境,正式线上环境。扩展阅读:https://www.cnblogs.com/chengkanghua/p/10607239.html灰度发布灰度发布是指在升级版本过程中,通过分区控制,白名单控制等方式对一部分用户先升级产品特性,而其余用户则保持不变,当一段时间后升级产品特性的用户没有反馈问题,就逐步扩大范围,最终向所有用户开放新版本特性,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、修改问题,以保证其影响度。回滚 (Rollback)指的是程序或数据处理错误时,将程序或数据恢复到上一次正确状态(或者是上一个稳定版本)的行为。
2023年08月30日
48 阅读
0 评论
0 点赞
2023-08-30
SQL 这些核心知识点
SQL 这些核心知识点
2023年08月30日
15 阅读
0 评论
0 点赞
2023-08-30
《从菜鸟到大师之路 Nginx 篇》
《从菜鸟到大师之路 Nginx 篇》Nginx 简介Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。官方网站:http://www.nginx.orgNginx 特点Web服务器高性能的WEB服务器软件,与Apache相比,它支持更多的并发连接且占用服务器资源少,效率高反向代理或负载均衡服务器作为负载均衡服务器,它可以作为HTTP SERVER或DB等服务的代理服务器,类似Haproxy代理软件的功能,Nginx的代理功能相对简单,效率也不及Haproxy,同时它也是一个优秀的邮件代理服务软件缓存服务器Nginx还可以作缓存服务器,类似于专业的缓存软件功能Nginx 优缺点Nginx 优点高并发:能支持1-2万甚至更多的并发连接(静态小文件)内存消耗少可以做HTTP反向代理——负载均衡的功能内置对集群节点服务器的健康性查功能,不过功能相对较弱通过cache插件可以实现缓存软件能够实现的功能Nginx 的缺点Nginx 仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点对后端服务器的健康检查,只支持通过端口来检测,不支持通过 url来检测。不支持 Session 的直接保持,但能通过 ip_hash 来解决Nginx 应用场景Nginx 的最重要的几个使用场景:静态资源服务,通过本地文件系统提供服务;反向代理服务,延伸出包括缓存、负载均衡等;API 服务, OpenResty ;对于前端来说 Node.js 并不陌生, Nginx 和 Node.js 的很多理念类似, HTTP 服务器、事件驱动、异步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以实现,但 Nginx 和 Node.js 并不冲突,都有自己擅长的领域。Nginx 擅长于底层服务器端资源的处理(静态资源处理转发、反向代理,负载均衡等), Node.js 更擅长上层具体业务逻辑的处理,两者可以完美组合。用一张图表示:Nginx 到底可以做什么?看完这篇你就懂了!更多关于Nginx常用场景应用配置可参考:请务必收藏!Nginx 五大常见应用场景彻底搞懂 Nginx 五大应用场景!出去吹牛逼再也不担心了Apache VS NginxApache和Nginx都属于Web服务器,两者都实现了HTTP 1.1协议。无论是选择哪个,都是根据应用场景来决定的,所以些文件仅从应用场景出发,来对比两者之间的各自特点。要让正确的工具,做出正确的事。功能对比Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口,如PHP、Perl、Python等,同时还支持正向和反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输等。在功能实现上,Apache的所有模块都支持动、静态编译,而Nginx模块都是静态编译的,对FastCGI的支持,Apache对Fcgi的支持不好,而Nginx对Fcgi的支持非常好;在处理连接方式上,Nginx支持epoll,而Apache却不支持;在空间使用上,Nginx安装包仅仅只有几百K,和Nginx比起来Apache绝对是庞然大物。Nginx相对apache的优点轻量级,同样起web 服务,比apache 占用更少的内存及资源静态处理,Nginx 静态处理性能比 Apache 高 3倍以上抗并发,nginx 处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。在- - Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。高度模块化的设计,编写模块相对简单社区活跃,各种高性能模块出品迅速啊apache相对nginx的优点rewrite,比nginx 的rewrite 强大模块超多,基本想到的都可以找到少bug,nginx的bug相对较多超稳定Apache对PHP支持比较简单,Nginx需要配合其他后端用更多更详细的比较说明请参考:Apache VS Nginx,你选对了吗?Nginx 安装本文以CentOS 7.x 系统为例,使用 yum 安装 Nginx。yum install nginx -y安装完成后,通过 rpm -ql nginx 命令查看 Nginx 的安装信息。# Nginx配置文件 /etc/nginx/nginx.conf # nginx 主配置文件 /etc/nginx/nginx.conf.default# 可执行程序文件 /usr/bin/nginx-upgrade /usr/sbin/nginx# nginx库文件 /usr/lib/systemd/system/nginx.service # 用于配置系统守护进程 /usr/lib64/nginx/modules # Nginx模块目录 # 帮助文档 /usr/share/doc/nginx-1.16.1 /usr/share/doc/nginx-1.16.1/CHANGES /usr/share/doc/nginx-1.16.1/README /usr/share/doc/nginx-1.16.1/README.dynamic /usr/share/doc/nginx-1.16.1/UPGRADE-NOTES-1.6-to-1.10 # 静态资源目录 /usr/share/nginx/html/404.html /usr/share/nginx/html/50x.html /usr/share/nginx/html/index.html # 存放Nginx日志文件 /var/log/nginx主要关注的文件夹有两个:/etc/nginx/conf.d/是子配置项存放处,/etc/nginx/nginx.conf 主配置文件会默认把这个文件夹中所有子配置项都引入;/usr/share/nginx/html/静态文件都放在这个文件夹,也可以根据你自己的习惯放在其他地方;Nginx 常用命令systemctl 系统命令:# 开机配置 systemctl enable nginx # 开机自动启动 systemctl disable nginx # 关闭开机自动启动 # 启动Nginx systemctl start nginx # 启动Nginx成功后,可以直接访问主机IP,此时会展示Nginx默认页面 # 停止Nginx systemctl stop nginx # 重启Nginx systemctl restart nginx # 重新加载Nginx systemctl reload nginx # 查看 Nginx 运行状态 systemctl status nginx # 查看Nginx进程 ps -ef | grep nginx # 杀死Nginx进程 kill -9 pid # 根据上面查看到的Nginx进程号,杀死Nginx进程,-9 表示强制结束进程Nginx 应用程序命令:nginx -s reload # 向主进程发送信号,重新加载配置文件,热重启 nginx -s reopen # 重启 nginx -s stop # 快速关闭 nginx -s quit # 等待工作进程处理完成后关闭 nginx -T # 查看当前 Nginx 最终的配置 nginx -t # 检查配置是否有问题Nginx 配置文件Nginx 的配置文件结构如下:# main段配置信息 user nginx; # 运行用户,默认即是nginx,可以不进行设置 worker_processes auto; # Nginx 进程数,一般设置为和 CPU 核数一样 error_log /var/log/nginx/error.log warn; # Nginx 的错误日志存放目录pid /var/run/nginx.pid; # Nginx 服务启动时的 pid 存放位置 # events段配置信息 events { use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的) worker_connections 1024; # 每个进程允许最大并发数 } # http段配置信息 # 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置 http { # 设置日志模式 log_format main '$remote_addr - $remote_user \[$time_local\] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; # Nginx访问日志存放位置 sendfile on; # 开启高效传输模式 tcp_nopush on; # 减少网络报文段的数量 tcp_nodelay on; keepalive_timeout 65; # 保持连接的时间,也叫超时时间,单位秒 types_hash_max_size 2048; include /etc/nginx/mime.types; # 文件扩展名与类型映射表 default_type application/octet-stream; # 默认文件类型 include /etc/nginx/conf.d/*.conf; # 加载子配置项 # server段配置信息 server { listen 80; # 配置监听的端口 server_name localhost; # 配置的域名 # location段配置信息 location / { root /usr/share/nginx/html; # 网站根目录 index index.html index.htm; # 默认首页文件 deny 172.168.22.11; # 禁止访问的ip地址,可以为all allow 172.168.33.44;# 允许访问的ip地址,可以为all } error_page 500 502 503 504 /50x.html; # 默认50x对应的访问页面 error_page 400 404 error.html; # 同上 } }main 全局配置,对全局生效;events 配置影响 Nginx 服务器与用户的网络连接;http 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;server 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;location 用于配置匹配的 uri ;upstream 配置后端服务器具体地址,负载均衡配置不可或缺的部分;更多关于Nginx配置文件的介绍可以参考下列文章:史上最全的Nginx配置参数中文说明Nginx 常用配置汇总!从入门到干活足矣Nginx 实践:location 路径匹配如果你平时配置Nginx比较频繁,我推荐你使用这个神器:强大!Nginx 配置在线一键生成“神器”Nginx常用的内置变量Nginx 的进程模型Nginx 服务器,正常运行过程中:多进程:一个 Master 进程、多个 Worker 进程Master 进程:管理 Worker 进程对外接口:接收外部的操作(信号)对内转发:根据外部的操作的不同,通过信号管理 Worker监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程Worker 进程:所有 Worker 进程都是平等的实际处理:网络请求,由 Worker 进程处理;Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。为什么Nginx功能如此强大,可以参考:Nginx为什么高效?一文搞明白Nginx核心原理从 Nginx 优秀的核心架构设计,揭秘其为何能支持高并发?Nginx优化配置其实核心内容主要是通过修改 Nginx 配置文件来进行调优的!Nginx优化配置详解加速 Nginx 响应的 5 个措施!在我们的日常工作学习中,我们会该如何去优化自己的Nginx服务器?遇到以下问题我们该如何处理呢?如何自定义返回给客户端的404错误页面如何查看服务器状态信息如何优化Nginx并发量.......这些问题都可以参考这篇文章的解决方案:Nginx 高性能优化配置实战总结Nginx 是如何实现并发的?为什么 Nginx 不使用多线程?Nginx常见的优化手段有哪些?502错误可能原因有哪些?这种面试问题你肯定是经常被问到。所以,Nginx 如何实现高并发?常见的优化手段有哪些?对于Nginx服务器的安全,在日常使用中也是非常重要的,这里给大家分享一点实践经验:如何构建高效安全的Nginx Web服务器最后给大家分享2个基于HTTPS优化案例:基于 Nginx 的 HTTPS 性能优化实践高性能 Nginx HTTPS 调优!为 HTTPS 提速 30%Nginx 日志相关介绍完了安装、配置、优化这些常用的场景之后,日志这块也是非常重要的,大家都知道日常排错,日志起着举足轻重的作用。Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。error_log /var/log/nginx/error.log warn; #配置错误日志的级别及存储目录 events { worker_connections 1024; } http { .................. log_format main '$remote_addr - $remote_user \[$time_local\] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #配置日志的模式 access_log /var/log/nginx/access.log main; #配置访问日志存储目 }关于Nginx日志的配置实践看这篇:Nginx 日志配置实践!超详细由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器。而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如何有效便捷的采集nginx的日志进行有效的分析成为大家关注的问题。通过几个实例来介绍如何通过filebeat、logstash、rsyslog采集nginx的访问日志和错误日志,我也可以:利用ELK分析Nginx日志。Nginx版本升级这里我们来聊一聊,在企业实际生产环境中经常遇到的一个情况,如何升级Nginx到新的版本和如何回滚至旧版本。版本升级其实就是针对二进制文件的升级,过程如下:[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -v nginx version: nginx/1.12.2 [root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/ [root@nginx sbin]# mv nginx nginx-1.12.2 #首先备份原来的旧版本nginx二进制文件 [root@nginx sbin]# cp /usr/local/nginx-1.14.2/sbin/nginx ./ #拷贝新版本的二进制文件到当前目录注:其实升级新版本,最重要的就是平滑升级,让前端用户无感知(也就是不中断服务,这个其实不难,生产中多台依次灰度升级)。对于升级来说,最难的不是升级,而是回滚,因为在实际生产环境回滚的机率是存在,比如:新版本由于某些未知bug导致与现有应用不兼容、或出现运行不稳定的情况等等。所以,对于我们来说,故障回滚是重点。这里给大家推荐我总结的:1分钟搞定 Nginx 版本的平滑升级与回滚Nginx 反向代理与负载均衡反向代理简介反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。配置实例http { upstream product_server{ 127.0.0.1:8081; } upstream admin_server{ 127.0.0.1:8082; } upstream test_server{ 127.0.0.1:8083; } server { #默认指向product的server location / { proxy_pass http://product_server; } location /product/{ proxy_pass http://product_server; } location /admin/ { proxy_pass http://admin_server; } location /test/ { proxy_pass http://test_server; } } }如果你对Nginx 配置中location 的规则不太熟悉,推荐你看看这篇文章:Nginx 实践:location 路径匹配。nginx 每个location都是一个匹配目录,nginx的策略是:访问请求来时,会对访问地址进行解析,从上到下逐个匹配,匹配上就执行对应location大括号中的策略,并根据策略对请求作出相应。所以,有时候就因为在配置时,少些了一个字符“/”,就造成访问不通报错,这种问题是非常觉的故障原因之一,正所谓:Nginx配置中一个不起眼字符"/"的巨大作用,失之毫厘谬以千里,这篇文章详细进了相关的说明与举例验证。反向代理的优势:隐藏真实服务器;负载均衡便于横向扩充后端动态服务;动静分离,提升系统健壮性;Nginx 负载均衡nginx能实现负载均衡,什么是负载均衡呢?就是说应用部署在不同的服务器上,但是通过统一的域名进入,nginx则对请求进行分发,将请求分发到不同的服务器上去处理,这样就可以有效的减轻了单台服务器的压力。配置实例upstream server_pools { server 192.168.1.11:8880 weight=5; server 192.168.1.12:9990 weight=1; server 192.168.1.13:8989 weight=6; #weigth参数表示权值,权值越高被分配到的几率越大 } server { listen 80; server_name mingongge.com; location / { proxy_pass http://server_pools; } }Nginx 实现负载均衡的策略轮询策略:默认情况下采用的策略,将所有客户端请求轮询分配给服务端。这种策略是可以正常工作的,但是如果其中某一台服务器压力太大,出现延迟,会影响所有分配在这台服务器下的用户。最小连接数策略:将请求优先分配给压力较小的服务器,它可以平衡每个队列的长度,并避免向压力大的服务器添加更多的请求。最快响应时间策略:优先分配给响应时间最短的服务器。客户端 ip 绑定策略:来自同一个 ip 的请求永远只分配一台服务器,有效解决了动态网页存在的 session 共享问题。想要高可用?搞定负载均衡架构是关键,关于负载均衡和反向代理的区别可以参考:一文详解负载均衡和反向代理的真实区别,关于 nginx 反向代理和负载均衡策略 实战案例。Nginx 动静分离Nginx动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。推荐:CentOS 7.3:LAMP 动静分离部署可以了解一下Apache的配置,然后再回过头理解Nginx的动静分离可更直观。server { listen 80; server_name mingongge.com; location /static { root /wwww/web/web_static_site; } }也可以使用下面的方法location /image { alias /web/nginx/static/image/; }注意:使用alias末尾一定要添加/,并且它只能位于location中使用前后端分离后,可以很大程度提升静态资源的访问速度,即使动态服务不可用,静态资源的访问也不会受到影响。小试牛刀!Nginx 搭建静态资源服务器,这篇文章是给大家介绍整个搭建过程,非常详细。Nginx 高级功能除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等重定向配置location / { return 404; #直接返回状态码 } location / { return 404 "pages not found"; #返回状态码 + 一段文本 } location / { return 302 /blog ; #返回状态码 + 重定向地址 } location / { return https://www.mingongge.com ; #返回重定向地址 }示例如下server { listen 80; server_name www.mingongge.com;return 301 http://mingongge.com$request_uri; } server { listen 80; server_name www.mingongge.com; location /cn-url { return 301 http://mingongge.com.cn; } } server{ listen 80; server_name mingongge.com; # 要在本地hosts文件进行配置 root html; location /search { rewrite ^/(.*) https://www.mingongge.com redirect; } location /images { rewrite /images/(.*) /pics/$1; } location /pics { rewrite /pics/(.*) /photos/$1; } location /photos { } }流量拷贝需求:将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如:可以验证功能是否正常,以及服务的性能;用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问;这跟灰度发布还不太一样,镜像流量不会影响真实流量;可以用来排查线上问题;重构,假如服务做了重构,这也是一种测试方式;为了实现流量拷贝,Nginx提供了ngx_http_mirror_module模块,这就是 Nginx 又一牛X的功能!流量拷贝限流Nginx按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值。Nginx官方版本限制IP的连接和并发分别有两个模块:limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 "leaky bucket"。limit_req_conn 用来限制同一时间连接数,即并发限制。葵花宝典!一文搞定 Nginx 限流配置缓存Nginx 缓存作为性能优化的一个重要手段,可以极大减轻后端服务器的负载。下面我们将介绍 Nginx 缓存配置的相关指令以及 http 缓存机制,以及 Nginx 缓存实践案例分析。可参考:Nginx 缓存机制详解!灰度发布执行过程:当用户请求到达前端代理服务Nginx,内嵌的lua模块解析Nginx配置文件中的lua脚本代码;Lua变量获得客户端IP地址,去查询memcached缓存内是否有该键值,如果有返回值执行@client_test,否则执行@client。Location @client_test把请求转发给部署了new版代码的服务器,location @client把请求转发给部署了normal版代码的服务器,服务器返回结果。整个过程完成。下面是安装配置过程详细过程:基于 Nginx+lua+Memcache 实现灰度发布这里还给大家推荐一篇文章:基于 Nginx 实现灰度发布与 AB 测试封杀恶意访问看了 nginx 的访问日志,发现每天有好多国外的 IP 地址来访问我的网站,并且访问的内容基本上都是恶意的。因此我决定禁止国外 IP 来访问我的网站想要实现这个功能有很多方法,下面我就来介绍基于 NGINX 的 ngx_http_geoip2 模块 来禁止国外 IP 访问网站。详细的解决方案配置如:通过 Nginx 来实现封杀恶意访问Nginx+keepalived 实现高可用Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。keepalived高可用集群服务安装及配置过程请参考:Nginx+keepalived 实现高可用,防盗链及动静分离配置,写得太好了!Nginx 终极指南介绍用来提高Nginx服务器的安全性,稳定性和性能的12种操作。保持Nginx的及时升级去掉不用的Nginx模块禁用server_tokens项禁止非法的HTTP User Agents禁掉不需要的 HTTP 方法设置缓冲区容量上限限制最大连接数设置日志监控阻止图片外链禁止 SSL 并且只打开 TLS证书加密(HTTPS)重定向HTTP请求到HTTPS以上12个具体的配置过程可参考:提高Nginx服务器硬度的12个技巧Nginx 监控监控Web服务器对于查看网站上发生的情况至关重要。关注最多的便是日志变动,查看实时日志文件变动大家第一反应应该是'tail -f /path/to/log'命令吧,但是如果每个网站的访问日志都是使用这种方式查看也是相当崩溃的,今天小编就跟大家分享一个强大的Nginx日志监控工具。一个小工具帮你搞定实时监控Nginx服务器日常生产环境搭建了Nginx集群后,就需要继续深入研究的就是日常Nginx监控。Nginx如何监控?相信百度就可以找到:nginx-status通过Nginx-status,实时获取到Nginx监控数据后,如何和现有监控系统集成?一个很好的解决方案:Nginx+Telegraf+Influxdb+Grafana即通过Telegraf监控插件定时收集Nginx的监控状态,存储到时序数据库Influxdb中,然后通过Grafana展现即可。这是我发现的又一款管理神器,可以实现配置管理,和性能监控。具体的安装与配置过程,在这篇文章:又一款 Nginx 管理可视化神器!配置、监控一条龙 中介绍过了。
2023年08月30日
42 阅读
0 评论
0 点赞
1
...
6
7
8
...
20