必备,前台与后台分离的架构实践

如果你经历过创业,经历过快速迭代业务,经历过用户量不断上涨,经历过访问并发越来越大,你一定会遇到以下系统问题:

  • 用户访问页面越来越
  • 系统性能下降,数据库扛不住,连接数经常打满,最终数据库挂掉,重启后又快速挂掉
  • 改了一个小地方,另外一个看似不相干的地方却挂了,严重耦合

如果你没有经历过,很可能是:

  • 没到这一步项目就死了
  • 身在所谓的大公司,用着所谓先进的架构体系

创业初期遇到上述痛点,很容易想到“三个分离”的架构优化方案:

  • 动静分离:能够100倍以上的提升静态页面/资源的访问速度,详见《必备,动静分离架构实践》
  • 读写分离:能够快速的线性扩充数据库的读性能,详见《必备,读写分离架构实践》
  • 前后分离:前台与后台的数据与访问分离,也就是本文将要重点介绍的内容

一、业务场景介绍

虚拟一个类似于“安居客”租房买房的业务场景,这个业务的数据有两大来源

  • 用户发布的数据
  • 爬虫从竞对抓取来的数据

这个业务对应的系统有两类使用者

  • 普通用户,浏览与发布数据,俗称“前台用户”
  • 后台用户,运营与管理数据,俗称“后台用户”

在一个创业公司,为了快速迭代,系统架构如上:

  • web层:前台web,后台web
  • 任务层:抓取数据
  • 数据层:存储数据

二、数据耦合的问题

系统两类数据源,一类是用户发布的数据,一类是爬虫抓取的数据,两类数据的特点不一样

  • 自有数据相对结构化,变化少
  • 抓取数据源很多,数据结构变化快

如果将自有数据和抓取数据耦合在一个库里,经常出现的情况是:

  • -> 抓取数据结构变化
  • -> 需要修改数据结构
  • -> 影响前台用户展现
  • -> 经常被动修改前台用户展现逻辑,配合抓取升级

如果经历过这个过程,其中的痛不欲生,是谁都不愿意再次回忆起的。

优化思路:前台展现数据,后台抓取数据分离,解耦。

如上图所示:

  • 前台展现的稳定数据,库独立
  • 后台抓取的多变数据,库独立
  • 任务层新增一个异步转换的任务

如此这般:

  • 频繁变化的抓取程序,以及抓取的异构数据存储,解耦
  • 前台数据与web都不需要被动配合升级
  • 即使出现问题,前台用户的发布与展现都不影响

三、系统耦合的问题

上面解决了不同数据源写入的耦合问题,再来看看前台与后台用户访问的耦合问题。

用户侧,前台访问的特点是:

  • 访问模式有限
  • 访问量较大,DAU不达到百万都不好意思说是互联网C端产品
  • 对访问时延敏感,用户如果访问慢,立马就流失了
  • 对服务可用性要求高,系统经常用不了,用户还会再来么
  • 对数据一致性的要求高,关乎用户体验的事情就是大事

运营侧,后台访问的特点是:

  • 访问模式多种多样,运营销售各种奇形怪状的,大批量分页的,查询需求
  • 用户量小,访问量小
  • 访问延时不这么敏感,大批量分页,几十秒能出结果,也能接受
  • 对可用性能容忍,系统挂了,10分钟之内重启能回复,也能接受
  • 对一致性的要求始终,晚个30秒的数据,也能接受

前台和后台的模式与访问需求都不一样,但是,如果前台与后台混用同一套服务和结构化数据,会导致:

  • 后台的低性能访问,对前台用户产生巨大的影响,本质还是耦合
  • 随着数据量变大,为了保证前台用户的时延,质量,做一些类似与分库分表的升级,数据库一旦变化,可能很多后台的需求难以满足

优化思路:冗余数据,前台与后台服务与数据分离,解耦。

如上图所示:

  • 前台和后台独立服务与数据,解耦
  • 如果出现问题,相互不影响
  • 通过不同的技术方案,在不同容忍度,业务对系统要求不同的情况下,可以使用不同的技术栈来满足各自的需求,如上图,后台使用ES或者hive在进行数据存储,用以满足“售各种奇形怪状的,大批量分页的,查询需求”

四、总结

创业初期,快速实施架构优化,提升性能的“三大分离”优化利器:

  • 动静分离:能够100倍以上的提升静态页面/资源的访问速度
  • 读写分离:能够快速的线性扩充数据库的读性能
  • 前后分离:前台与后台的数据与访问分离

原文发布于微信公众号 - 纯洁的微笑(keeppuresmile)

原文发表时间:2018-07-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WeTest质量开放平台团队的专栏

灵活应对流量压力,定期压测服务器,鹿晗结婚都不怕

鹿晗与关晓彤恋情公布,粉丝炸了,微博的服务器也跟着瘫痪了,,你的服务器还好吗?

2730
来自专栏架构师之路

好架构是进化来的,不是设计来的(58架构演进)

好的架构化是进化而来的,不是设计出来的 ----58沈剑 核心内容:58同城流量从小到大过程中,架构是如何演进的?遇到了哪些问题?以...

42214
来自专栏云计算D1net

管理混合云和多云:代理或无代理?

导语 混合云在节省更多IT成本方面提供更多的潜力,并将这些成本节约转向改善业务成果,但却带来了一些独特的挑战。人工手动的流程在一个混合的世界变得难以管理,因为云...

34910
来自专栏养码场

前1号店技术总监黄哲铿揭秘:微服务架构在千万级别日调用量、亿级别海量数据场景下的应用实践

上周,前1号店技术总监、海尔农业电商CTO,《技术管理之巅》作者黄哲铿为大家带来了一场关于微服务架构的分享,包含了微服务架构在千万级别日调用量、亿级别海量数据场...

1072
来自专栏程序你好

理解现代企业集成系统架构

企业应用程序集成(EAI)是一个需要解决的复杂问题,不同的软件供应商产生了不同类型的软件产品,如ESB、应用服务器、消息代理、API网关、负载均衡器、代理服务器...

1263
来自专栏云计算D1net

私有云管理工具大比拼

本文,我们将对业内领先的第三方私有云管理工具进行比较,并为你的环境选择提出正确的建议。 随着越来越多的企业采用了私有云,对于相关管理软件的需求也变得迫切而明显。...

4144
来自专栏DevOps时代的专栏

干货 | 基于 DevOps 的微服务生态系统与工程实践(三)

往期回顾: 第一部分:微服务与 DevOps 干货 | 基于 DevOps 的微服务生态系统与工程实践(一) 第二部分:微服务生态系统 干货 | 基于 Dev...

20010
来自专栏AI研习社

如何在微服务架构下构建高效的运维管理平台?

黎明带领团队自主研发了全栈 DevOps 运维管理平台—EasyOps,是目前行业领先的智能化运维管理平台。作为前腾讯运维研发负责人,黎明主导了多个运维系统研发...

4189
来自专栏WeTest质量开放平台团队的专栏

你的手游准备好接受“精品”时代的挑战了吗?——三步掌握游戏内存检测技巧

为了避免手机性能成为游戏选择时的壁垒,游戏厂商必须进行更好的游戏性能优化。本文利用WeTest平台的Cube工具,通过三步完成游戏内存检测与分析的过程,希望为游...

1153
来自专栏包子铺里聊IT

深入浅出系统设计面试——Design Twitter Timeline

如何 design 一个 Twitter 类型的系统,尤其是其中的 timeline/tweets 的部分,这是很多朋友都会在面试中遇到的问题,包子君今天与大家...

7727

扫码关注云+社区