当前位置: 首页 > 网络应用技术

b-限制性解决方案,例如p末端

时间:2023-03-06 14:09:40 网络应用技术

  与我们的b -end同学的交易无疑是多种文档,例如用户手动创建新单个基础,上游数据生成下游文档,依此类推。还是业务问题?那么,我们如何确保文档生成业务的稳定性和高可用性?以下是工作过程中这些问题的一些解决方案。如果您的朋友有更好的解决方案,请纠正我。

  在这里,我使用redis来确保接口功率和其他性质。当然,还有许多其他解决方案,例如:数据库,JVM锁,前端截距等,但我认为最好使用独立的中间件来解决它的原因如下:

  1.首先,我是后端程序员。正面的事情应该完成,但是我们的背部端必须确保界面本身的高可用性和稳定性。

  2.在权力和其他性行为方面,我个人不喜欢将其介绍给数据库级别。首先,我认为每种产品都有其含义,因此每种产品都会专注于它应该做的事情。Database解决此问题问题无疑是添加表,加上字段或查询操作。此问题的出现通常是由于短时间内并发引起的。如果没有必要,请不要坚持解决诸如权力之类的事情。

  3. JVM锁不适用于分布式环境。现在,许多公司使用微服务架构。即使仍然有单个机器部署,但是如果以后更改了作曲,是否有必要重写代码逻辑?重写。我的个人观点可以规定该同步已禁用,并且可以使用所有锁。可以将其封装到锁中。锁工具很好。个人的观点)。

  在我现在完成的项目中,该文档编号是根据某些规则生成的:财团称为_新年和天_序列号。编写此类规则的文档编号,我们需要考虑的第一件事是我们的第一件事文档编号必须严格确保订单和连续层。例如,应严格按照0001、0002和0003的连续层严格增加序列号。在0001之后不允许直接0003的故障现象。

  (1)不保证:这种情况非常简单。我们可以直接使用Redis来控制增加的序列号。

  文档编号增量代码

  文档编号自我还原代码

  (2)您需要确保如果需要确保文档编号不断层,则无法使用上述解决方案。例如,这两个线程是并发的,那么生成0001的线程可能会失败,而且0002的线程成功。这是一个问题。然后,我认为它将在此时被锁定。

  当然,必须考虑两种情况:手动新的和上游数据推送

  1.手册新制造:如果您构建新手册,我认为没有更好的方法,并且直接锁定,因为在这种情况下,用户肯定会立即在列表中看到它。没有大量的并发性,因此直接阻止插入的锁。

  生成文档业务

  2.从上游数据推出:这种情况无法概括,通常分为两种情况。

  (1)用户检查列表中的一些数据后,单击按钮生成下游文档。这次,我们将将下游文档的结果返回给用户。因此,就像上面一样,只需直接锁定它。

  (2)背景调度和统计数据,并基于定期形成。因为此场景在后台运行,通常没有非常严格的要求生成文档的时间,并且允许短时间延迟。它。

  3.如果系统中的文档可以在背景计划下手动构建和推动?那么我认为这时我们需要将上述文档的业务独立于同步方法,而两个操作可以称呼此事。方法。

  例如,用户选择了一些数据后,他连续几次单击该按钮。此时可能有问题。当然,有必要根据不同的方案解决问题。(注意:我们都知道可以使用此问题通过正面或按钮状态来缓解此问题。

  1.方案1:一个记录仅允许下游文档一次

  目前,有必要严格防止反复调用界面。我们可以在上游数据中以徽标(例如上游数据的ID)获取唯一的字段。

  但是,如果涉及上游数据推文文档的批处理选择,那么上游数据ID列表不是很好。由于我们要确保Redis的密钥尽可能短。这次,我们可以让前端同学根据某些规则为我们生成徽标。例如,前端在请求接口之前生成唯一标识,然后在请求结果返回后更新此标识。

  调用界面后,首先检查数据库以确定是否已将其按下。如果没有推动,请转到redis检查身份是否存在,如果不存在,则将添加。同时数据将被拦截。当然,如果在处理业务的过程中出现异常,您还必须手动手动删除此徽标。

  接口代码

  所以现在这个代码有问题吗?答案当然是否,在某些极端情况下会出现问题。请举一个例子:

  例如,一个小同志参与了事物,这些工具被用来向该接口发送10,000个并发请求。支持大量请求导致服务器延迟进入后,这导致我的第一个请求和最后一个请求之间的间隔请求为31秒(即执行第一个请求之后的第31秒,最后一个请求将从1步到第一个步骤到第一步到2步,检查Redis徽标)和我设置此标识的生存时间为30秒,那么它将不可避免地导致此请求的失败,否则数据仍将发生。

  然后,此时,我们可以根据实际场景执行接口压力测量,并获得最佳的峰值交通峰值。设置合理的识别生存时间,并使用哨兵执行交通控制。

  检查标识代码

  删除代码

  2.场景2:一个记录可以推动多个下游文档

  这取决于情况以查看业务是否允许在短时间内推动多个数据。如果不允许,我们也可以根据场景1的实践进行操作,或者使用前哨进行交通控制来控制并发的数量每秒。此外,如果业务中有业务,请参阅上述文档生成策略中的解决方案。

  总结

  坦率地说,解决方案称为解决方案的原因表明他只是一个解决问题中问题的问题。不可直接使用所有场景。尽管上述某些解决方案已经解决了某些问题,但将永远是极端现象。

  为了确保效率,它不可避免地会牺牲某些安全性,因此,我们的效率界面要求不是很严格且没有较大的并发。

  原始:https://juejin.cn/post/7099865395829407775