高可扩展性系统的设计(上)

简介: 高可扩展性系统的设计(上)

架构设计的高可扩展性表示可通过加机器线性提高系统处理能力,承担更高流量和并发。


由于峰值的流量不可控,不可能在系统架构设计初期就考虑好机器数量以支持并发。


一般基于成本考虑,在业务平稳期,会预留30%~50%冗余机器应对运营活动或者推广可能带来的峰值流量,但当有突发事件时,流量可能瞬间提升几倍。莫过于明星公布恋情,大家都会到两人微博下互动,微博流量短时内迅速增长,微博信息流也短暂出现无法刷新消息,系统一时间不可用。


所以如何应对突发的流量呢?

最快的方式就是堆机器。不过能保证扩容三倍机器后,系统也能支撑三倍的流量吗?

系统瓶颈在哪里?

通过在单机系统中增加处理核心,可增加系统的并行处理能力,但当并行任务数较多时,系统会因为争抢资源而达到性能拐点,处理能力不升反降。

集群系统也是这样。不同的系统分层上可能存在一些“瓶颈”,这些瓶颈点制约着统的横向扩展能力。

比如系统流量1000 QPS,对DB也是1000 QPS。若流量增加10倍,虽然系统可通过扩容正常服务,DB却成瓶颈。或单机网络带宽50Mbps,若扩容到30台机器,前端负载均衡带宽就超过千兆带宽限制,也会成为瓶颈点。

所以系统中存在哪些服务会成为系统扩展的瓶颈呢?


无状态的服务和组件很易于扩展,但是MySQL这种存储服务有状态,较难扩展。因为向存储集群中增减机器时,涉及大量数据迁移,一般关系型DB都不支持。

DB、缓存、依赖的第三方、负载均衡、交换机带宽等都是系统扩展时需考虑因素。得清楚系统并发达到某量级后,哪个因素会成为系统瓶颈点,从而对症下药。

高可扩展性设计

拆分,把庞杂系统拆分成独立、单一职责的模块。

注意对不同类型模块,拆分原则不同。假如设计一个知乎,那么会有几个模块呢?至少5个模块。

用户:负责维护社区用户信息,注册,登陆等;

关系:用户之间关注、好友、拉黑等关系的维护;

内容:社区发的内容,就像朋友圈或者微博的内容;

评论、赞:用户可能会有的两种常规互动操作;

搜索:用户的搜索,内容的搜索。


部署方式遵照最简单三层部署架构


负载均衡负责请求的分发

应用服务器负责业务逻辑的处理

数据库负责数据的存储落地

所有模块的业务代码混合,数据也都存在一个库。


目录
相关文章
|
6月前
|
算法 Linux C++
C++框架设计中实现可扩展性的方法
在软件开发中,可扩展性至关重要,尤其对于C++这样的静态类型语言。本文探讨了在C++框架设计中实现可扩展性的方法:1) 模块化设计降低耦合;2) 使用继承和接口实现功能扩展;3) 通过插件机制动态添加功能;4) 利用模板和泛型提升代码复用;5) 遵循设计原则和最佳实践;6) 应用配置和策略模式以改变运行时行为;7) 使用工厂和抽象工厂模式创建可扩展的对象;8) 实现依赖注入增强灵活性。这些策略有助于构建适应变化、易于维护的C++框架。
510 2
|
7月前
|
存储 分布式计算 负载均衡
HadoopHDFS的特点可扩展性
【5月更文挑战第11天】HadoopHDFS的特点可扩展性
171 1
|
消息中间件 存储 数据可视化
【结合业务需求给出合理的技术解决方案,改进现有模块功能,提高系统的可扩展性,封装性,稳定性】
【结合业务需求给出合理的技术解决方案,改进现有模块功能,提高系统的可扩展性,封装性,稳定性】
134 1
|
消息中间件 设计模式 缓存
聊聊结合业务需求给出合理的技术解决方案,改进现有模块功能,提高系统的可扩展性,封装性,稳定性
聊聊结合业务需求给出合理的技术解决方案,改进现有模块功能,提高系统的可扩展性,封装性,稳定性
|
存储 安全 算法
从系统复杂性看软件架构
一、架构设计是为了解决系统复杂性整个软件技术发展的历史,其实就是一部与“复杂性”斗争的历史。架构也是为了应对软件系统复杂性而提出的一个解决方案,其主要目的是为了解决软件系统复杂性带来的问题。这里包括两个名词:系统和复杂性,下面分别对其进行解析1.1 复杂性的定义复杂性这个名词很复杂,麻省理工学院的物理学家塞思·劳埃德统计了复杂性的定义数量,至少有45种:信息 ,熵 ,算法复杂性 ,算法信息量 ,费
10611 2
从系统复杂性看软件架构
|
存储 缓存 运维
系统稳定性设计原则:简单、冗余、标准化、健壮
系统稳定性设计原则:简单、冗余、标准化、健壮
681 0
系统稳定性设计原则:简单、冗余、标准化、健壮
|
存储 SQL 缓存
系统架构设计(3)-可扩展性
即使系统现在可靠,不代表将来一定可靠。发生退化的最常见原因是负载增加:并发用户从最初的10,000 增长到 100,000或系统目前处理数据量超出之前很多倍。
307 0
|
存储 缓存 负载均衡
系统设计:如何让系统容易扩展?
系统设计:如何让系统容易扩展?
411 0
系统设计:如何让系统容易扩展?
|
存储 移动开发 运维
高可扩展性系统的设计(下)
高可扩展性系统的设计(下)
187 0
高可扩展性系统的设计(下)
|
移动开发 运维 小程序
架构设计之高可扩展性(下)
架构设计之高可扩展性(下)
134 0
架构设计之高可扩展性(下)