当前位置: 首页 > 科技观察

对于Nginx在运维领域的应用,看这篇文章就足够了

时间:2023-03-17 13:18:18 科技观察

关于NginxNginx已经诞生十多年了。作为一款开源的Web服务器软件,具有性能稳定、高并发、低内存消耗等特点。、高性能的处理能力等特点,广泛应用于国内外各家互联网厂商的实际生产架构中。主要有以下应用场景:Web服务应用,可实现静态资源,PHP、Python等网站设置代理加载服务,支持TCP/UDP、HTTP、HTTP/2、gRPC、FastCGI的转发处理,SCGI、uWSGI等协议,并实现相应通信协议的请求解析、长连接、代理转发、负载均衡、会话维护等互联网架构中常见的应用功能缓存应用,基于其代理功能,实现转发或反向代理缓存功能API网关应用,基于支持Lua语言脚本模块扩展,提供身份认证、路由转发等编程能力,适用于各种复杂环境下的路由处理。Nginx基于事件驱动架构,可以支持百万级并发请求。处理能力,通常用于技术架构中的接入入口。近年来,随着云计算、微服务、服务平台等架构和DevOps标准的快速发展,统一入口、智能路由、有效解耦、基础设施拆分等架构需求使得Nginx得到广泛应用。Nginx在DevOps中的应用DevOps已经成为目前最流行的研发管理标准。它所倡导的云计算和微服务,已经被无数运维从业者视为洪水猛兽,被认为取代了运维的工作。但是,当我们真正了解云计算和微服务的架构时,也应该深刻认识到,这不是抢饭碗,而是主动喂饭。DevOps标准也在推动我们的运维人员更深入地参与到开发架构中,与研发达到一种交织共存的状态。在我看来,链接是Nginx。1、应用互联网产品在业务架构上的开发过程是先对当前的需求做一个版本,然后根据不断变化的需求添加新的功能。这是非常符合逻辑的,但是随着技术的迭代和业务需求的增加,也会给我们的工作带来很多挑战。比如某个功能比较小的时候,就会由一个项目组去开发。由于业务的不断发展,会逐渐扩大到一个部门或业务部门的人共同开发。此时,原本单一的服务会因为业务部门调整或业务产品变更而面临拆分。我在2015年遇到过这样一个问题,商户服务本来是一个团队开发的,但是由于业务部门的拆分,提出了一些分类商户独立开发的需求。如果由开发完成拆分,将面临技术架构。、技术栈迁移、业务开发成本增加等诸多问题。基于实现的方便性,我们运维提供了基于Nginx的平滑拆分方案,实现动态路由。访问结构如下:服务的URL只有域名和商户识别码(http://www.xxxxx.com/shop/111xxxxx)。根据这个特点,我们设计了一个由Nginx+Lua+Redis组成的动态路由架构,使用Nginx作为ingress动态路由。为了避免阻塞,基于路由判断逻辑最少的原则,我们将所有商户标识码以Key的形式存储在Redis中,每个key对应的值为对应的代理服务器组标识。当用户访问进入Nginx后,lua脚本快速从redis中读取对应的标识,将用户的访问路由到标识对应的代理服务器组。开发同事开发了一个商户编码管理工具,可以实现商户识别码的动态管理。这样,在短时间内,我们将单个商户服务的代码按照业务维度拆分成商户、酒店、旅游、电影等多个服务。开发可以先复制多套代码,然后根据各自的开发进度由商户或整体进行替换。该方案在短时间内实现了服务拆分的实现,为开发团队未来开发商户服务提供了更多可能。总之,无论是OpenAPI、微服务还是中台架构,Nginx总能通过其强大的功能,减轻开发负担,实现架构变更的平滑过渡。通过Nginx进行路由和数据处理,可以灵活解决开发架构变化的问题,以适应各种变化的能力满足不同阶段的开发架构需求。2.在应急保障中的应用在运维保障中,RTO(RecoveryTimeObjective,恢复时间目标)和RPO(RecoveryPointObjective,恢复点目标)是衡量运维保障工作的重要指标。RTO是指从业务发生故障到整个业务系统恢复正常所需的最长时间。另一方面,RPO指的是数据可能丢失的最长时间。这两个指标对运维架构的容灾和应急切换能力提出了严峻的挑战。目前流行的做法是多活架构,但在实际实施中,多活架构投资成本高,实施周期长,且难以改变现有的技术架构,投入维护工作后期也非常庞大。此时可以利用Nginx设计动态降级方案,有效补充规模小、开发架构技术能力低下时期的应急保障工作。方案整体投资小,可快速实施,发生故障时可快速切换,故障时记录用户更改数据的请求,最大程度避免数据丢失.方案设计如下:所有静态资源由CDN厂商提供接入服务。当降级集群部署在远程机房正常访问时,Nginx负载会将GET请求和响应结果实时同步到降级集群,降级集群的Nginx对同步数据进行处理并存储在当Redis集群中某个业务服务发生故障时,根据故障情况通过DNS或Nginx负载将用户访问切换到降级集群。业务服务恢复后,通过Nginx负载逐步切换回用户访问。通过一个专门的工具,将记录的POST数据被改变的数据恢复到数据库中。该解决方案仅作为讨论的模型。实际实现中还有很多问题需要考虑,比如:GET方法的URL的最小值,避免重复数据占用更多的存储空间。登录用户处理及GET方法请求个性化问题POST方法数据与用户身份绑定POST记录数据恢复精度设计接入切换监控前端用户提示信息3.数据化运维Nginx通常放在服务端接入入口,其访问日志可以全局记录用户访问的来源、响应时间、行为热点等数据。通过对访问日志的分析,可以清晰了解用户来源、行为习惯、自身服务器性能。借助ELK的高性能处理能力,可以将数据分析结果实时展示给服务器维护人员和应用开发人员,从而不断提升业务可用性和产品用户体验。Nginx日志可以从安全性、性能、可用??性、访问统计四个方面进行分类处理。在安全方面,可实时记录访客IP,现阶段可根据实际情况进行手动或自动屏蔽。在性能方面,可以结合基础资源监控,分析原因,提早预测。如果是关于易用性方面的业务设计,可以及时反馈到产品中,做更友好的提醒。访问统计可以提供给相应的部门做进一步的分析处理。运维工作不仅仅是响应外部需求,更重要的是通过Nginx提供的强大功能,积极参与企业的数据运营。4、微服务中的Nginx微服务是DevOps水平的重要标志。微服务架构中服务网格(ServiceMesh)和Serverless架构设计最大的概念就是将可重用的和基础的非业务功能与业务开发分离,比如服务发现、端到端认证、访问跟踪、组件依赖和其他功能。在向服务网格迁移的过程中,Nginx发挥了重要作用。路由网格架构,该架构是向服务网格过渡的初级架构,它不需要对原有的单体应用和新的微服务应用做任何改动,可以很容易的迁移进去,积累更复杂的转型经验。Sidecar代理/结构模型,其中应用程序和代理放置在POD中,允许对应用程序流量进行更细粒度的控制。这个阶段可以自己开发控制面,也可以选择直接切换到istio平台。写于2019年初的电影《流浪地球》让我们看到了中国科幻电影的希望,但导演郭帆一再强调,“工业化程度低的时候,我们靠的是人肉。中国的工业化电影还处于非常早期的阶段”。这让我想起了自己从事的互联网行业,其实我们一直在非工业化的环境中工作。工业化自然而然地用自动化的“机器系统”代替了人肉的“体力劳动”,其生产过程的每一个阶段都必须标准化和流水化。当看到由中国信息通信研究院牵头,联合云计算开源产业联盟、高效运维社区以及国内多家互联网公司的DevOps标准-研发运维集成能力成熟度模型,以及正式确立了国际标准,我不禁感到自豪,同时也对为推动我国互联网产业产业化而努力奋斗的精英们深表敬佩。作为一名互联网从业者,我们也深刻认识到,利用好开源技术,推动工作内容的标准化、流程化,也是我们在互联网行业产业化进程中的责任。作者简介王晓东,资深运维专家,拥有十余年互联网企业运维和架构经验,擅长服务器优化、大规模集群管理、开源工具应用和业务故障排查。EXIN认证DevOpsMaster,专注于运维架构优化、运维自动化、运维工作的DevOps治理。《Nginx应用与运维实战》一书的作者。《Nginx应用与运维实战》是一本基于新版Nginx和云原生应用场景体系讲解Nginx的书籍。是作者十几年运维经验的总结。从应用、运维、与Kubernetes和微服务集成三个维度,对Nginx的基础知识、工作原理、核心应用、运维管理、集成扩展进行了全面详尽的讲解。完全实战化,包含大量的配置案例和示例代码,可以帮助读者在实际工作中快速掌握和熟练应用Nginx。