计算机网络的组成和体系结构

计算机网络的组成和体系结构,第1张

一、计算机网络的基本组成

计算机网络是一个很复杂的系统,它由许多计算机软件、硬件和通信设备组合而成。下面对一个计算机网络所需的主要部分,即服务器、工作站、外围设备、网络软件作简要介绍。

1服务器(Server)

在计算机网络中,服务器是整个网络系统的核心,一般是指分散在不同地点担负一定数据处理任务和提供资源的计算机,它为网络用户提供服务并管理整个网络,它影响着网络的整体性能。一般在大型网络中采用大型机、中型机和小型机作为网络服务器,可保证网络的可靠性。对于网点不多,网络通信量不大,数据安全性要求不太高的网络,可以选用高档微机作网络服务器。根据服务器在网络中担负的网络功能的不同,又可分为文件服务器、通信服务器和打印服务器等。在小型局域网中,最常用的是文件服务器。一般来说网络越大、用户越多、服务器负荷越大,对服务器性能要求越高。

2工作站(Workstation)

工作站有时也称为“节点”或“客户机(Client)”,是指通过网络适配器和线缆连接到网络上的计算机,是网络用户进行信息处理的个人计算机。它和服务器不同,服务器是为整个网络提供服务并管理整个网络,而工作站只是一个接入网络的设备,它保持原有计算机的功能,作为独立的计算机为用户服务,同时又可按一定的权限访问服务器,享用网络资源。

工作站通常都是普通的个人计算机,有时为了节约经费,不配软、硬盘,称为“无盘工作站”。

3网络外围设备

是指连接服务器和工作站的一些连线或连接设备,如同轴电缆、双绞线、光纤等传输介质,网卡(NIC)、中继器(Repeater)、集线器(Hub)、交换机(Switch)、网桥(Bridge)等,又如用于广域网的设备:调制解调器(Modem)、路由器(Router)、网关(Gateway)等,接口设备:T型头、BNC连接器、终端匹配器、RJ45头、ST头、SC头、FC头等。

4网络软件

前面介绍的都是网络硬件设备。要想网络能很好地运行,还必须有网络软件。

通常网络软件包括网络操作系统(NOS)、网络协议软件和网络通信软件等。其中,网络操作系统是为了使计算机具备正常运行和连接上网的能力,常见的网络操作系统有UNIX、Linux、Novell Netware、Windows NT、Windows 2000 Server、Windows XP等;网络协议软件是为了各台计算能使用统一的协议,可以看成是计算机之间相互会话使用的语言;而运用协议进行实际的通信则是由通信软件完成的。

网络软件功能的强弱直接影响到网络的性能,因为网络中的资源共享、相互通信、访问控制和文件管理等都是通过网络软件实现的。

二、计算机网络的拓扑结构

所谓计算机网络的拓扑结构是指网络中各结点(包括连接到网络中的设备、计算机)的地理分布和互连关系的几何构形,即网络中结点的互连模式。

网络的拓扑结构影响着整个网络的设计、功能、可靠性和通信费用等指标,常见的网络拓扑结构有总线型、星型、环型等,通过使用路由器和交换机等互连设备,可在此基础上构建一个更大网络。

1总线型

在总线型结构中,将所有的入网计算机接入到一条通信传输线上,为防止信号反射,一般在总线两端连有终端匹配器如图6-1(a)。总线型结构的优点是信道利用率高,可扩充性好,结构简单,价格便宜。当数据在总线上传递时,会不断地“广播”,第一节点均可收到此信息,各节点会对比数据送达的地址与自己的地址是否相同,若相同,则接收该数据,否则不必理会该数据。缺点是同一时刻只能有两个网络结点在相互通信,网络延伸距离有限,网络容纳的节点数有限。在总线上只要有一个结点连接出现问题,会影响整个网络运行,且不易找到故障点。

图6-1 网络拓扑结构

2星型

在星型结构中,以中央结点为中心,其他结点都与中央结点相连。每台计算机通过单独的通信线路连接到中央结点,由该中央结点向目的结点传送信息,如图6-1(b),因此,中央结点必须有较强的功能和较高的可靠性。

在已实现的网络拓扑结构中,这是最流行的一种。跟总线型拓扑结构相比,它的主要的优势是一旦某一个电缆线段被损坏了,只有连接到那个电缆段的主机才会受到影响,结构简单,建网容易,便于管理。缺点是该拓扑是以点对点方式布线的,故所需线材较多,成本相对较高,此外中央结点易成为系统的“瓶颈”,且一旦发生故障,将导致全网瘫痪。

3环型

在环型结构中,如图6-1(c)所示,各网络结点连成封闭环路,数据只能是单向传递,每个收到数据包的结点都向它的下一结点转发该数据包,环游一圈后由发送结点回收。当数据包经过目标结点时,目标结点根据数据包中的目标地址判断出是自己接收,并把该数据包拷贝到自己的接收缓冲中。

环型拓扑结构的优点是:结构简单,网络管理比较简单,实时性强。缺点是:成本较高,可靠性差,网络扩充复杂,网络中若有任一结点发生故障都会使整个网络瘫痪。

三、计算机网络的体系结构

要弄清网络的体系结构,需先弄清网络协议是什么。

网络协议是两台网络上的计算机进行通信时使用的语言,是通信的规则和约定。为了在网络上传输数据,网络协议定义了数据应该如何被打成包、并且定义了在接收数据时接收计算机如何解包。在同一网络中的两台计算机为了相互通信,必须运行同一协议,就如同两个人交谈时,必须采用对方听得懂的语言和语速。

由于网络结点之间的连接可能是很复杂的,因此,为了减少协议设计的复杂性,在制定协议时,一般把复杂成分分解成一些简单成分,再将它们复合起来,而大多数网络都按层来组织,并且规定:(1)一般是将用户应用程序作为最高层,把物理通信线路作为最低层,将其间再分为若干层,规定每层处理的任务,也规定每层的接口标准;(2)每一层向上一层提供服务,而与再上一层不发生关系;(3)每一层可以调用下一层的服务传输信息,而与再下一层不发生关系。(4)相邻两层有明显的接口。

除最低层可水平通信外,其他层只能垂直通信。

层和协议的集合被称为网络的体系结构。为了帮助大家理解,我们从现实生活中的一个例子来理解网络的层次关系。假如一个只懂得法语的法国文学家和一个只懂得中文的中国文学家要进行学术交流,那么他们可将论文翻译成英语或某一种中间语言,然后交给各自的秘书选一种通信方式发给对方,如图6-2所示。

图6-2 中法文学家学术交流方式

下面介绍两个重要的网络体系结构:OSI参考模型和TCP/IP参考模型。

1OSI参考模型

由于世界各大型计算机厂商推出各自的网络体系结构,不同计算机厂商的设备相互通信困难。为建立更大范围内的计算机网络,必然要解决异构网络的互连,因而国际标准化组织ISO于1977年提出“开放系统互连参考模型”,即著名的OSI(Open system interconnection/Reference Model)。它将计算机网络规定为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层等七层,受到计算机界和通信界的极大关注。

2TCP/IP参考模型

TCP/IP(Transmission Control Protocol/Internet protocol)协议是Internet使用的通信协议,由ARPANET研究中心开发。TCP/IP是一组协议集(Internet protocol suite),而TCP、IP是该协议中最重要最普遍使用的两个协议,所以用TCP/IP来泛指该组协议。

TCP/IP协议的体系结构被分为四层:

(1)网络接口层 是该模型的最低层,其作用是负责接收IP数据报,并通过网络发送出去,或者从网络上接收网络帧,分离IP数据报。

(2)网络层 IP协议被定义驻留在这一层中,它负责将信息从一台主机传到指定接收的另一台主机。主要功能是:寻址、打包和路由选择。

(3)传输层 提供了两个协议用于数据传输,即传输控制协议TCP和通用数据协议UDP,负责提供准确可靠和高效的数据传送服务。

(4)应用层 位于TCP/IP最高层,为用户提供一组常用的应用程序协议。例如:简单邮件传输协议SMTP、文件传协议FTP、远程登录协议Telnet、超文本传输协议HTTP(该协议是后来扩充的)等。随着Internet的发展,又开发了许多实用的应用层协议。

图6-3是TCP/IP模型和OSI模型的简单比较:

图6-3 TCP/IP模型和OSI模型的对比

本文主要介绍了架构技术选型与设计-微服务选型,Spring cloud 实现采用的技术,希望对您的学习有所帮助。

架构技术选型与设计-DUBBODubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点(阿里巴巴现在使用架构为HSF)。 于2012-10-24最后版本253成为最后一版本,由当当接手维护,命名为dubbox;2017年突然继续dubbo进行维护,最后更新版本时间为 2017-10-11 22:21

Dubbo 核心部件:Provider: 暴露服务的提供方。Consumer:调用远程服务的服务消费方。Registry: 服务注册中心和发现中心。Monitor: 统计服务和调用次数,调用时间监控中心。(dubbo的控制台页面中可以显示)Container:服务运行的容器。Dubbo服务集群-集群容错模式

架构技术选型与设计-微服务选型

架构技术选型与设计-DUBBO

架构技术选型与设计-DUBBO

架构技术选型与设计-微服务选型Spring Cloud,从命名我们就可以知道,它是Spring Source的产物,Spring社区的强大背书可以说是Java企业界最有影响力的组织了,除了Spring Source之外,还有Pivotal和Netfix是其强大的后盾与技术输出。其中Netflix开源的整套微服务架构套件是Spring Cloud的核心。如果拿Dubbo与Netflix套件做对比,前者在国内影响力较大,后者在国外影响力较大,在背景上可以打个平手;但是若要与Spring Cloud做对比,由于Spring Source的加入,在背书上,Spring Cloud略胜一筹,但是在高并发上dubbo曾经在阿里的运营中实际承载过过亿用户同时在线的,而Netflix 并没有实际的上线应用中体现过。Spring Cloud下面有19个子项目(可能还会新增)分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,一定程度来说,Dubbo只是Spring Cloud Netflix中的一个子集。但是在选择框架上,方案完整度恰恰是一个需要重点关注的内容,当然从高可用和高并发一起考虑,Spring Cloud 无疑是最佳选择。

1、Spring Cloud Config 配置中心,利用git集中管理程序的配置。

2、Spring Cloud Netflix 集成众多Netflix的开源软件

3、Spring Cloud Bus 消息总线,利用分布式消息将服务和服务实例连接在一起,用于在一个集群中传播状态的变化

4、Spring Cloud for Cloud Foundry 利用Pivotal Cloudfoundry集成你的应用程序

5、Spring Cloud Cloud Foundry Service Broker 为建立管理云托管服务的服务代理提供了一个起点。

6、Spring Cloud Cluster 基于Zookeeper, Redis, Hazelcast, Consul实现的领导选举和平民状态模式的抽象和实现。

7、Spring Cloud Consul 基于Hashicorp Consul实现的服务发现和配置管理。

8、Spring Cloud Security 在Zuul代理中为OAuth2 rest客户端和认证头转发提供负载均衡

9、Spring Cloud Sleuth SpringCloud应用的分布式追踪系统,和Zipkin,HTrace,ELK兼容。

10、Spring Cloud Data Flow 一个云本地程序和操作模型,组成数据微服务在一个结构化的平台上。

11、Spring Cloud Stream 基于Redis,Rabbit,Kafka实现的消息微服务,简单声明模型用以在Spring Cloud应用中收发消息。

12、Spring Cloud Stream App Starters 基于Spring Boot为外部系统提供spring的集成

14、Spring Cloud Task App Starters

15、Spring Cloud Zookeeper 服务发现和配置管理基于Apache Zookeeper。

16、Spring Cloud for Amazon Web Services 快速和亚马逊网络服务集成。

17、Spring Cloud Connectors 便于PaaS应用在各种平台上连接到后端像数据库和消息经纪服务。

18、Spring Cloud Starters (项目已经终止并且在AngelSR2后的版本和其他项目合并

)19、Spring Cloud CLI 插件用Groovy快速的创建Spring Cloud组件应用。Spring Cloud共集成了19个子项目,里面都包含一个或者多个第三方的组件或者框架!

1、spring cloud : 一个云应用工具,为云应用开发的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁定、决策竞选、分布式会话和集群状态管理等操作

2、spring cloud config :配置管理开发工具包

3、 spring cloud Bus :事件消息总线用于集群(例如:配置变化时间)中传播状态变化,与spring cloud config 联合实现热部署

4、 spring cloud Netflix Eureka : 云端负载均衡基础,一个基于Rest的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移

5、 spring cloud Netflix Hystrix : 容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力

6 、 Netflix ZUUL: 边缘服务工具,提供动态路由、监控、弹性、安全等边缘服务

7、 spring cloud sleuth :日志收集工具包、封装Purpose 、Zipkin和Trace

8、 Spring Cloud Security : 安全工具包,为应用程序添加安全控制,主要是OAuth2

9、 spring cloud turbine :聚合服务器发送时间流,监控集群下Netflix 和 metrics 情况

Spring cloud 配置中心

Spring cloud 注册中心

Spring cloud 网关: 服务路由、安全认证、会话共享、客户端负载均衡、统一异常处理、跨域请求

Spring cloud 断路由

操作系统的结构设计经过了多个发展阶段,主要包括批处理系统、分时系统和客户机服务器模型。

1批处理系统

批处理系统是最早的操作系统结构设计。在这种系统中,用户将一批作业提交给计算机,系统按照一定的顺序进行处理。用户无法与计算机进行实时交互,需要等待作业完成后才能获取结果。批处理系统的设计目标是提高计算机资源的利用率和作业的吞吐量。

2分时系统

分时系统是在批处理系统的基础上发展起来的。它允许多个用户通过终端同时访问计算机系统,并实现了实时交互。分时系统将计算机的时间分割成小的时间片,每个用户在一个时间片内获得计算机的控制权。这种结构设计使得用户能够及时响应计算机的结果,并提高了系统的资源利用率。

3客户机服务器模型

客户机服务器模型是在网络环境下的操作系统结构设计。在这种模型中,计算机系统被划分为两个部分:客户机和服务器。客户机是用户使用的终端设备,而服务器是提供服务的计算机。客户机通过网络与服务器进行通信,请求并获取所需的服务和资源。这种结构设计使得计算机系统可以支持分布式计算和资源共享。

通过这些发展阶段,操作系统的结构设计逐渐演变和完善,以适应不断变化的计算环境和用户需求。批处理系统提高了计算机资源利用率,分时系统实现了实时交互,而客户机服务器模型实现了分布式计算和资源共享。

4多任务操作系统

多任务操作系统是在分时系统的基础上发展起来的。它允许多个任务同时运行,并共享计算机的资源。多任务操作系统通过时间片轮转的方式,使得每个任务都能在一段时间内获得计算机的处理时间。这种结构设计使得计算机可以同时处理多个任务,提高了系统的效率和响应速度。

5分布式操作系统

分布式操作系统是在客户机服务器模型的基础上发展起来的。它将计算机系统分布在多个地理位置上,并通过网络进行通信和协调。分布式操作系统允许用户在不同的地方访问和使用系统的资源,并实现了资源共享、负载均衡和容错处理等功能。

6虚拟化操作系统

虚拟化操作系统是在多任务操作系统和分布式操作系统的基础上发展起来的。它通过虚拟化技术,将一个物理计算机分割成多个虚拟计算机,每个虚拟计算机都可以运行独立的操作系统和应用程序。

虚拟化操作系统实现了资源的动态分配和管理,提高了计算机系统的利用率和灵活性。这种结构设计使得计算机系统可以更好地支持云计算和虚拟化环境。

想设计亿万级高并发架构,你要先知道高并发是什么?

面对流量高峰,不同的企业是如何通过技术手段解决高并发难题的呢

0、引言

软件系统有三个追求:高性能、高并发、高可用,俗称三高。三者既有区别也有联系,门门道道很多,全面讨论需要三天三夜,本篇讨论高并发。

高并发(High Concurrency)。并发是操作系统领域的一个概念,指的是一段时间内多任务流交替执行的现象,后来这个概念被泛化,高并发用来指大流量、高请求的业务情景,比如春运抢票,电商双十一,秒杀大促等场景。

很多程序员每天忙着搬砖,平时接触不到高并发,哪天受不了跑去面试,还常常会被面试官犀利的高并发问题直接KO,其实吧,高并发系统也不高深,我保证任何一个智商在线的看过这篇文章后,都能战胜恐惧,重拾生活的信心。

本文先介绍高并发系统的度量指标,然后讲述高并发系统的设计思路,再梳理高并发的关键技术,最后结合作者的经验做一些延伸探讨。

1、高并发的度量指标

既然是高并发系统,那并发一定要高,不然就名不副实。并发的指标一般有QPS、TPS、IOPS,这几个指标都是可归为系统吞吐率,QPS越高系统能hold住的请求数越多,但光关注这几个指标不够,我们还需要关注RT,即响应时间,也就是从发出request到收到response的时延,这个指标跟吞吐往往是此消彼长的,我们追求的是一定时延下的高吞吐。

比如有100万次请求,99万次请求都在10毫秒内响应,其他次数10秒才响应,平均时延不高,但时延高的用户受不了,所以,就有了TP90/TP99指标,这个指标不是求平均,而是把时延从小到大排序,取排名90%/99%的时延,这个指标越大,对慢请求越敏感。

除此之外,有时候,我们也会关注可用性指标,这可归到稳定性。

一般而言,用户感知友好的高并发系统,时延应该控制在250毫秒以内。

什么样的系统才能称为高并发?这个不好回答,因为它取决于系统或者业务的类型。不过我可以告诉你一些众所周知的指标,这样能帮助你下次在跟人扯淡的时候稍微靠点儿谱,不至于贻笑大方。

通常,数据库单机每秒也就能抗住几千这个量级,而做逻辑处理的服务单台每秒抗几万、甚至几十万都有可能,而消息队列等中间件单机每秒处理个几万没问题,所以我们经常听到每秒处理数百万、数千万的消息中间件集群,而像阿某的API网关,每日百亿请求也有可能。

2、高并发的设计思路

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

垂直方向扩展,也叫竖向扩展

水平方向扩展,也叫横向扩展

垂直方向:提升单机能力

提升单机处理能力又可分为硬件和软件两个方面:

硬件方向,很好理解,花钱升级机器,更多核更高主频更大存储空间更多带宽

软件方向,包括用各快的数据结构,改进架构,应用多线程、协程,以及上性能优化各种手段,但这玩意儿天花板低,就像提升个人产出一样,996、007、最多24 X 7。

水平方向:分布式集群

为了解决分布式系统的复杂性问题,一般会用到架构分层和服务拆分,通过分层做隔离,通过微服务解耦。

这个理论上没有上限,只要做好层次和服务划分,加机器扩容就能满足需求,但实际上并非如此,一方面分布式会增加系统复杂性,另一方面集群规模上去之后,也会引入一堆AIOps、服务发现、服务治理的新问题。

因为垂直向的限制,所以,我们通常更关注水平扩展,高并发系统的实施也主要围绕水平方向展开。

3、高并发的关键技术

玩具式的网络服务程序,用户可以直连服务器,甚至不需要数据库,直接写磁盘文件。但春运购票系统显然不能这么做,它肯定扛不住这个压力,那一般的高并发系统是怎么做呢?比如某宝这样的正经系统是怎么处理高并发的呢?

其实大的思路都差不多,层次划分 + 功能划分。可以把层次划分理解为水平方向的划分,而功能划分理解为垂直方向的划分。

首先,用户不能直连服务器,要做分布式就要解决“分”的问题,有多个服务实例就需要做负载均衡,有不同服务类型就需要服务发现。

集群化:负载均衡

负载均衡就是把负载(request)均衡分配到不同的服务实例,利用集群的能力去对抗高并发,负载均衡是服务集群化的实施要素,它分3种:

DNS负载均衡,客户端通过URL发起网络服务请求的时候,会去DNS服务器做域名解释,DNS会按一定的策略(比如就近策略)把URL转换成IP地址,同一个URL会被解释成不同的IP地址,这便是DNS负载均衡,它是一种粗粒度的负载均衡,它只用URL前半部分,因为DNS负载均衡一般采用就近原则,所以通常能降低时延,但DNS有cache,所以也会更新不及时的问题。

硬件负载均衡,通过布置特殊的负载均衡设备到机房做负载均衡,比如F5,这种设备贵,性能高,可以支撑每秒百万并发,还能做一些安全防护,比如防火墙。

软件负载均衡,根据工作在ISO 7层网络模型的层次,可分为四层负载均衡(比如章文嵩博士的LVS)和七层负载均衡(NGINX),软件负载均衡配置灵活,扩展性强,阿某云的SLB作为服务对外售卖,Nginx可以对URL的后半部做解释承担API网关的职责。

所以,完整的负载均衡链路是 client <-> DNS负载均衡 -> F5 -> LVS/SLB -> NGINX

不管选择哪种LB策略,或者组合LB策略,逻辑上,我们都可以视为负载均衡层,通过添加负载均衡层,我们将负载均匀分散到了后面的服务集群,具备基础的高并发能力,但这只是万里长征第一步。

数据库层面:分库分表+读写分离

前面通过负载均衡解决了无状态服务的水平扩展问题,但我们的系统不全是无状态的,后面通常还有有状态的数据库,所以解决了前面的问题,存储有可能成为系统的瓶颈,我们需要对有状态存储做分片路由。

数据库的单机QPS一般不高,也就几千,显然满足不了高并发的要求。

所以,我们需要做分库分表 + 读写分离。

就是把一个库分成多个库,部署在多个数据库服务上,主库承载写请求,从库承载读请求。从库可以挂载多个,因为很多场景写的请求远少于读的请求,这样就把对单个库的压力降下来了。

如果写的请求上升就继续分库分表,如果读的请求上升就挂更多的从库,但数据库天生不是很适合高并发,而且数据库对机器配置的要求一般很高,导致单位服务成本高,所以,这样加机器抗压力成本太高,还得另外想招。

读多写少:缓存

缓存的理论依据是局部性原理。

一般系统的写入请求远少于读请求,针对写少读多的场景,很适合引入缓存集群。

在写数据库的时候同时写一份数据到缓存集群里,然后用缓存集群来承载大部分的读请求,因为缓存集群很容易做到高性能,所以,这样的话,通过缓存集群,就可以用更少的机器资源承载更高的并发。

缓存的命中率一般能做到很高,而且速度很快,处理能力也强(单机很容易做到几万并发),是理想的解决方案。

CDN本质上就是缓存,被用户大量访问的静态资源缓存在CDN中是目前的通用做法。

缓存也有很多需要谨慎处理的问题:

一致性问题:(a)更新db成功+更新cache失败 -> 不一致 (b)更新db失败+更新cache成功 -> 不一致 ©更新db成功+淘汰缓存失败 -> 不一致

缓存穿透:查询一定不存在的数据,会穿透缓存直接压到数据库,从而导致缓存失去作用,如果有人利用这个漏洞,大量查询一定不存在的数据,会对数据库造成压力,甚至打挂数据库。解决方案:布隆过滤器 或者 简单的方案,查询不存在的key,也把空结果写入缓存(设置较短的过期淘汰时间),从而降低命失

缓存雪崩:如果大量缓存在一个时刻同时失效,则请求会转到DB,则对DB形成压迫,导致雪崩。简单的解决方案是为缓存失效时间添加随机值,降低同一时间点失效淘汰缓存数,避免集体失效事件发生

但缓存是针对读,如果写的压力很大,怎么办?

高写入:消息中间件

同理,通过跟主库加机器,耗费的机器资源是很大的,这个就是数据库系统的特点所决定的。

相同的资源下,数据库系统太重太复杂,所以并发承载能力就在几千/s的量级,所以此时你需要引入别的一些技术。

比如说消息中间件技术,也就是MQ集群,它是非常好的做写请求异步化处理,实现削峰填谷的效果。

消息队列能做解耦,在只需要最终一致性的场景下,很适合用来配合做流控。

假如说,每秒是1万次写请求,其中比如5千次请求是必须请求过来立马写入数据库中的,但是另外5千次写请求是可以允许异步化等待个几十秒,甚至几分钟后才落入数据库内的。

那么此时完全可以引入消息中间件集群,把允许异步化的每秒5千次请求写入MQ,然后基于MQ做一个削峰填谷。比如就以平稳的1000/s的速度消费出来然后落入数据库中即可,此时就会大幅度降低数据库的写入压力。

业界有很多著名的消息中间件,比如ZeroMQ,rabbitMQ,kafka等。

消息队列本身也跟缓存系统一样,可以用很少的资源支撑很高的并发请求,用它来支撑部分允许异步化的高并发写入是很合适的,比使用数据库直接支撑那部分高并发请求要减少很多的机器使用量。

避免挤兑:流控

再强大的系统,也怕流量短事件内集中爆发,就像银行怕挤兑一样,所以,高并发另一个必不可少的模块就是流控。

流控的关键是流控算法,有4种常见的流控算法。

计数器算法(固定窗口):计数器算法是使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略,下一个周期开始时,进行清零,重新计数,实现简单。计数器算法方式限流对于周期比较长的限流,存在很大的弊端,有严重的临界问题。

滑动窗口算法:将时间周期分为N个小周期,分别记录每个小周期内访问次数,并且根据时间滑动删除过期的小周期,当滑动窗口的格子划分的越多,那么滑动窗口的滚动就越平滑,限流的统计就会越精确。此算法可以很好的解决固定窗口算法的临界问题。

漏桶算法:访问请求到达时直接放入漏桶,如当前容量已达到上限(限流值),则进行丢弃(触发限流策略)。漏桶以固定的速率进行释放访问请求(即请求通过),直到漏桶为空。分布式环境下实施难度高。

令牌桶算法:程序以r(r=时间周期/限流值)的速度向令牌桶中增加令牌,直到令牌桶满,请求到达时向令牌桶请求令牌,如获取到令牌则通过请求,否则触发限流策略。分布式环境下实施难度高。

4、高并发的实践经验

接入-逻辑-存储是经典的互联网后端分层,但随着业务规模的提高,逻辑层的复杂度也上升了,所以,针对逻辑层的架构设计也出现很多新的技术和思路,常见的做法包括系统拆分,微服务。

除此之外,也有很多业界的优秀实践,包括某信服务器通过协程(无侵入,已开源libco)改造,极大的提高了系统的并发度和稳定性,另外,缓存预热,预计算,批量读写(减少IO),池技术等也广泛应用在实践中,有效的提升了系统并发能力。

为了提升并发能力,逻辑后端对请求的处理,一般会用到生产者-消费者多线程模型,即I/O线程负责网络IO,协议编解码,网络字节流被解码后产生的协议对象,会被包装成task投入到task queue,然后worker线程会从该队列取出task执行,有些系统会用多进程而非多线程,通过共享存储,维护2个方向的shm queue,一个input q,一个output q,为了提高并发度,有时候会引入协程,协程是用户线程态的多执行流,它的切换成本更低,通常有更好的调度效率。

另外,构建漏斗型业务或者系统,从客户端请求到接入层,到逻辑层,到DB层,层层递减,过滤掉请求,Fail Fast(尽早发现尽早过滤),嘴大屁眼小,哈哈。

漏斗型系统不仅仅是一个技术模型,它也可以是一个产品思维,配合产品的用户分流,逻辑分离,可以构建全方位的立体模型。

5、小结

莫让浮云遮望眼,除去繁华识真颜。我们不能掌握了大方案,吹完了牛皮,而忽视了编程最本质的东西,掌握最基本最核心的编程能力,比如数据架构和算法,设计,惯用法,培养技术的审美,也是很重要的,既要致高远,又要尽精微。

按服务器的处理器架构(也就是服务器CPU所采用的指令系统)划分把服务器分为CISC架构服务器、RISC架构服务器和VLIW架构服务器三种。 CISC的英文全称为“Complex Instruction Set Computer”,即“复杂指令系统计算机”,从计算机诞生以来,人们一直沿用CISC指令集方式。早期的桌面软件是按CISC设计的,所以,微处理器(CPU)厂商一直在走CISC的发展道路,包括Intel、AMD,还有其他一些已经更名的厂商,如TI(德州仪器)、Cyrix以及VIA(威盛)等。在CISC微处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢。CISC架构的服务器主要以IA-32架构(Intel Architecture,英特尔架构)为主,而且多数为中低档服务器所采用。

如果企业的应用都是基于NT平台的应用,那么服务器的选择基本上就定位于IA架构(CISC架构)的服务器。如果企业的应用主要是基于Linux操作系统,那么服务器的选择也是基于IA结构的服务器。如果应用必须是基于Solaris的,那么服务器只能选择SUN服务器。如果应用基于AIX(IBM的Unix操作系统)的,那么只能选择IBM Unix服务器(RISC架构服务器)。 台式服务器也称为“塔式服务器”。有的台式服务器采用大小与普通立式计算机大致相当的机箱,有的采用大容量的机箱,像个硕大的柜子。低档服务器由于功能较弱,整个服务器的内部结构比较简单,所以机箱不大,都采用台式机箱结构。这里所介绍的台式不是平时普通计算机中的台式,立式机箱也属于台式机范围,这类服务器在整个服务器市场中占有相当大的份额。

优点:塔式服务器它的外形以及结构都跟我们平时使用的立式PC差不多,由于服务器的主板扩展性较强、插槽也多出一堆,所以个头比普通主板大一些,因此塔式服务器的主机机箱也比标准的ATX机箱要大,一般都会预留足够的内部空间以便日后进行硬盘和电源的冗余扩展。

由于塔式服务器的机箱比较大,服务器的配置也可以很高,冗余扩展更可以很齐备,所以它的应用范围非常广,应该说目前使用率最高的一种服务器就是塔式服务器。

缺点:目前常见的入门级和工作组级服务器基本上都采用这一服务器结构类型,不过由于只有一台主机,即使进行升级扩张也有个限度,所以在一些应用需求较高的企业中,单机服务器就无法满足要求了,需要多机协同工作,而塔式服务器个头太大,独立性太强,协同工作在空间占用和系统管理上都不方便,这也是塔式服务器的局限性。不过,总的来说,这类服务器的功能、性能基本上能满足大部分企业用户的要求,其成本通常也比较低,因此这类服务器还是拥有非常广泛的应用支持。 机架式服务器的外形看来不像计算机,而像交换机,有1U(1U=175英寸)、2U、4U等规格。机架式服务器安装在标准的19英寸机柜里面。这种结构的多为功能型服务器。

优点:作为为互联网设计的服务器模式,机架服务器是一种外观按照统一标准设计的服务器,配合机柜统一使用。可以说机架式是一种优化结构的塔式服务器,它的设计宗旨主要是为了尽可能减少服务器空间的占用,而减少空间的直接好处就是在机房托管的时候价格会便宜很多。

很多专业网络设备都是采用机架式的结构(多为扁平式,就像个抽屉),如交换机、路由器、硬件防火墙这些。机架服务器的宽度为19英寸,高度以U为单位(1U=175英寸=4445毫米),通常有1U,2U,3U,4U,5U,7U)几种标准的服务器。机柜的尺寸也是采用通用的工业标准,通常从22U到42U不等;机柜内按U的高度有可拆卸的滑动拖架,用户可以根据自己服务器的标高灵活调节高度,以存放服务器、集线器、磁盘阵列柜等网络设备。服务器摆放好后,它的所有I/O线全部从机柜的后方引出(机架服务器的所有接口也在后方),统一安置在机柜的线槽中,一般贴有标号,便于管理。

缺点:机架式服务器因为空间比塔式服务器大大缩小,所以这类服务器在扩展性和散热问题上受到一定的限制,配件也要经过一定的筛选,一般都无法实现太完整的设备扩张,所以单机性能就比较有限,应用范围也比较有限,只能专注于某一方面的应用,如远程存储和Web服务的提供等 在一些高档企业服务器中由于内部结构复杂,内部设备较多,有的还具有许多不同的设备单元或几个服务器都放在一个机柜中,这种服务器就是机柜式服务器。

对于证券、银行、邮电等重要企业,则应采用具有完备的故障自修复能力的系统,关键部件应采用冗余措施,对于关键业务使用的服务器也可以采用双机热备份高可用系统或者是高性能计算机,这样的系统可用性就可以得到很好的保证。 刀片式服务器是一种HAHD(High Availability High Density,高可用高密度)的低成本服务器平台,是专门为特殊应用行业和高密度计算机环境设计的,其中每一块“刀片”实际上就是一块系统母板,类似于一个个独立的服务器。在这种模式下,每一个母板运行自己的系统,服务于指定的不同用户群,相互之间没有关联。不过可以使用系统软件将这些母板集合成一个服务器集群。在集群模式下,所有的母板可以连接起来提供高速的网络环境,可以共享资源,为相同的用户群服务。当前市场上的刀片式服务器有两大类:一类主要为电信行业设计,接口标准和尺寸规格符合PICMG(PCI Industrial Computer Manufacturer's Group)1x或2x,未来还将推出符合PICMG 3x 的产品,采用相同标准的不同厂商的刀片和机柜在理论上可以互相兼容;另一类为通用计算设计,接口上可能采用了上述标准或厂商标准,但 尺寸规格是厂商自定,注重性能价格比,属于这一类的产品居多。刀片式服务器目前最适合群集计算和IxP提供互联网服务。

优点:刀片服务器适用于数码媒体、医学、航天、军事、通讯等多种领域。其中每一块“刀片”实际上就是一块系统主板。它们可以通过本地硬盘启动自己的操作系统,如Windows NT/2000、Linux、Solaris等等,类似于一个个独立的服务器。

在这种模式下,每一个主板运行自己的系统,服务于指定的不同用户群,相互之间没有关联。不过可以用系统软件将这些主板集合成一个集群服务器。在集群模式下,所有的主板可以连接起来提供高速的网络环境,可以共享资源,为相同的用户群服务。在集群中插入新的“刀片”,就可以提高整体性能。而由于每块“刀片”都是热插拔的,所以,系统可以轻松地进行替换,并且将维护时间减少到最小。值得一提的是,系统配置可以通过一套智能KVM和9个或10个带硬盘的CPU板来实现。CPU可以配置成为不同的子系统。一个机架中的服务器可以通过新型的智能KVM转换板共享一套光驱、软驱、键盘、显示器和鼠标,以访问多台服务器,从而便于进行升级、维护和访问服务器上的文件。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 计算机网络的组成和体系结构

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情