可扩展的web服务的公共服务器隐藏在负载均衡器后面。这个负载均衡器将负载(来自用户的请求)均匀地分配到应用服务器组/集群上。这意味着,例如,如果用户Steve与你的服务交互,他的第一个请求可能被服务器2服务,然后他的第二个请求可能被服务器9服务,然后可能在他的第三个请求时再次被服务器2服务。
Steve应该总是得到相同的请求返回结果,不管他被哪个服务器服务。这就是可扩展性的第一条黄金法则:每个服务器都包含完全相同的代码库,并且不在本地磁盘或内存上存储任何用户相关的数据,比如会话或个人资料图片。
会话需要存储在一个集中的数据存储中,所有应用程序服务器都可以访问该存储。它可以是一个外部数据库或外部持久缓存,就像Redis。外部持久缓存比外部数据库具有更好的性能。这里所说的外部是指数据存储并不驻留在应用服务器上。相反,它位于应用程序服务器的数据中心中或附近的某个地方。
但是部署呢?如何确保代码更改被发送到所有服务器,而没有一个服务器仍然服务于旧的代码?幸运的是,这个棘手的问题已经被伟大的工具Capistrano解决了。这需要一些学习,特别是如果你不喜欢Ruby on Rails。
在“外包”你的会话并从所有服务器上提供相同的代码库之后,现在可以从这些服务器之一创建一个图像文件(AWS称之为AMI - Amazon Machine image)。使用这个AMI作为“超级克隆”,您的所有新实例都基于它。每当您启动一个新的实例/克隆时,只需对您最新的代码进行初始部署,您就准备好了!
引用:
https://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones
网友评论