大型网站架构(2)--分布式系统&中间件从入门到精通(四)

简介: 大型网站架构(2)--分布式系统&中间件从入门到精通(四)

上篇文章说了当数据量大,并且访问量大的时候,可以把业务和DB分开放在不同的服务器,这时候会出现session问题,可以通过负载均衡器来解决session问题,保证同一个会话每次都发在同一个服务器上,也可以通过单独的服务保存sesion。

大型网站架构(1)--分布式系统&中间件从入门到精通(三)


数据库读写分离


当业务和DB分离之后,还存在服务器瓶颈,这时候可以考虑读写分离模式,可以增加一个读库,这个数据库不承担写的工作。这时候会出现两个问题:1、两个数据源的复制问题。2、应用对于数据源的选择问题。

我们首先要把数据复制到读的库里,目前数据库系统都有复制的功能,比如mysql的主从复制,但对于复制,我们要考虑到延迟性,如果用户修改了数据,而查出来的是未复制的数据,用户会误以为自己没修改成功。

Mysql在5.5之前是异步复制的,所以会有延迟,并提供完全镜像方式复制。而mysql在5.5之后加入了对semi-syn的支持,从数据安全来说,他比异步好,不过还是有延迟问题。Oracle接触的主要是data cuard方案,这个主要解决容灾、数据库的保护以及故障恢复等场景,该方案又分为物理备份(物理standBy)和逻辑备份(逻辑standBy)。

对应应用层面来说,增加了一个读库,即影响使用哪个数据源来读,我们需要根据不同的场景选择不同的数据源,写操作主要走主库。简单来说,读写分离就是增加了一个读库,分担写的压力,因此增加了个读源。

搜索引擎就是一个读库

所以我们常用的搜索引擎就是一个读库,我们举个例子,交易网站需要根据商品的标题来查找,想到的可能是like功能,但这种实现方式代价很大,这时候我们可以使用搜索引擎倒排序表达方式,它能够大大提升索引速度。


缓存解决数据库压力


缓存就是我们常说的cache,在日常开发中,缓存主要就是为了解决数据库读的压力,这就是前面说的分库和搜索引擎功能类似。

通常我们使用都会通过key-value的形式吧数据存在缓存中,一般存放的是热数据,而不是全部的数据库数据,举个例子,当数据在缓存中不存在,则会去数据库中查询,再放入缓存。还有一种做法就是把所有数据全部放入缓存中,这样会有一个要求,需要根据数据库变化去更新缓存的代码,理解业务逻辑。


弥补关系型数据库不足,引入分布式存储系统


在之前介绍的存储数据只要是数据库,但有些场景下,数据库彬彬哥不是很适合。

常见的分布式存储系统有分布式文件系统、分布式key-value系统和分布式数据库。文件系统大家都知道,就是在分布式环境下,由多个接地那组成的功能与单机文件系统一样的系统,他是弱格式,内容的格式需要自己组织。分布式key-value系统则会更加格式化一些。分布式数据库则是最格式化的方式。

分布式存储系统自身起到了存储作用,也就是提供数据库的读写支持,相对于读写分离中的读“源”,分布式系统更多的是直接代替主库。是否需要引入分布式系统则需要根据具体场景来选择。

当我们采用了读写分离的方式,增加缓存的方式还遇到了数据库的瓶颈,这时候我们就需要考虑专库专用,数据垂直拆分。

垂直拆分就是把数据库从不同的业务拆分到不同的数据库中,比如业务有商品,交易和用户,则把这些东西都拆分到不同的数据库。

当垂直拆分还有瓶颈的时候,就可以考虑吧数据库水平拆分,吧同一个表的数据拆分到两个数据库中。水平拆分的原因可能是某个业务的数据表数据量太大或者更新到达了单个数据的瓶颈,这时候就可以吧表拆分成两个或者多个到数据库中,数据水平拆分和读写分离的区别是,读写分离解决的是压力大的问题,对于数据量大后者更新量大的情况不起作用。经过垂直拆分后,用户表和交易表,商品表不在同一个数据库中,如果数据量或者更新量大,可以进一步拆分到不用的两个数据源中,他们有一模一样的用户表,每个表中只涵盖一部分数据。一旦完成拆分,这时候可以很好的应对数据量增长情况,但是也会遇到更多问题,比如分页问题,主键不能保证唯一性问题等。


应用拆分


数据库问题通过分库分表,垂直拆分,水平拆分,数据源如搜索引擎、缓存解决读的压力后,接下来可以看看应用拆分。

随着业务的发展,应用功能越来也多,我们该考虑如何不让应用持续变大,就应该需要把应该拆分开,从一个应用变成两个甚至多个应用。

我们可以根据业务的特性吧应用拆开,比如前面的例子,我们有商品,交易,和用户。可以原来一个应用拆分称为两个,一个放商品和用户,一个放交易和用户,因为他们都涉及到用户。

我们还可以按照用户注册、用户登入、用户信息维度等拆分,使他们变成三个系统。不过拆分之后会有很多相似的代码,这时候就需要解决代码的复用性。

服务化路

让商品中心、用户中心、交易中心,都独立连接各种的DB数据库,然后在用户访问页面的额时候,单机内部方法调用,引入远程服务调用。这样可以有效解决代码冗余,实现高复用。通过服务化,无论是web前端还是服务应用,都可以由固定的团队来维护系统,这样可以保证稳定性。需要做到服务化,需要一些基础的组件来实现,这些在后面会具体介绍。

相关文章
|
4月前
|
数据采集 机器学习/深度学习 运维
量化合约系统开发架构入门
量化合约系统核心在于数据、策略、风控与执行四大模块的协同,构建从数据到决策再到执行的闭环工作流。强调可追溯、可复现与可观测性,避免常见误区如重回测轻验证、忽视数据质量或滞后风控。初学者应以MVP为起点,结合回测框架与实时风控实践,逐步迭代。详见相关入门与实战资料。
|
9月前
|
消息中间件 存储 Kafka
分布式消息中间件设计与实现
本文深入探讨了消息中间件的核心功能实现与高并发、高可用设计。在生产者设计中,涵盖消息构造、序列化、路由策略及可靠性保障(如ACK机制)。消费者部分分析了拉取/推送模式、分区分配与消息确认机制。同时,Broker作为核心组件,负责消息路由、存储和投递,并通过索引技术实现快速检索。 高并发设计方面,重点讨论了文件存储(顺序写入、分段存储)、日志结构存储及负载均衡策略(如哈希分区、轮询分区)。为确保高可用性,文章详细解析了主从复制、故障转移机制以及同城/异地多活容灾方案。
|
5月前
|
存储 算法 安全
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
本文深入解析分布式系统核心机制:数据分片与冗余副本实现扩展与高可用,租约、多数派及Gossip协议保障一致性与容错。探讨节点故障、网络延迟等挑战,揭示CFT/BFT容错原理,剖析规模与性能关系,为构建可靠分布式系统提供理论支撑。
289 2
|
5月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
9月前
|
消息中间件 存储 中间件
分布式消息中间件基础
消息中间件是一种基于异步消息传递的分布式系统通信工具,核心功能包括消息传输、存储、路由与投递,能够实现系统解耦、异步处理和流量削峰。其主要组件包括生产者、消费者、Broker、主题/队列等,支持点对点和发布-订阅两种消息模型。主流中间件如Kafka(高吞吐)、RabbitMQ(灵活路由)、RocketMQ(事务支持)各有特色,适用于不同场景。此外,中间件还涉及多种协议(AMQP、MQTT等)、可靠性传输机制(持久化、确认机制)、顺序性与重复性问题解决以及事务支持(两阶段提交、本地消息表等)。选择中间件需根据业务需求权衡性能、功能和运维成本。
|
机器学习/深度学习 资源调度 算法
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
865 3
图卷积网络入门:数学基础与架构设计
|
设计模式 存储 算法
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
603 12
|
设计模式 监控 Java
分布式系统架构4:容错设计模式
这是小卷对分布式系统架构学习的第4篇文章,重点介绍了三种常见的容错设计模式:断路器模式、舱壁隔离模式和重试模式。断路器模式防止服务故障蔓延,舱壁隔离模式通过资源隔离避免全局影响,重试模式提升短期故障下的调用成功率。文章还对比了这些模式的优缺点及适用场景,并解释了服务熔断与服务降级的区别。尽管技术文章阅读量不高,但小卷坚持每日更新以促进个人成长。
379 12
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
411 12