实习期间项目总结
1.行程单接口设计
技术上的收获
rpc
一、为什么要用rpc?
1.减少客户端jar包大小,提高发布效率
2.提高代码的可移植性
3.业务解耦,避免部分出问题,全部挂掉
二、rpc的原理?
socket,不同机器中的进程间通信
io,每来一个链接,新开一个线程,轮询
nio 所有的连接都注册到一个线程,然后批量轮询。
netty 封装nio
三、rpc没有调用成功怎么办
根据业务场景(是否可重入,幂等)选择重试和补偿策略。
四、rpc和rest的差异
rest通信协议是http协议,rpc通信协议是tcp
五、rpc要做的事情
1.服务端如何确定客户端要调用的函数
在远程调用中,客户端和服务端分别维护一个【ID->函数】的对应表
2.如何进行序列化和反序列化
客户端和服务端交互时将参数或结果转化为字节流在网络中传输
3.如何进行网络传输
tcp
qmq原理,实现机制?
1.为什么要使用qmq?
解耦,异步,削峰
2.使用qmq有什么缺点?
系统可用性降低,复杂性增加
3.如何保证消息队列是高可用的?
集群防单点故障,持久化可恢复
4.如何保证消息不被重复消费
先考虑对应业务是否具有排他性
如果没有,考虑第三方介质redis,或mysql
5.如何保证消费的可靠性传输?
生产者 信道先统一收纳发出来的消息,如果发送给消费者失败,则返回给生产者nack,发送成功,返回给生产者ack。
消息队列 开启持久化磁盘的配置
消费者丢数据 自动确认机制的问题,若出现异常没有处理该消息,就会丢失。
6.如何保证消息的有序性
通过某种算法,将需要保持先后顺序的消息放到同一个消息队列中(kafka中就是partition,rabbitMq中就是queue)。然后只用一个消费者去消费该队列。
关于所做的事情
新老接口切换,消息消费。
上线后查看日志是否报错,抽出部分数据查看是否正确
发票超开时,通过日志记录到es中,统计收到的订单都有哪些特点