架构设计概述
单体架构
单体架构:所有的业务组件部署在同一容器中,甚至所有业务运行在同一个jvm进程中
web层:前端展现,调用后端服务接口,供用户使用
业务层:实现业务逻辑,供前端调用,读写数据库
数据层:存储业务数据,为业务层提供读写服务
适用场景:业务简单、访问量不大的场景
如果业务复杂,会造成业务耦合,不利于后期维护及拓展
如果访问量很大,客户端的请求出现比较大的延时,甚至会发生服务故障
服务化架构
服务化架构:将模块化组件从单一进程中拆分,并通过某种网络协议对外提供服务
web service:服务化架构的一种实现方式,使用WSDL描述web service,SOAP协议进行通信
# WSDL语言
基于xml实现,用来描述web service的功能、参数、协议、服务地址等信息
# UUDI:Universal Description,Discovery and Integration
服务注册中心,存储服务信息,供服务消费者查找需要调用的服务
# SOAP协议
在http、https上传输的xml协议,服务之间使用SOAP协议进行通信
# web service工作原理
服务注册:web service2、web service3将服务信息注册到注册中心
服务消费:web service在服务注册中心查找需要调用的服务信息,
远程调用web service2、web service3
ESB:服务化架构的一种实现方式,没有注册中心,通过总线进行数据传输
ESB服务没有中心化节点,每个服务提供者通过总线插入系统;
总线根据流程的编排负责将服务的输出进行转换,发送给流程要求的下一个节点
微服务架构
微服务架构:各服务独立部署,服务之间通过自定义协议进行通信
# 微服务常用组件
注册中心:存储服务信息,服务消费端从注册中心获取服务信息,发起远程调用,如:nacos、consul等
配置中心:集中存储配置,可实现动态刷新配置,如:nacos、consul等
服务调用:微服务之间的远程调用,如openfeign、dubbo
负载均衡:同一个服务部署多个节点,将请求按照负载均衡算法发送到某个节点,
如:ribbon、dubbo(dubbo自带负载均衡功能)
服务降级限流:服务出现故障后,抛出异常或者返回默认的结果,
如:hystrix、dubbo(dubbo自带服务降级功能能够)、sentinel等
分布式事务:跨数据库的数据操作需要保持一致性,如:seata等
网关路由:过滤请求、请求转发、请求鉴权等,如gateway等
消息中间件:服务解耦、流量削峰,如:rocketmq、kafka等
架构设计目标
高性能:响应时间(rt)、每秒事务数(tps)
响应时间:请求的响应时间(延时)越短,性能越好
每秒事务数:每秒处理的请求数越多,性能越好
高可用:服务出现故障时,系统是否可用
可伸缩:服务的数量可动态增加与减少
可拓展:可动态添加功能,不对原来的功能产生大的影响