技术栈使用场景

使用场景

前提(一):视野

某些技术可以没在项目中用过,但是要有自己的理解和视野,当你都说出来的时候,面试官也不会在意你到底在工作中用没用过了。

如: 数据库设计

​ a. qps很低 — 单机mysql就可以支撑

​ b. 读和写差距很大 — 读写分离,更稳定,数据不一致问题解决方案

​ c. qps很高,mysql撑不住 — Redis

​ d. Redis分片 — qps更高,单机redis撑不住

​ e. 涉及复杂条件,搜索 — ES

​ f. 更灵活更复杂的数据 — mongo

​ …

前提(二):如何学习一个技术(个人观点,不喜勿喷)

a. 学会给自己提问,链式深挖。 a问题->b问题->c问题

b. 这个技术诞生是为啥?是干啥的解决了什么问题什么痛点?

c. 主要思想,原理,有什么骚操作~

c. 凡事必是有利有弊,会出现什么问题->解决方案

d. 对比学习: 一个技术可能有很多种产品,既然还没被淘汰肯定有各自的优缺点,就可以知道哪个场景用哪个

c. 以上全部是原理,思想,没有实操,接下来就是落地:动手搭代码,学习基本语法,跑通

1. 项目

1.1 微服务是怎么拆分的,都有哪些模块?

在这里插入图片描述

1.2 需求生命周期

在这里插入图片描述

2. 中间件业务场景举例?

2.1 redis

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 MQ

1. 你知不知道你们系统里为什么要用消息队列这个东西?

解耦:

一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。

但是其实这个调用是不需要直接同步调用接口的,如果用 MQ 给它异步化解耦,也是可以的,你就需要去考虑在你的项目里,是不是可以运用这个 MQ 去进行系统的解耦。在简历中体现出来这块东西,用 MQ 作解耦。

在这里插入图片描述

异步:
在这里插入图片描述

削峰:消息积压解决方案。
在这里插入图片描述

2. 既然用了消息队列这个东西,你知不知道用了有什么好处&坏处?

优点上面已经说过了。

缺点有以下几个:(面试可以提前准备的)

  • 系统可用性降低

    MQ挂了咋办 ?如何保证消息队列的高可用?

  • 系统复杂度提高

    消息重复消费,消息丢失,消息传递顺序性…

  • 一致性问题

    A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是 BCD 三个系统那里,BD 两个系统写库成功了,结果 C 系统写库失败了,咋整?数据不一致了。

3. 既然你用了 MQ,可能是某一种 MQ,那么你当时做没做过调研?

(场景题准备工作)
在这里插入图片描述

4. 基本原理了解
  • RabbitMq :不适合分布式,适合高吞吐量(集群), 拉取 & 推送, 单机,普通集群,镜像集群
    在这里插入图片描述
    在这里插入图片描述
  • Kafka:多分区,多副本的天然分布式消息系统,Broker–Topic–Partition, 拉取
    在这里插入图片描述
    在这里插入图片描述
5. 你在工作中那些场景用到过举个栗子?

RabbitMq
在这里插入图片描述

Kafka:

在这里插入图片描述

6. 设计一个消息队列?需要考虑什么?
建议都说Kafka吧!一般说这个是没什么毛病 ! 

Kafka 特点:
1. 可靠性:具有副本及容错机制。
2. 可扩展性:kafka 无需停机即可扩展节点及节点上线。
3. 持久性:数据存储到磁盘上,持久性保存。
4. 性能:kafka 具有高吞吐量。达到 TB 级的数据,也有非常稳定的性能。
5. 速度快:顺序写入和零拷贝技术使得 kafka 延迟控制在毫秒级。
  • 可扩展性:参照一下 kafka 的设计理念,broker -> topic -> partition,每个 partition 放一个机器,就存一部分数据。如果现在资源不够了,简单啊,给 topic 增加 partition,然后做数据迁移,增加机器, 不就可以存放更多数据,提供更高的吞吐量了?

  • 磁盘落地|持久化:那肯定要了,落磁盘才能保证别进程挂了数据就丢了。那落磁盘的时候怎么落啊?顺序写,这样就 没有磁盘随机读写的寻址开销,磁盘顺序读写的性能是很高的,这就是 kafka 的思路

  • 可用性: kafka 的高可用保障机制。多副本 -> leader & follower -> broker 挂了重新选举 leader 即可对外服务。

  • 细节:可靠性传输:0丢失方案,重复消费方案,顺序性方案,延时以及过期失效问题方案…

    如果问的实在太深:就说不好意思太深入的没研究过。

3.3 Nginx

1. 是什么, 有什么优势,解决了什么问题
  • 是个C语言写的软件,反向代理web服务器;
  • 速度更快、并发更高;配置简单,扩展性强;高可靠性;热部署;
2.能做什么
  • 反向代理
  • 负载均衡
  • 防盗链
  • 解决跨域问题、
  • 缓存
  • 限流
  • 动静资源分离;
3. 基本原理了解
  • 原理图来一波~

    进程模型
    在这里插入图片描述

  • 安装:自学建议docker pull nginx,yum install 都可以

  • 安装后的目录:

在这里插入图片描述

  • 常用启停命令:
/usr/local/nginx/sbin/nginx           #默认启动方式 startnpm
/usr/local/nginx/sbin/nginx -t        #测试配置信息
/usr/local/nginx/sbin/nginx -v        #显示版本信息,-V(大V)显示编译时的参数
/usr/local/nginx/sbin/nginx -s stop   #快速停止服务
/usr/local/nginx/sbin/nginx -s quit   #正常停止服务
/usr/local/nginx/sbin/nginx -s reload #重启
#要是停不掉可以全部干掉,强制停止,不够优雅~ 不是热部署,不建议这么玩
killall nginx
  • nginx.conf

在这里插入图片描述

4. 工作中应用场景
  • 单节点:反向代理:在开发部署一套自己的前后端,用于自测或联调;

    • 场景描述

      现有环境: 开发环境服务器192.168.1.10,上面部署了一套单节点的前后端。

      1. 你开发完成了接口,需要前后端联调,此时你需要部署一个你自己的节点给前端调你最新的接口;

        -- 方案1:可以本地起一个服务注册到10上,但是要是下班了人家前端要干活就调不通了;
        
        -- 方案2:可以打包放到10上面去启动节点,就解决了1的问题,确定是要改后端代码就得换包;
        
        此时都不需要修改nginx的东西,前端本地修改服务为basic-service-tfy就可以调到你服务上面的新代码;
        
      2. 前端也开发完成了,需要部署一套自己的前端,给开发负责人看下流程,或者前后端自测;

        -- 方案1:跟上面一样,也在本地启动一个,但是要是还有别的工作任务,就很麻烦,肯定还是部署到服务器上最好;
        
        -- 方案2: 前端打包放到服务器上面, 修改nginx.conf, 复制一套server,改前端改为dist-xxx:新端口
        

        如图:

    在这里插入图片描述

  • HA高可用:反向代理+负载均衡 +(keepalived)

    常规:一开始你只有一台 web 服务器对用户提供服务,用户可以直接连接你的web服务器去实现各项需求,此时其实不需要nginx.

    在这里插入图片描述

在这里插入图片描述

​ 负载均衡:随着业务不断扩大,发现单机模式下网站支撑不了那么大的流量,于是使用分布式架构,并使用nginx实现负载均衡功能.

在这里插入图片描述

nginx 做成分布式+ keepalived:如果 nginx master 出现宕机,keepalived则会将服务切到 nginx slave上,保证业务不受影响

这样就可以避免 nginx 单机故障问题,以此来实现高可用.
在这里插入图片描述

# 在http模块的keepalive_timeout  100; 行下添加如下内容
upstream xxx{
        ip_hash; #分配规则
        server 本地IP:8930;
        server HA的IP:8930;
        ...
}

#在location/gateway模块下修改对应行的配置
proxy_pass http://xxx;

在这里插入图片描述

简单介绍一下keepalived,细节可以自己去学习:可参考https://blog.csdn.net/bushqiang/article/details/108168605

安装: yum install -y keepalived

例: 129和130的keepalived配置虚拟ip : virtural_ipaddress { 192.168.233.100}

在这里插入图片描述

keepalived.conf 示例
在这里插入图片描述

3.4 ES

4. 基础部分

4.1 JUC使用场景

4.2 多线程使用场景

4.3 JVM调优案例

4.4 设计模式使用场景

5. 数据库

5.1 Mysql

  • 集群场景
  • 分库
  • 分表
  • 调优

5.2 Redis

  • 哨兵
  • 部署
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值