互联网架构演化( 三 )
随着业务越来越复杂,对功能和性能的要求也越来越高,最常见的便是数据库 like 语句性能已经无法满足需求;对于某些热点数据的访问,其性能也下降很快 。
此时,我们需要引入其他组件来有针对性的解决问题 。
5 引入搜索和缓存
针对数据库的 like 语句,通常情况下,是通过引入搜索引擎来解决;而热点数据的访问加速,是通过引入缓存服务来解决 。

文章插图
该架构的特征如下:
- 添加 搜索集群,用以提升数据检索性能;
- 添加 缓存集群,用以提升热点数据访问性能 。
此时,需要对数据的写性能进行扩展 。
6 数据库分库分表
随着数据量的增长,写请求量的增加,数据库的写入逐渐成为了瓶颈 。常规的写性能优化便是对数据库进行分库分表 。

文章插图
6.1 垂直拆分
将不同的业务数据放到不同的数据库实例中 。
6.2 水平切分
把同一个表中的数据拆分到多的数据库中 。
随着研发团队的规模越来越多,大家同时在一个项目中进行开发,导致频繁的冲突和相互影响 。
此时,会将整个应用程序根据功能模块进行拆分,从而形成多个子网站或子频道 。
7 应用垂直拆分
面对一个巨无霸式的应用,就像面对一团毛线团,总有一种无法下手的感觉 。对此,可以将其进行拆分,将其拆分为多个应用,每个应用独立开发、独立部署、独立维护 。

文章插图
该部署方案更加灵活,大大降低维护成本 。
- 通过不同的域名或 URL 将整个系统分解为多个子系统;
- 用户通过浏览器将各子系统拼接成一个完整的系统;
- 各系统间存在少量交互,甚至没有交互;
当然,我们可以通过发布 jar 包的方式,共享功能代码;但当 jar 升级时,就需要所有的子系统同步升级,运维开销巨大 。此时,我们需要引入服务化架构 。
8 服务化架构
我们可以将通用功能封装成一个服务,独立开发、独立部署、独立维护 。

文章插图
在该方案中,我们将业务逻辑进行了进一步拆分:
- 整理各个系统间通用业务功能,将其封装为服务,以承载核心业务逻辑,构建成 服务集群;
- 原来的子系统或子频道,变成薄薄的一层,不承载核心业务,只是根据业务流程对业务服务进行编排;
- 应用服务与业务服务间通过 HTTP 或 其他协议进行通信,常见的包括 Dubbo、Thrift等 。
此时,我们需要引入消息中间件 。
9 引入消息队列
服务化解决了直接调用问题,对于异步调用,最常见的便是消息中间件 。

文章插图
相比之前的架构,变化很小,只是在各个业务服务间添加了另外的一种调用方式 。
10 小结
冰冻三尺非一日之寒,一个大型系统的构建也不是一朝一夕的事情 。我们需要根据业务情况、数据量情况、请求量情况对系统进行合理规划 。
切记,架构不是越复杂越好,而是“适合自己的便是最好的” 。
【互联网架构演化】
推荐阅读
- 5G有多“香”?工业互联网告诉你
- 每秒20W次并发分词检索,架构如何设计?
- MySql基础架构以及SQL语句执行流程
- 架构选型之Nodejs与Java
- 为什么会产生微服务架构,原来是这些原因
- 11条MySQL规范,你知道的有几个? Java架构师追风 2019-08-28 16:36:08
- arm架构解释
- 架构设计的五个核心要素?
- 微服务架构之网关层Zuul剖析
- 抖音直播带货流程与组织架构