【假一罚四】架构基础:从需求到架构
集团直发,全新正版书籍,假一罚四,放心选购。24小时内发货。
¥
65.3
7.3折
¥
89
全新
库存2件
作者尹洪亮 著
出版社北京大学出版社
ISBN9787301327210
出版时间2022-01
装帧平装
开本16开
定价89元
货号31336598
上书时间2024-12-14
商品详情
- 品相描述:全新
- 商品描述
-
作者简介
尹洪亮,现任某互联网公司架构师,51CTO、CSDN、网易云课堂、腾讯课堂认证讲师,头条付费专栏作者。
目录
第1章如何规划自己的架构师职业生涯
1.1 架构师与程序员的区别
1.2 如何打磨自己的架构能力
1.3 架构师的 12 项必备技能
1.4 写给在校的大学生
1.5 写给程序员同行
第2章大型互联网架构设计的四大原则
2.1 大型互联网架构高可用设计
2.1.1 高可用指标
2.1.2 冗余设计
2.1.3 负载均衡架构设计
2.1.4 DNS轮询负载设计
2.1.5 两地三中心容灾设计
2.1.6 异地多活架构设计
2.1.7 MongoDB高可用架构
2.1.8 Redis高可用架构
2.1.9 Kafka高可用架构
2.1.10 数据库高可用架构
2.1.11 高并发访问限流设计
2.2 大型互联网架构高伸缩设计
2.2.1 文件存储伸缩设计
2.2.2 数据库伸缩设计
2.3 大型互联网架构高并发设计
2.3.1 多级缓存策略
2.3.2 异步化策略
2.3.3 读写分离策略
2.4 大型互联网架构安全性设计
2.4.1 安全控制的整体性
2.4.2 应用系统安全性设计
2.4.3 数据安全性设计
2.5 章节练习
2.6 案例设计
第3章分布式微服务架构设计
3.1 单体架构
3.2 SOA架构
3.3 微服务架构
3.4 服务注册与发现
3.5 客户端负载均衡
3.6 熔断机制
3.7 微服务网关
3.7.1 网关的原理
3.7.2 网关的功能
3.7.3 微服务网关与Nginx对比
3.7.4 正确的网关架构
3.8 配置中心
3.9 微服务监控
3.10 分布式链路追踪
3.11 大型互联网微服务架构
3.12 微服务改造的六大原则
3.13 章节练习
3.14 案例设计
第4章登录功能架构设计
4.1 登录设计的复杂性
4.2 多类型账号密码登录设计
4.3 三类验证码登录设计
4.3.1 手机验证码登录注册设计
4.3.2 动态令牌登录设计
4.3.3 语音验证码登录注册设计
4.4 本机号码一键登录注册设计
4.5 人脸/语音/指纹识别登录设计
4.6 多端登录设计
4.6.1 多端应用的开发模式
4.6.2 多端应用的会话保持
4.7 多设备登录设计
4.8 集群/分布式架构基于Session的登录设计
4.8.1 Session的工作原理
4.8.2 集群/分布式架构下的Session设计
4.9 企业级单点登录设计
4.9.1 认识单点登录
4.9.2 简单绑定单点登录设计
4.9.3 授权绑定单点登录设计
4.10 OAuth 2.0认证授权设计
4.11 用户扫码登录设计
4.12 章节练习
4.13 案例设计
第5章用户安全架构设计
5.1 安全设计无小事
5.2 主动与被动登录踢出设计
5.3 5种密码安全性设计
5.3.1 密码复杂度设计
5.3.2 密码安全检查设计
5.3.3 密码失效设计
5.3.4 账户锁定设计
5.3.5 密码传输和存储设计
5.4 5种密码找回设计
5.5 密码修改设计
5.6 5种用户注册设计
5.6.1 开放式注册、封闭式注册和半封闭式注册
5.6.2 手机验证码注册
5.6.3 邮箱激活注册
5.7 RBAC用户权限设计
5.7.1 RBAC权限模型
5.7.2 RBAC权限继承
5.7.3 RBAC权限模型演进
5.8 互联网权限架构设计
5.8.1 基于Token的访问控制
5.8.2 SecretID和SecretKey模式
5.8.3 JWT模式
5.8.4 微服务模式下的Token权限设计
5.8.5 Token的延时与刷新
5.9 章节练习
5.10 案例设计
第6章系统日志架构设计
6.1 日志的分类和用途
6.2 3种登录日志设计
6.2.1 利用登录日志进行安全检测
6.2.2 利用登录日志刻画用户
6.2.3 登录日志客户化
6.3 退出日志设计
6.4 4种操作轨迹设计
6.4.1 菜单操作日志设计
6.4.2 功能操作日志设计
6.4.3 流程操作日志设计
6.4.4 业务操作日志设计
6.5 接口日志设计
6.6 程序日志设计
6.7 日志存储设计
6.8 日志收集架构
6.8.1 日志收集架构的设计
6.8.2 Elastic Stack架构组件介绍
6.8.3 Elastic Stack架构模式
6.9 章节练习
6.10 案例设计
第7章 系统攻防架构设计
7.1 系统攻击的种类和特点
7.2 短信/邮件防攻击设计
7.3 两种字符图形验证码设计
7.4 提问式图片验证码设计
7.5 行为交互验证码设计
7.5.1 拖曳式验证码
7.5.2 点选式验证码
7.5.3 行为交互验证码设计流程
7.6 分布式验证码设计
7.7 防接口重放攻击设计
7.8 防暴力穷举攻击设计
7.9 防篡改攻击设计
7.10 章节练习
7.11 案例设计
第8章 系统消息架构设计
8.1 4种短信通知设计
8.1.1 实时短信通知设计
8.1.2 准实时短信通知设计
8.1.3 批量短信通知设计
8.1.4 定时短信通知设计
8.2 邮件通知设计
8.3 站内信设计
8.4 App消息推送设计
8.5 章节练习
8.6 案例设计
第9章 监控预警架构设计
9.1 服务器监控设计
9.2 业务监控设计
9.3 程序日志监控设计
9.4 主动上报监控设计
9.5 被动扫描监控设计
9.6 章节练习
9.7 案例设计
第10章 关系型大数据架构设计
10.1 海量数据处理的核心思想
10.2 大数据查询设计
10.3 大数据导入设计
10.4 大数据导出设计
10.5 章节练习
10.6 案例设计
第11章 批处理调度架构设计
11.1 批处理调度并不是简单的循环
11.2 单机批处理架构设计
11.2.1 调度与执行分离设计
11.2.2 串行与并行设计
11.3 集群批处理架构设计
11.4 分布式批处理架构设计
11.5 流水线批处理架构设计
11.6 章节练习
11.7 案例设计
第12章 系统配置架构设计
12.1 配置存储和加载策略设计
12.2 配置信息多级缓存设计
12.3 分布式架构参数配置设计
12.4 字典配置中心设计
12.5 SaaS化多租户多应用配置化设计
12.6 章节练习
12.7 案例设计
第13章 企业级核心架构设计实战
13.1 阿里云/腾讯云消息系统核心设计实
13.2 支付宝/微信支付系统核心设计实战
13.3 鹰眼业务监控系统整体设计实战
13.4 监管批量信息报送系统核心设计实战
内容摘要
本书根据各种企业级真实场景总结,提出合理的设计思路和解决方案,从需求、问题、解决方案、原理、设计方法、落地方案多个角度,给出架构设计方法。
本书主要内容包括大型互联网架构设计的四大原则、分布式微服务架构设计、登录功能架构设计、用户安全架构设计、系统日志架构设计、系统攻防架构设计、系统消息架构设计、监控预警架构设计、关系型大数据架构设计、批处理调度架构设计、系统配置架构设计、企业级核心架构设计实战等,详细讲解了各种场景的架构方案。
本书与任何编程语言无关,目的是提升读者的设计思维、培养读者的设计能力、开启读者的架构思维。同时,本书也是一本设计方案指南,开发人员、设计人员、架构人员均可参考本书,针对遇到的场景进行参考性设计。
主编推荐
合理的架构设计使系统具有更好的稳定性、可扩展性和安全性,因此架构设计在系统开发中扮演着极其重要的角色,是系统开发人员的推荐知识。本书深入浅出地对架构设计领域的知识进行了系统全面的讲解,详细剖析了不同功能模块的优选设计理念,并结合了大厂实战案例进行分析,是一本很好有参考价值的书籍。
——前阿里巴巴技术专家,东北大学计算机应用专业博士 李博
本书由浅入深,循序渐进,涵盖了各大主流系统模块从需求到架构实现的整个过程。无论你处在职业生涯的哪个阶段,本书都会对你有所帮助,是你从程序员蜕变成架构师的良师益友,值得每个同业人拥有!
——京东不错运维工程师 蔡堃
本书介绍了架构设计的常用原则,并探讨了常见业务场景下的架构实践,内容翔实丰富,值得一看。
——《Spring Cloud与Docker微服务架构实战》作者 周立
本书是市场上难得一见的好书,作者用惟妙惟肖的图片和通俗易懂的文字,为我们呈现了一场视觉盛宴,是对我们技术思想的一次洗礼。如果你想从程序员蜕变成一名合格的架构师,那么此书保证会照亮你的架构之路。
——九安数据服务端技术经理 周鹏
在互联网和大数据时代,对于网络承载和系统并发的要求都很好高。本书详细介绍了网络如何承载及应用集群部署,书中有很好详尽的方案、案例和原理的讲解。读完本书可以使我们在架构设计方面有所提升。
——九安数据前端技术经理 胡继元
本书作者从事多年架构设计工作,技术扎实,对技术的理解深刻、透彻,作者分享技术的同时,还分享了自己对架构师的理解,以及如何打磨、提升自己,这也是本书的难得之处。
——支付宝技术专家 邹明岩
本书作者从自身多年在互联网企业的工程实践和架构设计实践出发,结合业内大厂的架构设计实例,系统地总结了大型互联网架构设计中的相关经验,是的架构设计参考书籍,值得程序员和在校学生学习借鉴。
——北京航空航天大学信号与信息处理博士,阿里巴巴计算机视觉算法专家 朱燕青
精彩内容
第1章如何规划自己的架构师职业生涯要想成为一名架构师,要懂得规划自己的职业生涯。首先要能够明确区分架构师与程序员的区别,其次要高效地打磨架构设计能力,注重培养专业技能。有规划的工作与漫无目的的随意发展,结果是截然不同的。无论是在校大学生还是已经参加工作的程序员,都应该尽早地进行职业规划。
笔者常会在抖音上录制一些小视频,分享一些架构知识,有很多程序员同行留言:“你混淆了架构师和程序员的职责”“这是架构师应该考虑的问题,程序员写好代码就行了”“程序员不需要考虑系统规模,高并发、高可用这都是架构师该考虑的问题”“实现系统功能就可以了,考虑那么多东西干吗”。都说“不想当将军的士兵不是好士兵”,那么不想当架构师的程序员同样不会是一名优秀的程序员,其实每一个架构师都是一个“笨鸟先飞”的程序员。
技术人员首先要做的是改变自己的思维方式,仔细思考“程序员和架构师的本质区别到底是什么?架构师为什么有那么高的现实价值?”。一个程序员就算编码能力再强也只是一个人,一个大型的企业级项目往往需要多个团队的大量人员协作完成。架构师的职责是怎样做好顶层抽象、系统功能架构、服务关系架构、服务部署架构、服务拆分、系统分层设计、划定边界、核心框架、技术选型等。架构师必须要做出精准的顶层架构设计,让一个抽象的需求落地成为一个具体的系统。
因此,架构师的重要之处在于,将抽象的东西具体化,让复杂的事情简单化,让众多部门、人员清楚自己的职责,有序地实现各自部分的系统功能,最终形成一个大而完整的系统。架构师是一个人驱动众人,而一个编程强人,往往只能自己驱动自己或少数人,为企业带来的价值是有巨大差别的,这也是架构师属于高级职位的原因。
架构师是需求与开发之间的桥梁,它并不是一个纯技术岗位,表面上离技术更近一些,因为架构师都是从一名普通的开发人员成长起来的。架构师往往需要具有深厚的技术功底,对于技术有一定的深度和广度,更加注重底层原理,并且能够融会贯通,具有自己的一套知识体系,如果只是照搬理论,就成了死记硬背。
架构师的职责除进行业务分析、系统架构、分层设计外,很大一部分职责在于双向传播,向上汇报系统的构建方案,向下传达系统建设方法,也就是清晰准确地让公司上层领导和下层员工了解自己的思想和意图。向上汇报更多的是站在宏观视角,在非技术层面、合理性层面、成本层面考虑,让公司上层领导清晰直观地了解团队要做一个什么东西、打算怎么做、需要投入多少资源、能够带来什么效果。在公司内,任何工作能够得以顺利执行,都必须得到公司上层领导的支持和认同。
架构师往往需要协调多个团队、多个部门的开发人员相互协作来进行系统实施,涉及任务的分配、设计的评审、人员的管理等。可以说,架构设计能力、系统研发能力只是技术技能。此外,组织协调能力、汇报能力、管理能力也十分重要。毕竟架构师不可能凭借一己之力,实现一个庞大的企业级系统。
有时也存在架构设计上的取舍,并不会进行过度设计。例如,一个100人使用的系统,与一个100万人使用的系统的设计是绝对不同的。在系统建设初期有很多问题都没有办法暴露出来,公司资源的投入也是有限的,而随着企业的发展、用户量的上升、需求的完善才会不断地加大投入。架构设计也是一个迭代的过程,要结合市场、资源、时间、政策等方面来做决定。
架构师与程序员的区别有很多,大家各司其职。高级开发工程师也同样具有巨大的价值,因此架构师与程序员没有绝对的高低优劣之分,只是发展方向和成长路径不同而已,架构师要求综合能力更强一些,而高级开发工程师要求专项技能更突出一些。
与编程技能一样,设计能力、架构能力也是可以经过不断地学习、锻炼而打磨出来的。首先不要把架构师定位太高,认为那不是自己应该考虑的事情,或者架构师距离自己还太遥远,等以后时机成熟了、技术达到了一定的水平自然而然地水到渠成。
其实人人都是架构师,只是级别不同而已,就好比程序员还要分为入门级、初级、中级、高级。架构师同样如此,当自己还没有任何架构知识储备时,先将自己定位为入门级架构师,又有何不可呢?只有自己有了定位,才会进行刻意的积累和练习,才能逐步走进这个领域,了解这个领域要做什么,应该学习什么。
软件行业的特点就是知识的更迭速度太快,每天都有层出不穷的新技术、新理论、新名词产生。今天还在学习的东西可能很快就会被淘汰,所以无论想要成为一名资深程序员,还是一名资深架构师,都需要保持终身学习的心态,这是最重要的一点。
没有人能够保持百分之百的精力、持续的自律,总会有懈怠,想放松,想放弃,这都是很正常的,没有必要因为这些而失去信心。终身学习的技巧是追求平均值,可以在状态好时多学习一些,达到一个峰值,在状态不佳时适当休息,或者完全不做任何事情,达到一个谷值,但是只要不彻底放弃,总会找到一种平衡,让所有的投入达到一种均衡稳定的状态。
系统架构和技术开发的区别就在于,前者很难通过学习技术书籍、视频资料、代码编写而得来,因为架构具有一定的抽象性,越抽象的东西适用性越广,价值也往往越大,学习抽象性的东西,更多依靠的是思维能力、想象能力,简单来说就是要多动脑。
程序员如何提高自己的架构能力,主要有8种方法,如图1-1所示。
图1-1 如何提高架构能力(1)反复认真地看系统原型。系统原型是一个经过了论证、仔细推敲的系统设计文档,它的特点是直观、便于理解。通过原型图可以清晰地知道系统中都包含哪些页面、功能、交互方式、操作流程。很多程序开发人员,有一个不太好的习惯就是不仔细地看文档说明,感觉了解得差不多了就开始动手敲代码。往往开发完的程序,这里少个逻辑,那里少个校验。养成仔细看原型的习惯,能够锻炼自己对细节的把控能力,使自己具有更强的洞察力,架构师经常需要在一些细微之处做一些灵活而复杂的设计。
(2)反复认真地看需求文档。需求文档详尽地描述了用户想要什么,希望达到什么效果,以及应该怎样做。对需求一知半解就进行开发,后果是可想而知的。一个好的架构师一定是一个好的需求分析师。架构师并不是靠凭空想象去做事情。所有的架构设计都是为了完成需求,脱离需求的设计是没有任何意义的。因此,想要成为一名优秀的架构师,一定要养成深入理解需求的习惯。
(3)反复认真地看设计文档。设计文档是架构师、设计师、TeamLeader对具体功能的设计,包含了系统整体架构设计、交互方式设计、数据库设计、流程设计、模块设计、代码结构设计等。当自己还没有足够的能力独立做系统设计时,就需要不断地去学习和模仿别人的设计,理解别人的设计。
(4)扩大自己的视角。很多程序员只负责自己开发的系统,交给自己什么就只做什么。工作了一两年,甚至还不知道自己所开发的系统处于整个业务流程的哪个环节,不知道自己实现的功能和其他功能有什么关联关系,不知道自己开发的接口处于整个调用链路的哪个环节。在阅读任何原型、需求和设计文档时,都要养成一个全局视角,先了解整体,再了解局部,知道整个系统要干什么、包含什么功能、自己在做什么。不懂就问,一定要清楚自己处于一个庞大系统的哪个环节。
(5)养成刨根问底的习惯。多去阅读别人的需求分析文档、设计文档、数据库结构设计、 接口设计等,思考别人为什么要这样设计,有哪些精妙之处,有哪些不足。当有不理解的地方就多提问、多探讨,这样自己才能进步。
(6)练习文档写作能力。很多开发人员最痛苦的事情就是写文档,他们对于写文档有一种强烈的抵触情绪。其实原因很简单,打开Word就不知道应该写什么、怎么写,不知道怎么把一件抽象的事情描述清楚,不知道怎么把自己的想法变成文字,不知道以什么样的形式能让别人理解自己的想法。可以尝试自己画一画原型、写一写设计文档、做一做需求分析,只有真正动手了才能体会出这项工作的特点是什么、难点是什么、自己还欠缺什么。有时认为自己已经想得很清楚了,当真的要落实到文档上时,才发现有那么多的问题。写文档的过程就是把思想具体化的过程,当写不出来时,根本原因是思路还不够清晰。
(7)抓住每一个验证自己能力的机会。有时自己也想去做设计,但是作为一个普通的开发人员,似乎并没有那么多机会去施展才华,毕竟自己还不是TeamLeader、项目经理,自己说话根本没有分量,并且设计的事情已经有资深人员承担了。但是,反向来思考一下,有哪个项目经理、设计师、架构师不是从程序员做起的呢?一个公司有那么多员工,为什么有些年轻人能够快速被提拔,为什么有些人年纪轻轻就可以做项目经理、架构师,而大多数的同龄人却不行呢?这就是对机会的把握能力的区别,除不断地学习和努力,去储备自己的能力外,还要主动地去寻找机会,抓住机会。工作动申请去做那些更复杂、更有挑战性的工作,能够迅速地得到公司的认可。如果永远和别人做相同难度的增删改查,那么怎么能体现出自己比别人更强呢。主动地去申请做一些小模块的设计,不但锻炼了自己的设计能力,还能让公司感受到自己能主动担当,敢于挑战自己,有何不可呢?
没做过小的功能设计,就不会有机会去做模块设计;没做过模块设计,就不会有机会去做子系统设计;没做过子系统设计,更不会有机会去做多个系统相互协作的系统群设计;没做过系统群设计,又怎么成为一名高级架构师呢。
(8)锻炼总结能力。有时并不是自己的知识储备不够,而是因为自己掌握的东西没有形成体系。它们分散在各处,当需要使用时,就需要到各处去查找,再拼凑在一起。对于一个系统的架构方式、部署方式、数据库设计、核心流程等都是可以整理总结的内容。如果能够对自己参与的所有系统都达到十分清晰的状态,那么一定会引起公司足够的重视。养成总结的习惯,形成知识体系,会让自己很快成为一个有“干货”的人。
— 没有更多了 —
以下为对购买帮助不大的评价