探索大型网站技术架构(四)

这篇文章我思考了很久,也去查了很多资料,很想拿出点干货来给大家,接着上一篇来说,因为我们进行到这里,数据库已经实现了垂直拆分和水平拆分,已经是进入最为复杂的地方了。

其实说起来,相对于垂直拆分数据库来讲,读写分离式一种粗颗粒的拆分,而对于水平拆分来讲,垂直拆分又何尝不是粗颗粒呢,相对来讲读写分离相比垂直拆分要简单的多,而垂直拆分相较水平拆分同样简单的多。

从他们的实现方式就可以分析出来,从简单的拷贝库,到将大表单独拆分到一个库,再到讲大表拆分开放到不同的库,技术实现越来越复杂,就意味着我们要付出的成本要更多,我们设计系统都有一个原则:能通过简单的方式解决的绝对不用复杂的方案,当我们要用很复杂的方案的时候,那一定是迫不得已没办法了的事。

从事这个行业的时间虽然不是特别长,但也不短了,期间也遇到过很多这个行业的前辈,谈到数据库上,他们大多说的就是建模不要搞得太复杂,什么叫不复杂?表与表之间不要有约束,不要定义触发器,甚至就连读写分离做数据同步的时候都不能用触发器,不过存储过程可以写写,但绝不能写跟业务有关的逻辑,只能作为一些辅助工具来用。

从第一次听他们说的时候我的不理解,再到最后慢慢理解,最开始我只是觉得他们这样做,就是要将所有的业务逻辑都控制在系统中,避免后期维护困难。

但后来我渐渐的明白了,便于维护只是一方面,而另一方面则是因为,大量的触发器约束等需要数据库服务器进行大量计算的东西,都会严重的拖低数据库的性能,你可能会觉得这是他本身自己功能,如果我们不用,那他们就没有存在的意义了。

这么说吧,也许有些应用场景我们可以毫无顾忌的去用数据库的各种功能,但是在我们的大型网站中觉得不会这样,从另一个层面来讲,数据库系统本身跟我们要开发的系统没有区别,都是用来做存储和计算展示的。

然而现在在我们的整个系统中,数据库仅仅是做为我们系统存储数据而用的,对于大型网站来讲他单单是存储数据方面就已经压力很大了,我们还要让他处理一大堆我们系统本身可以处理的逻辑,这样完全是不顾她的死活啊。

所以说,从这个层面来讲,我们应该尽量简化数据库对运算等方面的性能浪费,让他能专心致志的做数据的存储。

OK,回到正题,那么我们的数据如果进行了垂直拆分和水平拆分之后,我们会遇到什么棘手的问题呢。

第一个问题:被拆出来的表要跟原有库进行关联查询的sql语句需要改变。

第二个问题:在做增删改的时候,某些被拆分出来的表要跟原有库的表来配合完成,这里就会出现事务的问题,如果一个搞不好,操作失败,事务无法回滚,这会对业务造成致命的危险。

那么解决第一个问题很简单:我们只需要以这些被拆分的表为原点,去逐个修改我们的sql,能拆的拆能合的合,而且,数据库也是可以实现跨库查询的,只是听说效率不怎么样。

第二个问题:这个问题有些复杂,因为涉及到多个库的事务,有些朋友可能想到分布式事务,没错,我们可以利用一些现在流行的分布式事务的解决方案,下面我列出了一些,但我都没有深入了解过,也不太清楚他们的原理。

一、X/OPEN组织推出的分布式事务规范XA,其中还包括该组织定义的分布式事务处理模型X/OPEN;

二、大型网站一致性理论CAP/BASE

三、 PAXOS协议。

那么除了使用这些通用的分布式事务解决方案,我们还能应用什么来解决这个问题呢,其实说分布式事务,这个名头太大,很多人都被他唬住了,这里我说下我的想法。

其实涉及到多个库的事务操作,无非就是状态没办法统一,在执行操作之前我们给他定义一个初始状态,如果在执行的过程中,任何一个步骤操作失败了,我们都把这个状态设置为失败,然后分别回滚其他几个已经执行过的操作。

这么说大家应该都能理解吧,但这么做无疑我们在代码中的改动就要复杂了,有可能这些改动会对我们原有的业务逻辑造成巨大的影响。

所以怎么办呢,我们服务端不能总是被数据库牵着鼻子走吧,数据变动,我们服务端代码就要跟着一票大改,这样有可能对业务产生无法预计的影响。

我是这样考虑的,我们可以在服务端和数据库中间加一层,叫做数据服务层,服务端不直接操作数据库,而是调用数据服务层的接口得到数据,而数据服务层返回服务端需要的数据就可以了。

这样,数据库变更我们只需要更改相应的数据服务层的逻辑代码就可以了,而返回的数据始终是不变的,因此就不会给服务层的业务产生影响,当服务端有什么新的数据需求,可以让数据服务层提供就可以了。

这样问题就解决了,当然了这里我介绍的是一个很简单的思路,在实施上肯定会有不少问题,毕竟我并没有实施过,只是总结了下见闻和自己的理解。

还是希望大家留下自己的见解,指正笔者的不足之处,共同学习共同进步。

时间: 2025-01-02 08:37:00

探索大型网站技术架构(四)的相关文章

探索大型网站技术架构(三)

上篇说到,对数据库进行读写分离,读写分离方案主要是应用于网站读写比例严重失衡的网站,而互联网上绝大部分网站都是读操作的比例远远大于写操作,这是网站的主流. 如果一个网站读写比例比较均衡,那么这个网站一般都是提供专业服务的网站,这种网站对于用户而言是一个提供生活便利的工具,类似于企业应用软件.很多关注大型网站架构技术关心的重点应该是那种对于读写比例失衡的网站,因为它们做起来更加有挑战性. OK,啰嗦了这么多,大家也应该有个疑问,为什么对数据库进行读写分离就会提高系统的整体效率呢?说这个问题的时候可

大型网站技术架构(四)--网站的高性能架构

大型网站技术架构(一)--大型网站架构演化 大型网站技术架构(二)--架构模式 大型网站技术架构(三)--架构核心要素 网站性能是客观的指标,可以具体体现到响应时间.吞吐量.并发数.性能计数器等技术指标. 1.性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间,指从发出请求到最后收到响应数据所需要的时间.如下列出了系统常用的操作响应时间表. 操作 响应时间 打开一个网站 几秒 数据库查询一条记录(有索引) 十几毫秒 机械磁盘一次寻址定位 4毫秒 从机械磁盘顺序读取1M数据 2毫秒 从S

《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构

一.网站性能测试 (1)性能测试指标:①响应时间:②并发数:③吞吐量:④性能计数器: (2)性能测试方法:①性能测试:②负载测试:③压力测试:④稳定性测试: (3)性能优化策略: ①性能分析:检查请求处理各个环节的日志,分析哪个环节响应时间不合理,检查监控数据分析影响性能的因素: ②性能优化:Web前端优化,应用服务器优化,存储服务器优化: 二.Web前端性能优化 (1)浏览器访问优化: ①减少http请求:因为http是无状态的,每次请求的开销都比较昂贵(需要建立通信链路.进行数据传输,而服务

《大型网站技术架构》读书笔记之七:随需应变之网站的可扩展架构

此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. 一.可伸缩与可扩展-傻傻分不清楚 上篇笔记我们学习了可伸缩架构,但在实际场合中,包括许多架构师也常常混淆可伸缩和可扩展,用可扩展表示伸缩性.那么在此,跟随作者我们来理清这两个概念,避免我们以后对其傻傻分不清楚. (1)扩展性(Extensibiltiy) 指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力.我们不禁想到了面向对象中一大原则:开闭原则,对扩展开放,对修改封闭.也就说,当系统新增一个功能时

《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构

此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. 首先,所谓网站的伸缩性,指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力.在整个互联网行业的发展渐进演化中,最重要的技术就是服务器集群,通过不断地向集群中添加服务器来增强整个集群的处理能力. 一.网站架构的伸缩性设计 1.1 不同功能进行物理分离实现伸缩 (1)纵向分离:将业务处理流程上得不同部分分离部署,实现系统的伸缩性: (2)横向分离:将不同的业务模块分离部署

《大型网站技术架构》读书笔记之八:固若金汤之网站的安全性架构

此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. 一.网站应用攻击与防御 二.信息加密技术与密钥安全 三.信息过滤与反垃圾 四.电子商务风险控制 五.学习总结 转眼之间,<大型网站技术架构>的读书笔记到此就结束了.最近时间非常紧,因此本篇没有详细对笔记进行介绍(本篇涉及太多内容,而且都是安全相关的).通过本书的学习,我们从高性能.高可用.伸缩性.可扩展性.安全性五个方面的架构学习了每个方面经典的技术方案,虽然以理论偏多,但还是可以从中管中窥豹,一览

《大型网站技术架构-核心原理与案例分析》之一: 大型网站架构演化

最近刚刚读完李智慧的<大型网站技术架构-核心原理与案例分析>,对每章重点内容作了一些笔记,以便加深印象及日后查阅. 一.大型网站软件系统的特点 高并发,大流量:需要面对高并发用户,大流量访问. 高可用:系统7X24小时不间断服务. 海量数据:需要存储.管理海量数据,需要使用大量服务器. 用户分布广泛,网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别. 安全环境恶劣:由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击. 需求快

大型网站技术架构(七)--网站的可扩展性架构

大型网站技术架构(一)--大型网站架构演化 大型网站技术架构(二)--架构模式 大型网站技术架构(三)--架构核心要素 大型网站技术架构(四)--网站的高性能架构 大型网站技术架构(五)--网站高可用架构 大型网站技术架构(六)--网站的伸缩性架构 扩展性是指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力. 设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提供模块的复用性.模块通过分布式部署,独立的模块部署在独立的服务器上(集群)从物理上分离模块之间的耦合关系

大型网站技术架构介绍--squid

一.大型网站技术架构介绍 1.pv高  ip高 并发量 2.大型网站架构重点 1. 高性能:响应时间,TPS,系统性能计数器.缓存,消息队列等. 高可用性High Availability   99.99% 7*24 2.衡量标准:假设环境中一台或者多台服务器宕机,服务是否依然可用.解决关键办法:冗余.资源定位,健康检查.负载均衡,关键服务器冗余:web DB ,及时有效的监控和报警 3.高伸缩性[高可维护性] 是否可以用多台服务器构建集群,是否容易向集群添加新的服务器,新服务是否可提供相同的服