项目实战梳理,一条请求如何工作拿到数据

背景

在这里插入图片描述

步骤

1、用户发出请求,进行dns域名解析

在这里插入图片描述
1、本地电脑会检查浏览器缓存中有没有这个域名对应的解析过的IP地址。本地电脑会检查浏览器缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时间太长和太短都不太好,如果时间太长,一旦域名被解析到的IP有变化,会导致被客户端缓存的域名无法解析到变化后的IP地址,以致该域名不能正常解析,这段时间内有一部分用户无法访问网站。如果设置时间太短,会导致用户每次访问网站都要重新解析一次域名。
2、如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。其实操作系统也有一个域名解析的过程,在Linux中可以通过/etc/hosts文件来设置,而在windows中可以通过配置C:\Windows\System32\drivers\etc\hosts文件来设置,用户可以将任何域名解析到任何能够访问的IP地址。例如,我们在测试时可以将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地DNS解析的规程,所以有黑客就可能通过修改用户的域名来把特定的域名解析到他指定的IP地址上,导致这些域名被劫持。

3、 前两个过程无法解析时,就要用到我们网络配置中的"DNS服务器地址"了。操作系统会把这个域名发送给这个本地DNS服务器。每个完整的内网通常都会配置本地DNS服务器,例如用户是在学校或工作单位接入互联网,那么用户的本地DNS服务器肯定在学校或工作单位里面。它们一般都会缓存域名解析结果,当然缓存时间是受到域名的失效时间控制的。大约80%的域名解析到这里就结束了,后续的DNS迭代和递归也是由本地DNS服务器负责。

windows在这配置:控制面板-》网络和共享中心-》更改适配器设置-》选中目标适配器右键选择属性-》Internet协议版本4(TCP/IPv4)-》配置DNS地址。
在这里插入图片描述

在这里插入图片描述
linux配置:
/etc/resolv.conf

4、如果本地DNS服务器仍然没有命中,就直接到根DNS服务器请求解析。(专门存储dns映射关系的一个服务器)

5、根DNS服务器返回给本地DNS域名服务器一个顶级DNS服务器地址,它是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右。

6、本地DNS服务器再向上一步获得的顶级DNS服务器发送解析请求。

7、接受请求的顶级DNS服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server服务器就是我要访问的网站域名提供商的服务器,其实该域名的解析任务就是由域名提供商的服务器来完成。 比如我要访问www.baidu.com,而这个域名是从A公司注册获得的,那么A公司上的服务器就会有www.baidu.com的相关信息。

8、 Name Server服务器会查询存储的域名和IP的映射关系表,再把查询出来的域名和IP地址等等信息,连同一个TTL值返回给本地DNS服务器。

9、 返回该域名对应的IP和TTL值,本地DNS服务器会缓存这个域名和IP的对应关系,缓存时间由TTL值控制。

10、 把解析的结果返回给本地电脑,本地电脑根据TTL值缓存在本地系统缓存中,域名解析过程结束在实际的DNS解析过程中,可能还不止这10步,如Name Server可能有很多级,或者有一个GTM来负载均衡控制,这都有可能会影响域名解析过程。

DMZ区

什么是DMZ区?
Demilitarized Zone,它是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题,而设立的一个位于内部网络与外部网络之间的缓冲区,在这个网络区域内可以放置一些公开的服务器资源。

考虑一个大型企业的网络架构,其中DMZ用于保护内部公司资源,同时提供对外部资源的访问。在这种情况下,DMZ可能包括以下组件:

一个Web服务器,托管公司的公共网站,供外部客户访问。
一个邮件服务器,处理公司的电子邮件通信。
位于DMZ和内部网络之间的防火墙,用于控制流量。
入侵检测系统(IDS)和入侵防御系统(IPS),以检测和应对潜在的网络攻击。
VPN网关,以允许员工在远程位置安全地访问内部资源。
反向代理服务器,用于提供负载均衡和缓存。
严格的日志和监控机制,以便跟踪网络活动。
这个DMZ的主要目的是将公共流量与内部资源隔离开来,从而减少潜在的风险和威胁。外部用户可以访问公司网站和发送电子邮件,但不会直接访问内部数据库或关键系统,这有助于保护机密信息和数据。

WAF是什么

WAF(Web应用防火墙)和传统防火墙在多个方面存在显著的区别。

首先,WAF是一种专门用于保护Web应用程序免受恶意攻击和数据泄露的安全设备。它通常位于Web应用程序和网络之间,监控和过滤HTTP流量,以检测和阻止潜在的攻击。WAF可以对HTTP请求进行深度检查,包括URL、参数、表单数据等,以便检测和阻止常见的Web应用程序漏洞攻击,如跨站脚本、SQL注入、跨站请求伪造等。同时,WAF还可以检测和阻止恶意的爬虫、暴力破解、DDoS攻击等行为。

相比之下,传统防火墙主要关注的是整个网络层面的安全防护。其主要功能包括过滤功能(检查每个数据包的源地址、目的地址和端口号,拒绝未经授权的数据流),审计功能(记录发送和接收的信息,监测网络活动),控制功能(根据安全政策控制不同应用程序的访问),以及加密功能(利用安全协议加密数据以确保安全传输)。传统防火墙主要是基于网络层技术的,不需要安装客户机,只需要配置端口。

因此,WAF和传统防火墙的主要区别在于其关注点和保护对象的不同。WAF更专注于Web应用程序的安全,而传统防火墙则更注重整个网络层面的安全防护。此外,WAF还具备一些传统防火墙所不具备的功能,如深度检查HTTP请求、检测和阻止Web应用程序漏洞攻击等。

ddos

DDoS全称Distributed Denial of Service,意思为“分布式拒绝服务”,即利用大量合法的分布式服务器对目标发送请求,从而导致正常合法用户无法获得服务。

打个比方:某商店生意异常火爆,引起了其他商户的不满,于是商户们找了百来号人去他店里,看商品、问价格,但却不掏钱购买。该商家看似忙了一天,其实一件也没卖出去。同时,真正想要买东西的顾客也没得到接待,因为店里挤得进不去。

elb集群 和CDN分发网络

ELB集群,即弹性负载均衡(Elastic Load Balance,ELB)集群,是一种流量分发控制服务。它将访问流量根据转发策略分发到后端多台服务器,从而通过流量分发扩展应用系统对外的服务能力,并提高应用程序的容错能力。ELB集群的主要目标是确保在高并发场景下,流量能够均匀、高效地分发到各个服务器,以保证服务的稳定性和可用性。(个人认为elb能做的nginx也可以做)

CDN集群,即内容分发网络(Content Delivery Network,CDN)集群,是一种通过在多个地理位置部署服务器来缓存和分发网站内容的技术。CDN集群的核心思想是将网站的内容缓存到离用户最近的服务器上,从而减少数据传输的时间和距离。当用户访问网站时,请求会被转发到最近的缓存服务器上,从而显著提高网站的访问速度、稳定性和安全性,同时降低服务器的负载。

因此,ELB集群和CDN集群之间的关系主要体现在它们都是为了提高网络服务的性能和可靠性而设计的。ELB集群主要负责流量的分发和均衡,确保后端服务器的负载均衡和高可用性;而CDN集群则主要负责内容的缓存和分发,提高网站的访问速度和用户体验。在实际应用中,这两个集群可以相互配合,共同构建一个高效、稳定的网络服务架构。

Nginx集群

Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也是一个IMAP/POP3/SMTP代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx的主要功能包括:

静态资源服务:可以高效地提供静态内容服务,直接支持(无需动态处理)纯文本、HTML、各类图片(JPG, GIF, PNG等)、JavaScript、CSS以及其他静态资源。
反向代理:将请求转发至内部网络或上游服务器,然后将从上游服务器收到的响应转发至客户端,实现负载均衡和容错。
负载均衡:Nginx提供多种负载均衡策略,可以在多个服务器之间分配请求,提高系统的整体性能和可靠性。
HTTP缓存:Nginx可以根据响应头的相关指令集或者自定义的缓存策略,对动态页面进行缓存,以减轻上游服务器的负载,加速请求的响应。
总的来说,Nginx以其高性能、高并发、低消耗的特点,广泛应用于各种Web应用场景中。

k8s

K8s,全称Kubernetes,是一个开源的、用于管理云平台中多个主机上的容器化的应用的平台。Kubernetes的目标是让部署容器化的应用变得简单且高效。它提供了应用部署、规划、更新、维护的一种机制。

具体来说,Kubernetes可以将应用程序打包成容器,并将这些容器部署到一个集群中,然后自动处理容器的生命周期管理、自动扩容等操作,让用户更加专注于应用程序的开发和业务逻辑。

K8s的主要功能包括数据卷管理以实现容器间数据共享、应用程序健康检查、复制应用程序实例以保证可用性、弹性伸缩以根据负载自动调整资源、服务发现和负载均衡以实现高可用性和流量分配、服务编排以高效部署服务、资源监控以收集和分析集群资源使用情况、提供认证和授权以确保安全,以及支持多种存储解决方案和插件系统以集成第三方工具和服务。

因此,K8s在微服务架构、自动化部署、容器管理、负载均衡等场景中有着广泛的应用。

Docker

Docker是一个开源的应用容器引擎,它允许开发者将他们的应用以及依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,并能够实现虚拟化。Docker容器是完全使用沙箱机制,相互之间不会有任何接口,因此具有性能开销极低和应用隔离的特点。

Docker的主要作用包括:

更好地利用资源:与虚拟机相比,Docker的内存占用更少,更加轻量级。
为微服务定制:Docker可以很好地和微服务结合起来,从开发、测试到部署过程中一直充当微服务的容器,甚至在生产环境中也可以部署微服务。
在云服务提供商之间移植:Docker支持大多数的云主机提供商,可以方便地在不同的云服务提供商之间移植。
此外,Docker还有运行环境快速部署、自动测试、扩容QPS、一次性的使用环境等多种用途。它基于虚拟化技术,可以同时建立多个虚拟环境,并通过创建新的容器实现水平扩展。

为什么使用前后端分离的方式进行开发呢

1、提高开发效率:前后端分离允许前端和后端团队并行开发,他们可以使用不同的技术栈和工具,根据各自的需求和喜好进行开发。这种分工使得开发流程更加高效,缩短了开发周期。
2、明确职责和定位问题:前后端分离使得前后端开发的职责更加明确,当出现问题时,可以快速定位到是前端还是后端的问题,避免了互相推诿的情况。例如,页面逻辑、跳转错误、浏览器兼容性问题、脚本问题、页面样式问题等,全部由前端工程师负责;而接口数据出错、数据没有提交成功、应答超时等问题,则由后端工程师负责解决。
3、提升用户体验:前端团队可以专注于用户界面设计、交互体验和页面渲染,使得前端应用具有更好的性能和用户体验。同时,通过前后端分离,可以实现页面的按需加载,无需一开始就加载所有资源,从而提升了页面加载速度和用户交互的流畅性。
更好的可维护性和可扩展性:前后端分离使得系统的各个组件可以独立进行开发和部署,当需要新增功能或修改某个模块时,只需修改相应的前端或后端代码,而无需对整个系统进行大规模的改动。此外,后端提供接口服务,前端通过调用接口获取数据,这种设计使得后端的业务逻辑和数据可以被多个前端应用程序共享和复用,提高了代码的复用性和维护性。
4、支持跨平台开发和复用:前后端分离使得前端代码可以独立于后端框架和技术栈,从而支持跨平台开发和复用。同样的接口可以被不同平台的前端应用(例如Web、移动端)使用,提高了代码的复用性。

CICD

CICD是持续集成(Continuous Integration)和持续交付/部署(Continuous Delivery/Deployment)的简称。它指的是在开发过程中自动执行一系列脚本来降低开发引入bug的概率,同时在新代码从开发到部署的过程中尽量减少人工的介入。

CICD的运行过程通常包括提交代码、持续集成、自动化测试、静态代码分析、部署到开发环境以及部署到生产环境等步骤。其目标是尽早提交和频繁提交代码,保持持续构建,简化测试,并清理环境,以实现更快速、更可靠的软件交付。

CICD是DevOps概念的一部分,它将传统开发过程中的代码构建、测试、部署以及基础设施配置等一系列流程的人工干预转变为自动化。使用CICD,代码经过开发人员更改后,可以进行自动化测试并完成交付和部署。这有助于最小化计算机停机时间,从而更快地发布代码。

这里可以借助jenkins完成上述功能,整个过程可以用下边的图表示出来,既可以将程序打包放到我们公司的nexus上,也可以放到我们的目标主机上。

在这里插入图片描述

nexus

1.一些无法从外部仓库下载的构件,例如内部的项目还能部署到私服上,以便供其他依赖项目使用。

  1. 为了节省带宽和时间,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。这样,及时暂时没有Internet链接,由于私服已经缓存了大量构件,整个项目还是可以正常使用的。同时,也降低了中央仓库的负荷。
    在这里插入图片描述

maven

Maven是一款服务于Java平台的自动化构建工具。Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发、打包、测试及部署等一系列行为。

传统工程我们直按把jar包放置在项目中, Maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。不使用Maven工具,当做 Java 项目需要第三方依赖包时,将别人打好的 Jar 包下载到本地,然后手动指定给项目。另外,比如版本控制,需要新版本怎么办,重新下载,重新指定,这个过程操作麻烦。而用了 Maven 之后,需要什么包,直接在 pom.xml 中添加几行 xml 代码(添加所依赖jar包的坐标),指定包名、版本等,就可以了,方便开发。

后端代码

为什么从单体到微服务???

业务复杂性增长:随着业务规模的扩大和复杂性增加,单体应用逐渐变得难以维护和扩展。微服务架构通过将应用拆分为一系列小型、独立的服务,每个服务专注于特定的业务功能,从而降低了系统的复杂性,提高了可维护性和可扩展性。
技术栈多样性:不同的业务功能可能最适合不同的技术栈或框架。微服务架构允许每个服务独立选择最适合其需求的技术,从而充分利用各种技术的优势。
团队协作与效率:在单体应用中,大型团队通常围绕整个应用进行工作,这可能导致沟通瓶颈和效率问题。微服务架构使得团队可以更加独立地工作,每个团队可以专注于自己负责的服务,提高了开发效率。
高可用性与容错性:微服务架构通过独立部署和扩展每个服务,提高了系统的可用性和容错性。当某个服务出现故障时,其他服务可以继续正常运行,从而减少了整个系统的停机时间。
弹性伸缩:由于每个服务都是独立的,因此可以根据需要动态地增加或减少资源,实现弹性伸缩。这有助于应对突发的业务高峰,同时降低运营成本。

Nacos

当相同的服务部署好几份,防止其中一个挂掉导致服务完全不可用的问题出现的时候,我们需要使用到一个工具,这个工具是为了保存服务的ip和端口,以及相关的一些公共的配置文件,这个工具就是nacos。

Nacos是阿里的一个开源产品,是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。(用来实现配置中心和服务注册中心)

Gateway

网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。

API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。

openFeign

Feign是一个声明式的Web服务客户端(Web服务客户端就是Http客户端),让编写Web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可。

非关系型数据库

随着大数据时代的到来,数据的量级和复杂性不断增加,传统的关系型数据库在某些场景下开始显得力不从心。非关系型数据库(NoSQL)应运而生,它主要针对大规模数据存储和处理的需求,采用非结构化或半结构化的数据存储方式,能够灵活地存储和处理各种类型的数据。非关系型数据库不需要遵循严格的数据完整性和一致性要求,因此读写性能更高,尤其在大数据量的情况下具有更短的查询响应时间。此外,非关系型数据库基于分布式架构,可以将数据分片存储在多个节点上,提高数据的可用性和冗余度,降低单点故障的风险。这些特性使得非关系型数据库在社交媒体平台、物联网应用等需要处理大规模非结构化和半结构化数据的场景中表现出色。

关系型数据库

关系型数据库,如MySQL、Oracle等,以表格的形式组织数据,每个表格都有特定的列和行,具有结构化数据存储的特点,使得数据的查询和管理更为方便。同时,它确保了数据的一致性和完整性,通过定义表格的结构、字段类型、约束等来实现。关系型数据库还提供了强大的查询语言(如SQL)进行数据的查询和操作,并具备处理大规模并发操作的能力。此外,关系型数据库将数据持久地存储在硬盘中,确保数据的持久性。这些特性使得关系型数据库在处理复杂业务逻辑、需要ACID支持的应用程序,以及需要进行复杂查询和报告生成的场景中表现出色。

总结

纵观这整个流程,我们可以知道一个请求过来以后要经过怎么样的处理,其实从底层来说,我们开发一个软件,无非就三方面,存数据,查数据,处理数据,纵观整个图,用户带着数据来了,用户带着数据走了,用户来的时候需要进行校验,验证身份,于是有了校验的一系列东西。

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Circ.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值