SpringCloud 和 Linux 八股文第一期五问五答

SpringCloud 和 Linux 八股文第一期五问五答

作者:程序员小白条个人博客

相信看了本文后,对你的面试是有一定帮助的!

⭐点赞⭐收藏⭐不迷路!⭐

1.Linux怎么查看文件内容

在 Linux 系统中,有多种方式可以查看文件的内容。以下是常用的几种方式:

  1. 使用 cat 命令:cat 命令用于连接文件并显示它们的内容。可以使用以下命令查看文件的内容:
plain 复制代码
bashCopy code
cat <file-name>

其中, 是文件的名称。

  1. 使用 less 命令:less 命令是一种分页显示文件内容的工具,可以滚动查看文件的内容,并支持搜索和定位。可以使用以下命令查看文件的内容:
plain 复制代码
phpCopy code
less <file-name>

其中, 是文件的名称。在 less 界面中,可以使用上下箭头滚动,按 / 进行搜索,按 q 退出。

  1. 使用 more 命令:more 命令也是一种分页显示文件内容的工具,类似于 less 命令,但功能较为简单。可以使用以下命令查看文件的内容:
plain 复制代码
phpCopy code
more <file-name>

其中, 是文件的名称。在 more 界面中,可以使用空格键进行翻页,按 q 退出。

  1. 使用 head 和 tail 命令:head 命令用于显示文件的前几行内容,tail 命令用于显示文件的后几行内容。可以使用以下命令查看文件的内容:
plain 复制代码
phpCopy codehead -n <num> <file-name>  # 显示文件的前 <num> 行
tail -n <num> <file-name>  # 显示文件的后 <num> 行

其中, 是要显示的行数, 是文件的名称。

以上是常用的几种方式来查看文件的内容,根据不同的需求和文件大小,可以选择适合的方式进行查看。

2.如何排查cpu飙高(Linux和windows)

plain 复制代码
# 先用top命令查询占用内存较高的java进程
top
# 再用top -H -p【进程号】找到占用线程比较高的线程
top -H -p13702
# 再用linux自带的命令进行转换,将10进制转换成16进制
printf "%x\n" 3586
# 用jstack命令查看原因
jstack 13702 |grep 3586
  1. 使用任务管理器查看 CPU 使用情况:在 Windows 系统中,可以使用任务管理器查看 CPU 使用情况。在 Linux 中,可以使用 top 命令来查看 CPU 使用情况。观察 CPU 使用率的变化,看看问题是否发生在特定应用程序或进程上。
  2. 检查系统资源使用情况:使用命令行工具,如 top 或 ps 命令,检查系统资源的使用情况,特别是内存和 CPU。看看是否有任何进程或应用程序占用了大量资源。
  3. 查看系统日志:在 Linux 中,可以使用 tail 命令查看系统日志。观察系统日志以查找任何可能的错误或瓶颈。在 Windows 中,可以查看事件日志和错误日志。
  4. 尝试禁用或删除应用程序:在 Linux 中,可以使用包管理器或命令行工具来禁用或删除应用程序。在 Windows 中,可以使用卸载程序或删除注册表中的项。
  5. 检查硬件故障:如果 CPU 使用率仍然很高,但应用程序或进程没有问题,则可能是硬件故障。检查 CPU 散热器,电源和硬盘是否正常工作。
  6. 更新或重新安装应用程序和系统软件:在 Linux 中,可以使用包管理器更新应用程序和系统软件。在 Windows 中,可以安装更新或重新安装应用程序和系统软件。
  7. 使用系统优化工具:在 Linux 中,可以使用系统优化工具,如 Guru Armani。在 Windows 中,可以使用 Windows 性能工具。这些工具可以帮助清理系统,优化性能并查找和解决瓶颈。

3.常见的API网关

1.1、Nginx是一个高性能的HTTP和反向代理服务器。Nginx一方面可以做反向代理,另外一方面可以做静态资源服务器,接口使用Lua动态语言可以完成灵活的定制功能。

Nginx 在启动后,会有一个 Master 进程和多个 Worker 进程,Master 进程和 Worker 进程之间是通过进程间通信进行交互的。Nginx 采用了异步非阻塞的方式来处理请求,也就是说,Nginx 是可以同时处理成千上万个请求的。

1.2、Zuul是 Netflix 开源的一个API网关组件,它可以和 Eureka、Ribbon、Hystrix 等组件配合使用。社区活跃,融合于 SpringCloud 完整生态,是构建微服务体系前置网关服务的最佳选型之一。

Zuul 目前有两个大的版本:Zuul1 和 Zuul2

Zuul1 是基于 Servlet 框架构建,它采用的是阻塞和多线程方式,即一个线程处理一次连接请求,这种方式在内部延迟严重、设备故障较多情况下会引起存活的连接增多和线程增加的情况发生。

Netflix 发布的 Zuul2 有重大的更新,它运行在异步和无阻塞框架上,每个 CPU 核一个线程,处理所有的请求和响应,请求和响应的生命周期是通过事件和回调来处理的,这种方式减少了线程数量,因此开销较小。

Zuul 源码托管

1.3、SpringCloud Gateway是Spring Cloud 的一个全新的API网关项目,目的是为了替换掉Zuul1,它基于Spring5.0 + SpringBoot2.0 + WebFlux(基于⾼性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型)等技术开发,性能⾼于Zuul,官⽅测试,Spring Cloud GateWay是Zuul的1.6倍,旨在为微服务架构提供⼀种简单有效的统⼀的API路由管理⽅式。

Spring Cloud Gateway可以与Spring Cloud Discovery Client(如Eureka)、Ribbon、Hystrix等组件配合使用,实现路由转发、负载均衡、熔断、鉴权、路径重写、⽇志监控等,并且Gateway还内置了限流过滤器,实现了限流的功能。

1.4、Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

Kong主要有三个组件:

Kong Server :基于Nginx的服务器,用来接收API请求。Apache Cassandra/PostgreSQL :用来存储操作数据。Kong dashboard:官方推荐UI管理工具,也可以使用 restfull 方式管理admin api。Kong采用插件机制进行功能定制,插件集(可以是0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控。

1.5、Traefik是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file...) 来自动化、动态的应用它的配置文件设置。

1.6、OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

二、常见的注册中心Spring Cloud支持的多种注册中心Eureka、Consul、Zookeeper、以及阿里巴巴推出Nacos。这些注册中心在本质上都是用来管理服务的注册和发现以及服务状态的检查的

2.1、Eureka原生,2.0遇到性能瓶颈,停止维护。

Eureka 是 Netflix 出品的用于实现服务注册和发现的工具。 Spring Cloud 集成了 Eureka,并提供了开箱即用的支持。其中, Eureka 又可细分为 Eureka Server 和 Eureka Client。

2.2、Zookeeper支持,专业的独立产品。例如:dubbo。

ZooKeeper是一种集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。分布式应用程序以某种形式使用所有这些类型的服务。每次实现它们时,都需要做大量工作来修复不可避免的bug和竞争条件。由于实现这些类型的服务很困难,应用程序最初通常会忽略它们,这使得它们在发生变化时变得脆弱,难以管理。即使做得正确,这些服务的不同实现也会导致应用程序部署时的管理复杂性。

2.3、Consul原生,GO语言开发。

Consul是一个服务网络解决方案,使团队能够管理服务之间以及跨多云环境和运行时的安全网络连接。Consul提供服务发现、基于身份的授权、L7流量管理和服务对服务加密。

2.4、Nacos相对于 Spring Cloud Eureka 来说,Nacos 更强大。

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以"服务"为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

4.常见的RPC框架

3.1、Dubbo国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。后来贡献给了Apache软件基金会。

Apache Dubbo 是一款微服务框架,为大规模微服务实践提供高性能 RPC 通信、流量治理、可观测性等解决方案,涵盖 Java、Golang 等多种语言 SDK 实现。最新版本升级到Dubbo3了。

3.2、Motan微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言。Motan是一个跨语言远程过程调用(RPC)框架,用于快速开发高性能分布式服务。

Motan生态系统相关项目:

Motan go是golang实现。MotanPHP是PHP客户端可以直接或通过Motan go代理与Motan服务器交互。Motan openresty是基于openresty的Lua(Luajit)实现。

3.3、Tars腾讯内部使用的 RPC 框架,于 2017 年对外开源,仅支持 C++ 语言。

TARS是一个Linux基金会项目。它是一个基于名称服务和Tars协议的高性能RPC框架,也是一个集成的管理平台,并通过灵活的调度实现了托管服务。

Tars,又名TAF(Total Application Framework),自2008年以来一直在腾讯使用。目前它支持C++、Java、Nodejs和PHP。该框架为开发、维护和测试提供了一套解决方案,使开发、部署和测试服务更加高效。它集成了可扩展的编码/解码协议、高性能RPC通信框架、名称服务、监视器、统计和配置。您可以使用它快速开发基于微服务的可靠分布式应用程序,并实现完全高效的服务管理。

Tars 源码托管

3.4、Spring Cloud国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言。Spring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。

3.5、gRPCGoogle 于 2015 年对外开源的跨语言 RPC 框架,支持多种语言。

gRPC是一个现代的开源高性能远程过程调用(RPC)框架,可以在任何环境中运行。它可以通过可插拔的负载平衡、跟踪、健康检查和身份验证支持,有效地连接数据中心内和数据中心之间的服务。它也适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端服务。

3.6、Thrift最初是由 Facebook 开发的内部系统跨语言的 RPC 框架,2007 年贡献给了 Apache 基金,成为 Apache 开源项目之一,支持多种语言。

Thrift 是一个软件框架(远程过程调用框架),用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引 擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

thrift 最初由 facebook 开发,07 年四月开放源码,08 年 5 月进入 apache 孵化器,现在是 Apache 基金会的顶级项目。

thrift 允许你定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成 RPC 客户端和服务器通信的无缝跨编程语言。。

著名的 Key-Value 存储服务器 Cassandra 就是使用 Thrift 作为其客户端 API 的。

5.微服务网关的作用

1.路由

路由起到转发的作用,比如有接口A和接口B,网关会记录这些信息,根据用户访问的地址和参数,转发请求到对应的接口(服务器/集群)。

2.负载均衡

在路由基础是哪个,实现随机转发到集群中某一个机器

3.统一处理跨域 直接配置文件

4.发布控制(灰度发布),比如上线新接口,先给新接口20%d的流量,老接口80%。

5.流量染色,给请求添加标识,一般设置请求头中,添加新的请求头,能够判断是否经过网关检验。

6.统一接口保护:限制请求、信息脱敏、降级(熔断)、限流、超时时间、重试(业务保护)

7.统一业务处理 把一些每一个项目中都要做的通用逻辑放到上层。

8.统一鉴权,判断用户是否有权限,无论访问什么接口,都去判断用户是否有权限。

9.访问控制:黑白名单,限制DDOS,IP

10.统一日志:统一的请求,响应信息记录

11.统一文档:将下游的文档进行聚合,在一个页面统一查看 建议使用:https://doc.xiaominfo.com/docs/middleware-sources/aggregation-introduction

相关推荐
真真-真真7 分钟前
WebXR
linux·运维·服务器
Yan.love14 分钟前
开发场景中Java 集合的最佳选择
java·数据结构·链表
椰椰椰耶17 分钟前
【文档搜索引擎】搜索模块的完整实现
java·搜索引擎
大G哥17 分钟前
java提高正则处理效率
java·开发语言
轩辰~29 分钟前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
小_太_阳38 分钟前
Scala_【1】概述
开发语言·后端·scala·intellij-idea
智慧老师1 小时前
Spring基础分析13-Spring Security框架
java·后端·spring
lxyzcm1 小时前
C++23新特性解析:[[assume]]属性
java·c++·spring boot·c++23
V+zmm101341 小时前
基于微信小程序的乡村政务服务系统springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
雨中rain1 小时前
Linux -- 从抢票逻辑理解线程互斥
linux·运维·c++