精华内容
下载资源
问答
  • 2022-03-29 18:42:14

    Hello,大家好,欢迎来到“自由技艺“的学习小馆。今天我们来聊一聊软件系统中的高并发,具体内容包括高并发的设计思路、高并发的关键技术以及高并发实践。本文内容信息量比较大,涉及负载均衡、缓存、流控等技术,还有部分 C++ 代码实现,需要读者慢慢消化。

    1 什么是高并发

    “并发”一词最早来源于操作系统领域,指一段时间内多任务交替执行的现象。后来,高并发用来指大流量、大规模业务请求的场景,比如春运抢票、电商“双十一”抢购,秒杀促销等。
    高并发的衡量指标主要有两个:一是系统吞吐率,比如 QPS(每秒查询率)、TPS(每秒事务数)、IOPS(每秒磁盘进行的 I/O 次数)。另外一个就是时延,也就是从发出 Reques 到收到 Response 的时间间隔。一般而言,用户体验良好的请求、响应系统,时延应该控制在 250 毫秒以内。
    什么样的系统才能称之为高并发呢?
    它取决于系统所承载的业务类型和硬件能力。通常,数据库单机每秒也就能抗住几千这个量级,而做逻辑处理的单台服务器每秒抗几万、甚至几十万都有可能,而消息队列等中间件单机每秒处理个几万没问题,所以我们经常听到每秒处理数百万、数千万的消息中间件集群,而像阿里的 API 网关,每日百亿请求也有可能。

    2 高并发的设计思路

    高并发的设计思路有两个方向:

    垂直方向扩展
    水平方向扩展
    垂直方向:提升单机能力
    这个好理解,就是最大化单台服务器的性能,主要有两个手段:一是提升硬件能力,比如采用核数更多、主频更高的服务器&#x

    更多相关内容
  • 操作系统(部分习题)

    千次阅读 2020-06-10 23:12:56
    2.在单处理机系统中,可并行的是_________。Ⅱ Ⅲ. Ⅳ. Ⅰ.进程与进程 Ⅱ.处理机与设备 Ⅲ.处理机与通道 Ⅳ.设备与设备 3.批处理系统的主要缺点是____________。缺少交互性 4.从用户的观点看,操作系统是___________...

    //今天课不多,昨天听操作系统老师说下周考还是下下周考试有点慌张。整理整理习题迎接考试周。

    一、1.操作系统中采用多道程序设计技术提高了CPU和外部设备的___________。利用率
    2.在单处理机系统中,可并行的是_________。Ⅱ Ⅲ. Ⅳ.
    Ⅰ.进程与进程 Ⅱ.处理机与设备 Ⅲ.处理机与通道 Ⅳ.设备与设备
    3.批处理系统的主要缺点是____________。缺少交互性
    4.从用户的观点看,操作系统是____________。用户与计算机之间的接口
    5.操作系统是对______________进行管理的软件。计算机资源
    6.在操作系统中,并发性是指若干事件_________发生。某一时间间隔
    7.操作系统是提供了处理机管理、__管理、设备管理和文件管理的软件。存储器
    8.多道程序设计是指
    。在一台机器上并发运行多个程序
    9.以下选项中,不是操作系统关心的主要问题。高级程序设计语言编译器
    二、1.一个进程是
    。PCB结构、程序和数据的组合
    2.以下对进程的描述中,错误的是 ______ 。进程是指令的集合
    进程是动态的概念、进程执行需要处理机、进程是有生命期的、进程是指令的集合
    3.并发进程指的是 。可同时执行的进
    4.进程状态由就绪态转换为运行态是由_______引起的。进程调度
    5.当_____时,进程从执行状态转变为就绪状态。时间片到
    6.以下关于进程的描述中,正确的是
    。进程获得CPU运行是通过调度得到的
    7.操作系统通过 对进程进行管理。PCB
    8.进程自身决定 _________ 。从运行态到阻塞态
    9.在单处理机系统中实现并发技术后,
    。各进程在一个时间段内并行运行,CPU与I/O设备间并行工作。
    10.在多道程序环境下,操作系统分配资源以________为基本单位。进程
    三、1设与某资源关联的信号量初值为3,当前值为1。若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是 。1、0//由于信号量的当前取值为1,自然说明可用资源个数为1。由于当前还有可用资源数,等待资源的进程数只能是0,否则就不可能还有可用资源。
    2.两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来消息,或者建立某个条件后再向前执行,这种关系称为进程间的 ________。同步
    3.S.queue、S.value是信号量S的两个组成部分,当S.queue为空时,S.value的值是 。>=0
    4.在多道程序系统中,为了保证公共变量的完整性,各进程应互斥进入相关临界区。所谓临界区是指 。一段程序
    5.操作系统中,对信号量S的P原语操作定义中,使进程进入相应等待队列的条件是 S<0
    6.系统中有5个并发进程涉及某个相同的变量A,则变量A的相关临界区是由 临界区构成。5个
    7.对于有两个并发进程的系统,设互斥信号量为mutex,若mutex=0,则 。表示有一个进程与Mutex相关的临界区。
    8.若信号量S的初值为2,当前值为-1,则表示有 个等待进程。信号量表示的是可用的资源数。初值为2,表示初始时有两个可用的资源。现在为-1,说明这两个可用资源已经被占用了,而且有一个进程在等待资源,所以就为-1了。
    四、1.在实时操作系统中,经常采用 调度算法来分配处理器。可抢占的优先级
    2.从进程提交给系统开始到进程完成为止的时间间隔称为 。进程周转时间
    3.现有3个同时到达的作业J1、J2、J3,它们的执行时间分别是T1、T2和T3,且T1<T2<T3。系统按单道方式运行且采用短作业优先算法,则平均周转时间是 。按照短作业优先算法,执行顺序为J1、J2、J3,三个作业完成时间分别是T1、T1+T2、T1+T2+T3,所以平均周转时间是(T1+T1+T2+T1+T2+T3)/3。
    4.进程调度算法采用固定时间片轮转法,时间片过大时,就会使时间片轮转调度算法转化为 算法。先来先服务
    5.有5个批处理作业A、B、C、D、E几乎同时到达,其预计运行时间分别为10、6、2、4、8,其优先级(由外部设定)分别为3、5、2、1、4,这里5为最高优先级。以下各种调度算法中,平均周转时间为14的是 。短作业优先
    6.有3个作业J1、J2和J3,其运行时间分别是2、5和3小时,假定它们同时到达,并在同一台处理机上以单道方式运行,则平均周转时间最小的执行序列是 。J1、J3、J2
    7.时间片轮转调度算法经常用于 。分时系统
    8.当一进程运行时,系统可基于某种原则强行将其撤下,把处理机分配给其他进程,这种调度方式是 。抢占方式
    9.在进程调度算法中,对短进程不利的是 。先来先服务算法
    10.分时操作系统通常采用 策略为用户服务。时间片轮转
    五、1.某进程页面访问序列为4,3,2, 1,4,3,5,4,3,2, 1,5,且开始执行时,内存中没有页面,分配给该进程的物理块数是3,则采用FIFO页面置换算法和LRU页面置换算法时缺页率分别是( )。75% 83%
    2.在以下的存储管理方案中,允许动态扩充主存容量的是( )方式。请求分页存储管理
    3.在下列存储管理方式中,不要求将作业全部装入并不要求一个连续存储空间的管理方式是( )。请求页式存储管理
    4.系统“抖动”现象的发生是由( )引起的。页面置换算法选择不当
    5.在虚拟存储系统中,若进程在内存中占3块(开始时为空)采用先进先出页面淘汰算法,当执行访问页号序列为1、2、3、4、1、2、5、1、2、3、4、5、6时,将产生( )次缺页中断。10
    6.在缺页处理过程中,操作系统执行的操作可能是( )。全部
    Ⅰ.修改页表 Ⅱ.磁盘I/O Ⅲ.分配页框
    7.下列关于虚拟存储器的叙述中,正确的是( )。虚拟存储器只能基于非连续分配技术
    8.页式虚拟存储管理中,当访问的页不在( )时,产生缺页中断。内存
    9.虚拟存储管理系统的理论基础是程序的( )原理。局部性
    10.在页式虚拟存储管理中,为实现地址变换,应建立( )。页表

    展开全文
  • 下面就结合淘宝目前的一些底层技术框架以及自己的一些感触来说说如何构建一个可 伸缩,高性能,高可用性的分布式互联网应用。 时间过得很快,来淘宝已经两个月了,这两个月的时间里,自己也感受颇深。下面就结合...
    下面就结合淘宝目前的一些底层技术框架以及自己的一些感触来说说如何构建一个可 
    伸缩,高性能,高可用性的分布式互联网应用。
    

    时间过得很快,来淘宝已经两个月了,在这两个月的时间里,自己也感受颇深。下面就结合淘宝目前的一些底层技术框架以及自己的一些感触来说说如何构建一个可 伸缩,高性能,高可用性的分布式互联网应用。

    一 应用无状态(淘宝session框架)

    俗话说,一个系 统的伸缩性的好坏取决于应用的状态如何管理。为什么这么说呢?咱们试想一下,假如我们在session中保存了大量与客户端的状态信 息的话,那么当保存状态信息的server宕机的时候,我们怎么办?通常来说,我们都是通过集群来解决这个问题,而通常所说的集群,不仅有负载均衡,更重要的是要有失效恢复failover,比如tomcat采 用的集群节点广播复制,jboss采 用的配对复制等session状 态复制策略,但是集群中的状态恢复也有其缺点,那就是严重影响了系统的伸缩性,系统不能通过增加更多的机器来达到良好的水平伸缩,因为集群节点间session的 通信会随着节点的增多而开销增大,因此要想做到应用本身的伸缩性,我们需要保证应用的无状态性,这样集群中的各个节点来说都是相同的,从而是的系统更好的水平伸缩。

    OK,上面说了无状态的重要性,那么具体如何实现无状态呢?此时一个session框架就会发挥作用了。幸运的是淘 宝已经具有了此类框架。淘宝的session框架采用的是client cookie实现,主要将状态保存到了cookie里 面,这样就使得应用节点本身不需要保存任何状态信息,这样在系统用户变多的时候,就可以通过增加更多的应用节点来达到水平扩展的目的.但 是采用客户端cookie的 方式来保存状态也会遇到限制,比如每个cookie一般不能超过4K的大小,同时很多浏览器都限制一个站点最多保存20个cookie.淘 宝cookie框 架采用的是“多值cookie”, 就是一个组合键对应多个cookie的 值,这样不仅可以防止cookie数 量超过20, 同时还节省了cookie存 储有效信息的空间,因为默认每个cookie都会有大约50个字节的元信息来描述cookie。

    除了淘宝目前的session框 架的实现方式以外,其实集中式session管理来完成,说具体点就是多个无状态的应用节点连接一个session 服 务器,session服 务器将session保 存到缓存中,session服 务器后端再配有底层持久性数据源,比如数据库,文件系统等等。

    二 有效使用缓存(Tair)

    做互联网应用的兄弟应该都清楚,缓存对于一个互联网应用是多么的重要,从浏览器缓存,反向代理缓存,页面缓存,局部页面缓存,对象缓存等等都是缓存应用的场景。

    一 般来说缓存根据与应用程序的远近程度不同可以分为:local cache 和 remote cache。 一般系统中要么采用local cache,要么采用remote cache,两者混合使用的话对于local cache和remote cache的数据一致性处理会变 大比较麻烦.

    在大部分情况下,我 们所说到的缓存都是读缓存,缓存还有另外一个类型:写缓存. 对 于一些读写比不高,同时对数据安全性需求不高的数据,我们可以将其缓存起来从而减少对底层数据库的访问,比如 统计商品的访问次数,统 计API的 调用量等等,可 以采用先写内存缓存然后延迟持久化到数据库,这样可以大大减少对数据库的写压力。

    OK,我以店铺线的系统为例,在用户浏览店铺的时候,比如店铺介绍,店铺交流区页面,店铺服务条款页面,店铺试衣间页面,以及店铺内搜索界面这些界面更新不是非常频繁,因此适合放到缓存中,这样可以大大减低DB的负载。另外宝贝详情页面相对也更新比较 少,因此也适合放到缓存中来减低DB负载。

    三 应用拆分(HSF)

    首先,在说明应用拆分之前,我们先来回顾一下一个系统从小变大的过程中遇到的一些问题,通过这些问题我们会发现拆分对于构建一个大型系统是如何的重要。

    系统刚上线初期,用户数并不多,所有的逻辑也许都是放在一个系统中的,所有逻辑跑到一个进程或者一个应用当中,这个时候因为比较用户少,系统访问量低,因此将全部的逻辑都放在一个应用未尝不可。但是,兄弟们都清楚,好景不长,随着系统用户的不断增加,系统的访问压力越来越多,同时随着系统发展,为了满足用户 的需求,原有的系统需要增加新的功能进来,系统变得越来越复杂的时候,我们会发现系统变得越来越难维护,难扩展,同时系统伸缩性和可用性也会受到影响。那么这个时候我们如何解决这些问题呢?明智的办法就是拆分(这也算是一种解耦),我们需要将原来的系统根据一定的标准,比如业务相关性等分为不同的子系统, 不同的系统负责不同的功能,这样切分以后,我们可以对单独的子系统进行扩展和维护,从而提高系统的扩展性和可维护性,同时我们系统的水平伸缩性scale out大 大的提升了,因为我们可以有针对性的对压力大的子系统进行水平扩展而不会影响到其它的子系统,而不会像拆分以前,每次系统压力变大的时候,我们都需要对整个大系统进行伸缩,而这样的成本是比较大的,另外经过切分,子系统与子系统之间的耦合减低了,当某个子系统暂时不可用的时候,整体系统还是可用的,从而整 体系统的可用性也大大增强了。

    因此一个大型的互联网应用,肯定是要经过拆分,因为只有拆分了,系统的扩展性,维护性,伸缩性,可用性才会变的更好。但是拆分也给系统带来了问题,就是子系统之间如何通信的问题,而具体的通信方式有哪些呢?一般有同步通信和异步通信,这里我们首先来说下同步通信,下面的主题“消息系 统”会说到异步通信。既然需要通信,这个时候一个高性能的远程调用框架就显得非常总要啦,因此咱们淘宝也有了自己的HSF框 架。

    上 面所说的都是拆分的好处,但是拆分以后必然的也会带来新的问题,除了刚才说的子系统通信问题外,最值得关注的问题就是系统之间的依赖关系,因为系统多了,系统的依赖关系就会变得复杂,此时就需要更好的去关注拆分标准,比如能否将一些有依赖的系统进行垂直化,使得这些系统的功能尽量的垂直,这也是目前淘宝正 在做的系统垂直化,同时一定要注意系统之间的循环依赖,如果出现循环依赖一定要小心,因为这可能导致系统连锁启动失败。

    OK,既然明白了拆分的重要性,我们看看随着淘宝的发展,淘宝本身是如何拆分系统的。

    首先我们来看以下这个图:(作者图片已无法打开,请见谅)

    从上面的图可以看出淘宝系统的一个演变过程,在这个演变的过程中,我们所说的拆分就出现V2.2和V3.0之 间。在V2.2版 本中,淘宝几乎所有的逻辑都放在(Denali)系统中,这样导致的问题就是系统扩展和修改非常麻烦,并且更加致命的是随着淘宝业务量的增加,如果按照V2.2的架构已经没有办法支撑以后淘宝的快速发展,因此大家决定对整个系统进行拆分,最 终V3.0版本的淘宝系统架构图如下:(作者图片已无法打开,请见谅)

    从上图可以看出V3.0版 本的系统对整个系统进行了水平和垂直两个方向的拆分,水平方向上,按照功能分为交易,评价,用户,商品等系统,同样垂直方向上,划分为业务系统,核心业务系统以及以及基础服务,这样以来,各个系统都可以独立维护和独立的进行水平伸缩,比如交易系统可以在不影响其它系统的情况下独立的进行水平伸缩以及功能扩展。

    从上面可以看出,一个大型系统要想变得可维护,可扩展,可伸缩,我们必须的对它进行拆分,拆分必然也带来系统之间如何通信以及系统之间依赖管理等问题,关于通信方面,淘宝目前独立开发了自己的高性 能服务框架HSF, 此框架主要解决了淘宝目前所有子系统之间的同步和异步通信(目前HSF主要用于同步场合,FutureTask方 式的调用场景还比较少)。至于系统间的依赖管理,目前淘宝还做的不够好,这应该也是我们以后努力解决的问题。

    四 数据库拆分(TDDL)

    在前面“应用拆分”主题中,我们提到了一个大型互联网应用需要进行良好的拆分,而那里我们仅仅说了”应用级别”的拆 分,其实我们的互联网应用除了应用级别的拆分以外,还有另外一个很重要的层面就是存储如何拆分的。因此这个主题主要涉及到如何对存储系统,通常就是所说的RDBMS进 行拆分。

    好了,确定了这个小节的主题之后,我们回顾一下,一个互联网应用从小变大的过程中遇到的一些问题,通过遇到的问题来引出我们拆分RDBMS的 重要性。

    系 统刚开始的时候,因为系统刚上线,用户不多,那个时候,所有的数据都放在了同一个数据库中,这个时候因为用户少压力小,一个数据库完全可以应付的了,但是随着运营那些哥们辛苦的呐喊和拼命的推广以后,突然有一天发现,oh,god,用户数量突然变多了起来,随之而 来的就是数据库这哥们受不了,它终于在某一天大家都和惬意的时候挂掉啦。此时,咱们搞技术的哥们,就去看看究竟是啥原因,我们查了查以后,发现原来是数据库读取压力太大了,此时咱们都清楚是到了读写分离的时候,这个时候我们会配置一个server为master节 点,然后配几个salve节 点,这样以来通过读写分离,使得读取数据的压力分摊到了不同的salve节点上面,系统终于又恢复了正常,开始正常运行了。但是好景还是不长,有一天我们发现master这哥们撑不住了,它负载老高了,汗 流浃背,随时都有翘掉的风险,这个时候就需要咱们垂直分区啦(也就是所谓的分库),比如将商品信息,用户信息,交易信息分别存储到不同的数据库中,同时还可以针对商品信息的库采用master,salve模式,OK, 通过分库以后,各个按照功能拆分的数据库写压力被分担到了不同的server上面,这样数据库的压力终于有恢复到正常状态。但是是不是这样,我们就可以高枕无忧了呢?NO,这个NO, 不是我说的,是前辈们通过经验总结出来的,随着用户量的不断增加,你会发现系统中的某些表会变的异常庞大,比如好友关系表,店铺的参数配置表等,这个时候无论是写入还是读取这些表的数据,对数据库来说都是一个很耗费精力的事情,因此此时就需要我们进行“水平分区”了(这就是俗话说的分表,或者说sharding).

    OK,上 面说了一大堆,无非就是告诉大家一个事实“数据库是系统中最不容易scale out的一层”,一个大型的互联网 应用必然会经过一个从单一DB server,到Master/salve(主/从),再到垂直分区(分库),然后再到水平分区(分表,sharding)的过程,而在这个过程中,Master/salve 以 及垂直分区相对比较容易,对应用的影响也不是很大,但是分表会引起一些棘手的问题,比如不能跨越多个分区join查 询数据,如何平衡各个shards的 负载等等,这个时候就需要一个通用的DAL框架来屏蔽底层数据存储对应用逻辑的影响,使得底层数据的访问对应用透明化。

    拿淘宝目前的情况来说,淘宝目前也正在从昂贵的高端存储(小型机+ORACLE)切换到MYSQL,切 换到MYSQL以 后,势必会遇到垂直分区(分库)以及水平分区(Sharding)的问题,因此目前淘宝根据自 己的业务特点也开发了自己的TDDL框架,此框架主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制

    分库降低了单点机器的负载;分表,提高了数据操作的效率,尤其是Write操作的效率

    五 异步通信(Notify)

    在”远 程调用框架”的 介绍中,我 们说了一个大型的系统为了扩展性和伸缩性方面的需求,肯定是要进行拆分,但是 拆分了以后,子 系统之间如何通信就成了我们首要的问题,在”远程调用框架”小节 中,我 们说了同步通信在一个大型分布式系统中的应用,那么这一小节我们就来说说异步通信.好了,既 然说到了异步通信,那 么”消 息中间件”就 要登场了,采 用异步通信这其实也是关系到系统的伸缩性,以及最大化的对各个子系统进行解耦.

    说 到异步通信,我们需要关注的一点是这里的异步一定是根据业务特点来的,一定是针对业务的异步,通常适合异步的场合是一些松耦合的通信场合,而对于本身业务上关联度比较大的业务系统之间,我们还是要采用同步通信比较靠谱。

    OK,那 么下一步我们说说异步能给系统带来什么样子的好处。首先我们想想,假如系统有A和B两个 子系统构成,假如A和B是 同步通信的话,那么要想使得系统整体伸缩性提高必须同时对A和B进行 伸缩,这就影响了对整个系统进行scale out.其次,同步调用还会影响到可用性,从数学推理的角度来说,A同 步调用B, 如果A可 用,那么B可 用,逆否命题就是如果B不 可用,那么A也 不可用,这将大大影响到系统可用性,再次,系统之间异步通信以后可以大大提高系统的响应时间,使得每个请求的响应时间变短,从而提高用户体验,因此异步在提高了系统的伸缩性以及可用性的同时,也大大的增强了请求的响应时间(当然了,请求的总体处理时间也许不会变少)。

    下面我们就以淘宝的业务来看看异步在淘宝的具体应用。交易系统会与很多其它的业务系统交互,如果在一次交易过程中采用同步调用的话,这就要求要向交易成功,必须依赖的所有系统都可用,而如果采用异步通信以后,交易系 统借助于消息中间件Notify和 其它的系统进行了解耦,这样以来当其它的系统不可用的时候,也不会影响到某此交易,从而提高了系统的可用性。

    最后,关于异步方面的讨论,我可以 推荐大家一些资源:

    1 . J2EE meets web2.0

    2. Ebay架构特点(HPTS 2009)

    六 非结构化数据存储 ( TFS,NOSQL)

    在 一个大型的互联网应用当中,我们会发现并不是所有的数据都是结构化的,比如一些配置文件,一个用户对应的动态,以及一次交易的快照等信息,这些信息一般不适合保存到RDBMS中, 它们更符合一种Key-value的 结构,另外还有一类数据,数据量非常的大,但是实时性要求不高,此时这些数据也需要通过另外的一种存储方式进行存储,另外一些静态文件,比如各个商品的图片,商品描述等信息,这些信息因为比较大,放入RDBMS会引起读取性能问题,从而影响到其它 的数据读取性能,因此这些信息也需要和其它信息分开存储,而一般的互联网应用系统都会选择把这些信息保存到分布式文件系统中,因此淘宝目前也开发了自己的分布式文件系统TFS,TFS目 前限制了文件大小为2M, 适合于一些小于2M数 据的存放。

    随 着互联网的发展,业界从08年 下半年开始逐渐流行了一个概念就是NOSQL。我们都知道根据CAP理论,一致性,可用性和分区容错性3者 不能同时满足,最多只能同时满足两个,我们传统的关系数据采用了ACID的事务策略,而ACID的 事务策略更加讲究的是一种高一致性而降低了可用性的需求,但是互联网应用往往对可用性的要求要略高于一致性的需求,这个时候我们就需要避免采用数据的ACID事 务策略,转而采用BASE事 务策略,BASE事 务策略是基本可用性,事务软状态以及最终一致性的缩写,通过BASE事务策略,我们可以通过最终一致性来提升系统的可用性,这也是目前很多NOSQL产品所采用的策略,包括facebook 的cassandra,apache hbase,google bigtable等,这些产品非常适合一些非结构化的数据,比如key-value形 式的数据存储,并且这些产品有个很好的优点就是水平伸缩性。目前淘宝也在研究和使用一些成熟的NOSQL产品。

    七 监控、预警系统

    对于大型的系统 来说,唯一可靠的就是系统的各个部分是不可靠。

    因 为一个大型的分布式系统中势必会涉及到各种各样的设备,比如网络交换机,普通PC机,各种型号的网卡,硬盘,内存等等,而这些东东都在数量非常多的时候,出现错误的概率也会变大,因此我们需要时时刻刻监控系统的状态,而监控也有粒度的粗细之分,粒度粗一点的话,我们需要对整个 应用系统进行监控,比如目前的系统网络流量是多少,内存利用率是多少,IO,CPU的 负载是多少,服务的访问压力是多少,服务的响应时间是多少等这一系列的监控,而细粒度一点的话,我们就需对比如应用中的某个功能,某个URL的 访问量是多,每个页面的PV是 多少,页面每天占用的带宽是多少,页面渲染时间是多少,静态资源比如图片每天占用的带宽是多少等等进行进一步细粒度的监控。因此一个监控系统就变得必不可少了。

    前 面说了一个监控系统的重要性,有了监控系统以后,更重要的是要和预警系统结合起来,比如当某个页面访问量增多的时候,系统能自动预警,某台Server的CPU和 内存占用率突然变大的时候,系统也能自动预警,当并发请求丢失严重的时候,系统也能自动预警等等,这样以来通过监控系统和预警系统的结合可以使得我们能快速响应系统出现的问题,提高系统的稳定性和可用性。

    八 配置统一管理

    一个大型的分布 式应用,一般都是有很多节点构成的,如果每次一个新的节点加入都要更改其它节点的配置,或者每次删除一个节点也要更改配置的话,这样不仅不利于系统的维护和管理,同时也更加容易引入错误。另外很多时候集群中的很多系统的配置都是一样的,如果不进行统一的配置管理,就需要再所有的系统上维护一份配置,这样会 造成配置的管理维护很麻烦,而通过一个统一的配置管理可以使得这些问题得到很好的解决,当有新的节点加入或者删除的时候,配置管理系统可以通知各个节点更新配置,从而达到所有节点的配置一致性,这样既方便也不会出错。

    展开全文
  • 操作系统处理机管理

    万次阅读 2017-03-14 09:37:58
     在单道程序系统中,程序只能够顺序的执行,即两个程序只能等一个执行完再执行下一个。这样就使程序的执行具有三个特型:顺序性、封闭性和可再现性。而到了多道程序系统中,允许程序并发的执行(宏观并行,微观串行...

    处理机管理可归结为对进程的管理。

    为什么需要进程?

             在单道程序系统中,程序只能够顺序的执行,即两个程序只能等一个执行完再执行下一个。这样就使程序的执行具有三个特型:顺序性、封闭性和可再现性。而到了多道程序系统中,允许程序并发的执行(宏观并行,微观串行)。此时程序并发执行就具有了:间断性、失去封闭性和不可再现性。为了解决程序并发执行的问题,并且可以对并发执行的程序加以描述和控制,人们就引入了进程的概念。

    什么是进程?

             进程是程序的一次执行,是资源分配和调度的基本单位。进程 = 程序 + 数据 + 程序控制块(Process Control Block,PCB)。

             PCB是进程最重要的数据结构,是进程存在的唯一标识。PCB中记录了系统所需的,用于描述进程的当前情况一起管理进程运行的全部信息。OS通过PCB就能够很好的控制进程。PCB中的记录的内容大致为:进程标识符、处理机状态、进程调度信息、进程控制信息。

             进程的管理下面几个方面:

    • 进程控制
    • 进程同步
    • 进程通信
    • 进程调度      

    进程的状态

            就绪状态——进程所需要的资源都已经到位,只需要等待处理机调度

            运行状态——进程获得处理机,正在执行

            阻塞状态——进程等待某些事件的发生才能继续执行,所以不再占用处理机而转为阻塞状态

            进程的三态图和五态图如下:

                         

    进程控制

            进程的控制主要包括创建进程、撤销进程以及进程的状态转换。进程控制一般有OS的内核通过原语来实现。

            内核(Kernel):一些常驻内存,存在于紧靠硬件的软件层次中的模块的集合。例如中断处理程序、常用设备驱动程序及运行频率较高的模块(时钟管理、进程调度这些)。

            内核一般都包含了支撑功能(中断处理、时钟管理和原语操作)以及资源管理功能(进程、存储器和设备的管理)。

           原语——由若干条指令组成的,用于完成一定功能的一个过程。或者说是系统态下执行的某些具有特定功能的程序段。原语操作是一种“原子操作”,就是不可分的意思。即一个操作中的所有动作要么全做,要么全不做。

           阻塞和唤醒的原语分别是 block 和 wakeup。挂机和激活的原语是 suspend 和 active 。

    进程同步

          进程同步机制的主要任务,是对多个相关进程在执行次序上进行协调,是并发执行的进程能按一定的规则(或时序)共享系统资源,并能很好的相互合作,从而使程序的执行具有可再现性。

          进程之间的制约:

    •  直接制约——共享缓冲区   同步
    •  间接制约——互斥资源   互斥

          临界区:进程中访问临界资源的代码。

          进程必须互斥地进入自己的临界区,系统为此设置了专门的同步机构来协调。同步机制需要遵循十六字真言:空闲让进、忙则等待、有限等待、让权等待。

          1965年Dijkstra提出信号量(Semaphores)机制是一种卓有成效的进程同步工具,这个机制有几种发展产物。我们通常使用记录型信号量。

          记录型信号量只是在整形信号量的基础上增加了将进程阻塞和唤醒的操作,这样符合“让权等待”的规则。

          信号量S是一个表示资源数目的东西,只有在wait(S)和signal(S)这两个原子操作中才能够修改,这就保护了信号量不被其它地方随意改变。这两个操作又称为PV操作。

          P操作就相当于在访问资源之前,先对代表该资源的信号量进行判断,如果有就访问,没有的话该进程就被阻塞等待。

          V操作就是在访问资源之后,释放一个资源,并唤醒一个等待该资源的进程。


    信号量机制实现前驱图也经常考到,但很简单。对于前驱图中一个结点,有多少个箭头指向它,则在执行本身程序之前必须先进行多少次 P 操作来等待所有资源。有多少个箭头从它指出去,在本身程序执行后就要进行多少次 V 操作释放资源。

    信号量机制实现互斥:

          为临界资源设置一互斥信号量mutex,初始值为1。每个进程在进入临界区之前都要对该信号量进行P操作,判断mutex的值,如果为1则表示没有其它进程正在访问该资源,现在可以访问;如果为0则表示当前有进程在访问该资源必须等待。这就相当于用一个标识符给临界区上了锁,实现了互斥访问。

    信号量机制实现同步:

          两个进程共享缓冲池,想象生产者和消费者的问题。设缓冲池具有的可用空间为n,要为该缓冲池设置3个信号量,一个是互斥访问信号量S,初始值为1。一个是S1,初始值为n,表示缓冲池可用空间数。另一个是S2,初始值为0,表示缓冲池中已满空间数(相当于已有产品数)。在这个条件下:

         对于生产者进程,在将产品放入到缓冲池(访问)之前必须先对 S1 进行 P操作,判断 S1 的值,如果不为0,就对 S 执行 P操作,判断该缓冲区中是否有其它进程正在访问。如果为 0,则表示该缓冲区已满不能再放产品,生产者进程只能等待。只有这两个 P操作都通过了,生产者才能将产品放入缓冲池。然后对 S 进行 V操作,释放访问,再对 S2(是S2,不是S1,因为放了一个产品是要给S2加1)进行 V操作。

         对于消费者进程,在从缓冲池拿出产品(访问)之前必须现对 S2 进行 P操作,判断 S2 的值,如果不为0,就对 S 执行 P操作。如果为0,则表示缓冲区为空(没有产品),消费者进程必须等待。只有这两个 P操作都通过,生产者才能拿到产品。然后对 S 进行 V操作,表示自己不再访问临界区了。再对 S1 进行V操作。

    管程

         虽然信号量机制已经是一种方便又高效的进程同步机制,但每个访问临界区的进程必须自备PV操作,这就是大量同步操作分散在各个进程中,不利于系统的管理,也容易产生死锁。为了解决问题,又引进了一个新概念——管程。

         系统中的资源都可以用数据结构抽象地描述其资源特性,而忽略它们的内部结构和实现细节。因此,可以利用共享数据结构抽象地表示共享资源,并且将对该共享数据结构实施特定的操作定义为一组过程。简单理解,这个过程就是我们所说的管程。

         有了管程之后,进程对共享资源的访问,可以不用自备PV操作了。直接通过这一个过程就可以,这一个过程就包括了进程对资源的申请、请求和其它操作。而这个过程可以确保每次只让一个进程进入,实现了互斥。也达到了对共享资源的所有访问的统一管理。

         仔细想想,管程其实包含了面向对象的思想,将数据和操作都封装起来,隐藏实现细节。任何管程以外的过程都不能访问到里面的数据。进程也只需要调用管程中的方法就可实现对资源的访问。

    线程

          如果说进程的引入是为了解决程序并发执行的问题,那么线程的引入则是为了更好的提高程序并发执行的程度。

          因为进程本身是占有资源的,在进行进程调度时有很大的时空开销。所以再将进程分为更小的不带资源(占据很少量资源)的线程,然后以线程作为为调度和分配的基本单位来较小时空开销,提高并发程度。

    进程通信

          进程之间因为存在着互斥和同步的关系,所以进程之间肯定需要进行一定的信息交换。(没有沟通,怎么能懂别人想干什么呢,对吧)

          前面提到了信号量机制其实就是一种低级通信,因为每次只能告知另一个进程一个信息。比如说放了一个产品,而不能说放很多产品了。

          高级通信就是能够高效地传送大量数据,并且使用方便,对用户透明(系统隐藏了实现进程通信的具体细节)。

    一个很关键的概念:在操作系统中,“透明” 一词指某种东西实际存在,但从某个角度看好像没有。就是对应用人员来说不可见(你只能按它说的做,但不能直接控制)。

          高级通信包括:

    • 共享存储器系统
    • 管道(pipe)通信系统
    • 消息传递系统——不借助任何共享存储区,直接以格式化的消息为单位,将通讯数据封装在消息中,并利用OS提供的通信命令(原语)在进程之间进行消息传递。这个方式隐藏了通信细节,对用户透明化,使用简单。计算机网络中就采用了这种方式,不过不叫消息,而叫报文。该方式又可分成直接通信方式(发送进程直接利用发送原语将消息发送给接收进程)和间接通信方式(发送和接收进程通过共享中间实体(邮箱)来进行消息的发送和接收)
    • 客户/服务器系统——主要用于网络环境下,主要技术有:套接字(Socket,一个通信标识类型的数据结构,通过这个套接字,进程就能知道通信目的地址、使用的端口号、传输层协议、进程所在网址等信息),远程过程调用(Remote Procedure Call)和远程方法调用(和过程类似,不过在面向对象中叫方法)。

    进程调度

           三级调度的概念:

    1. 高级调度——又称作业调度(将作业从后备队列调入就绪队列,也就是从外存调入内存)
    2. 中级调度——又称兑换调度(类似于挂起和激活)
    3. 低级调度——又称进程调度

           调度算法:先来先服务、时间片轮转法、优先级调度、多级反馈队列调度(具体算法思想就不再赘述)

           死锁:一组进程中的每个进程都在等待着只能由改组进程才能引发的事件。

           死锁必要条件:互斥条件、请求和保持条件(就是既占有资源,又请求新资源)、不可抢占条件,环路条件。

           死锁预防:通过破环四个必要条件中的一个或几个。一次性分配法(破坏请求和保持条件)、有序资源分配法(破坏环路条件)

           死锁避免:银行家算法,就是对每一次分配资源都要判断是否是安全状态,安全才分配,不安全则不分配,开销很大。

           死锁检测:看图法

           死锁解除:抢占资源、终止进程。

    展开全文
  • Java实现并发处理的方式

    千次阅读 2017-08-11 23:38:46
    并发处理的方式
  • 目标:从0到1构建一个高并发的秒杀系统 三个阶段 从0到1构建一个电商系统 从0到1构建秒杀系统 从0到1构建高并发秒杀系统 为了完成这个目标,我们需要知道几个前提 什么是电商 什么是秒杀 什么是高并发 如何设计高...
  • 并发计算的串行思考

    千次阅读 2022-03-07 00:08:29
    软件系统性能的提升的重要方法之一是支持并发性编程,尤其是采用多核体系结构的时候。全局数据库、云计算和区块链应用程序并发性对于实现容错和分布式服务也是至关重要的。然而,对并发性的掌握一...
  • Computer:现代计算机操作系统的四大基本特性(并发/共享/虚拟/异步) 导读:现代操作系统都具有并发、共享、虚拟和异步的特性,其中并发是其它三个特征的前提。共享和并发是操作系统的两个最基本的特征,虚拟以...
  • 图片来自 Pexels甚至很多小伙伴仍然停留只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到实际项目,就更别提如何构建高并发系统了!究竟什么样的系统算是高并发系统?今天,我们就一起解密高并发...
  • 并发技术

    万次阅读 多人点赞 2019-10-21 16:45:04
    并发技术 第一章 预备知识一 理解大数据二 网工基础知识OSI七层参考模型应用层表示层会话层传输层网络层链路层物理层功能分层总结第二章 LVS技术一 LVS介绍二 LVS调度算法LVS命令监控多个端口号管理服务集群的...
  • 实际应用,可能会发生消费者收到Queue的消息,但没有处理完成就宕(或出现其他意外)的情况,这种情况下就可能会导致消息丢失。 为了避免这种情况发生,我们可以要求消费者消费完消息发送一个回执给...
  • 系统并发量及常见性能指标

    千次阅读 2020-03-09 17:59:48
    用户每一次对网站的每个页面访问均被记录1次。用户对同一页面的多次刷新,访问量累计。 UV 即 Unique visitor,独立访客 通过客户端的cookies实现。即同一页面,客户端多次点击只计算一次,访问量不累计。 **IP 即...
  • 并发系统设计40问 - 学习/实践

    千次阅读 2019-09-29 16:14:27
    开篇词 | 为什么你要学习高并发系统设计? 基础篇 (6讲) 【01 | 高并发系统:它的通用设计方法是什么?】 见TBD 【02 | 架构分层:我们为什么一定要这么做?】 【03 | 系统设计...
  • 它按发展历程又分为道批处理系统、多道批处理系统(多道程序设计技术出现以后)。 1) 道批处理系统 系统对作业的处理是成批进行的,但内存始终保持一道作业。该系统解决人机矛盾和CPU与I/O设备速率不...
  • Web系统大规模并发处理

    千次阅读 2017-01-23 22:11:57
    面对5w每秒的高并发秒杀功能,如果Web系统不做针对性的优化,会轻而易举地陷入到异常状态。我们现在一起来讨论下,优化的思路和方法哈。  1. 请求接口的合理设计 一个秒杀或者抢购页面,通常分为2个部分,...
  • 处理机调度 调度的基本概念 当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是"调度"研究的问题。 举个有味道的例子: 现在有4个人要上厕所...
  • 并发系统建设经验总结

    千次阅读 多人点赞 2021-10-30 00:20:26
    作者:listenzhang,腾讯 PCG 后台开发工程师前言早期从事运单系统的开发和维护工作,从最早的日均百万,到日均千万,业务的快速发展再加上外卖业务的特点是,业务量集中午高峰和...
  • 9种高性能高可用高并发技术架构

    千次阅读 2019-11-06 15:58:37
    如有侵权 请私信进行删除。...每一个模式描述了一个我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临...
  • 分布式架构 高并发处理

    千次阅读 2019-05-05 21:44:34
    微服务架构 高并发处理并发介绍 同时或者极短时间内,有大量请求到达服务端,每个请求都需要服务端耗费资源...系统在线人数10W,并不意味系统并发用户是10W,可能存在10w用户同时首页查看静态文章,并未对...
  • 利用IO复用技术Epoll与线程池实现多线程的Reactor高并发模型; 利用正则与状态解析HTTP请求报文,实现处理静态资源的请求; 利用标准库容器封装char,实现自动增长的缓冲区; 基于小根堆实现的定时器,关闭超时的...
  • Linux操作系统是现在服务器的首选操作系统Linux的默认系统参数下,Linux针对高并发的支持性并不是很好。小编从事Linux下应用程序开发多年,关于Linux系统下的高并发,小编自己踩过的坑,及如何解决踩过的坑下面...
  • 我们想想软件设计、部署、使用、维护一共有哪些角色的参与,然后再考虑这些角色各自关注的性能点是什么,又该关注什么? 用户的角度: 用户关注的是用户操作的相应时间。 管理员的角度: 1、 响应时间 2、 ...
  • 为了解决大型网站面临的高并发访问、海量数据处理、高可靠运行等一系列问题与挑战,大型互联网公司实践提出了许多解决方案,以实现网站高性能、高可用、易伸缩、可扩展、安全等各种技术架构目标。这些解决方案又...
  • 如何设计一个支持高并发的高可用服务?前期设计时应该从哪些方面入手?明确的一点:没有哪一个系统是从一开始设计时就是高可用的,支持高并发的。都是产品的发展壮大,随着业务...
  • 主要讲解高可用的互联网交易系统架构,包括双十一、支付宝&微博红包技术架构,以及微信红包的技术架构,希望能给各位提供价值。   概述 话说每逢双十一节或春节等节假日,对大家来讲是最欢乐的日子,可以...
  • bilibili 高并发实时弹幕系统实现

    万次阅读 2017-03-30 16:57:16
    并发实时弹幕是一种互动的体验。对于互动来说,考虑最多的地方就是:高稳定性、高可用性以及低延迟这三个方面。 高稳定性,为了保证互动的实时性,所以要求连接状态稳定; 高可用性,相当于提供一种备用...
  • 手把手教你用Java设计并实现一个城市公交查询系统

    万次阅读 多人点赞 2020-12-19 10:11:33
    近年来,Internet推动了以互联网技术为核心的各项工作蓬勃展开,互联网的强大也大大的促进了社会的发展,整个社会信息化进程逐步加快,网络也变成了我们日常活动越来越重要的组成成分。为了使得我国公交乘客出行及...
  • 数据库高并发处理方法

    千次阅读 2020-09-23 12:31:07
    分库:以电商平台为例,包含了用户、商品、评价、订单等几大模块,最简单的是一个数据库创建四张表。 随着业务规模的增大,需要对业务进行拆分。每个表都使用单独的数据库进行存储,将原本对一个数据库的依赖...
  • 并行操作:在单处理机系统中,事务的并行执行实际上是这些并行事务的操作轮流交叉进行。 为保证事务并发执行的正确,必须要有一定的调度手段以保障事务并发执行中一事务执行时不受其他事务的影响。并发控制就是要用...
  • 并发的简单处理方式

    万次阅读 2020-02-10 14:57:57
    (1)一道面试题的背景引入 这篇文章,我们聊聊大量同学问我的一个问题,...因为没有过相关的项目经历,所以就没法从真实的自身体会和经验提炼出一套回答,然后系统的阐述出来自己复杂过的系统如何支撑高并发...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 180,353
精华内容 72,141
关键字:

在单处理机系统中实现并发技术后