大型互联网应用系统常用技术(持续更新)

用户头像
2流程序员
关注
发布于: 2020 年 06 月 30 日

版本记录:

2020.7.1 初版

2020.7.8 补充分布式缓存、消息队列和负载均衡内容

2020.7.13 补充分布式数据库

2020.7.14 补充CAP原理与最终一致性



架构层次结构

前端架构

浏览器和Web开发技术

  1. ‍减少http请求,降低系统因建立网络连接消耗的时间和资源:

  • 合并CSS、JS和图片

  • ‍使用浏览器缓存:在http头中设置Cache-Control和Expires

  1. 降低网络流量,加速网络传输:

‍启用压缩‍

‍减少Cooke数据量和无意义的Cookie发送

  1. 动静分离,降低单个站点的负载,易维护和拓展:

合理组织静态文件,一般将CSS放在页面上方,JS放在页面下方‍

考虑静态资源使用独立域名

‍设置图片服务

‍CDN加速

CDN本质上是一个缓存,将数据缓存到离用户最近的地方,加快响应时间。

反向代理

  1. 可通过配置缓存功能加速Web请求,加速响应。

  2. 可实现负载均衡的功能,提高系统总体处理能力和并发数。



DNS

  1. ‍开启DNS缓存功能,减少域名解析时间。

  2. 多IP地址启用DNS轮询‍,实现负载均衡。

‍网关及应用层架构

网关架构

网关可为服务提供统一接入入口,同时提供认证、流控、计费等一系列通用的开放api控制功能。

负载均衡

负载均衡为单个服务提供可无限横向扩展的集群功能,按一定的算法将业务请求你分发到集群服务器上,并自动踢出失效服务器。保证服务的高可用。

HTTP重定向负载均衡

优点:实现简单

缺点:多一次http请求

DNS负载均衡

优点:简单易扩展,服务可分布在任意地点

缺点:无法及时踢出故障节点



反向代理负载均衡

优点:扩展性好、能按定义负载均衡算法分发请求、可跨网段分发请求

缺点:负载均衡服务器容易成为瓶颈

IP负载均衡

优点:性能高

缺点:无法跨网段



数据链路层负载均衡



动态页面静态化

对热点数据暂时进行静态化处理,可提高系统响应时间,降低数据库负载,提高系统并发承受能力。

业务分拆

对业务进行横向和纵向的拆分,可以降低系统耦合性,使开发迭代更加敏捷。同时增加系统的可扩展性和可用性。

服务层架构

微服务框架

提供服务注册、发现和负载均衡,提供服务治理和调用链管理能力。

提高系统资源利用率,提升系统运维能力。

分布式消息队列

以集群方式提供消息队列服务,确保消息传递的可靠性。

两种消息队列模型

发布订阅模型



点对点模型



消息队列的好处

  1. 实现异步处理

  2. 更好的伸缩性

  3. 削峰填谷

  4. 失败隔离和自我修复

  5. 解耦

分布式缓存

以集群方式提供缓存服务,避免缓存失效导致数据库被压垮事故。

缓存命中率

命中率是缓存性能的关键指标。它会受到以下因素影响:

  1. 缓存键集合大小(越小越高)

  2. 缓存可使用内存空间(越大越高)

  3. 缓存对象生存时间(越长越高)

缓存方式

  1. 代理缓存

  1. 反向代理缓存

  1. 多层反向代理缓存

  1. 内容分发网络(CDN)

  1. CDN同时配置静态文件和动态内容

两种缓存方式

  1. 通读缓存:内容直接从缓存获取,而不是生成内容的原始服务器。

代理缓存,反向代理,CDN都是通读缓存。

  1. 旁路缓存:缓存有则取缓存,无则连接原始服务器获取并更新缓存。

浏览器对象缓存;应用程序管理的内存中的对象缓存;共享内存;缓存服务



不适合缓存的场景

  1. 频繁更新的数据

  2. 没有热点的访问

缓存造成的问题

  1. 数据不一致与脏读

  2. 缓存雪崩

  3. 缓存预热

  4. 缓存穿透



分布式一致性服务

以集群方式提供分布式事务能力。

存储层架构

分布式文件

以集群方式提供文件的存储、冗余备份、并行读取和计算功能。为系统提供高可用和高性能文件存取服务。

分布式关系数据库

以集群方式提供关系型数据库服务。对数据库读写请求进行负载均衡,提高系统性能。并提供节点故障切换,保证系统高可用。

Mysql主从复制

一主多从复制优点

  • 分摊负载

  • 读写分离,减轻主节点负载。多个从节点分担读任务。

  • 专机专用

  • 可设置专用从节点为特定应用服务(如报表系统)

  • 便于冷备

  • 从节点可切换为主节点

  • 高可用

Mysql主主复制与失效恢复



主主复制注意事项

  • 只能同时写一个主数据库

  • 复制只增加了数据的读并发处理能力,写和存储能力并无增加

  • 更新表结构会导致巨大的延迟

数据分片

随着数据量不断增大,单表记录已经超过数据库管理能力或者数据量超过单机存储能力。这时就要讲单表数据分片存储。

分片实现方式

  1. 硬编码实现数据分片

  2. 映射表外部存储

  3. 使用数据库中间件

数据分片的挑战

  • 需要大量的额外代码,处理逻辑因此变得更加复杂

  • 无法执行多分片的联合查询

  • 无法使用数据库的事务

  • 随着数据的增长,如何增加更多服务器成为难题

实践方案--水平分割与综合部署



使用中间件的扩容策略



CAP原理

  • C(Consistency):一致性是说,每次读取数据都应该是最近写入的数据或者返回一个错误,而不是过期的数据。

  • A(Availability):可用性是说,每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最近写入的,也就是说系统需要一直都可以正常使用,不会引起调用者的异常,但不保证响应但数据是最新但。

  • P(Partition tolerance):分区耐受性是说,即使因为网络原因,部分服务器节点之间消息丢失或延迟了,系统依然可以操作。

对于一个分布式系统而言,网络失效一定会发生,分区耐受性是必须要保证的,此时可用性和一致性无法同时满足。

最终一致性

实践中,一般使用最终一致性,但会有冲突产生。

解决冲突方法:

  • 根据时间戳或版本号,取最新版本

  • 客户端解决冲突:将不一致但数据合并处理

  • 投票解决

  • 分布式解决(Cassandra)

  • zk路由,文件系统保证数据可用(Hbase)



NoSQL数据库

提供海量数据存储和查询,提供横向扩展性。

后台架构

大数据平台

提供数据存储、统计分析和实时计算功能。

搜索引擎

提供内容检索服务。

推荐引擎

为精准营销提供支持。

数据仓库

提供数据存储服务。

运维与安全

数据采集与展示

收集、分析和展示系统当前运行状况,为系统优化提供依据。

数据监控与报警

监控系统健康状态,出现问题时及时告警。

攻击与防护

抵御恶意攻击。

数据加密与解密

确保数据传输过程中信息的安全性。



用户头像

2流程序员

关注

还未添加个人签名 2020.03.18 加入

还未添加个人简介

评论

发布
暂无评论
大型互联网应用系统常用技术(持续更新)