当前位置:主页 > 计算机电子书 > 程序设计 > 系统架构下载
系统架构设计:程序员向架构师转型之路

系统架构设计:程序员向架构师转型之路 PDF 完整版

  • 更新:2019-06-22
  • 大小:99.1 MB
  • 类别:系统架构
  • 作者:郑天民
  • 出版:人民邮电出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

系统架构设计:程序员向架构师转型之路

系统架构设计:程序员向架构师转型之路

内容总结

一、性能

性能就是核心要素之一,不然我为什么架构设计?随随便便一个lowlow的系统上线就好了。所以性能优化是很多小公司卖不去过的坎。这么说吧,当然优化网站性能的手段也非常多:

(1)web前端性能优化:
浏览器访问优化(浏览器缓存、页面压缩传输、合理布局页面、减少Cookie传输)
减少http请求。避免建立太多通讯链路。将js、css、图片文件尽可能合并。避免太多请求。同时,对于系统的后端请求也尽可能进行合理的设计,来避免出现太多交互。
使用浏览器的缓存。http头设置Cache-Control和Expires.js文件名比如可以带时间戳。一旦有更新则更新时间戳,否则缓存;同时尽量避免同一时间更新大量静态资源。
对静态资源进行压缩。
css放置在页面最上方,js放下最下面。以提前进行css渲染。同时避免js带来的页面阻塞。但需要case by case。比如页面dom节点需要依赖js生成,则可视情况改变文件位置。
减少cookie传输。同时让静态资源有独立域名,发送静态资源请求时候不发送cookie。以此减少传输代价。cookie可以通过document.cookie获取。

2.CDN加速
缓存图片、文件、CSS以及script脚本。但是pc上的CDN加速效果要好于移动端。经过调研发现,last-mile的延迟越高,CDN的相对有效性越差(具体见文章为什么CDN对移动客户端加速“没有”效果)。

3.反向代理
可以提供七层负载均衡(http请求进行均衡策略),并且可以提供静态资源的缓存,请求转发,防止网络攻击等。比较流行的有nginx。

(2)应用服务器性能优化:
如果请求静态界面不卡了,但是动态数据还是卡,说明MySQL处理的请求太多了,可以使用服务器本地缓存和分布式缓存,也可以通过异步操作方式来加快响应,在高并发请求的情况下,可以将多台应用服务器组成一个集群共同对外服务,提高整体处理能力,改善性能,具体如下:

1.分布式缓存(网站性能优化的第一定律:优先考虑使用缓存优化性能)
一般来说,存入cache的数据的读写比在2:1以上;且应该是热点数据。
需要考虑如果采用缓存则可能带来的数据短期内的不一致,或者如果实时更新缓存可能带来的性能和资源开销。
需要考虑cache一旦失效,大量请求直接命中DB可能带来的服务性能雪崩。所以可以对cache采用集群化部署,以此避免丢失过多数据造成服务压力陡增。
对于热点数据考虑进行缓存的预热加载。比如高峰期来临前,先将热点数据提前存入缓存。以此提高高峰期的服务性能。
为了避免恶意攻击,一直query不存在的数据,导致cache无法命中而频繁访问DB,可以将不存在的数据也进行缓存并定期清理。同时有机制对恶意请求进行识别和封禁。
分布式缓存应该去中心化并集中管理。通过不同实例间的互不通信和同构来保证可扩展性,并降低系统复杂度。

2.异步化(任何可以晚点做的事情都应该晚点再做,感觉像懒加载)
通过分布式消息队列来实现削峰的目的。通过业务配合技术来解决问题。比如12306的排队。

3.集群
采用集群也是服务虚拟化的一个体现。用以避免单点问题,同时提供更加高可用,高性能的服务。

4.代码优化
多线程中,如果是密集型计算,线程数不宜超过CPU核数。如果是IO处理,则线程数=[任务执行时间/(任务执行时间-IO等待时间)] * CPU核数。除此之外,我们应该将对象设计成无状态对象,多采用局部对象,适当将锁细化。
进行资源复用。比如采用单例模式,比如采用连接池。
合理设置JVM参数,以最大程度避免不合理的full gc。

5.存储性能优化
关系型数据库的索引采用B+树进行实现。而很多的nosql数据库则采用了LSM树进行存储。LSM在内存中保留最新增删改查的数据,直到内存无法放下,则与磁盘的下一级LSM树进行merge。所以对于写操作较多,而读操作更多的是查询最近写入数据的场景,其性能远高于b+树;采用HDFS结合map reduce进行海量数据存储和分析。其能自动进行并发访问和冗余备份,具有很高的可靠性。其等于是实现了RAID的功能。

内容介绍

郑天民编著的《系统架构设计:程序员向架构师 转型之路》主要包含软件开发普通程序员向系统架构 师转型的一些思路、方法和工程实践,也包括转型过 程中意识形态的转变、技术体系的掌握、系统工程学 的拓展及各项软技能的提升等内容。本书深入剖析成 为一名合格的架构师所需要的各项软、硬技能,重点 对目前业界主流的架构师所需掌握的技术知识领域, 以及作为一名技术管理人员所需具备的技术管理能力 进行详细介绍,并结合一些典型的场景进行案例分析 ,从而帮助读者了解并掌握成为架构师所需的各种知 识体系和实践技巧。

本书面向立志于转型成为架构师的后端服务开发 人员。读者不需要有很深的技术水平,也不限于特定 的开发语言,但熟悉Java EE常见技术并掌握一定系 统设计基本概念将有助于 好地理解书中的内容。同 时,本书也可以供具备不同技术体系的架构师同行参 考,希望能给日常研发和管理工作带来启发和帮助。

目录

  • 第一篇 程序员向架构师转型概述
  • 第1章 程序员向架构师转型
  • 1.1 架构设计基本概念
  • 1.1.1 架构的基本定义
  • 1.1.2 架构演进理论
  • 1.1.3 架构设计与系统工程
  • 1.2 剖析架构师角色
  • 1.2.1 架构师角色
  • 1.2.2 当程序员遇到架构师
  • 1.3 架构师的视图和视角
  • 1.3.1 架构师的视图
  • 1.3.2 架构师的视角
  • 1.3.3 视图视角与系统工程
  • 1.4 程序员如何向架构师成功转型
  • 1.4.1 转型成功的三段式模型
  • 1.4.2 转型思维导图
  • 1.4.3 作为架构师开展工作
  • 1.5 本章小结
  • 第二篇 软件架构设计知识体系
  • 第2章 软件架构体系结构
  • 2.1 软件体系结构
  • 2.2 架构风格
  • 2.2.1 分布式
  • 2.2.2 事件驱动
  • 2.2.3 系统结构
  • 2.2.4 消息总线
  • 2.2.5 适配与扩展
  • 2.3 架构模式
  • 2.3.1 数据访问
  • 2.3.2 服务定位
  • 2.3.3 异步化
  • 2.3.4 资源管理
  • 2.3.5 依赖管理
  • 2.4 架构模型
  • 2.5 本章小结
  • 第3章 领域驱动设计
  • 3.1 面向领域思想
  • 3.1.1 架构设计与领域驱动
  • 3.1.2 领域驱动设计核心概念
  • 3.1.3 案例介绍
  • 3.2 面向领域的策略设计
  • 3.2.1 通用语言
  • 3.2.2 领域与上下文
  • 3.2.3 领域驱动的架构风格
  • 3.2.4 案例策略设计
  • 3.3 面向领域的技术设计
  • 3.3.1 实体与值对象
  • 3.3.2 领域服务
  • 3.3.3 领域事件
  • 3.3.4 聚合
  • 3.3.5 资源库
  • 3.3.6 集成界限上下文
  • 3.3.7 应用程序
  • 3.3.8 案例技术设计
  • 3.4 案例实现
  • 3.5 本章小结
  • 第4章 分布式系统架构设计
  • 4.1 分布式系统
  • 4.2 RPC架构
  • 4.2.1 网络通信
  • 4.2.2 序列化
  • 4.2.3 传输协议
  • 4.2.4 服务调用
  • 4.3 分布式服务架构
  • 4.3.1 负载均衡与集群容错
  • 4.3.2 服务路由
  • 4.3.3 服务注册中心
  • 4.3.4 服务发布与调用
  • 4.3.5 服务监控与治理
  • 4.4 分布式服务框架Dubbo剖析
  • 4.4.1 Dubbo核心功能
  • 4.4.2 Dubbo原理分析
  • 4.5 微服务架构
  • 4.5.1 微服务实现策略
  • 4.5.2 微服务实现技术
  • 4.5.3 微服务实现案例
  • 4.6 本章小结
  • 第5章 架构实现技术体系
  • 5.1 缓存与性能优化
  • 5.1.1 性能概述
  • 5.1.2 Memcached
  • 5.1.3 Redis
  • 5.1.4 Nginx
  • 5.2 消息传递系统
  • 5.2.1 消息中间件需求
  • 5.2.2 JMS
  • 5.2.3 AMQP
  • 5.2.4 Kafka
  • 5.3 企业服务总线
  • 5.3.1 服务总线解决方案
  • 5.3.2 集成化端点
  • 5.4 数据分析处理
  • 5.4.1 轻量级批处理
  • 5.4.2 Spring Batch
  • 5.5 安全性
  • 5.5.1 安全性概述
  • 5.5.2 安全性实现技术
  • 5.6 本章小结
  • 第三篇 软件架构设计系统工程
  • 第6章 软件工程学
  • 6.1 软件工程学概述
  • 6.2 软件实现
  • 6.2.1 需求工程
  • 6.2.2 系统建模与案例分析
  • 6.2.3 软件实现与架构师
  • 6.3 项目管理
  • 6.3.1 项目管理体系
  • 6.3.2 项目研发过程的透明化管理
  • 6.3.3 项目管理与架构师
  • 6.4 过程改进
  • 6.4.1 软件过程模型
  • 6.4.2 软件过程改进
  • 6.4.3 过程改进与架构师
  • 6.5 本章小结
  • 第7章 敏捷方法与实践
  • 7.1 敏捷方法论概述
  • 7.2 极限编程与工程实践
  • 7.2.1 极限编程方法
  • 7.2.2 极限编程工程实践
  • 7.3 Scrum与过程管理
  • 7.3.1 Scrum简介
  • 7.3.2 Scrum框架
  • 7.3.3 如何进行敏捷回顾案例分析
  • 7.4 敏捷方法论与架构师
  • 7.4.1 敏捷开发中架构师的角色
  • 7.4.2 识别和消除研发过程浪费
  • 7.5 本章小结
  • 第8章 软件交付模型
  • 8.1 软件交付模型概述
  • 8.2 配置管理
  • 8.2.1 配置管理概述
  • 8.2.2 配置管理模式与实践
  • 8.2.3 SVN/GIT基本应用与实践
  • 8.2.4 系统版本控制策略案例分析
  • 8.3 持续集成
  • 8.3.1 持续集成理念
  • 8.3.2 Jenkins应用
  • 8.4 交付工作流
  • 8.5 本章小结
  • 第四篇 架构师软技能
  • 第9章 架构师 软技能
  • 9.1 架构师与外部环境
  • 9.1.1 政治与协商
  • 9.1.2 沟通
  • 9.1.3 邮件
  • 9.2 架构师与自身团队
  • 9.2.1 领导力
  • 9.2.2 知识管理
  • 9.2.3 人员管理
  • 9.2.4 绩效管理
  • 9.3 架构师与意识形态
  • 9.3.1 思维模式
  • 9.3.2 引入变化
  • 9.4 本章小结
  • 参考文献

资源下载

资源下载地址1:https://pan.baidu.com/s/1gu3ypR0hY5zRWKzu2zSk0Q

相关资源

网友留言