gydtep
发表于 2021-5-22 16:40:56
这里对比一下采用云托管的应用和采用 Serverless 的应用最本质的差异在哪里。对于应用而言,可以将其构建模式拆分为三层,分别是底层基础设施管理、中间的外部服务集成和上层的应用逻辑。
gydtep
发表于 2021-5-23 15:09:58
一个sample文件,包含了一个range信息,这个range关联了一个hoverResult。含义是该文件的某个位置范围内,触发hover事件的话,就给出hoverResult存储的结果。
gydtep
发表于 2021-5-23 15:29:23
如果用Json文件描述这张图的存储,就可以得到如下结果:
1、{ id: 1, type: "vertex", label: "document", uri: "file:///abc/sample.java", languageId: "java" }
2、{ id: 2, type: "vertex", label: "range", start: { line: 0, character: 13}, end: { line: 0, character: 18 } }
3、{ id: 3, type: "edge", label: "contains", outV: 1, inVs: }
4、{ id: 4, type: "vertex", label: "hoverResult", result: {["this is a sample class"]} }
5、{ id: 5, type: "edge", label: "textDocument/hover", outV: 2, inV: 4 }
gydtep
发表于 2021-5-24 11:56:21
根据库大小的区别,LSIF的索引构建时间为10秒至数分钟不等,而用户对同一个代码仓库的提交操作峰值可能会达到每分钟近百次,即使我们采用了增量技术也很难满足高频的构建请求,并且提交事件触达和调度任务执行无法保证精准的时序性。综上所述,我们需要一个分布式时序锁来保证任务调度的顺序和尽量减少重复调度。
gydtep
发表于 2021-5-24 12:37:24
当同一代码库的不同推动消息纷涌而至,Redis维护的分布式锁会做如下判断:若该库当前没有正在运行的任务,将任务置于队首,立即运行;若已有一个正在执行的任务,比较新来的Push消息是否是最新的,若是,则加入队尾;
gydtep
发表于 2021-5-24 13:39:00
当队伍已有两个成员时,则将任务丢弃,因为每次执行任务时,系统都会克隆分支代码,基于最新的版本构建索引,如此就避免了多少次Push就需要执行多少次索引构建的可能性。考虑到线程意外退出的情况,队首会每隔5秒钟全局发送心跳,当队尾或新来的任务监听到心跳超时,则会将队首的任务放弃并执行新的任务。
gydtep
发表于 2021-5-24 18:32:04
阿里目前单元化架构达到一个什么目标呢?通过部署**单元将生产流量完整运行在千里之外的独立机房,连续性的运行业务。这几句话里面包含了非常多的关键点,一个是**,第二个是千里之外,第三个是独立,第四个是连续性。
gydtep
发表于 2021-5-24 20:15:55
单元化架构的总设计师是老毕,因为我们这块业务跟单元化的架构是非常相关的,所以要对它完成的掌握和吃透才能往下走。
gydtep
发表于 2021-5-25 13:13:21
给大家举个例子,像数据库组成的强同步,对我们后续技术架构进和业务的改进都是有极大影响的。这个时候大家要对数据库有一个全局的认识。
gydtep
发表于 2021-5-25 13:57:18
2009年用Oracle数据库用的非常多。。我当时不是做数据库相关的,但是为了把Oracle数据库研究透,去学了非常多Oracle数据库相关的内容。了解里面的逻辑,知道它是什么开发态,是什么运行态,什么管理态,知识都是延续的,后来到了阿里,可能花很短的几个小时就能把现在阿里所有的数据库吃透。