开篇词
优秀的架构师都具备哪些特点?
强烈的好奇心、敏锐的业务嗅觉、扎实的技术基础、出色的编程能力、对主流技术产品和模式的深刻领悟。
想学好架构要从哪几方面入手?
基础:包括数据结构、操作系统、算法应用、设计模式等一切拥有优秀编程能力所应该熟知的软件基础知识。
技术:主要包括缓存、异步、分布式存储、微服务等。
架构设计:高可用、高性能、安全性
第01讲:大型架构的演进之路
大型互联网系统的特点:
高并发和大流量、高可用、海量的数据存储、用户分布广泛,网络情况复杂、安全环境恶劣、需求变化快,发布频繁。
系统处理能力提升的两种途径:
垂直伸缩:提升单台服务器的处理能力,比如说用更快频率、更多核的 CPU,用更大的内存,用更快的网卡,用更多的磁盘组成一台服务器,使单台服务器的处理能力得到提升,通过这种手段提升系统的处理能力。
水平伸缩:使用更多的服务器,将这些服务器构成一个分布式集群。这个集群统一对外提供服务,来提高系统整体的处理能力。
大型互联网架构演化进程:
单机系统--应用服务器与数据库分离(万级)--分布式缓存和服务器集群(十万级)--反向代理,CDN 加速,还需要数据库读写分离(百万级)--分布式文件系统和分布式数据库系统(千万级)--搜索引擎、NoSQL、消息队列、分布式服务(亿级)
第02讲:架构核心技术之分布式缓存(上)
缓存的类型主要有代理缓存、反向代理缓存、 CDN 缓存和对象缓存几种。
使用缓存需要注意几个关键指标:缓存键集合大小、缓存空间的大小以及缓存的使用寿命。
缓存的主要特点:技术简单、性能提升显著、应用场景多
第02讲:架构核心技术之分布式缓存(下)
通读缓存:上面讲到的代理缓存、反向代理缓存、CDN 缓存,都是通读缓存。它代理了用户的请求,也就是说用户在访问数据的时候,总是要通过通读缓存。
旁路缓存:旁路缓存是客户端先访问旁路缓存中是否有自己想要的数据,如果旁路缓存中没有需要的数据,那么由客户端自己去访问真正的数据服务提供者,获取数据。客户端获得数据以后,会自己把这个数据写入到旁路缓存中,这样下一次或者其他客户端去读取旁路缓存的时候就可以获得想要的数据了。
合理使用缓存对象:
注意频繁修改的数据、注意没有热点的访问数据、注意数据不一致和脏读、注意缓存雪崩。
一致性哈希算法:通过一致性哈希算法可以实现缓存服务器的顺利伸缩扩容。
第03讲:架构核心技术之分布式消息队列
同步调用:所谓的同步调用,就是说从请求的发起一直到最终的处理完成期间,请求的调用方一直在同步阻塞,等待调用的处理完成。
异步调用:与同步调用相反的是异步调用。
消息队列优点:异步处理、易伸缩、使峰值变平缓、失败隔离及自我修复、解耦。
布式消息队列遇到的挑战:消息无序、消息重新入队列、竞态条件、复杂度风险。
消息无序:将消息处理的顺序设计到异步流程中。
消息重新入队列:将消息处理设计成幂等性,也就是说消费者可以对同一条消息进行多次处理计算,而不会影响最终的结果。
竞态条件:并发执行就可能会导致对资源的争用,需要对共享资源的并发访问进行控制,以避免竞态条件的出现。
消息队列的反模式:
阻塞式调用、耦合生产者和消费者、缺少坏消息处理
常用消息队列产品:RabbitMQ 、ActiveMQ(Java开发)、RocketMQ(Java开发) 、Kafka。
使用异步调用的架构方法,就是使用消息队列,将生产者和消费者进行隔离。主要的架构模型有两种,一种是点对点模型,一种是发布订阅模型。其中点对点模型,一个消息只会被一个消费者消费;而发布订阅模型,一个消息可以被多个消费者订阅。
第04讲:架构核心技术之分布式数据存储
MySQL 数据库复制:
主从复制:将 MySQL 主数据库中的数据复制到从数据库中去。主要目的是实现数据库读写分离——写操作访问主数据库,读操作访问从数据库。
一主多从复制:
优点:分摊负载、专机专用、便于冷备、高可用。
主主复制:两台服务器都当作主服务器,任何一台服务器上收到的写操作都会复制到另一台服务器上。
数据分片
数据分片的目标:将一张数据表切分成较小的片,不同的片存储到不同的服务器上面去,通过分片的方式使用多台服务器存储一张数据表,避免一台服务器记录存储处理整张数据表带来的存储及访问压力。
分布式数据库中间件:Mycat
当数据在写的过程中多个数据备份有冲突的时候,如何解决呢?
一种方法是根据时间戳进行判断。最后写入的,也就是时间戳在后面的,覆盖时间戳在前面的
另一种解决冲突的机制是通过客户端进行冲突解决。
还有一种冲突的解决方案是通过投票进行解决。
第05讲:架构核心技术之微服务
单体系统的困难:编译、部署困难、代码分支管理困难、数据库连接耗尽、新增业务困难、发布困难
目前一些典型的微服务框架本身的架构是如何设计的?
Dubbo:最核心的模块有 3 个部分,一个是服务的提供者,一个是服务的消费者,还有一个是服务的注册中心。
几种微服务的使用模式:
事件溯源:可以精确地复现用户的状态变化,可以有效监控用户的状态变化,并在此基础上实现分布式的事务。
命令与查询职责隔离(CQRS)
断路器:使用断路器对故障服务进行隔离,断路器有三种状态:关闭、打开、半开。
超时:在设置超时的时候,要设置上游调用者的超时时间大于下游调用者的超时时间之和。
第06讲:高性能系统架构设计
性能测试:性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。
响应时间:是指应用系统从发出请求开始到收到最后响应数据所需要的时间。
并发数:并发数是指系统同时处理的请求数。
吞吐量:是指单位时间内系统处理请求的数量。
性能计数器:指的是服务器或者操作系统性能的一些指标数据,包括系统负载 System Load、对象和线程数、内存使用、CPU 使用、磁盘和网络 I/O 使用等指标。
通常我们说性能测试的时候指的是一个总称,是广义上的性能测试,具体可以分为狭义上的性能测试、负载测试、压力测试和稳定性测试。
分层优化系统性能:第一层是机房与骨干网络的性能优化、第二层是对服务器内的硬件进行优化、操作系统的性能优化、虚拟机的性能优化、基础组件的性能优化、软件架构性能优化、软件代码的性能优化。
软件架构性能优化:缓存、异步和集群。
第07讲:高可用系统架构设计
系统的可用性指标:年度可用性指标= 1 −(不可用时间/年度总时间)×100%
大型系统高可用的一般策略:负载均衡、数据库复制与失效转移、消息队列隔离、限流和降级、异地多活机房架构
负载均衡实现方法:HTTP 重定向负载均衡、DNS 负载均衡、反向代理负载均衡、IP 层负载均衡(四层负载均衡)、数据链路层负载均衡。
高可用运维:自动化测试、自动化监控、预发布、灰度发布
第08讲:系统的安全架构设计
Web 攻击与防护:
XSS 攻击:就是通过构造一个非法的浏览器脚本,让用户跨站点去执行,从而达到攻击的目的。
直接攻击。
XSS 攻击防御:消毒、HttpOnly
SQL 注入攻击
SQL 攻击防御:消毒、参数绑定、
CSRF 攻击
CSRF 攻击防御:表单 Token、验证码
Web 应用防火墙
信息加解密技术:主要分为三类,单向散列加密、对称加密和非对称加密。
信息过滤和反垃圾:贝叶斯分类算法、布隆过滤器算法。
第09讲:架构实战案例分析
互联网应用系统架构
分布式数据库的架构设计案例
编程框架的架构设计
第10讲:致未来的架构师
架构师阅读清单:
《Effective Java中文版》、《设计模式》、《敏捷软件开发——原则模式与实践》、《企业应用架构模式》、《卓有成效的管理者》
如何去超越同阶层的人,持续不断地获得进步,有几点实践中要注意的事情:
第一是要勇于承担责任。
第二持续的训练,每一次训练都要在上一次训练难度的基础上再提高一点。
在解决问题的过程中要关注问题的场景。
总结:以上内容摘自拉钩教育李智慧老师的《架构师的36项修炼》课程,为通往架构师成长的道路提供了一些理论基础与实践方法,学完之后受益匪浅。