如何扩展互联网应用Scalability for dummies读书笔记

6大原则总结

  • Vertical Scalability 更强的cpu,比如之前在连连,加密机能力不够,后来直接将4c8g改为16c32g,一举解决了问题,这个方式最快,但是有天花板,不能无限用
  • Horizonal Scalability 横向扩展,加机器,原则是应用服务器要是无状态的,见如下
  • Caching 互联网是读多写少,一些不怎么变化的信息要缓存起来,甚至twitter会将动态内容事先转化成静态html,和如下第5条相关
  • Load Balancing 负载均衡,和横向扩展相关联
  • DB replication 主从结构,互联网是读多写少,读都是分开读
  • DB partition 就是分库分表

Scalability for dummies -1

Clone(其实就是横向扩展)

应用服务器不能存储用户session信息,也不能存储profile信息,总之这个信息是无状态的,这样某台挂了后,很容易切到另外一台

Scalability for dummies -2

Nosql insteadOf mysql

第一章讲到clone人的进攻,因为无状态,且不是垂直扩展,所以横向扩展是没问题,不会有天花板,但是体系内的其他成了短板
比如数据库

  • 第一条路是 分库分表 sql调优,但是作者建议在规模不可控制前,一开始就nosql
  • 之所以nosql是因为互联网的数据特征,比如音频文件,视频文件,图片文件,这种用nosql好很多
    但是要注意,如果有很多关联查询(select a., b. from TableA, TableB where a.id = b.id)那又很慢了

Scalability for dummies -3

用好Cache!用内存的高速性(比如redis)代替磁盘的缓慢性

  • 缓存查询结果,但是容易有过期的问题(不建议)
  • 缓存对象,这也是圈圈目前在用的
    文章中建议了一种更加异步的方式,所以请求都访问redis,背后是一组worker线程,不停地将数据从数据库搬运到redis(也就是应用服务器不直接访问数据库)
    哪些对象适合缓存
  • 用户session
  • 热点博客
  • 用户和朋友的关系
  • 热门视频

Scalability for dummies -4

  • 预处理 twitter会将动态内容事先转化成静态html
  • 有些工作是定制化的,没法预先处理的,怎么办?
    “The frontend, which constantly checks for new “job is done” - signals, sees that the job was done and informs the user about it” 前端要检查,如果好了通知客户
    RabbitMQ
    就是排队技术,每个task在队列里面
    对提升用户体验很好,比如Leetcode的设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值