Week04
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
安全设计:所有请求走网关,在网关上集中鉴权,基于token而不是口令的认证机制,在反向代理中添加WAF防火墙,基于https通道传输数据,敏感数据加密存储等,通过策略来提高性能安全性,安全设计除了技术手段外,安全意识和观念也非常重要:安全设计作为系统架构的重要质量属性要尽早进行系统性设计,严苛的授权机制,最小授权原则,使用安全工具自测等。在实践中,感觉垂直越权和水平越权都比较难实现,因为与具体业务相关,很难做成通用的。
Nosql技术:比如hbase , ES这些技术提供了可伸缩,高可用,高性能存储和查询方案,对于非事务的海量数据处理场景可以使用nosql技术。
冗余设计:适当的冗余可以提高系统性能,如数据库的反范式、数据库的读写分离、双机,集群都能看到冗余的影子。
缓存技术:是使用成本低但是对性能提升非常明显的技术,在请求链条每个环节上都可以使用缓存来加速,包括但不限于:浏览器缓存、CDN、反向代理缓存(动静分离)、分布式缓存、本地缓存、数据库缓存、物理化视图。调用链上每个环节都是一个漏斗,经过筛选都会过滤掉大量的请求,减少对后继节点的压力,在任何场景、架构中数据库都是被重点保护的对象,数据库是IO型,而IO的速度比内存速度慢,通过缓存层层过滤请求,减少落到数据库上的请求。缓存技术是通过空间换时间,减少请求的链路环节,在大型互联架构中,一次请求一定会经过多次的跳转、转发才会到目的地,每次跳转都会消耗性能,而且网络不是100%的稳定,所以链路越长,出错先顾着的几率越大,而且在同步模式下,整条链路都被破等待,很容易因为一个节点造成雪崩,这也是熔断和异步消息机制的原理,就是让请求快速返回,缓存技术的本质也是快速返回。关于缓存技术,给我额外的启发是,如何快速返回是很多技术追求的目标。
分层设计:计算机中有一句话,任何复杂问题通过添加一个层就能解决,事实确实如此,设计模式、设计原则中的接口,网络七层模式,三层应用架构,BFF,网关、门面、反向代理,这些都有分层模式,他们带来的效果也是实实在在的。分层是关注点分离和职责分离的一种策略,是解耦的利器,各层之间通过接口交互,接口稳定后,各层内部的修改,不会影响对方。分层技术除了上面的好处外,分层可以消除混乱,让结构优雅,提高代码、设计、架构的可维护性和可扩展性,分层是分工协作的重要边界(业务和架构都适用)。
分割设计:对于复杂问题,分而治之,化整为零是通用解决方案,分层、分割在中台架构、微服务架构中更突出。分层是功能性的,分割是业务性的,领域驱动设计指导我们对系统分割,服务共享沉淀的诉求引领我们对系统分层,系统在垂直和水平方向切分后,形成多个可独立部署、运行、运维的单元,每个单元都可以配置集群、缓存,都可以进行垂直伸缩,通过对每个单元进行高可用和高性能设计,必然对系统的整体高可用和高性能有重要意义。各单位之间通过RPC调用和消息传递互联互通,虽然增加了系统复杂性,但是借助分布式治理框架,自动化运维等工具屏蔽复杂性。
异步设计:刚经历了一次异步设计的实践,系统上线前进行压测,发现负载太低,后来同步调用链切断,后半段使用异步方式处理,性能翻了好几倍,其实异步设计也是一种快速返回的技术。异步设计还有很多好处,最常见的是削峰填谷、适配处理速度、解耦。在分布式架构中各服务交互要么通过RPC调用,要么通过消息传递,尤其是异构系统、技术体系不同系统交互多采取这种方式,异步设计借助消息中间件,这也可以理解为一个层,通过在调用方和服务方之间插入这个层,是对双方的隔离和保护。分布式环境中,由于受限于CAP理论约束,分布式事务是绕不过去的,最常见的两种事务解决方案,基于同步的SAGA,和基于异步的可靠消息传递。
评论