你的掌心温度不高,却足以温暖我。 --朱
1、说说架构模式
1,分层。
2,分割。
分层是对网站进行横向的切分,分割是对网站纵向的切分。将网站按照不同业务分割成小应用,可以有效控制网站的复杂程度。
3,分布式
在大型网站中,分层和分割后主要是为了让网站能够便于分布式部署,也就是不同的模块部署到不同的服务器上。常用分布式方案有:
3.1 分布式应用和服务
3.2 分布式静态资源
3.3 分布式数据和存储
3.4 分布式计算
3.5 分布式配置,分布式锁,分布式文件系统等。
4,集群
分布式方案只是将不同模块或者服务独立部署到服务器上,但通常还是单台服务器。集群则是将同一个模块或服务同时部署到多台服务器上,通过负载均衡设备对外提供服务。
5,缓存
常用缓存有:CDN,反向代理,本地缓存,分布式缓存
6,异步
异步一般通过队列的方式来实现。在单一服务器中,可以通过多线程共享内存队列实现异步。在分布式系统中,可以通过分布式消息队列实现。
异步好处:提高系统可用性。加快网站响应速度。消除并发访问高峰。
7,冗余
冗余的目的实现高可用性。通过使用集群实现。即使再小的服务,也要部署到至少两台服务器上。
数据库冗余有冷备份和热备份两种。
冗余还包括在异地建立灾备数据中心。
8,自动化
自动化包括自动化代码管理,自动化部署,自动化测试,自动化安全检查等。
9,安全
安全主要通过密码加手机验证码的方式实现。
2、架构5大要素
1.高性能架构
2.高可用架构
3.伸缩性架构
4.可扩展架构
5.安全架构
3、什么是集群,什么是分布式
集群:一个系统部署到多台服务器,多台服务器完成业务处理,业务请求接收,每一台服务器都能独立完成业务计算;每个服务器都是独立个体;多台服务器集合起来,通常需要做负载均衡。
分布式:多台服务器完成业务处理,请求收到后,需要多个服务器合作完成。比如一个业务处理分五个环节,A处理1,B处理2......一个业务请求,五台服务器合作完成。
4、对Redis的理解
Redis是一种基于键值对的NoSql数据库(非关系型数据库);是一个key-value存储系统
Redis特点:高性能 可靠性
高性能:Redis将所有数据都存储在内存中,所有读写性特别高
可靠性:Redis将内存中的数据利用RDB和ADF的形式保存到硬盘中,这样可以避免发生断点或机器故障时内存数据丢失。
功能应用:
1.数据缓存功能,减少对数据库的访问压力
2.消息队列功能(轻量级):Redis提供了发布订阅功能和阻塞队列功能
3.计数器-应用保存用户凭证
比如计算浏览数,如果每次操作都要做数据库的对应更新操作,将会给数据库性能带来极大挑战
缓存:优化网站性能,首页(不常变的信息)
存储:单点登录,购物车
计数器:登录次数限制,incr
时效性:验证码expire
订单号:数字
redis有哪些应用场景?
1.缓存数据服务器 --SSO单点登录
2.应对高速读写的场景 --秒杀高可用
3.分布式锁 --秒杀数据一致性
3.数据共享 --库存数据
5、除了Redis,还有哪些NoSql
Memcache/MongoDb
6、对消息队列的理解
传统应用程序,如果需要向另一个应用程序发送信息,只需要向其发出请求即可。虽然简单直接,但如果应用程序2挂了,应用程序1可能会因为服务异常,无法继续提供服务。如果两个程序中间插入一个消息服务,用于节省消息和发送消息,这样2个程序之间依赖关系就解耦了,不会因为一个程序出问题,无法继续服务。
1.程序解耦:应用程序1和2进行交互时,不会因为一方服务中断而导致服务停止。
2。异步处理:应用程序1只管把消息发送到消息中间件,应用程序2只需要从消息中间件接收消息进行处理即可。同时,基于异步处理特性,在商品秒杀活动,引入消息队列之后,当客户端请求量很大时,可用有效进行流量削峰。如果没有中间件缓冲,一下大量请求进入,很可能造成系统瘫痪。
弊端
1.系统可用性降低:消息丢失或者消息队列服务挂掉等情况。
解决方案:搭建消息服务集群,具体技术实现上可以是主从架构或者分布式架构,一台消息队列服务器挂了,也不会影响消息队列无法提供服务。
2.系统复杂度提高:需要保证消息没有被重复消费、处理消息没有正确处理等问题。
解决方案:有多种,比如接收消息后,可以写入数据库,如果没有正确处理,可以走人工处理,或者失败时将消息重新入队等待下一次消费。
7、如何理解数据库读写分离
数据库读写分离是一种数据库架构策略,用于提高数据库的可用性和性能。在这种架构中,数据库的读操作(查询)和写操作(更新、插入、删除)被分离到不同的数据库服务器上。
提高性能:通过将读操作和写操作分离,可以减少单个数据库服务器的负载,从而提高整体性能。
扩展性:读写分离允许系统通过增加读服务器来水平扩展,以应对更多的查询请求。
可用性:在主数据库(写操作)出现故障时,可以通过将读请求重定向到其他读服务器来保持服务的可用性。
负载均衡:读写分离可以通过负载均衡器来实现,它可以将读请求均匀地分配到多个读服务器上。
数据一致性:读写分离可能会引入数据一致性的问题,因为读服务器可能不会立即反映写服务器上的最新数据。这通常通过数据复制技术来解决,如主从复制。
主从复制:在读写分离的架构中,通常有一个主数据库(Master)负责处理写操作,以及一个或多个从数据库(Slave)负责处理读操作。主数据库的数据会异步或同步复制到从数据库。
为什么要读写分离,分表分库?
单表数据量限制,当单表数据多到一定程度数据库性能会显著下降。数据多了,对数据库读写就很多,分库能减少单台数据库压力。
有些系统,通过主键进行散列分库分表,主键是唯一的获取消息的主要途径。比如:京东订单、财付通交易记录等,通过数订单号、交易号查询订单、交易。
也有系统,比如用户信息,每个用户都有特定userId,与Id对应的还有用户能看到的个人信息,此时就是通过userId散列分库。