《Scalable Web Architecture and Distributed Systems》一文阐述了现代web架构的设计原则,并用由浅到深的案例总结了如何去做设计。看了下做下总结。
在设计高性能web架构时,我们需要考虑的几个点:
小型项目简单的lamp这样已经足够。
几块提高性能的方法:
通过在请求层将数据加入cache,命中的请求将不用再去后台data层查询,减少io时间。
当扩展为多个node时,每个node都有自己的cache。
如果外部负载均衡随机分发请求,那么cache命中将降低。有全局缓存的2个方案可以尝试:
所有的node先去全局缓存去查,当数据不在缓存中时,缓存会去data层拉,再由cache返回数据。
另一种方案是,所有的node先去全局缓存去查,当数据不在缓存中时,node再发请求去data层拉,再由cache返回数据。
一般更倾向选第1种,毕竟第2种对相同请求可能降低命中率,同时增加了data层的负载。但有些情况也会考虑2,例如大文件cache的数量少等。
每个node都拥有部分缓存。有个好处是增加缓存只需要增加node,但不好的是增加了缓存管理难度。
代理可以平滑流量,对于大量相同请求再加上cache,可以提高性能。
很多请求相邻数据时,proxy还可以一次拉回一批数据,这样对整个性能提升较多。
书可以有目录,大量数据可以有索引,它们是相似的。
负载均衡可以把请求分发给业务,采用随机等策略。也可以分发给不同的负载均衡。
其中一个挑战是,session问题。一个请求分到某个node做了操作,下一次不是相同node怎嘛办?一种办法是相同用户的请求转发给相同node,自然session是相同的。但node失效等时候回带来麻烦。还可以考虑全局session、 browser caches, cookies, and URL rewriting等等来解决。
通过将请求任务放入队列,服务端从队列中获取任务处理,这样的模式会极大提高服务端的处理能力、耗时任务的处理延时,在后台中有较多的使用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。