Nginx、Canal

序号内容
1基础面试题
2JVM面试题
3多线程面试题
4MySql面试题
5集合容器面试题
6设计模式面试题
7分布式面试题
8Spring面试题
9SpringBoot面试题
10SpringCloud面试题
11Redis面试题
12RabbitMQ面试题
13ES面试题
14Nginx、Cancal
15Mybatis面试题
16消息队列面试题
17网络面试题
18Linux、Kubenetes面试题
19Netty面试题

Nginx

命令

立即停止:nginx -s stop

重新加载配置文件:nginx -s reload

启动:systemctl start nginx

查看状态:systemctl status nginx

什么是Nginx

Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡。

为什么Nginx性能这么高

因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决

为什么不使用多线程

Nginx:采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换,所以才使得Nginx支持更高的并发。

Nginx是如何处理请求的

nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的location,location就是实际地址

什么是正向代理和反向代理

正向代理就是一个人发送一个请求直接就到达了目标的服务器.

反方代理就是请求统一被Nginx接收,nginx反向代理服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了.

正向代理服务器代理的是客户端,而反向代理服务器代理的是服务端

使用反向代理服务器的优点是什么

反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的,特别是当您使用web托管服务时

Nginx的优缺点

优点:
(1)占内存小,可实现高并发连接,处理响应快
(2)可实现http服务器、虚拟主机、方向代理、负载均衡
(3)Nginx配置简单
(4)可以不暴露正式的服务器IP地址
缺点:
  动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力

限流怎么做的

  • nginx限流就是限制用户请求速度,防止服务器受不了
  • 限流有3种
    1. 正常限制访问频率(正常流量)
    2. 突发限制访问频率(突发流量)
    3. 限制并发连接数
  • Nginx的限流都是基于漏桶流算法

漏桶流算法和令牌桶算法

漏桶算法

漏桶算法是网络世界中流量整形或速率限制时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。也就是我们刚才所讲的情况。漏桶算法提供的机制实际上就是刚才的案例:突发流量会进入到一个漏桶,漏桶会按照我们定义的速率依次处理请求,如果水流过大也就是突发流量过大就会直接溢出,则多余的请求会被拒绝。所以漏桶算法能控制数据的传输速率。

令牌桶算法

令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。令牌桶算法的机制如下:存在一个大小固定的令牌桶,会以恒定的速率源源不断产生令牌。如果令牌消耗速率小于生产令牌的速度,令牌就会一直产生直至装满整个令牌桶。

Nginx负载均衡的算法怎么实现的?策略有哪些?

为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。

策略

轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统

权重 weight
  • weight的值越大分配
  • 到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
  • 权重越高,在被访问的概率越大,如上例,分别是20%,80%。
ip_hash( IP绑定)
  • 每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。
fair(第三方插件)
  • 必须安装upstream_fair模块。
  • 对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。
url_hash(第三方插件)
  • 必须安装Nginx的hash软件包
  • 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。

Canal

canal是一个阿里开源的中间件,应用在实时数据同步,数据监控,数据分发场景。

canal能够感知到MySql数据变动(增、删、改),然后解析变动数据,将变动数据发送到MQ或者同步到其他数据库,等待逻辑的进一步处理。

Flink CDC替换品。

项目中使用的是:

<dependency>
    <groupId>com.zendesk</groupId>
    <artifactId>mysql-binlog-connector-java</artifactId>
    <version>0.28.3</version>
</dependency>

通过实现BinaryLogClient.EventListener 接口来完成对数据库的监听。

优缺

优点:高性能、分布式、支持数据过滤和转换

缺点:使用难度大,支持数据回溯(无法获取历史数据)。

原理

canal将自己伪装成数据库主节点的从节点,和主从复制原理是一样的。canal拿到主节点的binlog 后并将这些数据交给下游服务(springboot,mysql,MQ)。

主从复制:

1、从节点连接主节点,主节点创建binlog dump 线程,从节点建立I/O线程。binlog dump 线程用来给从节点同步数据,主节点有多少个从节点就会创建多少个binlog dump 线程。从节点的I/O线程用来接收主节点发送过来的binlog数据

2、当主节点进行增、删、改操作时,会按顺序写入到bin log 中。

3、当主节点的binlog发生变化时,binlog dump会通知从节点,并将binlog内容推送给从节点。

4、从节点的I/O线程接收主节点推送过来的binlog,并将内容写到本地的relay log (中继日志)中。

5、从节点的SQL线程通过轮询或者通知的方式 来 读取relay log(中继日志)的数据,根据relay log(中继日志)的内容修改从节点。

spring boot集成canal

<dependency>
    <groupId>top.javatool</groupId>
    <artifactId>canal-spring-boot-starter</artifactId>
    <version>1.2.1-RELEASE</version>
</dependency>

代码中处理类添加@CanalTable(value = “user”)注解,实现EntryHandler接口

canal实现的功能

数据同步

数据库实时监控

数据分析和挖掘

数据库备份

数据集成

数据库迁移

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值