三高系统设计

80 阅读3分钟

三高:高性能、高并发、高可用 软件的复杂性分为技术复杂性和业务复杂性,业务复杂性主要是建模和抽象设计,技术复杂性主要是三高(高性能,高并发,高可用)的应对,C端的业务一般以技术复杂性为主,业务复杂性为辅,而B端或者M端的业务通常以业务复杂性为主,技术复杂性为辅。

高性能:

影响系统性能的因素有那些,通常有以下三方面的因素:计算(computation),通信(communication),存储(storage)。计算层面:系统本身的计算逻辑复杂,Fullgc;通信层面:依赖的下游耗时比较高;存储层面:大库大表,慢sql,ES集群的数据节点,索引,分片,分片大小设置的不合理;针对这些问题,我们可以从读写两个维度针对性能问题进行优化。 存储性能:缓存+数据库。 按照读多写少和读少写多,有不同的方案。 读多写少:写时同步更新db,异步刷缓存。读少写多:写时同步更新缓存,异步更新db。

高并发:

提到高并发我们想到的是高吞吐,流量洪峰;如何提高高并发我们可以从单机的性能优化,和集群的扩展来进行提高我们系统的并发能力,其实系统的高性能直接就提高了系统的高并发,上面的高性能篇主要是从单机的维度提高处理的速度来提高单机的并发处理能力,本章主要从集群的维度通过扩展:水平扩展,纵向扩展,垂直扩展三维立体来提高系统的并发能力。 水平扩展:应用层无状态,机器扩容。存储层有状态,涉及分片和数据迁移。 纵向扩展:微服务拆分 垂直扩展:存储层扩展

高可用:

保证系统的可用性是系统建设中的重中之重,如果没有可用性,高性能和高并发也无从谈起,高可用的建设通常是通过保护系统和冗余的方法来进行容错保证系统的可用性。本篇主要从三个维度:应用层,存储层,部署层谈下可用性的建设。 应用层:限流熔断降级隔离、超时重试、兼容 存储层:复制、分片 部署层:异地多活、多机房多集群、单元化

环境隔离:开发/测试/灰度/生产 数据隔离:逻辑多租和物理多租 核心/非核心流程隔离 读写隔离:应用层面通过读写隔离主要解决可扩展问题,存储层面主要解决性能和吞吐量的问题。 线程池隔离

存储层: 复制:是一份数据的完整的拷贝,思想是通过冗余保证高可用。复制又可以分为:主从复制,多主复制,无主复制。 分片:分区也称为分片,对于非常大的数据集在单节点进行存储时,一方面可用性比较低(鸡蛋放在同一个篮子中),另一方面也会遇到存储和性能的瓶颈,我们需要将大的数据集通过负载均衡分片到不同的节点上,每条数据(每条记录,每行或每个文档)属于且仅属于一个分区,每个分区都是自己的小型数据库。

部署层:核心思想是通过冗余以及负载均衡进行容灾保证高可用。