《大型网站系统与Java中间件实践》读书笔记

前言:前段时间刚泛读了一遍《大型网站系统与Java中间件实践》一书,感觉这书无论广度和深度都非常出色,现在重新精读一遍,并整理一遍读书笔记,以此来更好的学习里面的内容。

  •  关于分布式系统
    •   分布式系统的定义
      1. 分布在网络计算机上
      2. 组件之间仅仅通过消息传递来通信并协调行动
    •   使用分布式分布式系统的原因
      1. 升级单机处理能力的性价比越来越低
      2. 单机处理能力存在瓶颈
      3. 出于稳定性和可用性的考虑
    •   相关知识
      1. 阿姆达尔定律告诉我们,程序中可并行代码的比例决定了增加处理器(总核心数)所能带来的速度提升的上线。(也就是说,除了增加CPU的性能外,使用多线程编程也是提升系统速度必不可少的一个因素)
      2. 分布式系统是由多机组成的系统,可以近似的看做是把单机多进程变为了多机的多进程
      3. 网络IO实现方式:BIO、NIO(Reactor反应器模式)、AIO(Proactor前摄模式),阻塞、异步的区别
      4. 分布式系统中常用模式:硬件负载均衡、LVS、名称服务、规则服务器、MasterWorker方式,常用于控制器、运算器和储存器中
      5. 分布式系统的难点:缺乏全局时钟、面对故障独立性、处理单点故障、事务的挑战。
  •  大型网站及其架构演进过程
    •   什么是大型网站:支撑海量数据和非常高的并发的访问量,必定是一个分布式系统。
    •   大型网站的架构演进
      1. 单机上的功能模块拆分
      2. 数据库与应用分类
      3. 单机应用服务器改为集群:引入负载均衡设备、session问题的4种处理方式
      4. 数据读写分离:搜索引擎其实是一个读库,缓存是加速数据读取的利器(高并发)
      5. 引入分布式储存系统:分布式文件系统、分布式key-value系统和风不是数据库(高效率)
      6. 数据库垂直拆分和水平拆分(大数据)
      7. 拆分应用走服务化的路,需要基础组件的支持,比如:利用消息中间件来异步和解耦。
    • 构建Java中间件
      • 中间件的定义:提供了操作系统所提供的服务之外的服务,相当于“软件胶水”
      • 三个领域的应用:
        1. 远程调用和对象访问中间件:解决分布式环境下应用互相访问的问题
        2. 消息中间件:解决应用之间的消息传递、解耦、异步的问题
        3. 数据访问中间件:解决应用访问数据库的共性问题的组件
      • Java中间件的相关知识:JVM、GC、并发编程、动态代理、反射、网络通信
      • 中间件的作用:在网站的演进过程中,一些非常重要的变化包括应用的拆分、服务的拆分、数据的拆分和应用的解耦。而在大型网站中要具体完成这样的工作,就需要对应的中间件产品来对应和解决相应的问题。
  •  服务框架
    •   网站功能持续丰富后的困境与应对
      1. 应用拆小,但是公用数据库缓存等模块。这样做在小范围实现的成本较低,但是继续下去数据库等模块压力会变大,代码和应用也冗余越重。
      2. 服务化方案,能让多个规模不大的团队,专注在某个具体的服务或者应用上,以这种方式来应对和解决问题。
    •   服务框架的设计与实现
      1. 如何配置
      2. 运行期间服务框架与应用和容器的关系:将其部署为一个SAR包来为应用提供服务。
      3. 通信方式的选择
      4. 服务端的设计与实现
      5. 实战中的优化
      6. 服务治理
  • 数据访问层
    •   数据库从单机到分布式的挑战和应对
      • 1.单机数据库
      • 2.数据库垂直/水平拆分
    •   关于数据库减压
      • 优化应用,看看是否有不必要的压力给力数据库(应用优化);
      • 看看有没有其他的办法可以降低对数据库的压力,例如引入缓存、加搜索引擎等;
      • 把数据库和访问分到多台数据库上,分开支持
    •   大型网站的一致性的基础理论——CAP/BASE
    •    数据访问层的设计与实现
  •   消息中间件
    •  消息中间件的价值:消息中间件为分布式系统带来了异步的特效,对系统进行了解耦
    •   B/S系统下的消息中间件
  • 软件负责中心与集中配置管理
    •   负载中间的职责:
        1.聚合地址信息
            2.生命周期的感知(服务器的上下线)
    • 负载中心的结构:分服务端和客户端
    • 从单机到集群
    • 集中配置管理中心
  • 构建大型网站的其它要素
    • 加速静态内容访问速度的CDN——内容分发网络
    • 大型网站的存储支持:分布式文件系统(TFS)、NoSQL
    • 缓存系统:一般的做法是在写数据时更新存储,然后失效缓存数据;而在读数据时首先读缓存,如果没有命中,再去读存储,并且把数据写入缓存。
    • 搜索系统:爬虫问题、倒排索引
    • 数据计算支持:
    • 数据计算支撑:离线计算、在线计算
    • 发布系统
    • 应用监控系统
    • 依赖管理系统
    • 多机房问题
    • 系统容量规划
    • 内部私有云

后记:在大型网站的建设中,千万不要一味遵循一些所谓的标准,因为有些标准的指定根本不是针对大型网站系统的

原文地址:https://www.cnblogs.com/xujanus/p/3925159.html