用途
某些情况需要查找jar内部的文件列表情况
脚本
1 | #!/bin/bash |
求其上,得其中;求其中,得其下,求其下,必败
不要局限于数据库事务,也可能是业务事务,俗称长事务
接口幂等性(分布式存在重试机制)
内部状态管控(状态机)
异常推进模式(重试,查询对端状态)
流水型数据(进出接口留存为单据,微服务调用链)
最终对账(分析微服务对应的db,业务数据是否一致,实时/离线对账)
空回滚
悬挂
2PC,3PC
TCC(客户端 需要实现try, confirm, cancel 三个接口,侵入太大)
可靠消息最终一致性(利用rocketmq的prepare,confirm,死信消息机制实现)
本地消息表(利用本地数据库事务,一般业务均可以使用)
最大努力通知(一般适用于调用第三方支付成功后,回调本地业务模块),不断重试
seata (AT、TCC、SAGA、XA)
性能消耗较大,存在全局锁,和undoSQL的生成
XA 分布式事务协议,数据库原生支持(mysql5.7+,db2,oracle)
利用事件溯源DDD模式,消费端不停重试,当无法成功,发消息到TM进行事务回滚,TM分析消息链,反向调用上游服务,进去消息回溯
上游重新生成,回退消息序列的,实体物化视图。
https://xiaomi-info.github.io/2020/01/02/distributed-transaction/
https://segmentfault.com/a/1190000039910621
https://www.infoq.cn/article/8bu33kusyj6p-waaoelt
神通数据库不支持jdbc指定模式名,达梦时间计算语法和MYSQL存在区别
1 | #DM7 |
Dm7JdbcDriver18.jar
DmDialect-for-hibernate5.3.jar
oscarHibernate54.jar
oscarJDBC8.jar
注意看jar容量,避免驱动错误
包名说明:
18,8为jdk1.8编译
Hibernate(54,5.3) 一般适配Hibernate5.3-5.4方言
用官方数据迁移工具
用官方客户端
perl, awk,sed
perl语言已经不需要学习进阶(to dead),最多使用其处理一些文本。
perl -pi -e “s/aaa/bbb/gi” test.txt
把test.txt文件中的字符aaa替换成bbb
perl -pi.bak -e “s/aaa/bbb/gi” test.txt
把test.txt文件中的字符aaa替换成bbb,并生成一个test.txt.bak的备份文件
find ./ -name “*.txt” | xargs perl -pi.bak -e “s/aaa/bbb/gi”
把当前目录下所有的.txt文件中的字符aaa替换成bbb,并生成相应的.bak的备份文件
如果存在复杂逻辑,请使用python
1.生成消息唯一幂等ID ->存储消息参数
2.在本服务内实现监听(JPA entity postPersist),更新实体物化视图。
3.–>异步投递到MQ–>更新是否投递标致为true
4.如果投递MQ失败,重试机制。
5.定期扫描投递标致为false的数据,再次发送
1.存储消息参数和消息的幂等ID,为后续幂等做判断依据。
2.判断消息里面的sequenceNumber(事件序列)和本地实体聚合的事件处理记录的对比,只消费差异值为 1 的事件 (保障事件顺序一致性)
(如果本地实体聚合的事件处理记表量大,可以使用分表等技术)
(可以使用kafka分区技术,提高消息处理并发量)
2.处理消息–>回写MQ的 ACK
3.如果失败放失败队列deadLetterQueueName
4.定时任务/或者重启时,处理这个DLQ里面的消息
1.减少并发冲突
2.记录每个操作细节
3.解耦领域数据模型与业务消息领域数据(四色模型-消息)
1.记录事件信息,一定保障(顺序写,时序性,带版本戳,消息ID的生成,微服务节点的无状态化,和ID生成器的workId如何配合)
2.配合CQRS使用,实体最新状态使用”物化视图”(可以定时生成快照,避免全量重播事件,可以使用异步模式)
3.消费事件的服务,需要注意幂等
4.事件解耦后的最终一致性(后续章节描述)
5.事件的消费,一般放到领域aggregate中,以实现领域逻辑内聚。(当然具体逻辑可以使用gateway接口,在infrastructure具体实现)
事件消费也可以使用状态机,提示领域逻辑的可视化。
1 | @CommandHandler |
Java Axon 框架
实体快照,储存事件,事件重试/升级,事件溯源(fetch拉事件)
http://soooban.github.io/2019/06/10/Event-Sourcing-And-CQRS/
实现可靠消息,参加后续文章
又称 Volcano Model 或者 Pipeline Model
每一种操作抽象为一个 Operator,将整个 SQL 构建成一个 Operator 树,查询树自顶向下的调用next()接口,数据则自底向上的被拉取处理
一次pull一条,调用次数太多,CPU执行效率低下。
相关数据库:SQLite、MongoDB、Impala、DB2、SQLServer、Greenplum、PostgreSQL、Oracle、MySQL
同上,批量拉取,但是数据集不能太多。
##向量化/批处理模型(Vectorized / Batch Model)##
每次调用 next() 函数会返回一批的元组(tuples)
相关数据库:Presto、snowflake、SQLServer、Amazon Redshift,Spark 2.x,hive(ORC 格式来存储数据,将 hive.vectorized.execution.enabled 参数设置为 true)
这个概念,只是把视图(只保存SQL)进行了计算和数据物化
Trace 整个微服务调用树关系
Span 树的叶子
https://www.cnblogs.com/cy0628/p/15195918.html
https://juejin.cn/post/6844903761438048269
一般场景openresty+lua足够
https://moonbingbing.gitbooks.io/openresty-best-practices/content/
喜欢要个API编排界面,KONG
需要很云原生 APISIX
https://www.apiseven.com/zh/blog/why-we-need-Apache-APISIX
nginx一般是4层以上
APISIX支持7层