数据库|一年时间用户数从零过亿,如何打造高可用、高性能、可伸缩的网站!( 四 )


1.2.8 使用NoSQL和搜索引擎
随着网站业务越来越复杂 , 对数据存储和检索的需求也越来越复杂 , 网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎 。

NoSQL和搜索引擎都是源自互联网的技术手段 , 对可伸缩的分布式特性具有更好的支持 。 应用服务器则通过一个统一数据访问模块访问各种数据 , 减轻应用程序管理诸多数据源的麻烦 。
1.2.9 业务拆分
大型网站为了应对日益复杂的业务场景 , 通过使用分而治之的手段将整个网站业务分成不同的产品线 , 如大型购物交易网站就会将首页、商铺、订单、买家、卖家等拆分成不同的产品线 , 分归不同的业务团队负责 。 具体到技术上 , 也会根据产品线划分 , 将一个网站拆分成许多不同的应用 , 每个应用独立部署维护 。 应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址) , 也可以通过消息队列进行数据分发 , 当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统 。

1.2.10 分布式服务
随着业务拆分越来越小 , 存储系统越来越庞大 , 应用系统的整体复杂度呈指数级增加 , 部署维护越来越困难 。 由于所有应用要和所有数据库系统连接 , 在数万台服务器规模的网站中 , 这些连接的数目是服务器规模的平方 , 导致存数据库接资源不足 , 拒绝服务 。
既然每一个应用系统都需要执行许多相同的业务操作 , 比如用户管理、商品管理等 , 那么可以将这些共用的业务提取出来 , 独立部署 。 由这些可复用的业务连接数据库 , 提供共用业务服务 , 而应用系统只需要管理用户界面 , 通过分布式服务调用共用业务服务完成具体业务操作 。

大型网站的架构演化到这里 , 基本上大多数的技术问题都得以解决 , 诸如跨数据中心的实时数据同步和具体网站业务相关的问题也都可以通过组合改进现有技术架构来解决 。
但事物发展到一定阶段 , 就会拥有自身的发展冲动 , 摆脱其初衷 , 向着使自己更强大的方向发展 。 既然大型网站架构解决了海量数据的管理和高并发事务的处理 , 那么就可以把这些解决方案应用到网站自身以外的业务上去 。 我们看到目前许多大型网站都开始建设云计算平台 , 将计算作为一种基础资源出售 , 中小网站不需要再关心技术架构问题 , 只需要按需付费 , 就可以使网站随着业务的增长逐渐获得更大的存储空间和更多的计算资源 。
1.3 大型网站架构演化的价值观
这个世界没有哪个网站从诞生起就是大型网站;也没有哪个网站第一次发布就拥有庞大的用户 , 高并发的访问 , 海量的数据;大型网站都是从小型网站发展而来 。 网站的价值在于它能为用户提供什么价值 , 在于网站能做什么 , 而不在于它是怎么做的 , 所以在网站还很小的时候就去追求网站的架构是舍本逐末 , 得不偿失的 。 小型网站最需要做的就是为用户提供好的服务来创造价值 , 得到用户的认可 , 活下去 , 野蛮生长 。
所以我们看到 , 一方面是随着互联网的高速发展 , 越来越多新的软件技术和产品从互联网公司诞生 , 挑战传统软件巨头的江湖地位 。 另一方面却是中小网站十几年如一日地使用LAMP技术(Linux+Apache+MySQL+PHP)开发自己的网站 , 因为LAMP既便宜又简单 , 而且对付一个中小型网站绰绰有余 。
1.3.1 大型网站架构技术的核心价值是随网站所需灵活应对
大型网站架构技术的核心价值不是从无到有搭建一个大型网站 , 而是能够伴随小型网站业务的逐步发展 , 慢慢地演化成一个大型网站 。 在这个漫长的技术演化过程中 , 不需要放弃什么 , 不需要推翻什么 , 不需要剧烈的革命 , 就那么润物细无声地把一个只有一台服务器 , 几百个用户的小网站演化成一个几十万台服务器 , 数十亿用户的大网站 。 今天我们看到的大型网站 , Google , Facebook , Taobao , Baidu莫不遵循这样的技术演化路线 。