最近在帮助小区成立业委会,其实是一件很神奇的事情,小区老人居多,不过大家要真正的过上民主小区的生活,还有很长的路要走,

其实一个群体的特征,构成了这个国家的基本特性,突然领悟到当年从推翻封建王朝的先行者们的无畏,尤感敬佩。

突然发现最近自己的脾气磨得特别好,

遇到特别坑的事儿,各种奇葩的行为,我都拿小本本记上吧

换在以前的性格,早就被我直接骂回去了

看来真是扶不起的阿斗啊。

没法玩儿了,

六一儿童节见。

最近犯小人,

其实小人一直都有,不过放在不一样的位置上,辐射度应该是不一样的,

范睢能成事儿,也是秦王的需要啊。

所以自己自以为看透了的一些事情,其实自己并没有看透。

玩个代码咯,

leecode好久都没有更新了。

Format: 状态

最近把生化危机都给重新看了一遍,

或许很多时候国家社会群体表现出来的很多东西, 都和电影里面的大同小异

物竞天择,优胜劣汰的自然法则,在几百万年的物种繁衍当中充当着主要的原则.

与太阳和银河系相比,地球人算个小蚂蚁啊.

追逐利益和快钱的先富起来的人们,

偶尔停下来,好好回想下这几十年的变化,

我爸说: 国家投放的冻猪肉,比市场上原来卖的要香, 中粮的猪还是不错的.

没有付出的艰辛与困苦,

收获就变得毫无意义。

延迟获得的惊喜,在于正向反馈的期许。

也许也会一无所获,

总要有期许,并且赋予事物原本没有的意义。

生活本来的样子,也许正是如此

matrix所构造的世界,也许就是如此吧。

并行–异步–水平扩展

业务场景需要

所有一切脱离了业务场景需要来谈论的架构,都是纸老虎,所有的设计都离不开业务的需要

如果对业务的需要贴合程度不够,造成的过度设计或者过简设计,都是无法拟合场景的,无论你的设计有多么的牛X,无法拟合场景的设计,我们一般都叫做垃圾设计。

但是这里有一个预留的要求,业务场景是会随着业务的不断扩展而发生变化的,大家都说软件设计没有银弹,这里就是造成没有银弹的罪魁祸首之一,所以好的架构要能在一定程度上把握将来的一些变化,并且能够在一定的范围内快速的适配业务的变化。

最开始业务场景是这样的,前台有一个服务于B端的业务系统,这个业务系统呢,各种业务交错,场景也多变,然后可能需要在某些节点上去使用AI提供的能力,但是AI提供的能力呢,又是由多个模型所共同来承担的,并且可能不同的节点上,需要的ai的能力还不太一致,所以就要求这些独立的ai模型,能够自由的组合搭配,相当于是一个可以任意合体的变形金刚,来完成不同的功能。

1, 原始服务时代

最开始的设计就是一个简单异步并行请求,发送到各个模块去进行处理,各个模块处理完毕以后通知主控,然后由主控来复合合并各个模块的数据,然后由主控去判断是否可以给请求方回调。

这里两个层次的异步,基本都是通过http的restful service来完成的。由于是并行分发,所以在很大程度上受制于最慢的那个子模块的返回速度。对于原始请求方,也是要求在请求的时候提供回调地址,然后按照约定好的协议给原始请求方回调。

这里利用了一个redis在中间做数据的共享,基本上所有模块都依赖与这个共享的存储,相同的key在生命周期里面,按照模块的多少去收集各个模块的数据,处理完毕以后清理。

峰值考虑

吞吐考虑

异步回传

动态增加模块

细节问题1

这里有个比较坑的情况,如果并发同时对一个key 有两次操作,那么这个key的处理由于依赖于一个存储,就会乱,这里加入了一个批次号的概念,保证key+批次号在两层异步的处理过程当中唯一。

细节问题2

如果有一个模块不返回或者是挂掉了,或者操作的时间很长,

细节问题3

如果要水平的扩展一个模块的处理能力,通过简单的加进程和机器的方式,

细节问题4

预处理和后处理的那些坑

批量处理

2, 队列时代

遇到的问题

当我们开始对大并发的请求进行测试的时候,我们发现,前端框架在并发为500的时候,单台的机器直接被打挂了,由于我们的aicore承载了几乎所有的中心的中转和揉合的服务,这个一定是不能垮掉的,于是我们加了一台机器做了简单的负载均衡,以为可以很简单的解决问题。

但是不幸的是,由于python的单进程限制,我们并没有在进程以及子线程里面进行优化,于是这个比较渣的web.py的前端框架,还是被打挂了。于是我们很简单的用了一个redis模拟队列来解决这个打挂的问题,也就是利用redis的高ops,来完成峰值的吞吐,然后放到后面的while里面去各种消费,高峰期间我们开了五个线程三台机器来完成分发的任务,基本上算是完成了简单的队列问题。但是随之而来新问题又总是不可避免的

单节点的挂机

由于redis是我们并没有采用cluster版本,于是在一个redis挂掉之后,我们的整个服务也就都挂掉了,所以必须找到一个可以多节点的队列来解决这个问题

节点吃满

Redis本身所存储的value值,其实是有限的,并且对于二进制的长数据,效率也不是十分高效,曾经有一个小气的500mb的redis内存的节点,由于模拟队列采用的是单key而导致了redis直接内存死锁了,在单key情况下,队列的LRU是不起作用的。

于是我们开始寻找新的替代品。

3, 异步队列时代

timeout机制

由于我们要最大化吞吐,所以所有的请求都不能挂,并且要加入超时以及执行时间的控制,对于执行时间太长的,为了不阻塞异步队列,我们要干掉那些处理没完或者是处理不了的内容,于是在关键的执行步骤当中,我们加入了timeout的机制

错误丢弃机制

由于模型的覆盖不是100%的,有些时候喂入的数据不一定能够正常的处理,所以对于没法处理报错的数据,我们就要开始采用丢弃策略。

死亡恢复机制

由于是异步多模块协作,如果一个模块挂掉,会导致后续的请求,由于挂掉的这个模块而没有返回,所以这里要求模块能在自己挂掉休眠10秒以后自动重启,这里用了二级cache来解决这个遇到的问题,如果还是要死,第三层就是pm2的自动重启保护了。

错误跟踪机制

错误总是花样百出的,你永远不知道喂到模型里面的东西是什么鬼东西,所以在发现喂入的东西有问题的时候,要把他们记录在小黑板上,方便后续的分析。这里采用了sentry来收集错误异常信息

TKS

There’s something I’ve been wanting to talk to you both about. I know this is a difficult conversation, but i care about you both very much. And I know that you care about each other very much. And that’s why it’s important that we set these boundaries moving forward, so we can build an environment…where we all feel..comfortable, trusted, and open to sharing our feelings.
Feelings.
Feelings. Jesus. The truth is, for so long, I’d forgotten what those even were. I’ve been stuck in one place, in a cave, you might say. A deep, dark cave. And then, I left some Eggos out in the woods, and you came into my life and for the first time in a long time, I started to feel things again. I started to feel happy. But, lately, I guess I’ve been feeling…distant from you. Like you’re – you’re pulling away from me or something. I miss playing board games every night, making triple-decker Eggo extravagances at sunrise, watching westerns together before we doze off. But I know you’re getting older. Growing. And I guess…if I’m being honest, that’s what scares me. I don’t want things to change.
So, I think that maybe that’s why I cam in here, to try to maybe…stop that change. To turn back the clock. To make things go back to how they were. But i know that’s naive. That’s just…not how life works. It’s moving. Always moving, whether you like it or not. And, yeah, sometimes it’s painful. Sometimes it’s sad. And sometimes…it’s surprising.
So, you know what? Keep growing up kid. Don’t let me stop you. Make mistakes, learn from ’em, and when life hurts you, because it will, remember the hurt. The hurt is good. It means you’re out of that cave. But, please, if you don’t mind, for the sake of your poor old dad, keep the door open three inches.

人世间的眼泪,几世修行的宿缘。
人在爱中,一定要承受痛苦和快乐才会感悟。

有痛,

是因为有爱,

有不舍和纠缠,才能更好的了解自己。

学会珍惜,每个开心和悲伤的,

学会感恩,感恩每一个瞬间……

空可悟

因因生姻,缘缘聚缘。
邺化四界,指控三行。

困物堕性,似真本色,
超凡脱俗,似真修行。

浑然不悟,内窥守真。
妄忽欲物,浮气生尘。

二十四在,九十九行。

以为悟道,以为求真,
惜根浅薄,待悟方悟,

从心随性,使得还真。