企业级互联网分布式系统应用架构
15 Oct 2017一、互联网应用架构概览
架构需要解决以下痛点:
- 跨运营商网络的一致性体验 (解决办法:BGP多线、CDN)
- 支持突发的高流量访问并快速响应,并将数据存储 (解决办法:应用层横向扩展-负载均衡、应用层缓存、同步转异步处理、数据库读写分离)
- 保证系统的高可用,减少故障和运维导致的不可用时间
用户访问网站的过程:
- 互联网缓存服务器 (缓存静态内容,并刷新静态内容)
- 负载均衡器 (将用户的访问分发到 Web Server)
- Web 服务器(将静态内容返回给缓存服务器或者用户,并将动态内容(如购物车、订单)发送给应用服务器)
- 应用服务器
- 数据库服务器
- 大数据平台(分析用户数据和行为)
二、提高网络访问速度
网络的构成:
-
第一公里: 网站的服务器平台到运营商的网络. 网络访问速度取决于网络服务器的处理能力和网络的带宽的瓶颈
-
中间: 中国电信、中国联通、中国移动、教育网. 网络运营商之间的互联瓶颈问题,不同地区骨干网之间的数据交换、传输、导致运输途中的路由阻塞和延迟
-
最后一公里: 随着 4G 网络的推行,以及网络服务提供商的提速降价,已经得到极大的缓解
解决办法:
-
BGP多线
BGP 技术就是通过技术手段,使得不同运营商之间能共同访问一个 IP,并且不同运营商之间都能达到最快的接入速度的网络技术。多线实际对应着多个运营商。
-
CDN (内容分发网络)
目的是通过在现有的Internet 中增加一层新的网络架构,将网站的内容发到最接近用户的网络”边缘”,使用户能够就近取得所需的内容,解决 Internet 网络拥塞状况,提高用户访问网站的响应速度。 使用CDN后的 HTTP 请求处理流程如下图(图片来源于阿里云CDN介绍文档):
三、提高应用响应速度
提高应用响应速度,就必须提高应用并发度,可以使用以下方法:
* 应用层横向扩展
* 使用应用层缓存
* 同步转异步
* 数据库读写分离及提高IO能力
应用层横向扩展
应用层横向扩展应用场景:
- 每天中午,用户一起玩王者荣耀
- 双11搞促销活动
现在工业界中,使用的负载均衡开源软件
应用层缓存
在应用服务器和数据库服务器中,加入缓存服务器,如memcached,redis 用在第一次访问热点数据时,以Key-Value 的形式保存到缓存服务器,并设置过期时间,第二次访问热点数据时先从缓存服务器中读取。 当热点数据被修改时,应该将缓存服务器中数据删除。缓存数据一般是更新频率低但读取频率高的数据。
同步转异步
当某个业务逻辑的处理时间较长(几百毫秒),就将这个业务逻辑拆分成同步逻辑和异步逻辑,从而减少应用的响应时间。 例如处理订单的时候,将支付作为同步逻辑,将扣减库存作为异步逻辑。将扣减库存逻辑封装成消息,放入消息队列中。异步处理模块会从消息队列中取出消息,再做相应的处理。这样不仅能减少应用的响应时间,也能降低数据库服务器的压力。
数据库读写分离
数据库的主要操作和相应的SQL:
- 读:select
- 写:insert、delete、update
例如库存表中,update 一条记录时,数据库会加锁,读操作的效率会降低。 应用服务器进行读操作时,从 只读库中读,进行写操作时,向 主库写。从而降低主库的压力,提升应用的处理速度。并且通过只读库能提高应用查询速度。但这种方式,只适应于能接收数据同步时有一定延时的应用。