发布时间:2020-11-20 分类: 行业资讯
如果您有经验丰富的企业家精神,经验丰富的快速迭代,经历了越来越多的用户群,并且经历了越来越多的并发访问,您肯定会遇到以下系统问题:
用户对页面的访问速度变慢
系统性能下降,数据库无法抑制,连接数通常已满,数据库最终被挂起,重启后很快挂起
改变了一个小地方,另一个看似无关紧要的地方挂起,严重耦合
如果您没有经历过,可能是:
我已经在这一步中死了。
在所谓的大公司,使用所谓的先进架构系统
在冒险的早期,我遇到了上面提到的痛点。很容易想到三种分离的结构:
动态分离:可以将静态页面/资源的访问速度提高100倍以上。有关详细信息,请参见《必备,动静分离架构实践》
。读写分离:可以线性快速扩展数据库的读取性能,参见《必备,读写分离架构实践》
前后分离:前台和后台的数据和访问是分开的,这是本文将关注的内容
I.业务场景简介
虚拟业务类似于租房的业务场景,该业务有两种数据来源:
用户发布的数据
爬虫从竞争对手抓取的数据
此业务有两种类型的用户:
普通用户,浏览和发布数据,俗称“ldquo;前端用户”
后台用户,操作和管理数据,俗称“后台用户”
在启动时,为了快速迭代,系统架构如下:
Web层:前端Web,后台Web
任务层:抓取数据
数据层:存储数据
二,数据耦合问题
系统中有两种类型的数据源,一种是用户发布的数据,另一种是爬虫爬行的数据。两种数据的特征是不同的:
自有数据相对结构化,几乎没有变化
有许多数据源需要抓取,数据结构变化很快
如果您将自己的数据和爬网数据合并到一个库中,通常会发生以下情况:
- >抓取数据结构变化
- >需要修改数据结构
- >影响前端用户演示
- >经常修改前端用户表示逻辑以匹配爬网升级
如果你经历过这个过程,并且痛苦不会产生,那么没有人愿意再次回忆起它。
优化思路:前置显示数据,后台捕获数据分离,去耦。
如上所示:
前台显示稳定的数据,独立于图书馆
在后台捕获的多变量数据,独立于库
将异步转换任务添加到任务层
所以这样:
经常更改爬虫,以及爬行异构数据存储,解耦
前端数据和Web都不需要被动升级
即使出现问题,前端用户的发布和呈现也不会影响
三,系统耦合问题
以上解决了不同数据源写入的耦合问题,然后研究了前台用户访问和后台用户访问之间的耦合问题。
在用户方面,前台访问的特征是:
限制访问模式
访问量很大,DAU没有达到数百万,我很尴尬地说它是一个互联网C端产品
对访问延迟敏感,如果访问速度慢,则用户会丢失
服务可用性要求很高,系统经常不使用,用户会再来
对数据一致性的要求很高,与用户体验相关的问题是一件大事
在操作方面,后台访问的特征是:
有多种访问模式,操作和销售各种异形,大容量分页,查询要求
用户数量少,访问量少
访问延迟不是那么敏感,大规模分页,几十秒就能产生结果,也可以接受
容忍可用性能,系统挂起,10分钟内重启即可回复,也可以接受
一致性要求始终是,30秒后,数据也可以被接受
前台和后台模式与访问要求不同,但如果前台和后台混合使用同一组服务和结构化数据,则会导致:
后台的低性能访问对前端用户产生了巨大的影响,而且本质上是耦合的
随着数据量的增大,为了确保前端用户的延迟和质量,请对子库表进行一些类似的升级。一旦数据库发生变化,许多背景要求可能难以满足
优化思路:冗余数据,前台和后台服务以及数据分离,解耦。
如上所示:
解耦前端和后台独立服务和数据
如果出现问题,则不会相互影响
通过不同的技术解决方案,可以使用不同的服务栈来满足不同容差和不同服务要求下的各自需求。如上图所示,ES或hive用于后台的数据存储以满足这种情况。销售各种异形,大容量分页,查询要求“
四,总结
在风险投资的早期阶段,快速实施架构优化,提高“三分离”优化工具的性能:
动态分离:可以将静态页面/资源的访问速度提高100多倍
读写分离:能够快速,线性地扩展数据库读取性能
之前和之后的分离:数据分离和前景与背景之间的访问
[本文是51CTO专栏作者“ 58沉剑”原稿,转载请联系原作者]