系统架构7个非功能性需求
非功能性需求是什么呢?保障系统持续健康运转的辅助需求。依然以电商系统的优惠券为例,在促销活动期间发放大量优惠券,如何防止用户集中领券时系统不崩盘呢?活动结束后,如何收缩服务器,节省服务器资源呢? 非功能性需求是面向运维的,重要但是不太紧迫,有时候可以没有操作界面,由架构师提出解决方案,再推动各个业务开发部门去接入相应组件。这些辅助系统对业务系统性能影响很小,并且长期处于优化状态。
非功能性需求是什么呢?保障系统持续健康运转的辅助需求。依然以电商系统的优惠券为例,在促销活动期间发放大量优惠券,如何防止用户集中领券时系统不崩盘呢?活动结束后,如何收缩服务器,节省服务器资源呢? 非功能性需求是面向运维的,重要但是不太紧迫,有时候可以没有操作界面,由架构师提出解决方案,再推动各个业务开发部门去接入相应组件。这些辅助系统对业务系统性能影响很小,并且长期处于优化状态。
Redis是个KV内存数据库,支持多种数据结构、简单消息队列、磁盘持久化,特点是高性能、使用简单、稳定可靠。常见使用场景如下:(1) 数据缓存:客户端访问服务器的时候,先检查redis是否有数据,Redis有数据直接反馈给客户端;如果没有数据再请求数据库,查询数据后缓存到Redis,下次就可以直接读Redis。(2)分布式锁:微服务项目服务部署到不同的服务器上,单体架构的同步锁没办法锁住服务,利用Redis实现分布式锁,常用组件为Redisson。(3)数据共享:将包含用户信息的令牌存储在Redis中,用户每次访问时从Redis中查询令牌,实现资源的共享,即分布式Session。
整理一些Java基础面试题,内容涵盖语言基础、并发、JVM、IO模型、中间件、开发框架等等。本章节的面试题有:你怎么描述Spring Cloud 框架;说说微服务架构的优缺点;Spring Cloud有哪些重要组件;Eureka的作用是什么;什么是Eureka的自我保护模式;你还了解其他网关吗,有什么区别;服务雪崩的原因有哪些。
整理一些Java基础面试题,内容涵盖语言基础、并发、JVM、IO模型、中间件、开发框架等等。本章节的面试题有:什么是RPC,RPC使用了哪些关键技术;Dubbo的使用场景和核心功能有哪些;Dubbo的集群容错方案有哪些;Dubbo服务器注册与发现的流程;Dubbo 的注册中心集群宕机,发布者和订阅者之间还能通信吗;Dubbo 支持哪些协议,它们的优缺点有哪些。
在计算机发展的早期,一直都是集中式计算,计算能力依赖大型计算机。随着互联网的发展,有些业务需要巨大的计算能力才能完成,而集中式计算无法满足要求,大型计算机的价格也非常昂贵。分布式计算将任务分解成更小的部分,分配给多台计算机处理,这样可以节约整体计算时间,大大提高计算效率。互联网大型网站往往面临高并发访问、海量数据处理等问题,必须保证系统高可用、易伸缩等等。分布式架构采用多台机器协同工作,动态伸缩容量,使用冗余节点来消除单点故障,提高系统可用性。
关系型数据库如MySQL的单机并发能力很弱,高并发下表字段的加减操作,可能出现幻读。电商的秒杀活动典型的高并发减库存场景,这类问题有三种优化性能的思路:1. 异步处理减库存,而不是同步。2. 在内存中操作减库存。3. 分布式处理,分摊压力。
当单服务器的性能无法满足业务需求时,就需要把多台服务器组成集群系统提高整体的处理性能。我们要使用统一的流量入口来对外提供服务,本质上就是需要一个流量调度器,通过均衡的算法,将用户请求流量均衡地分发到集群中不同的服务器上
Nginx是一款高性能的HTTP和反向代理服务器,能够选择高效的epoll、kqueue、eventport最为网络I/O模型,在高连接并发的情况下,能够支持高达5万个并发连接数的响应,而内存、CPU等系统资源消耗却非常低,运行非常稳定。Redis是一款开源的内存数据结构存储,用作数据库、分布式缓存、消息中间件,支持多种数据结构。Redis内置了主从复制、事务以及不同级别的持久化功能,并通过Sentinel和自动分区的Cluster提供了高可用性。
Canal[kə’næl]是由Alibaba开发的数据同步中间件,译为水道/管道/沟渠,通过解析MySQL数据库增量日志,提供数据订阅和消费,主要使用场景:创建数据库镜像、数据库实时备份、索引构建和实时维护、按需刷新业务cache、按业务逻辑需要处理增量数据、同步构建其他数据源。相比MySQL本身的主从机制,有下面几点优势:让架构更灵活,多机房同步比较简单;异构表之间也可以同步,可以控制不同步DDL以免出现数据丢失和不一致;Canal可以实现一个表一线程,多个表多线程的同步,速度更快。