系统设计问题

1 题外话和系统设计无关的

内存映射问题

一个进程虚拟地址 2^64/2^32 (64和32取决于计算机多少位),虚拟地址里面分段,每段里面分页
每个进程都只知道自己存在,以为自己是计算机唯一存在的

逻辑地址 假设20 -> 线性地址-> 1000(段基地址) + 20(偏移量) -> 物理地址 (LRU分页替换等)

C

预处理 -> 汇编 -> 链接 -> 生成可执行代码(二进制)

这个编译器教学讲得是我看到的最好的,就是有点长,大二的时候看了两遍,现在都忘差不多了

2 单点登录问题

为什么会有单点登录问题?
	 不同页面登录一个,其他页面自动登录

以前用session解决单点登录问题,在现在Nginx集群下不行了。衍生出3种解决方法
	1 iphash
		Nginx下 ip绑定一个服务器,以后所有这个ip请求都只走同一个服务器
	2 同步session
		但是有网路延迟,并发不能太高。不同的微服务下,不在同一集群,session无法同步
	3 redis/第三方缓存 (主流,百分之90使用)
		1 user 登录淘宝时,会put Map<key: 唯一值如UUID,value: user信息>到redis
		2 put完后把key值返回user (cookie/localstore/session)
		3 user 再次登录天猫时候,通过(cookie/localstore/session)拿到key直接登录

3 第三方登录问题

	通过QQ登录百度网盘
	1 user发送请求到百度网盘 (通过QQ登录,但是百度网盘不能知道QQ信息)
	2 百度网盘重定向,引导用户到QQ登录页面
	3 QQ校验账号密码,状态码callback,状态码只用一次,有效期很短,只能callback地址用
	4 QQ响应状态码给callback地址给百度网盘
	5 百度网盘用状态码去换取token (token能存和加密user信息,有有效期)
	6 QQ返回token给百度网盘

4 SSL非对称加密

起初是对称加密,交易双方都使用同样钥匙,安全性得不到保证,所以非对称加密诞生了

一个服务器通过公钥加密再通过私钥解密。公钥是依赖于私钥,通过私钥生成

1 发送数据时: 数据+加密算法,被拦截下因为没有解密算法无法获得数据
2 直接发送私钥解密会数据泄露,所以需要第三方CA机构认证(收集企业信息,域名,公钥)
3 客服端生成随机数,利用CA公钥再次加密。服务器拿私钥解密拿到随机数,双方利用该随机数作为钥匙进行以后通讯

5 设计高并发系统架构

设计高并发主要为了降低TPS/QPS问题。最重要的要首先在上层能够承受请求,然后再设计处理请求

地域上负载均衡:DNS
硬件上负载均衡:F5 集群之间负载均衡
软件上负载均衡:LVS,Nginx主机之间负载均衡
DNS,F5不是重点略过了

缓冲,缓存,复用,分治,亲密粘性,负载均衡

降低QPS,可以一次请求多个css而不是一个css,可以使用雪碧图(一个大图包含多个小图然后css切割小块使用)

1 第一层LVS集群承受10万+QPS压力,承受流量压力
使用LVS服务端负载均衡,keepalived集群LVS
LVS用来承受流量压力,Nignx层拿握手,后面再应用计算

为什么LVS性能高到能承受第一轮海量并发,而不是使用Nginx?
	LVS在传输层,Ngnix在应用层。LVS没有应用层的额外开销,性能大大提升
	LVS在传输层,负载均衡服务器,数据包转发级别,不需要和客户端三次握手
	Nginx在应用层有会话,上下文,http的response,require等额外开销

LVS具体原理

局域网内会通过NAT路由器,转换IP地址的交换机
LVS原理类似NAT交换机,有三种IP交换实现策略
	1 VS/DR (Virtual Server vs Direct ROuting)
	通过改写MAC地址,将请求发到真实服务器上,直接相应客户,不再需要IP隧道的开销。但要求调度器和真实服务器都有一块网卡连在同一物理网段上

	2 VS/NAT 
	调度器重写请求报文目标地址,通过调度算法请求发送到真实服务器上。服务器响应后通过调度器,再次重写报文源地址返回客户

	3 VS/TUN
	使用NAT时,请求和响应都要调度器重写,当请求太大时,调度器承受不了,所以调度器把请求报文通过IP隧道发送到真实服务器响应。所以调度器只处理请求报文,集群吞吐量上升10倍。

在这里插入图片描述
2 CDN和FastDFS

FastDFS集群保存静态文件
	FastDFS开源轻量级分布式文件系统
	Tracker跟踪器类似HDFS的NameNode,storage储存节点类似HDFS的DataNode
	FastDFS和HDFS区别,FastDFS存文件不是云计算,只面向文件上传和下载
	HDFS我在之前文章专门写过
CDN从FastDFS中拉取数据
	内容分发网络
	使用户就近获取所需要的内容,减少网络阻塞,提高访问响应
	CDN依靠部署在各地边缘服务器,包括中心平台负载均衡,内容分发,调度等功能模块
	比如下载Jquery库,通过CDN分析从就近节点上快速下载下来

3 第二层Nginx集群网关层承受1万QPS压力,承受三次握手压力

相比较Apache,Apache稳定成熟,轻量级,占内存少,一个请求一个进程同步阻塞。
Nginx异步非阻塞,多个请求对应一个进程,社区活跃

在Nginx集群层:本地缓存(存静态页面),动静分离(静态页面直接读Nginx),反向代理,负载均衡

4 微服务架构业务网关层

微服务和SOA区别? -> SOA服务偏业务划分,微服务功能服务划分,微服务比SOA更细腻
如SpringCloud下Zuul网关组件
	zuul 网关,整体管理
		http超时,routes path xxx下都走该网关等
	处理权限系统和单点登录

	Eureka(concurrentHashMap<String,Lease~心跳续约对象(注册信息,过期时间等)>)/zookeeper
	Feign/Dubbo 远程调用RPC
		Feign:
		一端
		@FeignClient(name="yunyun")
		public interface yunyun{}
		
		另一端
		@Autowired
		yunyun yun;
		~create(){
			直接调用yun下的方法
		}
	Ribbon 客户端负载均衡
	hystrix 容错-限流,熔断,降级
	Stream 消息驱动 (如中间加MQ解耦)
	View渲染(JSON,FreeMarker等)

5 额外具体业务层削峰

一些思路举例
	1 熔断
	2 降级
		前端层面:使用本地缓存,使用假数据,JS访问不到直接不发送数据,静态化降级
		后端层面:平时Redis+DB,高峰时Redis+kafka等消息队列削峰+DB
	3 限流
		 压测计算每秒请求消耗时间,桶令牌限流,
	4 每个业务层级AKF设计+主从+集群
	5 通过redis等缓存,请求不轻易走到数据库层面
	6 循环阑珊,倒计数器等多线程处理业务
	7 Hadoop分布式并行加快处理业务速度等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱肉肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值