哲学与架构
文章平均质量分 76
动态一时爽,重构火葬场
这个作者很懒,什么都没留下…
展开
-
设计excel导入的思考
excel导入就是将excel里面的数据转换组织形式,对数据库表进行映射更改。原创 2024-10-22 23:45:00 · 945 阅读 · 1 评论 -
本地缓存少更改、小数据、低一致表的思考
对于那些少更改、小数据的表,以及对一致性要求不高的业务,其实完全可以通过本地缓存将表数据缓存到本地内存中,然后通过定时机制拉取表更新数据直接从内存中获取数据,将会使得查询性能得到巨大的提升,并且由于更改少,数据量小,同时内存压力也不会很大,除了一致性不高外,完全是利大于弊的策略那么如果我想设计这样的本地缓存,该如何进行呢?原创 2024-10-21 23:53:35 · 425 阅读 · 0 评论 -
golang 随机数演化
Source接口定义为缩短的63位,这并不是现代生成器的uint64。原创 2024-05-07 20:15:00 · 577 阅读 · 0 评论 -
kafka 生产者消费者设计思考
如果采用消费者ack的模式,也就是消费者消费完成之后发送确定消息,那么如果消费者在发送ack的时候也失败了,这就会导致重复消费问题。很可惜,kafka最多只能支撑生产者不发送重复的消息,如果是上述场景中消费者没有ack成功导致的重复消费,还是要进行额外幂等处理的。如果broker在发送消息后,立刻认为消息已经被消费了,那么在传输未到达等原因引发的消费未处理情况会使得这样的认为并不正确。为了避免这些问题,kafka将消息划分到有序的分区中,那么只要记录每个分区被每个消费者组消费数据即可。原创 2024-02-22 15:08:00 · 733 阅读 · 0 评论 -
文档协作技术——Operational Transformations简单了解
OT是支持协作软件系统的一种广泛使用的技术。OT通常使用副本文档储存,每个客户端都拥有对文档的副本。客户端在本地副本以无锁非堵塞方式操作,并将改变传递到其他客户端。当客户端收到其他客户端传播的改变之后,通过转换应用更改,从而保证一致性初始文档为"abc",并存在客户端A、BA发起操作O1=insert[0, “x”],在位置0插入字符xB发起操作O2=delete[2, “c”],在位置2删除字符c。原创 2024-02-07 15:09:46 · 1106 阅读 · 1 评论 -
Mysql如何快速插入10亿条数据呢?
若一组任务堆积量太大,或者堆积时间太长,则让其他工作节点每处理完一批本组数据,便要处理该堆积数据,直到该堆积数据低于阈值量或者阈值时间。设置一个批次插入为一个任务,在此定每次插入1000条数据,那么每个文件总共就是1w个任务,这1w个任务便为一个任务组。工作节点收到数据后,连接数据库,根据负载情况开启多线程对所接收任务,以任务ID组合行数作为表id进行插入数据。工作节点完成本节点绑定的所有任务之后,便可以开始抢占其他节点任务,以未完成量最多的任务组为优先。超过该任务数,进行抢占其他任务组或者等待。原创 2024-01-23 19:06:11 · 972 阅读 · 0 评论 -
分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure
如何记录请求经过多个分布式服务的信息,以便分析问题所在?从上文可知通过引入span和trace分别从被追踪者和请求链路两个维度,推断追踪树,从而用于分析问题如何保证这些信息得到完整的追踪?只要采样的绝对数量够大,那么就比较好追踪。对于分布式的情况,通过span组织的逻辑链路来达成;对于异步,关联到相关的线程;如何尽可能不影响服务性能?分析收集可以通过动态的开关来保证紧急情况下的性能稳定,而追踪主要是通过尽量减少采样保证的。原创 2023-08-17 16:26:01 · 552 阅读 · 0 评论 -
k8s服务注册发现
Service 是 将运行在一个或一组pod上的网络应用程序公开为网络服务的方法。定义service前端为service名称、ip、端口等不变的部分,后端为符合标签选择的pod集合。原创 2023-08-15 11:20:02 · 835 阅读 · 0 评论 -
浅浅地了解ios后台机制
ios所谓的后台驻留并不是指执行中的程序,而是最近使用过的程序,就像游览器的历史记录一样一般来说所有程序在进入后台之后还有5s的执行缓冲时间(有些程序可以申请延迟到10分钟)。不过对于一些特别的的需要后台执行的程序,比如音乐、gps等,是可以被允许在后台中持续执行的,但是如果相关的任务终止了,比如暂停音乐,那么程序也会被终止这也带来了一些问题。如果我想退出抖音回个消息,那么当我切回抖音的时候,很有可能之前想看的视频就已经没了。原创 2023-08-01 17:26:48 · 484 阅读 · 0 评论 -
为什么没有goroutine id
对于从Java、C之类转到Go的程序员而言,获取线程id是一件自然而然的事情,但是在Go里面却不一样,那么为什么goroutine没有id呢?以下是我搜罗到的没有goroutine id的主要观点一旦开发者命名了一个goroutine并围绕建立模型,那么该goroutine就会变得极为特殊,而忽略了多个goroutine共同处理的可能性防止线程本地储存被滥用。新goroutine突然无法访问父goroutine的本地储存,这可能会引起问题。原创 2023-07-18 23:26:43 · 242 阅读 · 0 评论 -
网络线程模型
单线程模式简单,没有多线程、进程通信、竞争问题,但是也无法发挥多核CPU性能,并且在线程意外终止或者进入死循环的情况下容易导致整个故障。若非建立连接请求,直接交由sub reactor将连接加入到连接队列进行监听,并创建handler处理。若是建立连接请求事件,则由acceptor接受请求,然后创建handler处理具体业务处理。若是建立连接请求事件,则由acceptor接受请求,然后创建handler处理具体业务处理。若是建立连接请求事件,则由acceptor进行连接。原创 2023-07-15 10:54:29 · 325 阅读 · 0 评论 -
如何设计秒杀系统?
秒杀本身一个促销活动,其本意在于通过限量低价商品来吸引大量流量的营销推广秒杀的商品不一定是低价的,还有可能是热门限量商品,比如某些时间段的显卡、ps5等基本秒杀形式就是保证只有发起请求最早的少数用户能够购买到指定商品主要技术挑战就是瞬间高并发压力秒杀大概流程如下。原创 2023-06-20 23:31:08 · 150 阅读 · 0 评论 -
怎么样设计短链接系统?
短链接是什么?短链接,顾名思义就是短的链接,能将很长的链接转化为短链接,并且能由短链接指向原来长链接所指向的地方。为什么需要短链接?原创 2023-06-19 16:19:46 · 1508 阅读 · 0 评论 -
如何保证缓存数据的一致性?
不过如果后更新的失败了,那么先更新数据库的情况会是更优的选择。因为只是缓存出现不一致,但是相应的操作逻辑与数据库数据保持了一致,并且缓存可以通过消息队列进行重试或者是订阅mysql binlog同步数据。不过这种情况发生的概率不高,需要读线程读缓存恰好失效,写线程速度快于读线程。另外一种方法则是不更新缓存而是删除缓存,而删除缓存也分为两种情况。如果采用先删除缓存,那么在考虑查询重建缓存的情况下,比如。此时数据库x值为x,缓存值为1,还是会出现不一致的情况。先更新数据库在高并发的情况下,可能会出现。原创 2023-06-14 10:33:20 · 607 阅读 · 0 评论 -
k8s架构了解
Kubernetes(k8s)是用于自动部署、扩展和管理“容器化应用程序”的开源系统k8s由control plane以及cluster nodes构成。原创 2023-05-12 11:04:17 · 674 阅读 · 0 评论 -
好是池塘清梦处,Go引春草入新诗
Go 初见偶然间,听闻有同学转Java为Go,我也起了好奇心,遂想弄一弄Go首先从简单性谈起吧!Simple?什么是简单?我的理解就是——语言特性少。那么具体而言会带来什么好处呢?快速选择不必纠结一个特性特别臃肿的语言,往往会存在这样一个问题,就是我们有很多种特性可以选择,却时常陷入选择困难症,不知道如何选择,而这个时候Go语言却说,对不起你没有选择!毫无疑问这确实让事情变得简单了。可是真的是这样吗?让我们陷入选择困难症的关键真的是语言特性太多了吗?至少从我的经验来说不是这样的。语言特性当原创 2020-10-30 18:42:22 · 377 阅读 · 1 评论