初认识:
单一应用架构 ——> 应用和数据库单独部署 ——> 应用和数据库集群部署 ——> 应用根据类型拆分服务。
数据库: 1、压力大-读写分离(主从同步) 2、使用缓存技术加速(Redis)
从Dubbo讲起
Dubbo([ˈdʌbəʊ]) 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
摘自Dubbo官网,架构演进的一个过程
1、单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM) 是关键。
2、垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
3、分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
此时,用于提高业务复用及整合的分布式服务框架(RPC),提供统一的服务是关键。
4、流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
SOA:面向服务架构。通俗理解:把系统按照实际业务,拆分成刚刚好大小的、合适的、独立部署的模块,每个模块之间相互独立。
服务治理:当服务越来越多,调用方也越来越多的时候,它们之间的关系就变得非常复杂混乱,需要对这些关系进行管理,包括服务集群里的负载均衡(服务治理的框架,比如dubbo+zookeeper,SpringCloud)Dubbo解决服务的调度。
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
注册中心大多使用 Zookeeper,讲提供者的服务暴露给调用者,通过RPC调用。
Zookeeper使用ZAB协议,保证集群内leader和follower的一致性,解决单点故障:
leader负责写,异常宕机时重新选举产生新leader;
follower负责读,遇到读的请求时提交至leader处理。
Kafka 可用性高,性能好,具有高吞吐量,但是可能丢包,主要应用于日志记录:
leader负责读写;
follower负责备份。
消息中间件(Message Queue ): 生产者 —— 消息 —— 消费者
3个特点:低耦合、低响应时间、异步通信能力。
主流MQ: Kafka、RabbitMQ、RocketMQ。
缓存通过减少IO操作来获得读写的性能提升。
读优化:当请求命中缓存,直接返回,减少IO读取的成本。
写优化:将写操作在缓冲中合并,让IO设备可以批量处理,减少写的成本。
缓存带来的QPS、RT提升比较直观。