成为一个合格的架构师,一定会面临以下九大场景,80个架构问题。画外音:(1)文章较长,建议收藏;(2)文章底部有视频版本;【第一章:技术选型】创业初期架构方案怎么选型?(1)要考虑业务的需求与特点,初期往往“快速实现”更重要,此时系统的特点是请求量小,数据量小,服务器资源也非常有限;(2)这个阶段最重要的选型依据是:合伙人熟悉什么技术栈,使用什么技术栈;(3)第一版往往采用ALL in one架构;(4)这个阶段研发主要在写CURD业务逻辑,引入DAO和ORM能极大提高工程效率;画外音:什么是ALL in one架构?。如果硬要问我,会选择什么技术栈,我会二选一:PHP体系(Linux,Apache,MySQL,PHP)或者Java体系(Linux,Tomcat,MySQL,Java)使用开源框架组件还是自研?我的观点是:(1)早期不建议自研;(2)随着规模的扩大,要控制技术栈;(3)要浅浅的封装一层;(4)适当的时候,造一些契合业务的轮子;画外音:为什么要控制技术栈?为什么要封装一层?什么情况下要进行容量评估?至少在三种情况下,要进行容量评估:(1)新系统上线;(2)临时运营活动;(3)系统容量有质变性增长;系统层面,要评估哪些重要指标?主要评估网络带宽、CPU、内存容量、磁盘容量、磁盘IO等资源指标,系统层面主要看吞吐量指标。画外音:容量设计五大步骤是啥?创业初期,系统层面存在瓶颈的时候,优化原则是什么?(1)最低成本,初期最大的成本是时间成本;(2)用“钱”和“资源”快速解决系统问题,而不是过早的系统重构;(3)将ALL in one架构升级为伪分布式架构,是此阶段的最佳实践;伪分布式的核心是什么?伪分布式的本质是单机变多机,但又不是真正的高可用,其核心是垂直拆分:(1)业务垂直拆分;(2)代码垂直拆分;(3)数据库垂直拆分;(4)研发团队垂直拆分;画外音:伪分布式的优化细节是啥?【第二章:接入层架构】如何解决接入层的扩展性问题?引入反向代理。最常见的反向代理是什么?Nginx。引入反向代理之后,要解决什么新的问题?(1)集群负载均衡;(2)反向代理高可用;画外音:有哪些常见的负载均衡方法?如何保证反向代理高可用?站点流量从小到大,接入层架构如何演进?整体可以分为五个阶段:(1)有反向代理技术之前,单体架构要解决扩展性问题,可使用DNS轮询架构;(2)有反向代理技术之后,初期可以使用反向代理解决扩展性问题;(3)然后,需要升级为高可用反向代理架构;(4)多级反向代理,引入LVS&F5进一步扩充性能;(5)想要无限性能,必须用DNS轮询架构;画外音:每个阶段的逻辑与细节到底是怎么样的?Session,是接入层架构非常关注的问题,如何保证Session一致性?通常有四种方案:(1)客户端层解决;(2)反向代理层解决;(3)web-server层解决;(4)后端服务层解决画外音:每种方案细节又是怎么样的?CDN,是接入层不得不谈的问题,CDN架构有哪些要了解?引入CDN架构,至少要考虑这五个问题:(1)什么样的资源适合静态加速;(2)CDN的架构是怎么样的;(3)CDN是怎么实现“就近访问的”;(4)如何保证源站和镜像站数据的一致性;(5)资源更新,是推还是拉?画外音:学CDN,千万不要去百度“斯塔尔报告”。TCP接入,架构上要考虑哪些问题?至少要考虑这四个架构设计点:(1)TCP如何快速实现接入;(2)TCP如何快速实现扩展,以及高可用;(3)TCP如何快速实现负载均衡;(4)TCP如何保证扩展性与耦合性的平衡;画外音:有没有综合方案,系统性解决负载均衡 + 高可用 + 可扩展 + 解耦合等一系列问题?
【第三章:急速性能优化】在互联网公司发展早期,为了产品快速迭代,最常使用的架构是什么?ALL in one架构。如果此时业务发展很快,系统成了瓶颈,架构优化的方向是什么?用最短时间,以对代码最小的冲击,极速扩充系统性能。早期如何快速的扩充系统性能?使用三大分离的性能优化方法。早期系统容易“白屏”,如何快速的提升用户体验,消除白屏?动静分离。什么是动静分离?动静分离,是“静态页面与动态页面,分开不同的系统访问”的架构设计方法。画外音:如何来实施?分别对应怎样的技术点?如果静态页面访问这么快,动态页面访问这么慢,能否将“原本需要动态生成的页面,提前生成静态页面”?可以,这是“页面静态化”技术,能够100倍提升访问速度。画外音:这个技术适用怎么样的业务场景?早期系统的主要瓶颈,最容易出现在哪里?数据库读性能扛不住。如何快速提升数据库读性能?读写分离,使用数据库分组架构,一主多从,主从同步,读写分离。画外音:读写分离,水平切分都是使用数据库集群,有什么异同?后台运营系统,复杂的SQL语句对数据库性能影响较大,怎么办?前台与后台分离。画外音:前后端分离,前台后台分离,是一回事么?如何快速实施前台与后台分离?