2023-10-08
背景最近项目上需要重构一个模块,因为这个模块设计到一些全局信息的维护,多副本会有竞争问题,希望采用单副本的方式来运行。但是单副本的话又会面临高可用的问题。因此要解决的问题就是如何做主从选举来保证既是单副本工作,又可以保证高可用。
思路本来想手撸的话可以依然用Redis的分布式锁或者Etcd的分布式锁来实现。
在服务启动的时候去拿锁,拿不到锁就放弃,然后过一...
阅读全文
2022-03-20
最近在团队内部做的一次分享,本意是想强化一下团队内部的质量意识,脱敏以后分享出来。
如果下面的内容太小,可以直接点击这里跳转:开发与测试的关系
阅读全文
2021-12-29
照例写一下2021年的阅读总结。
历史《邓小平时代》
无比推荐。“扶大厦之将倾,挽狂澜于既倒”。
今天看来,“科技是第一生产力”“白猫黑猫”“摸着石头过河”依然振聋发聩。
文学《刀锋》、《月亮与六便士》、《巨人的陨落》、《战争与和平》、《飘》
“一把刀的锋刃不容易越过,因此智者说得救之道是困难的。”
“年轻人与其一直抬头看着月亮,不如低头看看六便士吧。”
“...
阅读全文
2021-03-28
最近在团队内部做的一次分享,分享了一下k8s网络模型。
如果下面的内容太小,可以直接点击这里跳转:K8S网络模型
阅读全文
2020-12-20
今年专业书没怎么看,倒是看了不少西方文学的书。
加缪年初看完了加缪的《鼠疫》和《西西弗斯的神话》,对存在主义那套荒诞-反抗的体系有些疑惑,所以又去买了几节人大哲学系老师讲存在主义的课。个人觉得存在主义会让人活得更自由,而且也充满了人文关怀,关注在荒诞的世界中人应该如何生活。其哲学主张,比如存在先于本质、世界是荒诞的、人的认知局限都比较有意思。
红与黑年中看完...
阅读全文
2019-12-05
基础设施与软件架构从经典三层架构到容器云
从单体架构到微服务架构
服务管理服务编排与部署随着业务的增加,从单体架构到微服务架构似乎是一种必然的趋势。容器带来了新的服务发布方式——以容器镜像作为服务从开发到运维的交付产物——但是并不能解决服务拆分带来的庞大服务数量问题。此外,对于一个大型系统来说,无论是服务之间存在的依赖关系,还是服务与外部系统的依赖关系都是非...
阅读全文
2019-10-11
进程的层次关系pid是进程ID,pgid是进程组ID,sid是会话ID。默认情况下,新创建的进程会继承父进程的进程组ID和会话ID。
比喻:会话是公司,进程组是部门,进程是员工。
进程组方便管理一组进程,比如发送信号可以发给一个进程组。
对于shell会话来说,登录时的进程为会话首进程。之后启动的进程分为前台进程组和后台进程组的概念。只有一个前台进程组...
阅读全文
2019-10-11
编译的过程:
预处理:替换宏
编译:将源代码编译成汇编
汇编:将汇编代码编译成二进制
链接:地址,so
编译成的ELF文件内容:
header信息 magic数
代码段 数据段 bss零值数据段
运行时:strace可以追踪程序的系统调用
加载ld.so
加载glibc.so
mmap将二进制映射到内存
执行main函数
gl...
阅读全文
2019-10-11
线程管理ThreadGroup是个隐含的概念,通常情况下不用管。
uncaughtExceptionHandler可以用来处理线程的异常退出状态,比如实现线程退出重启。uncaughtExceptionHandler实例选择的优先级:本线程设置的handler > 线程池handler > 默认的handler。
ThreadFactory用工厂...
阅读全文
2019-09-15
scheduler的主循环scheduler的逻辑:
遍历DAG路径下的所有dag文件
启动一定数量的进程(进程池),并且给每个进程指派一个dag文件。每个进程解析分配给它的dag文件,并根据解析结果在DB中创建DagRun和TaskInstance。对于满足执行条件的TaskInstance,将状态修改为SCHEDULED
在scheduler的主循环中...
阅读全文