架构师 0 期第四周命题作业
大型互联网应用系统,主要需要解决三个方面的问题:高性能,高可用,可扩展
有以下方面的技术手段:
(1)数据库读写分离
读写分离的基本原理是将数据库读写操作分散到不同的节点上,其本质是将访问压力分散到集群的多个节点上。读写分离的基本实现是:
数据库服务器搭建主从集群,一主一从,一主多从都可以。
数据库主机负责读写操作,从机只负责读操作。
数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。
业务服务器将写操作发给数据库主机,将读操作发给数据库从机。
(2)数据库分表分库
当数据量达到千万甚至上亿条的时候,单台数据库服务器的存储能力会成为系统的瓶颈。数据量太大,读写的性能会下降,即使有索引,索引也会变得很大,性能同样会下降。数据文件同样也会变得很大,数据库备份和恢复需要耗费很长的时间。数据库文件越大,极端情况下丢失数据风险越高。
基于上述原因,单个数据库服务器存储的数据量不能太大,需要控制在一定的范围内。为了满足业务数据存储的需求,就需要将存储分散到多台数据库服务器上。
分库分表的方式主要有:
业务分库:按照业务模块将数据分散到不同的数据库服务器
垂直分表:把单个表的字段切分到不同的表中
水平分表:把单个表的不同记录分到多个表中
(3)高性能NoSQL
NoSQL数据库主要是用来弥补关系型数据库的缺点。关系型数据库主要有如下缺点:
关系数据库存储的是行记录,无法存粗数据结构
关系数据库的schema扩展很不方便
关系数据库在大数据场景下I/O较高
关系数据库的全文搜索功能比较弱
针对上述问题,分别诞生了不同的NoSQL解决方案,这些方案与关系数据库相比,在某些应用场景下表现更好。但世上没有免费的午餐,NoSQL方案带来的优势,本质上是牺牲ACID中某个或者某几个特性。
常见的NoSQL方案分为4类
K-V 存储:解决关系数据库无法存储数据结构的问题,以Redis为代表。
文档数据库:解决关系数据库强schema约束的问题,以MongoDB为代表。
列式数据库:解决关系数据库大数据场景下的I/O问题,以HBase为代表。
全文搜索引擎:解决关系数据库的全文搜索性能问题,以Elasticsearch代表。
(4)高性能负载均衡
单服务器无论如何优化,无论采用多好的硬件,总会有一个性能天花板,当单个服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理能力。高性能集群设计的复杂度主要体现在任务分配这部分,需要设计合理的任务分配策略,将计算任务分配到多台服务器上执行。这个就是所谓的负载均衡。
负载均衡系统主要有3种:DNS负载均衡,硬件负载均衡和软件负载均衡。
(5)双机架构
存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致的问题。
常见的双机高可用架构有:
主备复制:主机负责读写,备机平时只负责从主机中复制数据,当主机异常时,通过人工切换到备机
主从复制:主机负责读写,备机负责响应用户读操作,并且负责与主机进行数据同步,当主机异常时,通过人工把从机设置为主机。
双机切换:双机切换主要是解决上述两种复制存在的需要人工干预的问题,做到切换自动化。
主主复制:两台机器都是主机,互相将数据复制给对方,客户端可以任意挑选其中一台机器进行读写操作。
(6)异地多活架构
顾名思义,异地多活架构的关键点就是异地,多活,其中异地就是指地理位置上不同的地方,多活就是指不同地理位置上的系统都能提供业务服务。异地多活架构主要解决在极端情况下一个地方的所有服务器同时宕机的情况。
(7)微服务架构
评论