J2EE
2024-05-28 20:40:24 101 举报
AI智能生成
java架构 java
作者其他创作
大纲/内容
前端交互
安全
身份认证
oAuth2
优点
为第三方提供token、鉴权、提供资源
缺点
资源服务器与鉴权服务器交互频繁
JWT
优点
为资源服务器提供公钥来简单鉴权服务器用私钥加密的token
缺点
Shiro
Spring suce
分布式服务处理
领域模型
DDD领域驱动设计聚合
实体、值对象、聚合
多段提交
事物边界:业务常量当中最小的基本单位
命令查询间隔责任
命令查询间隔责任
数据对象
分布式事物
事件源
分布式数据库
Spring-JDBC
原则
每项微服务都应该拥有并控制自己的数据库,且任意两项服务不应共享同一套数据库
联合查询
CQRS命令查询责任分离
通过订阅由命令侧发布的事件来保持视图(view)与聚合(aggregate)同步
多存储类型的查询
ReportingDatabase
服务发现
Zookeeper(CP:一致性、容错性)
Eureka(AP:可用性、容错性)
拆解
server服务端
包含servlet应用所拥有的配置
client客户端
微服务通过client与Eureka进行通讯
core
核心功能实现:存储、请求、查询、peer节点控制、注册周期控制、amazon AWS服务
特点
缓存(新的服务发现得等多个缓存结束后)
HTTP响应做了缓存
已注册信息缓存
负载均衡组件Ribbon缓存服务列表
注册信息二次传播
ip自动选择
Consul(CP:一致性、容错性)
go语言
etcd(CP:一致性、容错性)
cluster
HA
LoadBalance
nacos
动态服务发现
服务配置
服务元数据
管理
RPC
Feign
Ribbon客户端负载均衡(RestTemplate)
Hystrix服务端容错保护
motan
模块
注册register
和注册中心进行交互,包括注册服务、订阅服务、服务变更通知、服务心跳发送等功能
协议protocol
RPC服务的描述和RPC服务的配置管理,用来完成统计、并发限制等功能。
序列号serible
RPC请求中的参数、结果等对象进行序列化与反序列化
通讯transport
使用Netty nio的TCP长链接进行服务器通讯
集群cluster
Client端使用,负载均衡控制
内存数据
mongodb
redis
无中心节点
redis-cluster
中心节点
leader
选举(zab)
数据一致性同步(2pc投票)
介绍:一套功能上的支持,有13个技术规范
spring
消息队列
业务解耦
异步处理
工具
kafka
一个分布式发布-订阅消息传递系统
优点
高吞吐、分布式的消息日志
消息持久化保存
consumer顺序处理和回归处理(redis没有)
响应消息队列
容错性
优化
consumer group下的consumer thread的数量等于partition数量
每个service里面的kafka consumer数量都小于对应的topic的partition数量,但是所有服务总的consumer数量之和等于partition的数量
问题
功能
Consumer
autocommit默认为true,读完消息就自动提交处理,可能导致消息没处理成功在注册中心offsite+1,但这样读取速度快
consumer thread可以同时处理多个partition,但最好是一对一
ConsumerGroup
每组消费一个主题都会读完全部分区再给下一个
Broker Leader
一起选举出一个Broker后其他追随,Broker后再如此循环选举
Consumer Rebalance
Consumer增加或删除会触发 Consumer Group的Rebalance
Broker的增加或者减少都会触发 Consumer Rebalance
Delivery Mode
redis
RabbitMQ
rocketmq
消息通讯
netty
socket
BIO同步阻塞
连接数目比较小且固定的架构
NIO同步非阻塞
连接数目多且连接比较短(轻操作)
AIO异步非阻塞
连接数目多且连接比较长(重操作)的架构
插件
protoBuf:数据存储和作为rpc数据交换格式
Channel桥梁
Buffer
Selector主线程单线程循环监听
mqtt
activemq
集消息队列
多个BET作为consumer去互斥的(for update悲观锁)并发处理message
mqtt
emqt
半商业开源
HiveMQ
商业服务
moquette
mosquitto
RabbitMQ+mqtt插件
mySQL
表类型
innodb
支持事物:每条都会创建事物
可包含外键
通过主键聚焦索引:
不保存总条数
不支持全文索引
提供行锁,不确定范围时会锁全表
myISAM(废弃,可用缓存替代)
不支持外键
支持全文索引、多字段联合索引
支持AUTO_INCREMENT保存总条数
数据不易恢复
支持LOAD TABLE FROM MASTER操作
提供行锁
事物
acid
Atomicity元子性
是所有操作的最小控制,要么全部执行通过,要不全部不通过并可回滚
一致性
数据的最终状态与输入前是一致的
Isolation隔离性
每个事物独立地有序执行
Durability持久性
事务提交操作成功后变写入数据库不可回滚
记:致远隔持
配置
innodb_buffer_pool_size:缓存innodb表的索引,插入数据时的缓冲。一般是内存的70%-80%
sync_binlog:
innodb_log_file_size:
SQL
存储引擎
数据分片
划分类型(分透明分片和非透明)
垂直分片(根据业务)
水平分片(打乱重整)
动态扩容
大数据处理
hadoop
微服务网关
SpringCloud-Zuul
子主题
kong(基于openresty)
openresty(nginx的高并发支持)
功能
统一接入
流量管控
协议适配转发
安全防护
springCloud
功能
- 配置管理(configuration management)
- 服务发现(service discovery,也就是服务注册中心)
- 断路器(circuit breakers,也叫熔断器)
- 智能路由(intelligent routing,通常用来做 API-Gateway 实现)
- 控制总线(control bus)
- 微代理(micro-proxy)
- 全局锁(global locks)
- 领导选举(leadership election)
- 一次性令牌(one-time tokens)
- 分布式会话(distributed sessions)
- 集群状态管理(cluster state)
子项目
子项目
Spring Cloud Netflix
服务发现(Eureka)
Eureka Client:一个Java客户端,用于简化与 Eureka Server 的交互(通常就是微服务中的客户端和服务端)
Eureka Server:提供服务注册和发现的能力(通常就是微服务中的注册中心)
断路器(Hystrix)
智能路由(Zuul)
客户端软负载均衡(Ribbon)
spring-boot2
starter(第三方插件也提供该jar)
引入关联jar包
自动配置注入bean
事物管理
@Transactional
使用限制:public可见度的方法上,可以被应用于接口定义和接口方法,方法会覆盖类上面声明的事务。
注意
只有程序异常和运行异常才会回滚
指定异常回滚:@Transactional(rollbackFor = Exception.class)
如果业务层(注解的那个方法)捕捉异常并处理了也不会回滚
只用throw抛出异常给控制层
子主题
全局异常处理
@ControllerAdvice
@ExceptionHandler
@RestControllerAdvice
ControllerAdvice + ResponseBody
0 条评论
下一页