系统设计:性能指标、伸缩性、扩展性、可用性、安全性
一、性能
性能指标
1. 响应时间
指某一个请求从发出到接收到响应消耗的时间。
在对响应时间进行测试时,通常采用重复请求方式,然后计算平均响应时间。
2. 吞吐量/吞吐率
指系统在单位时间内可以处理的请求数量,通常使用每秒的请求数来衡量。
3. 并发用户数
指系统能同时处理的并发用户请求数量。
在没有并发存在的系统中,请求被顺序执行,此时响应时间为吞吐量的倒数。例如系统支持的吞吐量为 100 req/s,那么平均响应时间应该为 0.01s。
目前的大型系统都支持多线程来处理并发请求,多线程能够提高吞吐量以及缩短响应时间,主要有两个原因:
- 多 CPU
- IO 等待时间
使用 IO 多路复用等方式,系统在等待一个 IO 操作完成的这段时间内不需要被阻塞,可以去处理其它请求。通过将这个等待时间利用起来,使得 CPU 利用率大大提高。
并发用户数不是越高越好,因为如果并发用户数太高,系统来不及处理这么多的请求,会使得过多的请求需要等待,那么响应时间就会大大提高。
性能优化
1. 集群
将多台服务器组成集群,使用负载均衡将请求转发到集群中,避免单一服务器的负载压力过大导致性能降低。
2. 缓存
缓存能够提高性能的原因如下:
- 缓存数据通常位于内存等介质中,这种介质对于读操作特别快;
- 缓存数据可以位于靠近用户的地理位置上;
- 可以将计算结果进行缓存,从而避免重复计算。
3. 异步
某些流程可以将操作转换为消息,将消息发送到消息队列之后立即返回,之后这个操作会被异步处理。
二、伸缩性
指不断向集群中添加服务器来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
伸缩性与性能
如果系统存在性能问题,那么单个用户的请求总是很慢的;
如果系统存在伸缩性问题,那么单个用户的请求可能会很快,但是在并发数很高的情况下系统会很慢。
实现伸缩性
应用服务器只要不具有状态,那么就可以很容易地通过负载均衡器向集群中添加新的服务器。
关系型数据库的伸缩性通过 Sharding 来实现,将数据按一定的规则分布到不同的节点上,从而解决单台存储服务器的存储空间限制。
对于非关系型数据库,它们天生就是为海量数据而诞生,对伸缩性的支持特别好。
三、扩展性
指的是添加新功能时对现有系统的其它应用无影响,这就要求不同应用具备低耦合的特点。
实现可扩展主要有两种方式:
- 使用消息队列进行解耦,应用之间通过消息传递进行通信;
- 使用分布式服务将业务和可复用的服务分离开来,业务使用分布式服务框架调用可复用的服务。新增的产品可以通过调用可复用的服务来实现业务逻辑,对其它产品没有影响。
四、可用性
冗余
保证高可用的主要手段是使用冗余,当某个服务器故障时就请求其它服务器。
大白话:多搞几台服务器(或者数据库服务器),一个宕掉,另一个继续工作!多个之间数据会重复,因此冗余,但是它保证系统的健壮性(高可用)。即可以理解为空间换时间
应用服务器的冗余比较容易实现,只要保证应用服务器不具有状态,那么某个应用服务器故障时,负载均衡器将该应用服务器原先的用户请求转发到另一个应用服务器上,不会对用户有任何影响。
存储服务器的冗余需要使用主从复制来实现,当主服务器故障时,需要提升从服务器为主服务器,这个过程称为切换。
监控
对 CPU、内存、磁盘、网络等系统负载信息进行监控,当某个数据达到一定阈值时通知运维人员,从而在系统发生故障之前及时发现问题。
服务降级
服务降级是系统为了应对大量的请求,主动关闭部分功能,从而保证核心功能可用。
五、安全性
要求系统在应对各种攻击手段时能够有可靠的应对措施。
系统设计:性能指标、伸缩性、扩展性、可用性、安全性相关推荐
- 区块链、货币和社交扩展性
译注:本文原文<Money, blockchains, and social scalability>,作者Nick Szabo . 翻译简单说明如下:money可以是"金钱&q ...
- 区块链、货币和社交扩展性 1
译注:本文原文<Money, blockchains, and social scalability>,作者Nick Szabo . 翻译简单说明如下:money可以是"金钱&q ...
- 惠普台式计算机扩展性,HP ProDesk 600 G6 SFF 拆机评测:深度揭秘纤小机身的强大扩展性!...
原标题:HP ProDesk 600 G6 SFF 拆机评测:深度揭秘纤小机身的强大扩展性! 前几天为大家科普了惠普商用台式机的命名规则,相信大家现在对TWR.MT.SFF.DM以及AiO的型号特点已 ...
- 甲骨文Andrew Mendelsohn:打造高扩展性和可用性的数据库云技术
针对云服务大战环境,记得甲骨文公司创始人.董事长兼 CTO Larry Ellison 曾说过:现在云计算仍旧处于早期阶段,甲骨文已经做好准备,全力进军云计算领域.时隔不久,好消息就传来了.在 8 月 ...
- 如何构建高扩展性网站?
本篇通过阅读<高扩展性网站的50条原则>,总结出以下内容. 一方面博主没有实际的架构经验,另一方面知识面也不够宽阔,所以只能系统的总结书中的要点,并根据自己的理解做些归纳. 主要内容 本书 ...
- 如何构建和设计高扩展性系统
主要内容 本书从多个方面围绕高扩展性提出了50条建议,一个高扩展性的网站会随着业务的发展.用户的增加,自由的扩展架构,从而轻松的应付网站的快速发展.下面看看本书的具体内容: 化简方程 1 不要过度的设 ...
- 微信基于时间序的海量存储扩展性与多机容灾能力提升
作者:jeryyzhang,腾讯 WXG 后台开发工程师 背景介绍 业务场景 作为以手机为主要平台的移动社交应用,微信内大部分业务生成的数据是有共性可言的:数据键值带有时间戳信息,并且单用户数据随着时 ...
- 区块链扩展性技术总结
最近在做区块链的扩展性优化方面的研究学习,总结一下当前的主流区块链扩展性技术. 1 现状 区块链技术提高了数据的安全性与可靠性,但实际使用中存在可扩展性差的显著问题,出现了很多提升区块链扩展性的方案. ...
- 微信11亿用户基于时间序的海量存储扩展性与多机容灾能力提升
背景介绍 业务场景 作为以手机为主要平台的移动社交应用,微信内大部分业务生成的数据是有共性可言的:数据键值带有时间戳信息,并且单用户数据随着时间在不断的生成,我们将这类数据称为基于时间序的数据.例如朋 ...
最新文章
- js倒计时代码最简单的_32个史上最有用的js代码
- java f反射_java反射机制
- java十年技术栈[总结复习用]
- 最新消息,网易公司内部开始使用昵称!学阿里?
- 菲律宾马尼拉华人区一大厦发生火灾 致1人遇难
- spring boot 视图层(JAVA之学习-2)
- fileupload控件的属性_FileUpLoad控件简介.ppt
- 荣耀10手机计算机科学计算器,荣耀赵明回应手机计算器10%问题:国外计算小费使用...
- 软件产品上线的基础知识
- BOM中的history对象和navigator对象
- Soul源码总结-01-20
- burp抓包mumu模拟器
- 什么是Resnet50模型?
- linux_添加一个普通用户
- Opencv图像特征点提取(
- 2020人口普查全国人口学历分布情况
- 设计模式之工厂方法模式(Factory Method)
- 基于视频行人重识别--解决遮挡问题
- 已解决:PhotoShop导出发生未知错误!!!
- python爬取付费音乐包_Python爬咪咕收费音乐 高音质无损音乐
热门文章
- Docker - 手动迁移镜像
- Oracle提议将G1作为Java 9的默认垃圾收集器
- 南通市交巡警支队同城异地容灾备份系统项目中标结果公告
- 【机器学习】基于opencv实现目标检测,error LNK2001: unresolved external symbol public: virtual bool CvSVM::train...
- matlab中怎么求矩阵的特征值和特征向量
- RTSP over UDP RTSP over TCP
- 一分钟了解 Matlab求两个矩阵的相关程度corr2
- malloc/free和new/delete的区别
- c语言平滑raw图像(取平均值法)
- Ubuntu 16.04.6 LTS 发布:紧急修复 APT 漏洞