边缘计算从入门到放弃

边缘计算是一种基础技术架构,可以在生产设施(设备)中现场收集、分析和存储数据,从而节省时间并帮助维护运营,而不是依赖于将所有数据存储在云中的较慢系统。 

边缘计算公司不断地提供解决方案,来满足人们对边缘计算的需求,这些需求都是因像延迟、带宽、隐私和自主性这样的因素而触发的。

边缘计算发展前景:百度安全验证

边缘计算之MEC:(6条消息) 边缘计算系列之MEC介绍_就叫离离原上吧的博客-CSDN博客_mec边缘计算

二、技术 

2.1 Java中利用日志

slf4j:日志门面,日志的抽象层,一层规范,日志框架按照其规范实现具体细节即可,使用时,直接通过操作门面的方式去使用日志

阿里规范:应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API。使用门面模式的日志框架,有利于维护和各个类的日志处理方法统一。

实际使用:实际项目开发中,遵循阿里规范,使用SLF4J和其他日志框架相结合的方式。

一文教你如何在项目开发中使用日志_See you !的博客-CSDN博客_java项目中如何使用日志

2.2 Redis

Redis即数据库的缓存。应用程序们从MySQL查询到的数据,在Redis这里登记一下,后面再需要用到的时候,就先找Redis要,Redis这里没有再找MySQL要。

2.2.1 Redis入几种操作

[缓存过期 && 缓存淘汰]:删除一些长时间没有被访问的数据

* noeviction:返回错误,不会删除任何键值

* allkeys-lru:使用LRU算法删除最近最少使用的键值

* volatile-lru:使用LRU算法从设置了过期时间的键集合中删除最近最少使用的键值

* allkeys-random:从所有key随机删除

* volatile-random:从设置了过期时间的键的集合中随机删除

* volatile-ttl:从设置了过期时间的键中删除剩余时间最短的键

* volatile-lfu:从配置了过期时间的键中删除使用频率最少的键

* allkeys-lfu:从所有键中删除使用频率最少的键
[缓存穿透 && 布隆过滤器]:Redis直接拒绝掉一些在MySQL中肯定无法查询到的键值

[缓存击穿 && 缓存雪崩]:一些数据过了有效期之后被Redis删除,然后大量相同数据访问,在Redis之中查找不到就直接访问到MySQL。

2.2.2 数据库与缓存的数据一致性

在进行数据的Query时候,会对数据库和缓存进行操作,这时候就会出现并发性问题,所以需要数据一致性。

重试机制和订阅 MySQL binlog,再操作缓存。

重试机制

我们可以引入消息队列,将第二个操作(删除缓存)要操作的数据加入到消息队列,由消费者来操作数据。

如果应用删除缓存失败,可以从消息队列中重新读取数据,然后再次删除缓存,这个就是重试机制。当然,如果重试超过的一定次数,还是没有成功,我们就需要向业务层发送报错信息了。

如果删除缓存成功,就要把数据从消息队列中移除,避免重复操作,否则就继续重试。
 

订阅 MySQL binlog,再操作缓存:

先更新数据库,再删缓存」的策略的第一步是更新数据库,那么更新数据库成功,就会产生一条变更日志,记录在 binlog 里。

于是我们就可以通过订阅 binlog 日志,拿到具体要操作的数据,然后再执行缓存删除,阿里巴巴开源的 Canal 中间件就是基于这个实现的。

Canal 模拟 MySQL 主从复制的交互协议,把自己伪装成一个 MySQL 的从节点,向 MySQL 主节点发送 dump 请求,MySQL 收到请求后,就会开始推送 Binlog 给 Canal,Canal 解析 Binlog 字节流之后,转换为便于读取的结构化数据,供下游程序订阅使用。
 

 所以,如果要想保证「先更新数据库,再删缓存」策略第二个操作能执行成功,我们可以使用「消息队列来重试缓存的删除」,或者「订阅 MySQL binlog 再操作缓存」,这两种方法有一个共同的特点,都是采用异步操作缓存

2.2.3 Redis持久化

RDB持久化和AOF持久化两种方式

2.2.4 Redis-api

redis详解(全)_Ferao的博客-CSDN博客_redis

2.3 Java中的集合操作

 

猜你喜欢

转载自blog.csdn.net/qq_43681154/article/details/125438843