一个典型的大型互联网应用系统面临的主要挑战来自对性能,可用性,和可扩展的高要求,同时又在成本,安全和规模上有各种限制。以下为针对上述问题提出的针对性的技术方案。
1. 高性能技术方案
1.1 读写分离:本质是通过主从架构将访问压力分散到集群中的多个节点,但没有分散存储压力。其实现逻辑简单,但需要处理好主从复制延迟和分配机制。
解决主从复制延迟常用的技术手段:
1) 写操作后的读操作指定发给主服务器;
2) 二次读取:读从机失败后再读一次主机;
3)非关键业务采用读写分离,关键业务全部使用主机;
1.2 分库分表:即分散访问压力,又分散存储压力
按照业务模块将数据分散到不同的数据库服务器。
产生的问题是:1)join查询变复杂;2)事务问题不好解决,分布式事务性能不够理想;3)成本问题
1.3 NoSQL
关系型数据库的缺点:
1)存储的为行记录,无法存储数据结构;
2)schema扩展不方便,修改可能会长时间锁表
3)大数据场景下IO较高
4)全文搜索较弱,只能使用like进行全表扫描,性能低。
NoSQL方案分为四类:
1)KV存储:解决关系型数据库无法存储数据结构的问题,以redis为代表;
2)Document数据库:解决关系数据库强schema约束的问题,以MongoDB为代表;
3)Column数据库:解决关系型数据库大数据场景下的IO问题,以HBase为代表;
4)全文搜索:解决全文搜索问题,以ES为代表;
1.4 缓存
主要弥补存储系统在复杂业务场景下的不足,将可能重复使用的数据放在内存中,一次生成,多次使用,避免每次使用都去访问存储系统。TPS可高达数万以上。
其面临的主要问题是:
1)缓存穿透;2)缓存雪崩;3)缓存热点
1.5 负载均衡
负载均衡系统主要包括3种:DNS负载均衡;硬件负载均衡;软件负载均衡。
负载均衡算法:轮询;加权轮询;负载最低优先;性能最优;Hash
2. 高可用技术方案
存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余实现。
其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致问题。
1)双机架构
常见的双机高可用架构包括:主备;主从;主备/主从切换和主主。
2)异地多活架构
异地多活的关键点是将数据存储到不同地理位置来提供业务服务。
方案包括:同城异区;跨城异地;跨国异地
其代价是系统复杂度变高;成本高。
3. 可扩展技术方案
1)分层架构
其核心是保证各层差异清晰,边界明显,从而更好的支撑系统扩容,本质在于隔离关注点,即每隔层只处理本层的逻辑,降低了系统的复杂度。例如MVC架构。
2)微服务架构
微服务架构的关键词为:服务 小,轻,自动化。
其容易产生的问题为:
1)服务划分过细,服务间关系复杂;
2)服务数量太多,团队效率下降;
3)调用链太长,性能下降;
4)问题定位困难
5)对运维要求高,需要快速交付和服务治理