大型互联网应用系统常用技术(持续更新)
版本记录:
2020.7.1 初版
2020.7.8 补充分布式缓存、消息队列和负载均衡内容
2020.7.13 补充分布式数据库
2020.7.14 补充CAP原理与最终一致性
架构层次结构
前端架构
浏览器和Web开发技术
减少http请求,降低系统因建立网络连接消耗的时间和资源:
合并CSS、JS和图片
使用浏览器缓存:在http头中设置Cache-Control和Expires
降低网络流量,加速网络传输:
启用压缩
减少Cooke数据量和无意义的Cookie发送
动静分离,降低单个站点的负载,易维护和拓展:
合理组织静态文件,一般将CSS放在页面上方,JS放在页面下方
考虑静态资源使用独立域名
设置图片服务
CDN加速
CDN本质上是一个缓存,将数据缓存到离用户最近的地方,加快响应时间。
反向代理
可通过配置缓存功能加速Web请求,加速响应。
可实现负载均衡的功能,提高系统总体处理能力和并发数。
DNS
开启DNS缓存功能,减少域名解析时间。
多IP地址启用DNS轮询,实现负载均衡。
网关及应用层架构
网关架构
网关可为服务提供统一接入入口,同时提供认证、流控、计费等一系列通用的开放api控制功能。
负载均衡
负载均衡为单个服务提供可无限横向扩展的集群功能,按一定的算法将业务请求你分发到集群服务器上,并自动踢出失效服务器。保证服务的高可用。
HTTP重定向负载均衡
优点:实现简单
缺点:多一次http请求
DNS负载均衡
优点:简单易扩展,服务可分布在任意地点
缺点:无法及时踢出故障节点
反向代理负载均衡
优点:扩展性好、能按定义负载均衡算法分发请求、可跨网段分发请求
缺点:负载均衡服务器容易成为瓶颈
IP负载均衡
优点:性能高
缺点:无法跨网段
数据链路层负载均衡
动态页面静态化
对热点数据暂时进行静态化处理,可提高系统响应时间,降低数据库负载,提高系统并发承受能力。
业务分拆
对业务进行横向和纵向的拆分,可以降低系统耦合性,使开发迭代更加敏捷。同时增加系统的可扩展性和可用性。
服务层架构
微服务框架
提供服务注册、发现和负载均衡,提供服务治理和调用链管理能力。
提高系统资源利用率,提升系统运维能力。
分布式消息队列
以集群方式提供消息队列服务,确保消息传递的可靠性。
两种消息队列模型
发布订阅模型
点对点模型
消息队列的好处
实现异步处理
更好的伸缩性
削峰填谷
失败隔离和自我修复
解耦
分布式缓存
以集群方式提供缓存服务,避免缓存失效导致数据库被压垮事故。
缓存命中率
命中率是缓存性能的关键指标。它会受到以下因素影响:
缓存键集合大小(越小越高)
缓存可使用内存空间(越大越高)
缓存对象生存时间(越长越高)
缓存方式
代理缓存
反向代理缓存
多层反向代理缓存
内容分发网络(CDN)
CDN同时配置静态文件和动态内容
两种缓存方式
通读缓存:内容直接从缓存获取,而不是生成内容的原始服务器。
代理缓存,反向代理,CDN都是通读缓存。
旁路缓存:缓存有则取缓存,无则连接原始服务器获取并更新缓存。
浏览器对象缓存;应用程序管理的内存中的对象缓存;共享内存;缓存服务
不适合缓存的场景
频繁更新的数据
没有热点的访问
缓存造成的问题
数据不一致与脏读
缓存雪崩
缓存预热
缓存穿透
分布式一致性服务
以集群方式提供分布式事务能力。
存储层架构
分布式文件
以集群方式提供文件的存储、冗余备份、并行读取和计算功能。为系统提供高可用和高性能文件存取服务。
分布式关系数据库
以集群方式提供关系型数据库服务。对数据库读写请求进行负载均衡,提高系统性能。并提供节点故障切换,保证系统高可用。
Mysql主从复制
一主多从复制优点
分摊负载
读写分离,减轻主节点负载。多个从节点分担读任务。
专机专用
可设置专用从节点为特定应用服务(如报表系统)
便于冷备
从节点可切换为主节点
高可用
Mysql主主复制与失效恢复
主主复制注意事项
只能同时写一个主数据库
复制只增加了数据的读并发处理能力,写和存储能力并无增加
更新表结构会导致巨大的延迟
数据分片
随着数据量不断增大,单表记录已经超过数据库管理能力或者数据量超过单机存储能力。这时就要讲单表数据分片存储。
分片实现方式
硬编码实现数据分片
映射表外部存储
使用数据库中间件
数据分片的挑战
需要大量的额外代码,处理逻辑因此变得更加复杂
无法执行多分片的联合查询
无法使用数据库的事务
随着数据的增长,如何增加更多服务器成为难题
实践方案--水平分割与综合部署
使用中间件的扩容策略
CAP原理
C(Consistency):一致性是说,每次读取数据都应该是最近写入的数据或者返回一个错误,而不是过期的数据。
A(Availability):可用性是说,每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最近写入的,也就是说系统需要一直都可以正常使用,不会引起调用者的异常,但不保证响应但数据是最新但。
P(Partition tolerance):分区耐受性是说,即使因为网络原因,部分服务器节点之间消息丢失或延迟了,系统依然可以操作。
对于一个分布式系统而言,网络失效一定会发生,分区耐受性是必须要保证的,此时可用性和一致性无法同时满足。
最终一致性
实践中,一般使用最终一致性,但会有冲突产生。
解决冲突方法:
根据时间戳或版本号,取最新版本
客户端解决冲突:将不一致但数据合并处理
投票解决
分布式解决(Cassandra)
zk路由,文件系统保证数据可用(Hbase)
NoSQL数据库
提供海量数据存储和查询,提供横向扩展性。
后台架构
大数据平台
提供数据存储、统计分析和实时计算功能。
搜索引擎
提供内容检索服务。
推荐引擎
为精准营销提供支持。
数据仓库
提供数据存储服务。
运维与安全
数据采集与展示
收集、分析和展示系统当前运行状况,为系统优化提供依据。
数据监控与报警
监控系统健康状态,出现问题时及时告警。
攻击与防护
抵御恶意攻击。
数据加密与解密
确保数据传输过程中信息的安全性。
评论