Scalability for dummies

Clones

一个可扩展的web服务是隐藏在load balance后面。平均分布请求道application servers的group/clusters。
每个服务器有相同的代码基础不存储任何用户相关数据在内存或disk上。
Sessions需要被存储在一个中心化的数据store中,可以被所有应用服务器获取。可以是外部数据库或外部一致性缓存,比如Redis。一个外部一致性缓存比外部数据库性能更好。
部署代码的时候会遇到代码改变发送到所有服务器的问题。没有一个服务器有老的代码。这个问题被一个很好的工具Capistrano解决。这需要一些学习,尤其你不了解Ruby on Rails,但是这是值得的。
在外包sessions和服务相同code基础从所有服务器,能创建一个镜像文件从这些服务器(AWS Amazon Web Service叫其为Amazon Machine Image)。用AMI作为super clone复制新的实例。

Database

sharding,denormalization,SQL tuning
clone后服务器可以水平scale,可以服务成千上万个并发请求。但是application变得越来越慢。是数据库的问题。
从一开始就去规范化,不包括任何joins在任意数据库查询中。用NoSQL比如MongDB或CouchDB。Joins需要在application code中完成。

Cache

不要用基于文件的缓存,会导致复制和服务器自动scale变得很困难。
一个缓存是一个简单的key-value store,它应该存在作为一个缓存层在应用和数据存储间。

Cached Objects
让你的类聚集一个数据集合从数据库中存储类的完整实例在缓存中。喜欢redis的原因在于一致性和内置的数据结构比如lists和sets。

Asynchronism

基本思想是有一个任务队列a worker能处理。异步看上去复杂,但是绝对值得花时间。backend看上去无限可缩放,frontend变得敏捷,对总体的用户体验很好。

  • Redis
  • MemCache
  • Capistrano部署代码
  • MongDB
  • CouchDB
  • RabbitMQ
  • ActiveMQ/ Redis list

Blog

results matching ""

    No results matching ""