Fly*_*wat 6 .net scaling service-tier
我正在开发一个由许多模块化Web应用程序组成的Web产品.对于最终用户来说,它似乎是一个单独的应用程序,尽管各种组件都分解到他们自己的应用程序中.
这样做的部分原因是可以在多个应用程序服务器之间轻松地进行水平扩展.
为了便于数据层的水平扩展,我们计划在数据库前使用Web服务层.该层可以扩展到N台机器,并且它的每个实例都将单独处理缓存.
这个想法是应用程序将调用服务层负载均衡器,它将调用分配给服务实例,然后使用其缓存返回数据,或连接到数据库并查询数据.看起来这将是最简单的前瞻性解决方案,无需大量修改应用程序代码即可扩展.
[N Amount of Databases]
|
\/
[Service Tier X N amount of Machines]
|
\/
[Application Tier X n amount of Machines]
Run Code Online (Sandbox Code Playgroud)
但是有些问题出现了,我想在服务级别坚持用户会话,这样每个应用程序都只需要使用令牌进行身份验证,但是我不确定如何在所有服务机器上维护会话数据而不需要单点故障.
关于如何解决这个问题的任何想法?关于架构的任何其他想法?有没有其他人有设计一个可能每天处理数百万次点击的网站的项目?
编辑:甚至不是一个想法?:(
您已经描述了分布式缓存机制的完美用例,例如 memcached ( http://www.danga.com/memcached ) 或即将推出的 MS Velocity 项目 ( http://code.msdn.microsoft.com/velocity ) 。
在您描述的情况下,您有越来越多的服务层实例,每个实例都执行自己的本地缓存,缓存的有用性会随着每个新框的增加而降低,因为每个单独的实例都必须从数据库检索相同的数据来填充其本地缓存,即使如果相同的数据刚刚被另一个服务层实例访问。使用 memcached 或 Velocity,缓存机制将智能地将所有服务器上未使用的 RAM 合并到一个缓存中,供所有服务层安装共享。这样,只有第一个访问数据的服务层实例才需要使用数据库,其他服务层实例的后续访问将从缓存中提取相同的数据。
这样做还可以解决用户会话问题,因为您可以轻松地使用相同的缓存来存储用户会话的状态值,并且所有服务层实例都可以访问相同的信息。
希望这可以帮助!
亚当