• 通过数据库来看互联网系统架构演变


    一、单机MySQL

    1994年,中国互联网诞生。当时属于初期发展阶段,网站访问量很小,以静态网页居多,所以架构相对比较简单,单台机器、单个数据库足够应对
    早期架构如下图:

    随着互联网的发展,上述架构下,开始暴露出一些瓶颈:
    1.数据量的总大小一个机器放不下
    2.数据的索引(B+ Tree)一个机器的内存放不下时
    3.访问量(读写混合)一个实例不能承受


    二、缓存+垂直拆分
    后来,随着访问量上升,带来大部分基于MySQL架构的网站在数据库上都出现了性能问题,导致web程序不再只专注于功能,同时也必须得追求性能
    最典型的就是程序员开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。开始较流行的是通过文件缓存来缓解数据库压力
    但是当访问量继续增大时,多台web机器通过文件缓存不能共享,大量的小文件缓存也带来比较高的IO压力
    因此,Memcached的产生就很自然的成为一个非常时尚的技术产品
    同事数据库方面采用垂直拆分的概念,即多创建几个数据库及其实例,减轻单个数据库的压力
    系统架构如下图:

    Memcached作为一个独立的分布式的缓存服务器,为多个web服务器提供了一个共享的高性能缓存服务,在Memcached服务器上,又发展了根据hash算法来进行多台Memcached缓存服务的扩展,然后又出现了一致性hash来解决增加或减少缓存服务器导致重新hash带来的大量缓存失效的弊端


    三、Mysql主从复制、读写分离
    Memcached只能缓解数据库的读取压力,随着数据量的进一步增加,数据库的写入压力增加,导致读写集中在一个数据库上让数据库不堪重负。
    这时候,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为此时的网站标配了
    系统架构如下图:

    四、分表分库+水平拆分+mysql集群
    在Memcached的高速缓存、MySQL的主从复制、读写分离的基础之上,这时MySQL主库的写压力开始出现瓶颈,而数据量写入的持续猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。 与此同时,开始使用分表分库来缓解写压力和数据增长的扩展问题。
    这个时候,分表分库成了一个热门技术,也就在这个时候,MySQL推出了还不太稳定的表分区,这也给技术实力一般的公司带来了希望。虽然MySQL推出了MySQL Cluster集群,但性能也不能很好满足互联网的要求,只是在高可靠性上提供了非常大的保证
    同时引入分布式和集群概念
    1.分布式:不同的多台机器上部署不同的服务模块(工程),他们之间通过RPC/Rmi通信和调用,对外提供服务和组内协作
    2.集群:即不同的多台机器上部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问
    系统架构如下图:

    然而MySQL也存在着扩展性瓶颈:
    MySQL数据库也经常存储一些大文本字段,导致数据库表非常的大,在做数据库恢复的时候就导致非常的慢,不容易快速恢复数据库。
    比如1000万4KB大小的文本就接近40GB的大小,如果能把这些数据从MySQL省去,MySQL将变得非常的小。关系数据库很强大,但是它并不能很好的应付所有的应用场景。MySQL的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更改困难,正是当前使用MySQL的开发人员面临的问题


    五、当前主流架构原型
    在缓存、MySQL垂直拆分和主从复制,读写分离,分库分表、水平拆分、集群的基础上,又增加负载均衡(主备)理念,如:Nginx,即在相同压力下,保障不会出现部分服务器过载,部分闲置的情况,使服务器和程序发挥最大的作用
    系统架构如下图:

    六、SQL和NoSql并用
    随着互联网和大数据概念的进一步发展,企业开始对用户数据进行深度挖掘,
    如:今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。
    而如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展却能很好的处理这些大的数据,如:redis,MongoDB等
    所以当前主流架构中基本都是SQL+NoSql混合使用

    七、赋能测试人员
    作为测试人员,了解系统架构和这些知识点有什么作用呢?从笔者的经验来看,至少有以下好处:
    1.系统架构的掌握,能让测试人员站在更高的技术角度去看待整体架构和布局,自然也能够找到更高级别的缺陷
    2.提高个人技术视野。行业当前现状,测试人员整体技术视野还有待于提高。一旦提高,个人的测试思维和测试角度也会开阔很多
    3.增加底气和沟通武器。和开发沟通的过程,相信很多同学遇到过被搪塞和敷衍的场景。抛开态度原因,大多时候是因为对方觉得沟通有障碍,不愿意过多解释。而对架构的了解,算是一种能够打开沟通尴尬局面的武器

    测试思维:致广大而尽精微
    勿在尽精微之时,忽略致广大

  • 相关阅读:
    解决多版本sdk兼容问题
    ios5 UIKit新特性
    iPhone网络编程–一起来做网站客户端(一)
    八数码
    IOS开发中编码转换
    修复ipa图片png方法
    创建易读链接 搭建应用通往App Store的桥梁
    如何让IOS应用从容地崩溃
    详解IOS IAP
    jquery创建并行对象或者叫合并对象
  • 原文地址:https://www.cnblogs.com/xiuxingzhe/p/9261982.html
Copyright © 2020-2023  润新知