新書推薦:
《
桑德拉销售原则 伍杰 [美]大卫·马特森
》
售價:NT$
440.0
《
理论的意义
》
售價:NT$
340.0
《
悬壶杂记:医林旧事
》
售價:NT$
240.0
《
谁之罪?(汉译世界文学5)
》
售價:NT$
240.0
《
民国词社沤社研究
》
售價:NT$
640.0
《
帕纳索传来的消息(文艺复兴译丛)
》
售價:NT$
495.0
《
DK威士忌大百科
》
售價:NT$
1340.0
《
小白学编织
》
售價:NT$
299.0
|
編輯推薦: |
实用、有料,阅读轻松、不费时
·立意场景化教学,一章一场景,理清技术应用
·众多项目经历尽在眼前,带你提前体验架构师“打怪”日常
*统一多色、调清、改字色……精心处理每一张框图,力争图图清晰
*每页增加笔记栏,方便记录拓展发散,提升阅读体验
|
內容簡介: |
《从程序员到架构师:大数据量、缓存、高并发、微服务、多团队协同等核心场景实战》分为数据持久化层场景实战、缓存层场景实战、基于常见组件的微服务场景实战、微服务进阶场景实战和开发运维场景实战5个部分,基于对十余个架构搭建与改造项目的经验总结,介绍了大数据量、缓存、高并发、微服务、多团队协同等核心场景下的架构设计常见问题及其通用技术方案,包含冷热分离、查询分离、分表分库、秒杀架构、注册发现、熔断、限流、微服务等具体需求下的技术选型、技术原理、技术应用、技术要点等内容,将技术讲解与实际场景相结合,内容丰富,实战性强,易于阅读。
《从程序员到架构师:大数据量、缓存、高并发、微服务、多团队协同等核心场景实战》适合计划转型架构师的程序员及希望提升架构设计能力的IT从业人员阅读。
|
關於作者: |
曾任硅谷上市公司技术总监、知名重资产型互联网上市公司技术总监、创业公司 CTO。目前是建信金融科技·基础技术中心的技术专家。
拥有 15 年互联网研发经验,保险、电商、银行等行业领域都有所涉猎,落地实践过数十个架构项目,在微服务、大数据、 AI工程化落地、中台化改造、DevOps 、运维自动化等方面有着丰富的经验。拉勾教育架构专栏优秀讲师。
|
目錄:
|
序
前言
第1部分 数据持久化层场景实战
第1章 冷热分离/
1.1 业务场景:几千万数据量的工单表如何快速优化/
1.2 数据库分区,从学习到放弃/
1.3 冷热分离简介/
1.3.1 什么是冷热分离/
1.3.2 什么情况下使用冷热分离/
1.4 冷热分离一期实现思路:冷热数据都用MySQL/
1.4.1 如何判断一个数据到底是冷数据还是热数据/
1.4.2 如何触发冷热数据分离/
1.4.3 如何分离冷热数据/
1.4.4 如何使用冷热数据/
1.4.5 历史数据如何迁移/
1.4.6 整体方案/
1.5 冷热分离二期实现思路:冷数据存放到HBase/
1.5.1 冷热分离一期解决方案的不足/
1.5.2 归档工单的使用场景/
1.5.3 HBase原理介绍/
1.5.4 HBase的表结构设计/
1.5.5 二期的代码改造/
1.6 小结/
第2章 查询分离/
2.1 业务场景:千万工单表如何实现快速查询/
2.2 查询分离简介/
2.2.1 何为查询分离/
2.2.2 何种场景下使用查询分离/
2.3 查询分离实现思路/
2.3.1 如何触发查询分离/
2.3.2 如何实现查询分离/
2.3.3 查询数据如何存储/
2.3.4 查询数据如何使用/
2.3.5 历史数据迁移/
2.3.6 MQ Elasticsearch的整体方案/
2.4 Elasticsearch注意事项/
2.4.1 如何使用Elasticsearch设计表结构/
2.4.2 Elasticsearch的存储结构/
2.4.3 Elasticsearch如何修改表结构/
2.4.4 陷阱一:Elasticsearch是准实时的吗/
2.4.5 陷阱二:Elasticsearch宕机恢复后,数据丢失/
2.4.6 陷阱三:分页越深,查询效率越低/
2.5 小结/
第3章 分表分库/
3.1 业务场景:亿级订单数据如何实现快速读写/
3.2 拆分存储的技术选型/
3.2.1 MySQL的分区技术/
3.2.2 NoSQL/
3.2.3 NewSQL/
3.2.4 基于MySQL的分表分库/
3.3 分表分库实现思路/
3.3.1 使用什么字段作为分片主键/
3.3.2 分片的策略是什么/
3.3.3 业务代码如何修改/
3.3.4 历史数据如何迁移/
3.3.5 未来的扩容方案是什么/
3.4 小结/
第2部分 缓存层场景实战
第4章 读缓存/
4.1 业务场景:如何将十几秒的查询请求优化成毫秒级/
4.2 缓存中间件技术选型(Memcached,MongoDB,Redis)/
4.3 缓存何时存储数据/
4.4 如何更新缓存/
4.4.1 组合1:先更新缓存,再更新数据库/
4.4.2 组合2:先删除缓存,再更新数据库/
4.4.3 组合3:先更新数据库,再更新缓存/
4.4.4 组合4:先更新数据库,再删除缓存/
4.4.5 组合5:先删除缓存,更新数据库,再删除缓存/
4.5 缓存的高可用设计/
4.6 缓存的监控/
4.7 小结/
第5章 写缓存/
5.1 业务场景:如何以小代价解决短期高频写请求/
5.2 写缓存/
5.3 实现思路/
5.3.1 写请求与批量落库这两个操作同步还是异步/
5.3.2 如何触发批量落库/
5.3.3 缓存数据存储在哪里/
5.3.4 缓存层并发操作需要注意什么/
5.3.5 批量落库失败了怎么办/
5.3.6 Redis的高可用配置/
5.4 小结/
第6章 数据收集/
6.1 业务背景:日亿万级请求日志收集如何不影响主业务/
6.2 技术选型思路/
6.2.1 使用什么技术保存埋点数据的现场/
6.2.2 使用什么技术收集日志数据到持久化层/
6.2.3 为什么使用Kafka/
6.2.4 使用什么技术把Kafka的数据迁移到持久化层/
6.3 整体方案/
6.4 小结/
第7章 秒杀架构/
7.1 业务场景:设计秒杀架构必知必会的那些事/
7.2 整体思路/
7.2.1 浏览页面如何将请求拦截在上游/
7.2.2 下单页面如何将请求拦截在上游/
7.2.3 付款页面如何将请求拦截在上游/
7.2.4 整体服务器架构/
7.3 小结/
第3部分 基于常见组件的微服务场景实战
第8章 注册发现/
8.1 业务场景:如何对几十个后台服务进行高效管理/
8.2 传统架构会出现的问题/
8.2.1 配置烦琐,上线容易出错/
8.2.2 加机器要重启/
8.2.3 负载均衡单点/
8.2.4 管理困难/
8.3 新架构要点/
8.3.1 中心存储服务使用什么技术/
8.3.2 使用哪个分布式协调服务/
8.3.3 基于ZooKeeper需要实现哪些功能/
8.4 ZooKeeper宕机了怎么办/
8.5 小结/
第9章 全链路日志/
9.1 业务场景:这个请求到底经历了什么/
9.2 技术选型/
9.2.1 日志数据结构支持OpenTracing/
9.2.2 支持Elasticsearch作为存储系统/
9.2.3 保证日志的收集对性能无影响/
9.2.4 查询统计功能的丰富程度/
9.2.5 使用案例/
9.2.6 终选择/
9.3 注意事项/
9.3.1 SkyWalking的数据收集机制/
9.3.2 如果SkyWalking服务端宕机了,会出现什么情况/
9.3.3 流量较大时,如何控制日志的数据量/
9.3.4 日志的保存时间/
9.3.5 集群配置:如何确保高可用/
9.4 小结/
第10章 熔断/
10.1 业务场景:如何预防一个服务故障影响整个系统/
10.1.1 个问题:请求慢/
10.1.2 第二个问题:流量洪峰缓存超时/
10.2 覆盖场景/
10.3 Sentinel 和Hystrix/
10.4 Hystrix的设计思路/
10.4.1 线程隔离机制/
10.4.2 熔断机制/
10.4.3 滚动(滑动)时间窗口/
10.4.4 Hystrix调用接口的请求处理流程/
10.5 注意事项/
10.5.1 数据一致性/
10.5.2 超时降级/
10.5.3 用户体验
|
內容試閱:
|
随着社会节奏的日益加快,碎片化学习逐渐成为人们获取知识的主要方式,虽然能学到很多知识,但这些知识往往零散琐碎、不系统。
刚学习Spring时,每当看到Spring的示例代码,我先是恍然大悟:“哦,原来Spring还有这个功能!”然后赶紧把这段代码复制到自己的代码库里。琢磨一番后发现:“不行,我还是得完整掌握Spring。”于是又在网络上寻找完整的Spring学习文档。但利用碎片化时间看完一半后,还是决定放弃了。
碎片化学习知识时,人们往往追求实用,对用得上的知识学得很快,而那些暂时用不到或没有融合使用场景的知识却不容易记住,每次看完就忘,一直这样循环往复。相信大部分人也都跟我一样,往往是真正遇到问题时才会去想对应的解决方案。
我是什么时候开始能完整看完Spring官方文档的?是在明白了Spring大部分功能的使用场景后。
同样的经历也发生在我的Spark学习之路上,我有过多次Spark从入门到放弃的经历,直到有一天碰到了一个实际业务问题——需要定期分析大量数据并生成分析结果,在解决这个问题的过程中,我才真正理解了Spark的用途。
这就和有些人一直不明白架构师到底是做什么的一样,直到有一天,他们遇到了一个具体的问题,摸索出了一个可行的方案,才明白:原来架构师是这样解决问题的。
因此,如果想要学好软件架构,基于场景的学习方式有效。因为一旦理解了业务场景,就能很容易地看懂某个解决方案,并理解解决方案背后的实现原理。
那么,有没有这样一本书:
它没有教条,没有理论,就像讲故事一样,将个人架构实战经历娓娓道来。
它先讲清楚需要解决的问题,然后诉说个人架构的心路历程,并将实现思路结合起来,阐述整体方案,后引申出解决方案的不足及更多思考。
在做了大量市场调研后我并没有找到此类书籍,于是就产生了一个想法,可不可以自己写一本这样的书,来填补这块空白?
本书讲的是架构,可是,什么是架构?
什么是架构?
关于架构,我以前一直以为,只有真正从0到1,经历各种技术选型后搭建出来的一个系统框架,才算是真正的架构。
但现实是,随意在Github上搜索一个框架,比如Spring Cloud脚手架,就有很多相关的教程。而且,对于从0开始的业务来说,技术选型有那么重要吗?实际工作中不都是技术创始人熟悉哪个技术栈就用哪个技术栈吗?
如果脚手架不是架构,那什么是?
来看看软件架构的定义。
软件架构是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图,描述的对象是直接构成系统的抽象组件,各个组件之间的连接明确和相对细致地描述组件之间的通信。在实现阶段,这些抽象组件被细化为实际的组件,比如具体的某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。软件架构是构建计算机软件的基础。与建筑师制订建筑项目的设计原则和目标来作为绘图员画图的基础一样,一个软件架构师或者系统架构师设计软件架构以作为满足不同客户需求的实际系统设计方案的基础。
是不是很难理解?
我以前有个领导,原来是Oracle的VP,那时候公司在推行Scrum,我就问他,学Scrum重要的是什么?
他说,是“体验”,先别去刻意记忆那些规则,而是跟着前辈做项目,在里面认真体验一段时间,自然就懂了。
我觉得这一方法在学习上也可以参考:先不去纠结什么是架构,而是去探索架构要解决什么问题、要处理什么样的场景。这就是本书的立足点。
从实际场景中学架构
我职场深耕15余载,经历过数十次互联网架构业务。在这几十次的架构经历中,有些因与业务紧密结合无法单独拿出来,但有些可以从特定业务需求中剥离出来变成技术思路上通用的解决方案。其中可以抽取归纳的架构经历共16次,本书将这16次真实的架构经历整理成一套知识体系,方便读者更加系统地理解它们,终内化为自己的知识。
根据架构设计的立足点,本书划分为5个部分。
第1部分:数据持久化层场景实战。主要讲解存储的数据量太大影响读写性能时,如何在存储层采取措施来解决性能问题。学完这部分内容后,当遇到数据量大的问题时,就可以直接从中找到参考答案。
第2部分:缓存层场景实战。主要讲解大流量时,如何避免流量直接压垮数据库层。学完这后,当遇到缓存层场景问题,就知道如何进行架构设计了。
第3部分:基于常见组件的微服务场景实战。主要讲解业务逻辑分布在不同的服务时,如何使用一些常见的组件去解决其中的各种问题。通过这部分内容的学习,能快速掌握一些微服务的基本原理,并灵活地组合一些常见微服务组件,或结合自研的一些框架来解决微服务场景问题。
第4部分:微服务进阶场景实战。在学完基于常见组件的微服务场景实战内容后,这个模块将先用各种真实经历让你提前体会在大公司使用微服务时会面临的一些问题,然后通过真实的架构经历来讲解使用无常见组件可用的微服务时所面临的一些问题及其解决方案。
第5部分:开发运维场景实战。主要讲解如何通过一些架构上的设计来提高开发效率和测试微服务的效率。
|
|