系统架构知识点

提升网站性能,可用性以及并发量
1/提高硬件能力、增加系统服务器。
2/使用缓存。(本地缓存:本地可以使用JDK自带的 Map、Guava Cache.分布式缓存:Redis、Memcache.本地缓存不适用于提高系统并发量,一般是用处用在程序中。)
3/消息队列 (解耦+削峰+异步)
4/采用分布式开发( 不同的服务部署在不同的机器节点上,并且一个服务也可以部署在多台机器上,然后利用 Nginx 负载均衡访问。这样就解决了单点部署(All In)的缺点,大大提高的系统并发量)
5/数据库分库(读写分离)、分表(水平分表、垂直分表)
6/采用集群 (多台机器提供相同的服务)
7/CDN 加速 (将一些静态资源比如图片、视频等等缓存到离用户最近的网络节点)
8/浏览器缓存
9/使用合适的连接池(数据库连接池、线程池等等)
10/适当使用多线程进行开发。

  1. 设计高可用系统的常用手段
    1降级: 服务降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。降级往往会指定不同的级别,面临不同的异常等级执行不同的处理。根据服务方式:可以拒接服务,可以延迟服务,也有时候可以随机服务。根据服务范围:可以砍掉某个功能,也可以砍掉某些模块。总之服务降级需要根据不同的业务需求采用不同的降级策略。主要的目的就是服务虽然有损但是总比没有好;
    2限流: 防止恶意请求流量、恶意攻击,或者防止流量超出系统峰值;
    3缓存: 避免大量请求直接落到数据库,将数据库击垮;
    4超时和重试机制: 避免请求堆积造成雪崩;
    5回滚机制: 快速修复错误版本。

  2. 现代互联网应用系统通常具有哪些特点?
    高并发,大流量;
    高可用:系统7×24小时不间断服务;
    海量数据:需要存储、管理海量数据,需要使用大量服务器;
    用户分布广泛,网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别;
    安全环境恶劣:由于互联网的开放性,使得互联网更容易受到攻击,大型网站几乎每天都会被黑客攻击;
    需求快速变更,发布频繁:和传统软件的版本发布频率不同,互联网产品为快速适应市场,满足用户需求,其产品发布频率是极高的;
    渐进式发展:与传统软件产品或企业应用系统一开始就规划好全部的功能和非功能需求不同,几乎所有的大型互联网网站都是从一个小网站开始,渐进地发展起来。

性能测试:
基准测试: 在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考
负载测试:是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等 。此时继续加压,系统处理能力会下降。
压力测试: 超过安全负载情况下,不断施加压力(增加并发请求),直到系统崩溃或无法处理任何请求,依此获得系统最大压力承受能力。
稳定性测试: 被测试系统在特定硬件、软件、网络环境下,加载一定业务压力(模拟生产环境不同时间点、不均匀请求,呈波浪特性)运行一段较长时间,以此检测系统是否稳定。

数据库优化:
1 限定数据的范围: 务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内。;
2 读/写分离: 经典的数据库拆分方案,主库负责写,从库负责读;
3 垂直分区: 根据数据库里面数据表的相关性进行拆分。 例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表,甚至放到单独的库做分库。简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。 如下图所示,这样来说大家应该就更容易理解了。

猜你喜欢

转载自blog.csdn.net/weixin_40805537/article/details/88553837