系统架构
集群
大型互联网应用,必然会有巨大的访问量,单一的机器资源有限,承受不了过多的访问请求,所以采用多台的机器构成集群,把用户的请求合理地分散到每台机器上,防止单台机器上面的应用崩溃。
作用:系统的吞吐量提高
解决的问题:单台机器资源、性能有限的问题。
负载均衡
随着应用的集群部署,同时也带来了一个难题,就是如何把用户的请求,合理的分发到不同的机器上面了。不同的机器可能性能也有高低,如果采用比较平均的策略,可能对性能比较好的机器来说,就有些浪费了;有的机器可能宕机了,用户请求就不能转发到这台机器上面了。负载均衡就是来解决这些问题的,,这就是负载均衡的作用。
作用:采用合适的负载均衡策略,把用户请求合理地分发到不同的应用实例上。
解决的问题:避免单个应用实例接收过多用户请求,另外的应用实例没有或过少请求的问题。
分布式(微服务)
把庞大的系统拆分为多个子系统,每个子系统可以独立开发、部署。
作用:业务功能解耦;服务可用性提升
解决的问题:庞大的系统代码量大,每编译构建一次,耗费大量的时间;业务功能耦合大, 比如A、B两个不相关的功能,A功能出现问题,导致整个系统的不可用,B功能受牵连。
数据库读写分离
把数据库分为主库及从库,其中主库负责写,从库提供读功能。
作用:提升数据库的性能
解决的问题:读写都操作主库,很容易产生瓶颈。互联网应用大都是读多写少,读会先成为瓶颈,进而影响写性能。
缓存
普通的关系型数据库类似Mysql、Oracle等,读写磁盘的性能相对来说都是比较消耗资源,耗时大,可以通过采用把热点数据存放在Redis等高性能数据库,提升服务响应的速度。
作用:提升服务响应速度,减轻数据库压力。
解决的问题:服务响应慢,数据库压力过大导致崩溃的问题。
消息队列
消息队列简单来说就是一个队列,把消息放入队列中,然后按先进先出的顺序进行处理。例如A系统生产消息,放入队列中,B、C、D系统谁需要,谁就可以去订阅消费,不需要A系统去分别调用B、C、D系统,同时等待它们的回应,以及处理B、C、D系统崩溃时的异常情况。
作用:系统解耦;削峰;
解决的问题:系统耦合大;高并发访问量导致应用崩溃;
评论