web服务器:apache (参考服务器配置、优化。静态并发量最高2000) nginx(tengine) IIS #端口全部为80!https为443端口

1、telnet与ssh的区别:
telnet:不安全,没有对传输数据进行加密,容易被监听,还有遭受中间人攻击,telnet不能压缩传输数据,所以传输慢
ssh:对数据进行了加密,安全度高,ssh传输数据经过压缩,所以传输速度比较快
2、软连接和硬链接的区别

  • 软链接可以跨文件系统,硬链接不可以;
  • 软链接可以对目录进行连接,硬链接不可以;
  • 删除源文件之后,软链接失效,硬链接无影响;
  • 两种链接都可以通过命令 ln 来创建;
  • ln 默认创建的是硬链接;
  • 使用 -s 参数可以创建软链接。
    3.什么是程序,什么是进程。
    程序:具备一个计算机指令的文件,可以被计算机执行
    进程:一个运行了的程序。获得计算机资源,例如CPU的时间,内存空间,磁盘空间,磁盘IO,网络带宽。权限,PID等等。
    ps aux 命令展示了进程的那些方面的信息。
    user:用户
    %cpu:占用CPU时间的百分比
    %mem:占用内存空间的百分比
    vsz RSS: 虚拟内存和实际内存占用的大小
    tty:终端类型pts0 pts1
    STAT:进程的状态。运行,睡眠,停止,僵死,退出。
    start:进程启动的时间
    time:占用CPU总时间
    command:程序的路径和名称

top
第一行:程序名,系统时间,CPU占用率(1.5.15)
第二行:任务数;
第三行:CPU占用率;
第四行:内存空间。K_M_G
第五行:交换分区(硬盘的一部分空间。存放常用数据)

如何控制进程的运行。
kill PID (-19停止 -18继续运行)
pkill 进程名字

nice 优先级概念(nice越小,优先级越高,反之优先级越低)
nice值(-20到+19,共40个数值)

进程和线程的区别:
线程:线程来源于进程
线程模式需要事先开启进程
线程模式并发量高
进程:进程稳定性高,线程稳定性低
进程独占内存
线程共享进程内存,一个进程可有有多个线程

Apache的工作模式—-面试
apche2.2工作模式?介绍下特点,说明什么情况下采取不同的工作模式?
apache 工作模式,分别是prefork,worker
prefork—进程模式 是一种进程,进程去请求处理,容易消耗内存但是稳定,某个进程出现问题不会影响其他请求,要求稳定时使用。

worker—线程模式 使用多个子进程,每个子进程有多个线程,使用线程去处理请求,消耗内存小稳定不好,在访问量多的时候使用。

Apache与Nginx的区别?
相同点:Web服务 处理静态请求的
Nginx优点:反向代理,负载均衡,邮箱代理服务器 并发量很高,异步调用
缺点:个别功能使用较为复杂;

Apache优点:稳定,bug少,与php语言的兼容性很强;
缺点:并发量低,功能相对较少;

pv访问量(Page View),即页面访问量,每打开一次页面PV计数+1,刷新页面也是。
通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。
UV访问数(Unique Visitor)指独立访客访问数,一台电脑终端为一个访客。

响应时间(RT) :
响应时间是指系统对请求作出响应的时间
吞吐量(Throughput):
吞吐量是指系统在单位时间内处理请求的数量
并发用户数:
并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量
QPS每秒查询率(Query Per Second) :
每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。

集群
1.什么是集群?集群分为那些类型?列举代表的产品
集群:集群是一组协同工作的服务实体,用以提供比单一服务实体更具有扩展性和可用性的服务平台使其性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
集群类型:LB:Load Banlancing(负载)、HA:High Availability(高可用)、HP:High Performace(高性能)。即高性能科学群集、负载均衡群集和高可用性群集
set():
负载均衡集群
硬件负载均衡集群包括:F5、深信服 、Radwarenginx集群,
软件负载均衡集群:lvs集群,haproxy集群,nginx集群
高可用集群:keepalived集群
2.有那些负载均衡集群服务,他们有什么区别
负载均衡集群服务:
区别:
3.LVS-DR和LVS-NAT的工作原理
LVS-DR:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
111.png

缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
LVS-NAT:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

222.png
4.keepalived的工作原理
keepalived是以VRRP协议为实现基础的,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样我们就可以保证集群的高可用。
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的

一、如何解决Redis,mysql双写一致性?

1.最经典的缓存+数据库读写的模式:
读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。
更新的时候,先更新数据库,然后再删除缓存。
2.给缓存设置过期时间,这种方案下,可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存。

二、缓存雪崩

数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。

产生雪崩的简单过程:

1、redis集群大面积故障
2、缓存失效,但依然大量请求访问缓存服务redis
3、redis大量失效后,大量请求转向到mysql数据库,mysql的调用量暴增,很快就扛不住了,甚至直接宕机
4、由于大量的应用服务依赖mysql和redis的服务,这个时候很快会演变成各服务器集群的雪崩,最后网站彻底崩溃。
#解决:
1.缓存的高可用性
缓存层设计成高可用,防止缓存大面积故障。即使个别节点、个别机器、甚至是机房宕掉,依然可以提供服务,例如 Redis Sentinel 和 Redis Cluster 都实现了高可用。

2.缓存降级
可以利用ehcache等本地缓存(暂时支持),主要还是对源服务访问进行限流、资源隔离(熔断)、降级等。
当访问量剧增、服务出现问题仍然需要保证服务还是可用的。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级,这里会涉及到运维的配合。
降级的最终目的是保证核心服务可用,即使是有损的。
在进行降级之前要对系统进行梳理,比如:哪些业务是核心(必须保证),哪些业务可以容许暂时不提供服务(利用静态页面替换)等,以及配合服务器核心指标,来后设置整体。

3.Redis备份和快速预热
1)Redis数据备份和恢复
2)快速缓存预热

4.提前演练
最后,建议还是在项目上线前,演练缓存层宕掉后,应用以及后端的负载情况以及可能出现的问题,对高可用提前预演,提前发现问题。

三、缓存穿透
缓存穿透是指查询一个一不存在的数据。例如:从缓存redis没有命中,需要从mysql数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。
解决:
如果查询数据库也为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库。设置一个过期时间或者当有值的时候将缓存中的值替换掉即可。

四、缓存并发
这里的并发指的是多个redis的client同时set key引起的并发问题。其实redis自身就是单线程操作,多个client并发操作,按照先到先执行的原则,先到的先执行,其余的阻塞。

五、缓存预热
缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。
这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!
解决:
1、直接写个缓存刷新页面,上线时手工操作下;
2、数据量不大,可以在项目启动的时候自动进行加载;
目的就是在系统上线前,将数据加载到缓存中。

其他面试:
1.Redis官方为什么不提供Windows版本?
因为目前Linux版本已经相当稳定,而且用户量很大,无需开发windows版本,反而会带来兼容性等问题。
2.一个字符串类型的值能存储最大容量是多少?
512M
3.Redis集群方案什么情况下会导致整个集群不可用?
有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用。
4.说说Redis哈希槽的概念?
Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。
5.Redis集群之间是如何复制的?
异步复制
6.Redis集群最大节点个数是多少?
16384个。
7.Redis集群如何选择数据库?
Redis集群目前无法做数据库选择,默认在0数据库。
8.怎么测试Redis的连通性?
ping
9.如何与Redis互动?
安装服务器后,您可以运行redis安装提供的Redis客户端,也可以打开命令提示符并使用以下命令:
redis-cli
10.使用Redis有什么好处?
Redis非常快。
它支持服务器端锁定。
它有一个丰富的客户端库。
这是一个很好的反击。
它支持原子操作。
11.使用Redis有哪些缺点/限制?
它是单线程的。
它对一致哈希的客户端支持有限。
它具有很大的持久性开销。
它没有广泛部署。
12.Redis和RDBMS有什么区别?
Redis是NoSQL数据库,而RDBMS是SQL数据库。
Redis遵循键值结构,而RDBMS遵循表结构。
Redis非常快,而RDBMS相对较慢。
Redis将所有数据集存储在主存储器中,而RDBMS将其数据集存储在辅助存储器中。
Redis通常用于存储小型和常用文件,而RDBMS用于存储大文件。
Redis仅为Linux,BSD,Mac OS X,Solaris提供官方支持。它目前没有为Windows提供官方支持,而RDBMS提供对两者的支持
13.什么是redis的事务?
a)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
b)事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
14.Redis单点吞吐量
单点TPS达到8万/秒,QPS达到10万/秒,补充下TPS和QPS的概念
1.QPS: 应用系统每秒钟最大能接受的用户访问量
每秒钟处理完请求的次数,注意这里是处理完,具体是指发出请求到服务器处理完成功返回结果。可以理解在server中有个counter,每处理一个请求加1,1秒后counter=QPS。
2.TPS: 每秒钟最大能处理的请求数
每秒钟处理完的事务次数,一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较合理。

问题2:Redis的多数据库机制,了解多少?
正常:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,单机下的redis可以支持16个数据库(db0 ~ db15)
集群: 在Redis Cluster集群架构下只有一个数据库空间,即db0。因此,我们没有使用Redis的多数据库功能!

问题3:Redis集群机制中,你觉得有什么不足的地方吗?
假设我有一个key,对应的value是Hash类型的。如果Hash对象非常大,是不支持映射到不同节点的!只能映射到集群中的一个节点上!还有就是做批量操作比较麻烦!

问题4:懂Redis的批量操作么?
正常: 比如mset、mget操作等
集群: 我们在生产上采用的是Redis Cluster集群架构,不同的key会划分到不同的slot中,因此直接使用mset或者mget等操作是行不通的。

问题6:你们有对Redis做读写分离么?
正常:没有做
集群:不做读写分离。我们用的是Redis Cluster的架构,是属于分片集群的架构。而redis本身在内存上操作,不会涉及IO吞吐,即使读写分离也不会提升太多性能,Redis在生产上的主要问题是考虑容量,单机最多10-20G,key太多降低redis性能.因此采用分片集群结构,已经能保证了我们的性能。其次,用上了读写分离后,还要考虑主从一致性,主从延迟等问题,徒增业务复杂度。

1.ELK能做什么?

ELK组件在海量日志系统的运维中,可用于解决:
分布式日志数据集中式查询和管理
系统监控,包含系统硬件和应用各个组件的监控
故障排查
安全信息和事件管理
报表功能

2.ES与关系数据库对比

在 ES 中,文档归属于一种 类型 (type) ,而这些类型存在于索引 (index) 中,类比传统关系型数据库
DB -> Databases -> Tables -> Rows -> Columns
关系型 数据库 表 行 列

ES -> Indices -> Types -> Documents -> Fields
ES 索引 类型 文档 域(字段)