关于高并发、分布式、集群和云计算
高并发(high currency):互联网分布式系统结构设计中必须考虑的因素之一,指通过设计保证系统能够同时并发处理很多请求。在某个时间点,有多少个访问同时到来。
一、常用指标:
响应时间、吞吐量、每秒查询量QPS(query per seconde),并发用户数等
【响应时间:系统对请求做出响应的时间(如系统处理一个http请求需要200ms,就是响应时间)
QPS:每秒响应请求数
并发用户数:同时承载正常使用系统功能的用户数量。(如一个即时通讯系统,同时在线量也代表了系统的并发用户数)】
二、提高系统并发能力的方式:垂直扩展和水平扩展
垂直扩展:提升单机处理能力。
又分为两种:(1)增强单机硬件性能(例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G;)
(2)提升单机架构性能,例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;
水平扩展:增加服务器数量,可线性扩充系统性能。
三、其他
1、处理高并发的业务逻辑是:
前端:异步请求+资源静态化+cdn
后端:请求队列+轮询分发+负载均衡+共享缓存
数据层:redis缓存+数据分表+写队列
存储:raid阵列+热备
网络:dns轮询+DDOS攻击防护
2、学习高并发的工具:redis、nginx/Tengine、keeplive、DRBD、heartbeat在虚拟机上跑
一、分布式:工作方式。 即一个业务拆分为多个子业务,部署在不同的服务器上。
最简单的分布式就是大家最常用的,在负载均衡服务器后加一堆web服务器,然后在上面搞一个缓存服务器来保存临时状态,后面共享一个数据库,其实很多号称分布式专家的人也就停留于此,大致结构如下图所示:
分布式的每一个节点,都可以用来做集群。而集群不一定就是分布式了。
二、集群:物理形态。即同一个业务,部署在多个服务器上,可以视为一台计算机。
1、多台服务器组成的一组计算机,作为一个整体存在,向用户提供一组网络资源,这些单个的服务器就是集群的节点。
2、两个特点:
可扩展性:集群中的服务节点,可以动态的添加机器,从而增加集群的处理能力。
高可用性:如果集群某个节点发生故障,这台节点上面运行的服务,可以被其他服务节点接管,从而增强集群的高可用性。
3、常用的集群分类
1.高可用集群(High Availability Cluster)
高可用集群,普通两节点双机热备,多节点HA集群。
2.负载均衡集群(Load Balance Cluster)
常用的有 Nginx 把请求分发给后端的不同web服务器,还有就是数据库集群,负载均衡就是,为了保证服务器的高可用,高并发。
3.科学计算集群(High Performance Computing Cluster)
简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。
4、两大能力
负载均衡:负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。
集群容错:当我们的系统中用到集群环境,因为各种原因在集群调用失败时,集群容错起到关键性的作用。
三、云计算平台:一个云计算平台,就是通过一套软件系统把分布式部署的资源集中调度使用。要应对大并发,要实现高可用,既需要分布式,也离不开集群。
四、分布式运用场景:分布式系统有很多种,比如分布式文件系统,分布式数据库,分布式WebService,分布式计算等等,场景不同,运用的分布式思路也不同。
分布式架构的思路主要是:水平扩展和垂直扩展
1、水平扩展(完全平分)
举例子:假设我们有一台服务器,它可以承担1百万/秒的请求,这个请求可以的是通过http访问网页,通过tcp下载文件,jdbc执行sql,RPC调用接口…,现在我们有一条数据的请求是2百万/秒,很显然服务器hold不住了,会各种拒绝访问,甚至崩溃,宕机,怎么办呢。
一台机器解决不了的问题,那就两台。所以我们加一台机器,每台承担1百万。如果请求继续增加呢,两台解决不了的问题,那就三台呗。
这种方式我们称之为水平扩展。如何实现请求的平均分配便是负载均衡了。
2、垂直扩展:(按功能分)
另一个栗子,我们现在有两个数据请求,数据1请求90万,数据2请求80万,上面那台机器也hold不住,我们加一台机器来负载均衡一下,每台机器处理45万数据1和40万数据2,但是平分太麻烦,不如一台处理数据1,一台处理数据2,同样能解决问题,这种方式我们称之为垂直拆分。
五、分布式技术:
1.分布式系统的架构体系
基于对象的体系机构
面向服务的架构(SOA)
REST风格的架构
微服务架构(MSA)
容器技术
Serverless架构
2.分布式消息服务
Apache ActiveMQ
RabbitMQ
RocketMQ
Apache Kafka
3.分布式计算
MapReduce
Apache Hadoop
Apache Spark
Apache Mesos
4.分布式存储
Bigtable
Apache HBase
Apache Cassandra
Memcached
Redis
MongoDB
5.分布式监控
Nagios
Zabbix
Consul
Zookeeper
6.分布式的版本控制
Bazaar
Mercurial
Git
7.RESTfulAPI、微服务及容器技术
Jersey
Spring boot
Docker
常用分布式互联网系统,使用较多的是zookeeper+dubbo组合,而Springboot推荐使用全栈Spring,就是Springboot+SpringCloud。
Cloud与Dubbo的区别,Dubbo解决的就是远程过程调用的RPC服务,而Cloud更全面,它有一整套的分布式需要的对应的解决方案:配置管理、服务发现、熔断、路由、微代理、控制总线、一次性token、全局锁、leader选举、分布式session、集群状态。所以使用Cloud可以更快速的与云平台进行对接。
SpringCloud五大常用组件:
服务发现-Netflix Eureka
客服端负载均衡-Netflix Ribbon
断路器-Netflix Hystrix
服务网关-Netflix Zuul
分布式配置-SpringCloudConfig