拯救祭天的程序员——事件溯源模式

本文讲述了程序员如何在不断变化的需求中,从最初的设计失误导致问题频发,到通过事件溯源模式找到解决方案的过程。事件溯源模式通过记录业务数据变化的原因,解决了追根溯源和性能问题,但同时也带来了一些挑战,如存储查询、事件顺序和一致性等。
摘要由CSDN通过智能技术生成

一、事前

你相信吗?曾经有一段日子,我几乎没接到过合格的产品需求。

开局几句话,技术全靠猜。

总是以为简单的需求

曾经,我从产品那里接到过这么一个需求:

对系统的用户进行分级,不同级别的用户有不同的福利。

依然如常,无图无文档,只是这么一句话。我知道,需求一句话,分析五日功嘛。为了项目能持续发展,我只好自己分析自己搞了。

从业务上看,目前的用户对象尚无等级一说,我们先为用户对象加上个级别属性。又因为不同的用户等级,可享受到不同的福利。比如:达到 3 级的用户,可以享受购物 9.5 折优惠,物流费用全免,客服快速回复等。

所以,我做出设计如下:

首先,我把每个等级用户该享受的福利放到一个列表里。这个用来供前端展示用户当前可享受到的福利。

然后,在每一项福利中,我去设定一个可享受此福利的最低级别。只有用户的级别超过这个最低级别的时候,才可以享受到此项福利。比如,支付优惠 9.5 折,我只需要在支付服务中打包个支付权利 9.5 折这种东西,然后设定个最低级别即可。

这事儿看着是如此简单,所以,实现方案也没什么特殊的。当用户每次升级的时候,我只需要更新用户级别即可。

这个时候,需求比较初级,要求也不高。在满足升级条件后,需要用户主动点击升级。同时,再填写一些相关信息,申请一些专属的福利就可以了。

好,设计,开发,上线一条龙走起来!

需求变成坑

过了一阵子,我们的运营们勇于探索,勤于开拓,去搞了一堆资源互换回来。当我听说此事时,心里已经预感不妙了。

果然,没两天,我们的产品高高兴兴地通知我,由于兄弟团队愿意和我们的项目进行合作,因此用户的福利将得到极大的丰富,那些更加丰富的福利全都由兄弟团队提供。

所以,请我简单的搞一下,对接上这些合作方,进一步提升我们系统的粘性。

如常,依然没有任何文档,我依然只能自己分析。

现在,根据我丰富的被折腾经验,我知道开始有坑了。当我对接合作方接口的时候,他们都需要我传入一些特定的用户标识过去,可以让双方共享用户。

需求开始复杂了,不过庆幸的是,我改改代码就可以了,还好还好,我松了口气……

好,设计,开发,上线一条龙走起&#

出现"java.lang.OutOfMemoryError: unable to create new native thread"错误通常是由于应用程序请求第三方系统资源时内存不足所导致的。这个错误可能发生在应用程序尝试创建新的本机线程,但无法分配足够的内存来支持新线程的情况下。这通常是由于操作系统的限制或者应用程序本身的资源管理问题所引起的。 在处理这个问题时,有几个可能的解决方案可以尝试: 1. 调整操作系统的线程限制:如果操作系统对线程数有限制,并且应用程序达到了这个限制,可以尝试增加操作系统的线程限制。这可以通过修改操作系统的配置文件来实现。 2. 优化应用程序的资源管理:检查应用程序的代码和配置,确保合理地使用和释放资源。特别注意确保关闭和释放不再使用的线程和连接,以避免资源泄漏。 3. 调整应用程序的线程池配置:如果应用程序使用了线程池来管理线程,可以尝试调整线程池的配置,如增加线程池的最大线程数或者使用不同的线程池实现。例如,如果应用程序使用的是newCachedThreadPool,可能会导致线程数无限制增长,从而导致内存不足。可以考虑使用固定大小的线程池来限制线程数。 4. 分析应用程序的线程使用情况:使用工具分析应用程序的线程使用情况,找出是否有线程泄漏或者线程过多的情况。可以使用工具如jstack、jvisualvm等来生成线程转储并进行分析。 综上所述,当出现"java.lang.OutOfMemoryError: unable to create new native thread"错误时,可以尝试调整操作系统的线程限制、优化应用程序的资源管理、调整应用程序的线程池配置或者分析应用程序的线程使用情况来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [问题分析:java.lang.OutOfMemoryError unable to create new native thre](https://download.csdn.net/download/weixin_35823099/86281250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【内存溢出系列】OutOfMemoryError:Java heap space(1/8)](https://blog.csdn.net/weixin_31966453/article/details/114324660)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [由于不知道Java线程池的bug,某程序员叕被祭天](https://blog.csdn.net/qq_33589510/article/details/109549716)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值