zhouzhaoxin
zhouzhaoxin 主攻python,喜欢读书,喜欢摄影,芒格的忠实追随者。关注各个领域发展,取长补短,擅长结合多学科技术解决问题

构建可拓展服务

构建可拓展服务

可拓展服务基础

https://www.lecloud.net/tagged/scalability/chrono

横向扩展

  1. 每个服务器搭建相同的代码库,不存储用户数据
  2. 用户session存储在独立的数据库或缓存中

数据库优化

  1. 主从分离,从读主写
  2. 主库优化方法为添加RAM,所以主服务器性能不够时,很难优化
  3. 使用nosql
  4. 像使用nosql一样使用mysql,不要使用过多的join

    为什么NOSQL更容易扩展?(注:两种数据库各有优劣,此处针对扩展性)

使用缓存

  • redis
  • memcache

使用异步

  • 原生异步更有效率

性能与可扩展性

如果服务的性能随着资源的增加而成笔记增加,那么这个服务就是客拓展的

延迟与吞吐量

延迟是执行操作或运算结果所花费的时间。
吞吐量是单位时间内(执行)此类操作或运算的数量。
通常,你应该以可接受级延迟下最大化吞吐量为目标。

CAP

image.png

  • 一致性 : 每次访问都能获得最新数据但可能会收到错误响应
  • 可用性 : 每次访问都能收到非错响应,但不保证获取到最新数据
  • 分区容错性 : 在任意分区网络故障的情况下系统仍能继续运行
    网络并不可靠,所以你应要支持分区容错性,并需要在软件可用性和一致性间做出取舍