《大型网站技术架构》读书笔记

我读的是扫描版的PDF版本,此书出版于2013年9月,距离现在已经4年多,但对于我来说,依然新鲜。书中的许多内容虽耳熟能详,但从未形成系统。以此笔记,感谢作者,也为自己留点资料。

前事不忘,后事之师。念念不忘,必有回响

理论基础:

  1. 大型网站核心架构要素: 性能、 可用性、伸缩性、扩展性、安全性

  2. 网站的价值在于它能为用户提供什么价值,在于网站能做什么,而不是在于它是怎么做的,所以在网站还是很小的时候就去追求网站的架构是舍本逐未,得不偿失的。小型网产上最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长。

  3. 产品在设计之初就需要一个明解的定位:什么是产品要实现的功能,什么不是产品提供的特性。在产品漫长的生命周期中,会有形形色色的困难和诱惑来改变产品的发展方向,左右摇摆。什么都想做的产品,最后有可能成为一个失去生命力的四不像

  4. 归根结底,技术是为业务服务的,技术选型和架构决策依赖业务乃至企业的业务上战略规划,离开业务发展的支撑和驱动,技术走不远,甚至会迷路

  5. 简单的三层架构:应用层,服务层,数据层。

  6. 无状态的服务(session记录状态),无状态的对象(代码级别)

  7. 服务的幂等性设计

  8. CAP原理,认为一个提供数据服务的存储系统无法同时满足数据一致性、数据可用性、分区耐受性这三个条件。

  9. 自动化发布、灰度发布

  10. 监控数据采集,监控管理。事物的发展总是先求生存,再求发展,保证网站可用,万无一失,任重而道远

  11. 计算机的任何ukdj下周都可以通过增加一个虚拟层来解决

  12. 一个良好申缩性架构设计的网站,其设计总是走在业务发展的前面,在业务需要处理更多访问和服务之前,就已经做好准备,当业务需要时,只需要购买或租用服务器简单部署实施就可以了。技术团队亦可高枕无忧。

  13. 高手定律:这个世界只有遇不到的问题,没有解决不了的问题。高手之所以成为高手,是因为他们遇到了常人很难遇到的问题,并解决了。

  14. 关于扩展性和申缩性:

    • 扩展性:指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。表现在第ixyc基础设施稳定,不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。它是系统架构设计层面的开闭原则(对扩展开放,对修改关闭),架构设计考虑未来功能扩展,当系统增加新功能时,不需要对现有系统的结构和代码进行修改
    • 申缩性:指系统能够增加(或减少)自身资源规模的方式,增强(减少)自己计算处理事务的能力。如果这种增减是成比例的,就被称作线性伸缩性。在网站架构中,通常指利用集群的方式增加服务器数量、提高系统的整体事务吞吐能力。
  15. 网站安全性相关:防御应用攻击 、信息加密和密钥安全、信息过滤和反垃圾、电子商务的风控

  16. 没有绝对的安全,正如没有绝对的自由一样。网站的相对安全是通过提高攻击门槛达到的。

故障举例:

  1. 写日志引发故障:磁盘空间不足
  2. 高并发访问数据库引发故障:高频访问页面静态化
  3. 高并发情况下锁引发的故障:锁操作要永远谨慎
  4. 缓存引发的故障:当缓存已经成为网站架构不可或缺的一部分时,对缓存的管理就要提高到和其它服务器一样的级别
  5. 应用启动不同步引发的故障:注意校验服务启动的顺序
  6. 大文件独占磁盘引发的故障:存储的使用需要根据不同文件类型和用途进行管理。比如大、小文件独立存储
  7. 滥用生产环境引发的故障:访问线上生产环境要规范、专人专管
  8. 不规范的流程引发的故障:代码提交前使用diff工具进行比较,确认没有提交不该提交的代码。加强code review
  9. 不好的编程习惯引发故障:程序在处理输入对象时,需要校验

架构师篇

关注人而不是关注产品

一定要坚信:一群优秀的人做一件他们热爱的事,一定能取得成功。不管过程多么曲折,不管外人看来有多么不可思议不靠谱

所以最好 的软件项目管理不是制订计划,组织资源,跟踪修正项目进展,对成员进行激励和惩罚,而是发掘项目组每个成员的优秀潜能,让大家理解并热爱软件产品最终的蓝图和愿景。每个人都是为实现自我价值而努力,不是为了领工资而工作。

一旦做到这一点,项目组每个成员都会自我驱动,自觉合作,寻找达成目标的最优路径,并坚韧不拔的持续前进。整个过程,不需要拙劣的胡萝卜和大捧,最好的奖励就是最终达成的目标本身,最大的惩罚就是这个美好的目标没有实现。

这也是领导的真谛:寻找一个值得共同奋斗的目标,营造一个让大家都能最大限度发挥自我价值的工作氛围。

没有懒惰的员工,只有没被激发出来的激情。所有强迫员工加班的管理都,都应该为自己的无能而羞愧

发掘人的优秀

是事情成就了人,而不是人成就了事。
发掘人的优秀比发掘优秀的人更有意义

共享美好蓝图

  • 蓝图应该是表述清楚的:产品要做什么,不做什么,要达到什么业务目标
  • 蓝图应该是形象的:产品能为用户创建什么价值、能实现什么样的市场目标、产品最终会长什么样,都需要能形象想像出来
  • 蓝图应该是简单的:不管内部还是外部沟通,都能一名话说明白:我们在做什么。

在项目过程中,架构师要保持对目标蓝图的关注,对任何偏离蓝图的设计和决定保持警惕,错误的偏离要及时修正,必要的变更经大家讨论,并需要重新获得大家的认同。

共同参与架构

  1. 不要只有架构师一个人捅有架构
  2. 让其他人维护框架与架构文档

学会妥协

不要企图在项目中证明自己是正确的,一定要记住,你是来做软件的,不是来当老大的。

成就他人,成就自己

活着不是为了工作,为是为了设计、写程序,这些不是我们生活的目的。我们活着是为了成就我们自己,有原则要想成就自己,就必须首先成就他人。

每个人都有自己成就的目标,而工作是达成自我成就的一种手段:通过工作的挑战,发掘自我的潜能,重新认知我和世界。

职场

  1. 把“我的问题”表述成"我们的问题“
  2. 给上司提封闭式问题,给下属提开放式问题
  3. 指出问题而不是批评人
  4. 用赞同的方式提出问题。(所谓直言有讳是指想要表达的意图要直截了当说明白,不要兜圈子,但是在表达方式上要有所避讳,照顾到当事人的感受。)
  5. 在解决我的问题之前,先解决你的问题
  6. 适当的逃避问题

大型网站架构技术一览

《大型网站技术架构》读书笔记_第1张图片
网站系统架构层次
  1. 前端架构
    浏览器优化技术、CDN、动静分离、图片服务、反向代理、DNS
  2. 应用层架构
    应用层是处理网站主要业务逻辑的地方

开发框架、页面渲染、负载均衡、Session管理、动态页面静态化、业务拆分、虚拟化服务器

  1. 服务层架构
    提供基础服务,供应用层调用,完成网站业务

分布式消息、分布式服务、分布式缓存、分布式配置

  1. 存储层架构
    提供数据、文件的持久化存储访问和管理服务
    分布式文件、关系数据库、NoSql数据库、数据同步

  2. 后台架构
    网站应用中,除了要处理用户实时访问请求外,还有一些后台非实时数据分析要处理。
    搜索引擎(站内)、数据仓库、推荐系统

  3. 数据采集与监控
    浏览器数据采集、服务器业务数据采集、服务器性能数据采集、系统监控、系统警报

  4. 安全架构
    web攻击、数据保护

  5. 数据中心机房架构
    机房架构、机柜架构、服务器架构

后记:
这是一本讲大型网站架构设计的书,但是大型网站不是设计出来的,而是逐步演化出来的。所以,不要企图去设计一个大型网站。

互联网正在并将继续改变这个世界,一切才刚刚开始,你我正生缝其时。

你可能感兴趣的:(《大型网站技术架构》读书笔记)