后台系统可扩展性学习笔记(二)权衡取舍

文章目录

  • 性能与可扩展性
  • 延迟与吞吐量
  • 可用性与一致性
  • 一致性模式
  • 可用性模式
  • 可用性衡量
  • 参考

系统设计中也面临许多权衡取舍:

  • 性能与可扩展性
  • 延迟与吞吐量
  • 可用性与一致性

性能与可扩展性

可扩展,意味着服务能以加资源的方式成比例地提升性能,性能提升体现在能够承担更多的工作量,但加资源也会引入多样性:一些节点可能比其它节点的处理能力更强大,另一些老旧节点可能弱一些,而系统又必须适应这种异质性(heterogeneity),那么依赖均匀性的算法就会对新节点利用不足,继而产生性能影响

延迟与吞吐量

延迟(Latency)是指从执行操作到产生结果所需要的时间,其度量单位是时间。
吞吐量(Throughput)是指单位时间内所能处理的操作数,或能产生的结果数。
通过单位时间所生产的东西来计量,例如内存带宽(memory bandwidth)用来衡量内存系统的吞吐量,而对于Web系统,有这些度量单位:

QPS(Queries Per Second):用来衡量信息检索系统(如搜索引擎、数据库等)在1秒内的搜索流量RPS(Requests Per Second):请求-响应系统(如Web服务器)每秒所能处理的最大请求数量TPS(Transactions Per Second):广义上指在1秒内所能执行的原子操作数量,狭义上指DBMS在1秒所能执行的transaction数量

通常也用QPS衡量Web服务的吞吐量,但更准确的单位是RPS。
由于无法兼具低延迟和高吞吐量,所以权衡之下的原则是:在确保延迟尚可接受的前提下,转而追求最大的吞吐量

可用性与一致性

关于可用性与一致性,有个著名的CAP定理,可以查看往期笔记:CAP理论
在分布式计算机系统中,一致性、可用性和分区容错性三者只能择其二(而且分区容错性必选):

  • 一致性(Consistency):每次读取都能得到最新写入的结果,抑或出错
  • 可用性(Availability):每个请求都能收到正常响应,但不保证返回的是最新信息
  • 分区容错性(Partition Tolerance):即便有一部分由于网络故障down掉了,系统仍能继续运行

因为网络不完全可靠,所以必须保证分区容错性(P必选)。当部分节点出现网络故障时,有2个选择:

  • 取消操作:能确保一致性,但会降低可用性(用户可能收到超时错误),即CP(Consistency and Partition Tolerance),适用于需要原子读写的场景
  • 继续操作:保证可用性,但存在一致性风险(返回的信息可能是旧的),即AP(Availability and Partition Tolerance),适用于可接受最终一致性(Eventual consistency)的场景

在P必须满足的前提下(网络故障是系统之外的不可控因素,没得选),只能在C和A之间进行取舍,要么保证一致性(牺牲可用性),要么保证可用性(牺牲一致性)。在中心化系统(例如RDBMS)中,不存在网络可靠性的问题,此时C和A能够两全

一致性模式

同一数据存在多份拷贝,那么就需要考虑如何保证其一致性。而严格的一致性意味着要么读到最新数据,要么出错。但并非所有场景下都需要达到这样的一致性要求,所以出现了弱一致性与最终一致性等妥协产物。
弱一致性
写完之后,不一定能读到。弱一致性模式(Weak consistency)适用于网络电话、视频聊天、实时多人游戏等实时场景,而网络电话断线重连后,不会再收到断线期间的通话内容
最终一致性
写完之后,异步复制数据,保证最终能读到。最终一致性模式(Eventual consistency)适用于DNS、email等高可用系统
强一致性
写完之后,同步复制数据,立即就能读到
强一致性模式(Strong consistency)适用于文件系统、RDBMS等需要事务机制的场景

可用性模式

可用性保障方面,主要有两种方式:故障转移与复制
故障转移
一个节点down掉之后,迅速用另一个点代替它,以缩减宕机时间。具体的,有两种故障转移模式:

  • 主动-被动(主从故障转移):只由主动服务器处理流量,在工作的主动服务器与待命的被动服务器之间发送心跳包,如果心跳断了,由被动服务器接管主动服务器的IP地址并恢复服务,宕机时间的长短取决于被动机器是热启动还是冷启动
    1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。2、热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。
    
  • 主动-主动(主主故障转移):两台服务器都处理流量,共同承担负载

主动-被动模式下,(切换时)存在数据丢失的风险,而且无论哪种方式,故障转移都会增加硬件资源和复杂度
复制
分为主从复制与主主复制,多用于数据库,可以参考往期文章:
https://hanhandi.blog.csdn.net/article/details/115447488
https://hanhandi.blog.csdn.net/article/details/115459092

可用性衡量

对于由多部分组成的服务,其整体可用性取决于这些组成部分是串行的还是并行的:
可用性都达不到100%的两个服务组合起来,如果是串行的,其整体可用性会下降(99.9% * 99.9% = 99.8%),而并行的话,整体可用性会提高(1 - 0.1% * 0.1% = 99.9999%)
可用性通常用几个9来衡量,表示服务可用时间占运行时间的百分比

图1 99.9%
图2 99.99%

参考

http://www.ayqy.net/blog/trade-offs-in-system-design/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后台系统可扩展性学习笔记(三)DNS机制原理

文章目录DNS概念梳理域名基本概念资源记录基本概念路由策略DNS 域空间结构实现原理复制机制查询机制缓存机制参考DNS概念梳理 DNS(Domain Name System)相当于互联网的通讯录,能够把域名翻译成 IP 地址。 从技术角度来讲,DNS 是个…

后台系统可扩展性学习笔记(四)CDN机制原理

文章目录概念梳理CDN拓扑结构CDN内容分发方式架构原理工作原理实现原理概念梳理 CDN(Content Delivery Network,内容分发网络)是由分布在不同地理位置的代理服务器及其数据中心组成的网络,希望在空间距离上为用户就近提供服务&am…

后台系统可扩展性学习笔记(五)负载均衡

文章目录Load balancer(负载均衡器)请求传输拆解DNS 负载均衡客户端负载均衡OSI 七层模型回顾2 层、3 层负载均衡3/4 层负载均衡7 层负载均衡在 第一节谈到了系统的横向扩展在于从单机扩展到多机,那么面临的第一个问题就是这些机器如何协同工作,即如何调…

Struts2第一个工程helloStruts极其基本配置

前面已经准备好了Struts-2.3.15,现在就可以直接搭建Struts2的工程了。前面http://blog.csdn.net/huangchnegdada/article/details/9179041有对Struts-2.3.15的准备工作的详述。 首先打开MyEclispe新建一个Web Project,名字就叫Struts2_0100_Introduction…

后台系统可扩展性学习笔记(六)反向代理

文章目录Web代理服务反向代理反向代理作用Web代理服务 Web 代理服务指的是在客户端资源请求和提供这些资源的 Web 服务之间充当中介的角色,代理服务可以实现在客户端,或者从客户端到目标服务器中间的任意环节。 例如,客户端不直接向提供目标…

实验:sigsuspend(),sigprocmask()

实验:sigsuspend(),sigprocmask()源代码:/* * Program: pause_suspend.c * To test the difference between sigsuspend() and paus(). * Author: zsl * Date: 2014-10-17 * First release. * 参见网页:http://blog.csdn.net/liwentao1091/ar…

后台系统可扩展性学习笔记(七)Service Discovery与微服务

文章目录应用层微服务架构服务注册查询 Service Discovery客户端 Service DiscoveryDNS-SD DNS-based Service Discovery服务端 Service Discovery服务注册与注销自注册模式第三方注册模式总结参考应用层 在简单的 3 层结构中,Web 服务层既要处理请求,又…

很久没写代码了,这(那)几天真是累死了。。。先写一个幻方的程序吧

1 #include <stdio.h>2 #include <stdlib.h>3 #include <windows.h>4 5 #define EVEN_DOUBLE_4 4 //双偶的最基本类型&#xff0c;4阶双偶6 #define SCREEN_SIZE 19 //屏幕显示不变形的最大尺寸&#xff08;主要是因为窗口大小限制&#xff09;7 #defi…

后台系统可扩展性学习笔记(八)Service Mesh

文章目录网络传输可靠性将微服务控制下沉到网络栈&#xff1f;Sidecar从 Sidecar 到 Service MeshService Mesh 部署平台参考网络传输可靠性 从计网的学习过程中我们可以知道数据在网络传输中可能会出现一些异常状况&#xff1a; 数据丢失&#xff1a;数据包可能会到达一个缓…

关于Spring batch的学习之CSV2DB

最近在学习Spring batch相关的内容&#xff0c;网上也有不少Spring Batch相关的知识&#xff0c;不过大多都是使用xml进行配置的。这里是我用注解的方式进行相关的学习心得。 首先我们来看如何将一个文本文件中的内容导入到数据库中。 我们先来看一下我们所需要的环境。我们这里…

后台系统可扩展性学习笔记(九)Database Replication

文章目录数据库扩展一致性问题Replication &#xff08;复制&#xff09;异步复制同步复制半同步复制拓扑结构单主结构多主结构无主结构复制具体措施参考数据库扩展 之前在第一章后台系统可扩展性学习笔记&#xff08;一&#xff09;概要谈到&#xff1a;理论上&#xff0c;有…

python中的sum函数.sum(axis=1)

看起来挺简单的样子&#xff0c;但是在给sum函数中加入参数。sum&#xff08;a&#xff0c;axis0&#xff09;或者是.sum(axis1) 就有点不解了 在我实验以后发现 我们平时用的sum应该是默认的axis0 就是普通的相加 而当加入axis1以后就是将一个矩阵的每一行向量相加 例如&…

后台系统可扩展性学习笔记(十)Database Partitioning

为了提升数据库的处理能力&#xff0c;我们把单库扩展成多库&#xff0c;并通过更新同步机制&#xff08;即Replication&#xff09;来保证多份数据的一致性。然而&#xff0c;在 各种复制方案下&#xff0c;每个数据库都持有一份完整数据&#xff0c;基于全量数据提供增删改查…

基于FPGA的HDTV视频图像灰度直方图统计算法设计

随着HDTV的普及&#xff0c;以LCD-TV为主的高清数字电视逐渐进入蓬勃发展时期。与传统CRT电视不同的是&#xff0c;这些高清数字电视需要较复杂的视频处理电路来驱动&#xff0c;比如&#xff1a;模数转换&#xff08;A/D Converter&#xff09;、去隔行&#xff08;De-interla…

Java Swing 影楼管理系统之登录功能

开头打广告&#xff0c;Java1234.com。 首先&#xff0c;来个效果图。 关键代码 1&#xff0c;界面层 private void Jb_DengLuActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String UserName this.Jb_UserNameTxt.getText();String …

Bdsyn百度手机助手是何物,它是怎样神不知鬼不觉地安装到你的电脑里的?

【电脑软件管理中Bdsyn手机助手的问题】Bdsyn手机助手 is developed by Baidu, Inc. and is used by 10 users of Software Informer. 并不是本人安装的&#xff08;应该是自己自己主动安装的&#xff09;&#xff0c;卸载以后过几天又会出如今软件列表里。百度搜索却无法搜索出…

后台系统可扩展性学习笔记(十二)NoSQL

文章目录NoSQL定义NoSQL种类键值存储文档存储宽列存储图形数据库NoSQL 意味着什么ACID vs. BASESQL or NoSQLNoSQL定义 不同于关系型数据库&#xff0c;NoSQL 数据库&#xff08;也叫非 SQL 或非关系型数据库&#xff09;提供的数据存储、检索机制并不是基于表关系建模的。没有…

后台系统可扩展性学习笔记(十三)缓存

文章目录在哪儿加缓存缓存什么内容缓存原始查库结果缓存数据对象怎么查询缓存结果预留缓存模式直读模式直写模式回写式缓存绕写式缓存提前刷新模式缓存满了如何处理参考读写分离、分库分表、反范式化、采用 NoSQL……如果这些扩展手段全都上了&#xff0c;数据响应依旧越来越慢…

后台系统可扩展性学习笔记(十四)异步机制与MQ

对于 Web 服务而言&#xff0c;提升可扩展性的主要途径是将耗时的同步工作改成异步处理&#xff0c;从而允许将这些工作“外包”给多个 Worker 去做&#xff0c;或者提前完成能够预知的部分。 异步机制与可扩展性之间的关系需要从&#xff08;异步&#xff09;并行处理的优势说…

光标闪烁问题的解决办法

在调用Windows API函数SetCursor设置光标时&#xff0c;可能会碰到闪烁的问题&#xff1a;移动鼠标&#xff0c;光标在Class Cursor(即注册窗口类时指定的Cursor)与预设Cursor之间闪烁。 在MSDN上有关SetCursor函数的备注中强调&#xff0c;如果Class Cursor非空&#xff0c;那…