系列文章是博主对沈剑的《架构师训练营》分享内容的个人笔记总结,原内容公众号“成为架构师”。
1 架构演进阶段的新需求
原始的All in one 的单机系统无法满足需求,将会主要暴露出以下两个问题
- 访问人多的时候,访问能够快一点 (性能问题)
- 部分出错的时候不要全部挂掉 (耦合问题)
2 单机资源瓶颈产生时的环境
- 此时最大的成本,是时间成本
- 能用“钱”解决的系统问题,往往不是问题
- 老板最不愿意见到的,是解决一个系统问题,花很长时间(市场和投资人等不起)
解决思路:增加硬件资源(时间短),避免大规模代码重构(时间长)
3 架构演进,伪分布式,提升性能
三大分离结构(图中仅两种)
- 读写分离(会引发主从延时的问题)
- 动静分离,图中表现了文件服务器(第三方的OSS也是)与业务逻辑的服务器分离;现代前端,像vue就是动静分离的,对比古典的jsp,就无法实现动静分离
- 前后台分离,客户端访问与后台管理访问分离
设计思路
用最快的速度,增加硬件资源,提升系统性能,增加访问速度
什么问题没有解决
- 耦合问题:依旧是一个挂了全部就挂了
- 主从延时新问题
- 读写分离只能提升读性能,无法解决数据库量的问题
4 垂直拆分,解耦
五八同城早期的页面结构,就像是BBS一样
有四种主要结构:首页、贴子发布页、帖子(分类)列表、帖子详情
四种垂直拆分:
- 业务垂直拆分(拆分的基础和依据,还是沈剑的那句话“脱离业务的架构,都是耍流氓”)
- 代码垂直拆分(子系统解耦)
- 数据库垂直拆分(数据量降低,延时缓解)
- 研发团队垂直拆分(专业化,效率提升)
设计思路
用最快的速度,增加硬件资源,解耦
伪分布式之所以称之为“伪”是因为它在整体系统层面依旧是一个单体,垂直拆分只是子系统之间实现了部分解耦,子系统之间有了一定的隔离性,但它也依旧是一个整体。
下一篇将介绍反向代理,实现真正的多机集群,并讨论nginx的负载均衡问题。
上一篇回顾:【成为架构师2-1】容量设计:流量高低,对架构究竟有什么影响
下一篇更精彩:【成为架构师2-3】反向代理:接入层扩容,负载均衡