前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >系统设计:如何让系统容易扩展?

系统设计:如何让系统容易扩展?

作者头像
王小明_HIT
发布2020-07-16 14:11:06
7130
发布2020-07-16 14:11:06
举报
文章被收录于专栏:程序员奇点

系统设计:如何让系统容易扩展?

一个高可扩展性指标,表示可以通过增加机器的方式来线性提高系统的处理能力,从而承担更高的流量或者并发数。

在单机系统中通过增加处理核心数来增加系统的并行处理能力,但是这个方法并不总生效,随着并行的任务增多,系统会因为争夺资源而达到性能上的拐点。系统性能会不升反降。

多台机器组成的机器系统也类似,在集群系统中,不同的分层也存在一些瓶颈。制约横向扩展能力。

举个例子,系统的流量是每秒1000次请求,对数据库请求也是 1000次/s ,单独如果流量增加10倍,系统可以扩容,正常提供服务,但是数据库就成了瓶颈。

再个例子,单机网络的带宽是50Mbps ,如果扩容到 30台机器,前端负载均衡带宽超过了1000Mbps 限制,那么也会成为瓶颈。

无状态的服务和组件更容易扩展,但是数据库这样的存储服务是有状态的,不易扩展。

数据库,缓存,依赖的第三方,负载均衡,交换机带宽,都是系统扩展性的一些因素。

系统扩展性设计思路

拆分是系统扩展性的最重要的思路,把庞大的系统进行拆分,有单一职责的模块,将复杂的问题简单化。

存储层扩展

1.按照业务拆分 存储层扩展首先考虑的维度是业务维度。比如说有个社区系统,开始只有一个库,拆分之后,分成 用户库,关系库,内容库,评论库,点赞库等。

按照业务拆分,一定程度上提升了系统的扩展性,但是系统运行一段时间后,单一的业务拆分不足满足并发请求量上的要求。这个时候需要继续拆分。

2.水平拆分 分库分表。

水平拆分之后,让数据库突破数据库单机的限制,需要注意的是,不能随意增加节点,一旦增加节点,数据需要手动迁移,要基于长期考虑,避免频繁扩容。

但是数据库按照业务和数据维度拆分之后,我们尽量不要使用事务。当一个事务中同时更新不同的数据库时,需要进行分布式事务,来协调所有数据库要么全部更新成功,要么全部失败,这个协调的成本会不断升高。

业务层扩展

可以把相同业务的服务拆分成单独的业务池,业务维度拆分成用户池,内容池,关系池,评论池,点赞池和搜索池。不同的业务依赖不同的数据库资源。

除此之外,还可以使用根据业务接口的重要程度,把业务分成核心池和非核心池。保证核心池的性能,优先扩容核心池,降级部分非核心池的接口,从而保证整体系统的稳定性。

总结

单体应用可扩展性不强,但是维护简单,分成多个系统之后需要多个团队来专门负责,需要团队协作,投入很大精力,总的来说就是业务拆分,不同业务使用不同库,然后对数据库进行分库分表。做横向拆分,提高系统扩展性。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 系统设计:如何让系统容易扩展?
  • 系统扩展性设计思路
    • 存储层扩展
      • 业务层扩展
      • 总结
      相关产品与服务
      负载均衡
      负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档