目录
一、常见概念
1.1基本概念
二、架构演进
2.1单机架构
2.2应用数据分离架构
2.3应用服务集群架构
2.4读写分离 / 主从分离架构
2.5引入缓存 —— 冷热分离架构
2.6垂直分库
2.7业务拆分 —— 微服务
一、常见概念
1.1基本概念
应用(Application)/ 系统(System):
为了完成一整套服务的一个程序或者一组相互配合的程序群。
模块(Module)/ 组件(Component):
当应用较复杂时,为了分离职责,将其中具有清晰职责的、内聚性强的部分,抽象出概念,便于
理解。
分布式(Distributed):
系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。
集群(Cluster):
被部署于多台服务器上的、为了实现特定目标的一个/组特定的组件,整个整体被称为集群。比如
多个 MySQL 工作在不同服务器上,共同提供数据库服务目标,可以被称为一组数据库集群。
主(Master)/ 从(Slave):
集群中,通常有一个程序需要承担更多的职责,被称为主;其他承担附属职责的被称为从。
中间件(Middleware):
一类提供不同应用程序用于相互通信的软件,即处于不同技术、工具和数据库之间的桥梁。
可用性(Availability):
考察单位时间段内,系统可以正常提供服务的概率/期望。例如: 年化系统可用性 = 系统正常提供
服务时长 / 一年总时长。
响应时长(Response Time RT):
指用户完成输入到系统给出用户反应的时长。
吞吐(Throughput)vs 并发(Concurrent):
吞吐考察单位时间段内,系统可以成功处理的请求的数量。并发指系统同一时刻支持的请求最高
量。
二、架构演进
2.1单机架构
初期,我们需要利用我们精干的技术团队,快速将业务系统投入市场进行检验,并且可以迅速响
应变化要求。但好在前期用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构(应用服务和数据库服务共用同一台服务器)是合适的。
出现原因:出现在互联网早期,访问量较小,单机足以满足需求
架构工作原理:以电子商城为例,可以看到通过应用和数据库在单个服务器上协作完成业务运行
架构优点:部署简单、成本低
架构缺点:存在严重的性能瓶颈,数据库和应用互相竞争资源
2.2应用数据分离架构
随着系统的上线,我们不出意外地获得了成功。市场上出现了一批忠实于我们的用户,使得系统
的访问量逐步上升,逐渐逼近了硬件资源的极限,同时团队也在此期间积累了对业务流程的一批经
验。面对当前的性能压力,我们需要未雨绸缪去进行系统重构、架构挑战,以提升系统的承载能力。但由于预算仍然很紧张,我们选择了将应用和数据分离的做法,可以最小代价的提升系统的承载能力。
和之前架构的主要区别在于将数据库服务独立部署在同一个数据中心的其他服务器上,应用服务通过网络访问数据。
2.3应用服务集群架构
负载均衡:为了解决用户流量向哪台应用服务器分发的问题,需要一个专门的系统组件做流
量分发。实际中负载均衡不仅仅指的是工作在应用层的,甚至可能是其他的网络层之中。同时流量调度算法也有很多种。
2.4读写分离 / 主从分离架构
保留一个主要的数据库作为写入数据库,其他的数据库作为从属数据库。从库的所有数据全部来自主库的数据,经过同步后,从库可以维护着与主库一致的数据。然后为了分担数据库的压力,我们可以将写数据请求全部交给主库处理,但读请求分散到各个从库中。由于大部分的系统中,读写请求都是不成比例的,例如 100 次读 1 次写,所以只要将读请求由各个从库分担之后,数据库的压力就没有那么大了。当然这个过程不是无代价的,主库到从库的数据同步其实是由时间成本的
2.5引入缓存 —— 冷热分离架构
随着访问量继续增加,发现业务中一些数据的读取频率远大于其他数据的读取频率。我们把这部
分数据称为热点数据,与之相对应的是冷数据。针对热数据,为了提升其读取的响应时间,可以增加本地缓存,并在外部增加分布式缓存,缓存热门商品信息或热门商品的 html 页面等。通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。其中涉及的技术包括:使用memcached作为本地缓存,使用 Redis 作为分布式缓存,还会涉及缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题。
2.6垂直分库
随着业务的数据量增大,大量的数据存储在同一个库中已经显得有些力不从心了,所以可以按照
业务,将数据分别存储。比如针对评论数据,可按照商品ID进行hash,路由到对应的表中存储;针对支付记录,可按照小时创建表,每个小时表继续拆分为小表,使用用户ID或记录编号来路由数据。只要实时操作的表数据量足够小,请求能够足够均匀的分发到多台服务器上的小表,那数据库就能通过水平扩展的方式来提高性能。
2.7业务拆分 —— 微服务
随着人员增加,业务发展,我们将业务分给不同的开发团队去维护,每个团队独立实现自己的微
服务,然后互相之间对数据的直接访问进行隔离,可以利用 Gateway、消息总线等技术,实现相互之间的调用关联。甚至可以把一些类似用户管理、安全管理、数据采集等业务提成公共服务。
- 至此,一个还算合理的高可用、高并发系统的基本雏形已显。注意,以上所说的架构演变顺序只是针对某个侧面进行单独的改进,在实际场景中,可能同一时间会有几个问题需要解决,或者可能先达到瓶颈的是另外的方面,这时候就应该按照实际问题实际解决。如在政府类的并发量可能不大,但业务可能很丰富的场景,高并发就不是重点解决的问题,此时优先需要的可能会是丰富需求的解决方案。
- 对于单次实施并且性能指标明确的系统,架构设计到能够支持系统的性能指标要求就足够了,但要留有扩展架构的接口以便不备之需。对于不断发展的系统,如电商平台,应设计到能满足下一阶段用户量和性能指标要求的程度,并根据业务的增长不断的迭代升级架构,以支持更高的并发和更丰富的业务。
- 所谓的“大数据”其实是海量数据采集清洗转换、数据存储、数据分析、数据服务等场景解决方案的一个统称,在每一个场景都包含了多种可选的技术,如数据采集有Flume、Sqoop、Kettle等,数据存储有分布式文件系统HDFS、FastDFS,NoSQL数据库HBase、MongoDB等,数据分析有Spark技术栈、机器学习算法等。总的来说大数据架构就是根据业务的需求,整合各种大数据组件组合而成的架构,一般会提供分布式存储、分布式计算、多维分析、数据仓库、机器学习算法等能力。而服务端架构更多指的是应用组织层面的架构,底层能力往往是由大数据架构来提供。