1.说说什么是架构模式。
1,分层。
2,分割。 分层是对网站进行横向的切分,那么分割就是对网站进行纵向的切分。将网站按照不同业务分割成小应用,可以有效控制网站的复杂程度。
3,分布式。 在大型网站中,分层和分割后主要是为了让网站能够便于分布式部署,也就是将不同的模块部署到不同的服务器上。常用的分布式方案有如下几种。
3.1 分布式应用和服务。
3.2 分布式静态资源。
3.3 分布式数据和存储
3.4 分布式计算。
3.5 此外还有分布式配置,分布式锁,分布式文件系统等。
4,集群。 分布式方案只是将不同的模块或服务独立部署到服务器上,但通常还是单台服务器。集群则是将同一个模块或服务同时部署到多台服务器上,通过负载均衡设备对外提供服务。
5,缓存。 常用的缓存有如下几种,CDN,反向代理,本地缓存,分布式缓存。
6,异步。 异步一般通过队列的方式来实现。在单一服务器中,可以通过多线程共享内存队列实现异步。在分布式系统中,可以通过分布式消息队列实现。 异步有一些作用,描述如下。 6.1,提高系统可用性。 6.2,加快网站响应速度。 6.3,消除并发访问高峰。
7,冗余 冗余的目的是实现高可用性。是通过使用集群来实现的。即使是再小的服务,也要部署到至少2台服务器上。 数据库的冗余有冷备份和热备份两种。 冗余还包括在异地建立灾备数据中心。
8,自动化 自动化包括自动化代码管理,自动化部署,自动化测试,自动化安全检查等。
9,安全 安全主要通过哦密码和手机验证码的方式实现。
2.架构的5大要素是哪5大要素?
1.高性能架构
2.高可用架构
3.伸缩性架构
4.可扩展架构
5.安全架构
3.说说什么事集群,什么是分布式。
集群: 多台服务器来完成业务处理,业务请求来了以后,每一台服务器都能独立的完成业务计算;每个服务器都是独立的个体;多台服务器集合起来,通常也需要做负载均衡;
分布式:多台服务器完成业务处理,也去请求来了以后,需要多个服务器合作来完成,比方说一个业务处理有5个环节,可能在处理的时候,A服务器处理第一个环节,B服务器处理第二个化解,C服务器处理第三个环节,D服务器处理第四个环节,E服务器来处理第五个环节;一个业务请求的5个环节,被五台服务器来合作完成了一个业务连,此类架构叫分布式架构;
4.说说对Redis的理解
Redis是一种基于键值对的NoSQL数据库(非关系型数据库);是一个key-value存储系统 Redis有两个特点:高能性 可靠性 高能性:Redis将所有数据都存储在内存中,所有读写性特别高 可靠性:Redis将内存中的数据利用RDB和AOF的形式保存到硬盘中,这样就可以避免发生断点或机器故障时内存数据丢失的问题 功能应用: 1.数据缓存功能,减少对数据库的访问压力 2.消息队列功能(轻量级): Redis提供了发布订阅功能和阻塞队列功能 3.计数器-应用保存用户凭证 比如计算浏览数,如果每次操作都要做数据库的对应更新操作,那将会给数据库的性能带来极大的挑战 缓存:优化网站性能,首页 (不常变的信息) 存储:单点登录,购物车 计数器:登录次数限制,incr 时效性:验证码expire 订单号:数字 redis有哪些应用场景场景? 1.缓存数据服务器 eg: SSO单点登录 2.应对高速读写的场景 eg: 秒杀高可用 3.分布式锁 eg: 秒杀数据一致性 4.数据共享 eg: 库存数据
5.你所了解的NoSql除了Redis还有哪些?
Memcache/MongoDb
6.谈谈对消息队列的理解
对于传统的应用程序,如果需要向另一个应用程序发送信息,只需要向其发出请求即可!这种方式虽然简单直接,但是如果应用程序2突然挂了,应用程序1可能会因为服务异常,而无法继续提供服务! 设想一下,在应用程序1和应用程序2之间,插入一个消息服务,主要用于接受消息和发送消息,这样应用程序1和应用程序2之间的依赖关系就解耦了,同时也不会因为任何一方当服务不可用时,无法继续提供服务!
其中插入的消息服务被称为消息队列!
消息队列带来的优势:
1.程序解耦:应用程序1和应用程序2在进行交互时,不会因为一方服务中断而导致服务停止;
2.异步处理:程序解耦之后,带来的最大的好处就是可以异步处理,应用程序1只管把消息发送到消息中间件,应用程序2只需要从消息中间件中接受消息然后进行处理即可; 同时,基于异步处理特性,在某些业务场景下,例如商品秒杀活动,引入消息队列之后,当客户端请求量很大的时候,可以有效的进行流量削峰! 如果没有中间层做缓冲,当进行商品秒杀时,一下突然大量请求涌入,很可能造成系统直接瘫痪,甚至宕机!
消息队列也会带来很明显的弊端:
1.系统可用性降低:在引入消息队列之前,你不用考虑消息丢失或者消息队列服务挂掉等等的情况,但是引入消息队列之后你就需要去考虑这些问题!
2.系统复杂性提高:加入消息队列之后,你需要保证消息没有被重复消费、处理消息没有被正确处理的情况等等问题!
引入消息队列虽然会带来一些问题,俗话说,兵来将挡、水来土掩,这句话同样适用于 IT 开发者,有坑填坑!
对于系统可用性降低方面,通常常用的解决方案就是搭建消息服务集群,具体技术实现上可以是主从架构或者分布式架构,即时一台消息队列服务机器挂了,也不会影响消息队列无法提供服务!
对于系统复杂性提高方面,常用的解决方案也很多,例如接受者接受到消息之后,可以先将消息写入数据库,即时没有被正确处理,还可以走人工处理,或者消息消费失败,将消息重新入队等待下一次消费等等。
7.说说你对数据库读写分离的理解
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
为什么要分库、分表、读写分? 单表的数据量限制,当单表数据量到一定条数之后数据库性能会显著下降。数据多了之后,对数据库的读、写就会很多。分库减少单台数据库的压力。接触过几个分库分表的系统,都是通过