csworkman

个人博客

Kafka

2022-3-9 Mr Chang 面试题

1.什么是kafka?
  Kafka是一个分布式发布-订阅消息系统,它最初是由Linkedin 公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务系统。它主要用于处理流式数据。

2 为什么要用kafka,为什么要使用消息队列?
   缓冲和肖锋:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka可以在中间可以起到一个缓冲的作用。把消息暂存在kafka中,下游服务就可以按照自己的节奏慢慢进行处理。
    解耦和扩展性:项目开始的时候并不能确定具体需求,消息队列可以作为一个接口层,解耦自己重要的业务流程。遵守约定,针对数据编程即可获取扩展能力。
    冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。
    健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。
    异步通信:很多时候,用户不想也不需要立即处理消息,消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它,想向队列中放入多少消息就放多少消息。然后在需要的时候再去处理。

3 Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么?
   ISR: In-Sync Replicas 副本同步队列
   AR:Assigned Replicas 所有副本
   ISR:是由leader维护,follower从leader同步数据有一些延迟(包括延迟时间 replica.lag.time.max.ms 和延迟条数 replica.lag.time.max.messages 两个维度)任意一个超过阙值都会把follower 剔除出ISR,存入OSR(Outof-Sync Replicas)列表,新加入的follower也会先存放在OSR中。
AR = ISR + OSR
4. Kafka中的broker是干什么的
    broker是消息的代理,Producers往brokers里面的指定topic中写消息,Consumers 从brokers中拉取指定topic 的消息,然后进行业务处理,broker在中间起到一个代理保存消息的中转站。

5. zookeeper 起到什么作用,可以不用zookeeper么?
    zookeeper是一个开源的分布式协调服务,是google chubby的一个开源实现,分布式应用程序可以基于zookeeper实现注入数据发布/订阅 负载均衡 命名服务 分布式协调/通知 集群管理, Master选举,配置维护等功能,

6. Kafka中follower如何与leader同步数据
   Kafka 的复制机制既不是完全的同步复制,也不是单纯的异步复制,同步复制影响吞吐率,而异步复制如果leader 挂掉则会让follower异步复制的时候丢掉数据,kafka使用ISR的方式很好i的均衡了确保数据不丢失以及吞吐率,follower可以批量的从leader复制数据,而且leader 充分利用磁盘顺序读以及 send file 机制,这样极大的提高了复制性能,内部批量写磁盘,大幅减少了 follower与leader 的信息差。

7 什么情况下一个broker会从isr中踢出去
     leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护 ,如果一个follower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其重ISR中移除 。

8 kafka 为什么那么快?
  (1)Cache Filesystem Cache PageCache 缓存
  (2)顺序写,由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快。
  (3)Zero-copy 零拷技术减少拷贝次数
  (4)Batching of Messages 批量处理,合并小的请求,然后以流的方式进行交互,直顶网络上限
   (5)Pull拉模式,使用拉模式进行消息的获取消费,与消息端处理能力相符。

9 kafka 公式计算
  Kafka 的机器数量 = 2 *(峰值生产速度*副本数/100) + 1
  副本数设定  一般设置 2-3个 很多企业设置为2个 副本的优势 :提高可靠性;副本劣势:增加了网络IO传输
  Kafka日志保存时间:默认保存7 天; 生产环境建议3天
  
  
  


评论(0) 浏览(956)

分布式事务

2022-3-3 Mr Chang 事务

1.什么是分布式事务:
        事务就是多个原子操作的组合,他们就像是一条绳上的蚂蚱,要么一起生,要么一起死,在事务中,如果其中一个操作执行失败,那么剩下的操作都不再执行,而之前执行过的操作也需要回滚。至于分布式事务,顾名思义就是包含对分布式系统中不同节点的操作的事务。

2.分布式一致性协议:
   (1)两阶段提交协议(2PC):
            在分布式事务中,一个事务贯穿多个节点,每个节点仅仅知道自己操作的结果,但是并不知道其他节点的操作结果。为了保证事务的一致性,就需要一个统一的协调者,每个节点把操作的结果告知协调者,为了保证事务的一致性,就需要一个统一的协调者,每个节点把操作的结果告知协调者,协调者再根据操作结果再通知各节点是将操作提交取消操作。
两阶段提交协议有准备阶段和提交阶段两个阶段,可以保证强一致性,但是复杂,不够灵活,而且还有以下缺点:阻塞(每个节点必须收到响应才会继续向下执行,否则则一直处于阻塞状态,占用资源),节点故障(如果在执行事务的过程中有节点发生故障,则协调者只能等待,会阻塞其他节点资源,而如果发生这种情况后,协调者也发生故障,新选取的协调者无法处理这种情况)

    (2) 三阶段提交协议(3PC)
            三阶段提交协议是两阶段提交协议的改进,目的是解决两阶段的缺点。它加入了超时机制来解决两阶段协议的阻塞问题,并在准备阶段增加了询问阶段(协调者询问节点是否可以提交,节点只需要返回是或否即可)。如果发生响应超时的问题,则可以回滚,不会使节点进入阻塞状态等待。
            三阶段提交协议的缺点是需要更多的通讯次数,实现比较复杂,两阶段提交协议和三阶段提交协议都是强一致性的分布式事务解决方案。

3.分布式事务最终一致性解决方案
    (1).可靠消息服务:
    

评论(0) 浏览(955)

渗透测试概述

2022-1-6 Mr Chang 服务器

渗透测试 (penetration test)并没有一个标准的定义,国外一些安全组织达成共识的通用说法是:渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析是从一个攻击者可能存在的位置来进行的,并且从这个位置有条件主动利用安全漏洞。

评论(0) 浏览(983)

态势感知服务

2022-1-6 Mr Chang 服务器

     态势感知的概念最早在军事领域被提出,覆盖感知,理解和预测三个层次,并随着网络的兴起而升级为网络态势感知,旨在大规模网络环境中对能够引起网络态势发生变化的安全要素进行获取、理解、显示以及最近发展趋势的顺延性预测,进而进行决策与行动。

评论(0) 浏览(1045)

浅谈LVS

2021-12-15 Mr Chang 负载均衡

一. 概述:
    LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。该项目在linux内核当中实现了基于IP的数据请求负载均衡调度方案,并且IP负载均衡技术是在负载调度器的实现技术中效率最高的。而且调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器能够自动屏蔽掉服务器的故障,从而将一组服务器组成一个高性能和高可用的虚拟服务器。

二. 集群采用三层结构

   一般来说 LVS集群有三层结构,最核心的还是负载调度器。
    1. 负载调度器(load balancer),它是集群的唯一入口,相当于对于整个集群的前端机器,类似于服务器组代理将客户的请求发送到一组服务器上执行,而对于前端客户来说他们所能看到的只是来自于服务器的一个虚拟ip地址,不是真正的服务IP地址。
    2. 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB,MAIL,FTP 和 DNS等。
    3. 共享存储(shared storage),它给服务器组提供共享存储地址,这样所有的服务器都能够共享使用同一套内容,提供相同的服务。

三 LVS负载均衡三种工作模式
    1.基于NAT的LVS模式负载均衡
      NET = network address translation 即网络地址转换,用户通过DNS服务器解析道公司负载均衡设备上面的外网地址,外网IP又称VIP,用户通过访问VIP即可链接后端的真实服务器,对于用户而言是透明的,他只能看到的VIP的地址 但是无法访问到真实服务器地址在哪里,LVS通过算法选择一台真实服务器以后将数据包转发给真实服务器,并且在转发之前LVS会修改数据包之间的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器IP以及对应的端口,真实服务器将返还给相应数据包给LVS调度器,LVS调度器在将包体的响应IP和端口改成之前的请求IP和端口返给

评论(0) 浏览(1006)

tp6之no input file specified.

2021-11-19 Mr Chang php

由于 php的进程是由fastcgi开启的 而在fastcgi里面 的fastcgi.conf配置文件里面
有一个参数fastcgi_param PHP_ADMIN_VALUE  他的值是 "open_basedir=$document_root/:tmp/:/proc/"
相当于在 当前项目的根目录下 或者是tmp目录下和proc 目录下是可以授权访问的

但是thinkphp6的入口文件是在public文件夹下面 而设置的根目录就是public 而无法请求上级目录的vendor里面的启动文件导致项目启动不起来 no input file specified.no input file specified.

这个时候就需要我们在配置nginx的时候 修改一下这个参数具体配置参数如下

 location ~ [^/]\.php(/|$)
        {
                #try_files $uri =404;
                fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_index index.php;
                #设置PATH_INFO
                fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/../:/tmp/:/proc/";
                #引入fastcgi配置
                include fastcgi_params;
                #include fastcgi.conf;
        }

评论(0) 浏览(1053)

java学习 2021-09-27 排序算法

2021-9-27 Mr Chang java

衡量排序算法的优劣:

1.时间复杂度:分析关键字的比较次数和记录的移动次数。
2.空间复杂度:分析排序算法中需要多少辅助内存。
3.稳定性:若两个记录A和B的关键字值相等,但是排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。


排序算法分类:
>内部排序:整个排序过程不需要借助于外部存储器,所有排序操作都在内存中完成。
>外部排序:参与排序的数据非常多,数据量非常大,计算机无法把整个排序过程放在内存中完成,必须借助于外部存储器。外部排序最常见的是多路归并排序。可以认为外部排序是由多次内部排序组成。

十大内部排序算法

~ 选择排序
> 直接选择排序,堆排序
~交换排序
> 冒泡排序,快速排序
~ 拆入排序
> 直接拆入排序、折半拆入排序、shell排序
归并排序
~桶式排序
~基数排序

评论(0) 浏览(973)

java学习 2021-09-27 内存结构

2021-9-27 Mr Chang java

截屏2021-09-27 上午10.09.35.png
截屏2021-09-27 上午10.21.55.png

评论(0) 浏览(1001)

java学习 2021-09-26 数组的概述

2021-9-26 Mr Chang java

数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

数组的常见概念 
1 数组名
2 下标(或索引)角标
3 元素
4 数组的长度:元素的个数

数组的特点:
1 数组是有序排列的
2 数组属于引用数据类型的变量,数组的元素,既可以是基本数据类型,也可以是引用数据类型
3 创建数组对象会在内存中开辟一整块连续的空间
4 数组的长度一旦确定,就不能修改

评论(0) 浏览(1156)

java学习-2021-09-23 流程控制

2021-9-23 Mr Chang java

顺序结构 : 程序从上到下执行

分支结构:
if-else
switch-case

循环结构:
for
while 
do-while

评论(0) 浏览(952)