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

简介: 技术人,谦虚一点,总是没错的。

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

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

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

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

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

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

一、业务场景介绍

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

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

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

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

image.png

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

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

二、数据耦合的问题

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

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

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

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

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

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

image.png

如上图所示:

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

如此这般:

频繁变化的抓取程序,以及抓取的异构数据存储,解耦

前台数据与web都不需要被动配合升级

即使出现问题,前台用户的发布与展现都不影响

三、系统耦合的问题

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

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

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

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

访问模式多种多样,运营销售各种奇形怪状的,大批量分页的,查询需求

用户量小,访问量小

访问延时不这么敏感,大批量分页,几十秒能出结果,也能接受

对可用性能容忍,系统挂了,10分钟之内重启能回复,也能接受

对一致性的要求始终,晚个30秒的数据,也能接受

image.png

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

  • 后台的低性能访问,对前台用户产生巨大的影响,本质还是耦合

image.png

随着数据量变大,为了保证前台用户的时延,质量,做一些类似与分库分表的升级,数据库一旦变化,可能很多后台的需求难以满足

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

如上图所示:

  • 前台和后台独立服务与数据,解耦
  • 如果出现问题,相互不影响

image.png

  • 通过不同的技术方案,在不同容忍度,业务对系统要求不同的情况下,可以使用不同的技术栈来满足各自的需求,如上图,后台使用ES或者hive在进行数据存储,用以满足“售各种奇形怪状的,大批量分页的,查询需求”

四、总结

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

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

本文原计划昨天发布的,朋友做免费互联网技术分享,转了他一篇文章,不仅被骂得很惨,还取关了一大片,非常抱歉,也很遗憾。

目录
相关文章
|
5天前
|
存储 监控 API
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第9天】 在本文中,我们将深入探讨如何在后端开发中构建一个高效的微服务架构。通过分析不同的设计模式和最佳实践,我们将展示如何提升系统的可扩展性、弹性和维护性。我们还将讨论微服务架构在处理复杂业务逻辑和高并发场景下的优势。最后,我们将分享一些实用的工具和技术,以帮助开发者实现这一目标。
|
3天前
|
监控 数据库 开发者
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第11天】在当今软件开发的世界中,微服务架构已经成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了设计、部署和维护微服务系统时面临的挑战,并提出了一系列实用的策略和最佳实践。我们将从服务的划分原则出发,讨论如何确保每个微服务的自治性,以及如何通过容器化和编排技术实现服务的高效运行。文章还将涉及监控、日志记录和故障恢复的策略,旨在帮助开发人员构建一个既高效又可靠的微服务环境。
|
4天前
|
缓存 负载均衡 API
微服务架构下的API网关性能优化实践
【5月更文挑战第10天】在微服务架构中,API网关作为前端和后端服务之间的关键枢纽,其性能直接影响到整个系统的响应速度和稳定性。本文将探讨在高并发场景下,如何通过缓存策略、负载均衡、异步处理等技术手段对API网关进行性能优化,以确保用户体验和服务的可靠性。
|
5天前
|
监控 API 持续交付
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第8天】在当今快速演进的软件开发领域,微服务架构已经成为实现敏捷开发、持续交付和系统弹性的关键模式。本文将探讨构建一个高效且可靠的微服务系统所必须的策略和最佳实践。我们将从服务的划分与设计原则出发,讨论如何通过容器化、服务发现、API网关以及断路器模式来优化系统的可伸缩性和鲁棒性。此外,我们还将涉及监控、日志管理以及CI/CD流程在确保微服务架构稳定运行中的作用。
|
6天前
|
敏捷开发 持续交付 API
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第8天】 在数字化转型的浪潮中,微服务架构已成为企业追求敏捷开发、持续交付和系统弹性的关键解决方案。本文将深入探讨微服务的核心概念,包括其设计原则、优缺点以及如何在后端开发中实现高效的微服务架构。我们将通过实际案例分析,展示微服务如何帮助企业快速适应市场变化,同时保持系统的可维护性和扩展性。
|
6天前
|
监控 云计算 开发者
探索云计算中的无服务器架构:从概念到实践
无服务器架构作为云计算领域的新兴技术,正在以其高效、灵活的特性吸引着越来越多的开发者和企业。本文将深入探讨无服务器架构的概念及其在云计算中的应用,通过实际案例展示如何利用无服务器架构构建可靠、可扩展的应用系统。
|
8天前
|
监控 负载均衡 数据安全/隐私保护
探索微服务架构下的服务网格(Service Mesh)实践
【5月更文挑战第6天】 在现代软件工程的复杂多变的开发环境中,微服务架构已成为构建、部署和扩展应用的一种流行方式。随着微服务架构的普及,服务网格(Service Mesh)作为一种新兴技术范式,旨在提供一种透明且高效的方式来管理微服务间的通讯。本文将深入探讨服务网格的核心概念、它在微服务架构中的作用以及如何在实际项目中落地实施服务网格。通过剖析服务网格的关键组件及其与现有系统的协同工作方式,我们揭示了服务网格提高系统可观察性、安全性和可操作性的内在机制。此外,文章还将分享一些实践中的挑战和应对策略,为开发者和企业决策者提供实用的参考。
|
1天前
|
负载均衡 JavaScript Java
构建高效微服务架构:后端开发的新视角
【5月更文挑战第13天】在现代软件开发中,微服务架构已经成为一种流行趋势。它通过将应用程序拆分为一组小型、独立的服务来提高可扩展性、弹性和可维护性。本文将探讨如何构建一个高效的微服务架构,包括选择合适的技术栈、设计良好的服务接口、确保数据一致性以及实现有效的服务发现和负载均衡。
|
1天前
|
监控 Java 开发者
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第13天】随着现代应用的复杂性日益增加,传统的单体应用架构已不足以满足快速迭代和可扩展性的需求。本文将探讨如何通过微服务架构来提升后端开发的效率和系统的可靠性,涵盖微服务设计原则、技术栈选择、部署策略以及维护实践。我们将分析微服务的优势与挑战,并提供一系列实施建议,帮助开发者在构建和维护分布式系统时做出明智决策。
|
1天前
|
监控 持续交付 数据库
构建高效可靠的微服务架构:后端开发的新范式
【5月更文挑战第13天】 在当今软件开发的世界中,微服务架构已经成为了一种流行且有效的设计模式。它通过将大型复杂系统分解为一组独立的、可部署的服务来提高系统的可维护性、可扩展性和敏捷性。本文将探讨如何构建一个高效且可靠的微服务架构,包括关键的设计原则、技术选型以及可能面临的挑战。我们的目标是为后端开发者提供一套实用的指南,以便在构建现代化应用程序时做出明智的决策。