SQL Azure 的订阅模型决定了各个订阅之间的数据是隔离的。实际上,SQL Azure 平台将用户的数据保存在多个SQL Azure 物理服务器上,并且使用SQL Server 的复制功能(Replicas)实现了高可用性的要求。
如图6-2 所示,在SQL Azure 平台,当用户创建了一个数据库之后,SQL Azure 通过复制功能创建三个数据库副本。这三个副本中有一个作为主数据库,所有的数据请求都会首先应用在这个主数据库上,并且同步到另外两个副本数据库中。
主数据库发生故障的时候,SQL Azure 会从另外两个副本中选择一个出来作为主数据库,同时再创建一个新的副本以保证任何时候都有三个副本同时存在,如图6-3 所示。通过基于三个副本的复制功能,SQL Azure 保证了99.9%的高可用性。
图6-2 SQL Azure 创建的三个数据库副本
图6-3 SQL Azure 在主数据库故障时创建新的副本
SQL Azure 在服务器端的架构如图6-4 所示。首先从Internet 上发送过来的数据库请求会通过一个基于TDS(Tabular Data Stream)协议的负载均衡服务器处理。这个负载均衡使用黏滞性算法保证同一个链接的所有请求会被路由到同一台物理服务器。同时由于其基于TDS 协议,保证了只要客户端也使用了TDS 协议,那么这些请求都是可被接受的,比如ADO.NET、ODBC等,从而保证了SQL Azure 对于开发人员的使用一致性。
数据库访问请求通过负载均衡服务器转发到Gateway 服务器上。Gateway 服务器在这里充当一个代理和转发的角色。首先它完成对请求的认证和授权操作,保证只有合法的请求才能进入下一级操作。同时它还对请求进行防火墙验证,保证请求者的IP 必须是SQL Azure 防火墙中设置允许访问的。最后,Gateway 还有一个内部的访问计数器用来防止DoS(Denial of Service)攻击。如图6-4 所示,Gateway 部分由多台服务器组成,在进行操作之后,它会基于连接字符串将TDS请求转发给对应的SQL Azure 物理服务器,也就是用户数据库真正保存的服务器中。
而对于为数众多的数据库服务器,SQL Azure 提供了底层控制模块负责创建、迁移、配置、故障恢复和负载均衡等功能。
图6-4 SQL Azure 服务端架构