SSI机制原理论文《Serializable Isolation for Snapshot Databases》

本篇论文提出了一种检测算法用于解决常见的实现快照隔离的数据库经常会发生的Write Skew问题,并在Oracle Berkeley DB上做了实现,并做了一系列性能测试,相对于传统的S2PL实现串行化隔离的机制有了大幅度的性能提升 SI快照隔离带来的问题SI快照隔离解决了读的一致性问题,并且为了避免Lost Update问题,采取了First-Commiter-Wins的规则,将并发产生冲突的后来者事务进行抛弃。但是SI带来了Write Skew问题,对于需要维持一些约束的数据集进行写操作的事务在并发时容易产生破坏一致性的问题…

Read more

Race Condition(竞态条件) 和 Memory Barrier(内存屏障)

CPU乱序执行我们熟悉的X86架构CPUMemory Barrier缓存一致性Race ConditionGo Memory Model、C++ Memory Model、Rust Memory ModelCPU乱序执行说起乱序执行,就得不得不提另外作为其实现基础的两个技术,现代CPU架构中为了增强单核运行性能,开发了超标量和流水化管线技术。 超标量superscalar拥有这个技术的CPU单颗核心就有多个执行单元,…

Read more

常见的并发问题

Race Conditions出现这种情况的问题原因大部分在于程序员思考问题都是顺序的 1 var data int 2 go func() { 1 3 data++ 4 }() 5 if…

Read more

Cassandra 架构、实现原理

Cassandra是一个高可用、高扩展、分布式去中心化、无单点故障、高写入的NoSQL类型数据库。其特征的实现依赖众多已有的分布式、存储、网络通信等基本技术的实现,是一个值得学习的分布式数据系统案例。 官网文档还真不好找,看的datastax的文档,https://docs.datastax.com/…

Read more

Cassandra: The Definitive Guide, 2nd Edition 浓缩精华

貌似第二版(出版于2016年)国内只有英文影印版,还没有中文版。我自己是在SafariBooksOnline看的,实在是受制于SBO的累赘笔记功能,所以直接整理成读书笔记了 第一章Beyond Relational Databases第一章算是个历史课,讲述了伴随着时代的发展,关系型数据库击败IBM IMS走上神坛的故事,后面随着互联网数据的高速发展和膨胀,传统关系型数据库可能并不适合了,…

Read more

大数据处理平台(实时/离线/机器学习计算)构建

背景随着产品不断迭代,产品和运营同学需要更多的数据支撑,那么面对日益增多的数据,如何快速有效并且的计算数据非常重要;与此同时,AI技术的快速发展则给予了创造AI+产品功能的机会,那么作为计算密集型的任务在面对大量用户群体时如何解决处理也是新的问题。 在这个背景下,我们需要搭建自己的大数据处理平台来解决问题。 如果谈及这类问题处理的核心思想,那就是算法中的经典处理法则:分而治之。其实我们之前的业务服务开发时已经采用了这类的解决办法,比如我们的图像转换、…

Read more

NestJS快速入门 for KoaJSer/EggJSer/Expresser(施工中)

NestJS 与EggJS基本上属于一种类型的NodeJS框架,它们提供了一整套的解决方案,但侧重点可能不一样。 KoaJS、ExpressJS则是提供了更为基础的HTTP框架,并且提供了极大地扩展性,所以EggJS和NestJS也分别基于Koa、Express之上来实现(当然了,NestJS也提供了切换底层为FastifyJS这种HTTP框架) NestJS和EggJS的侧重点差异在于前者关注服务实现也就是代码书写的方式,提供了更为多样的扩展方式。EggJS则是关注具体应用开发中的问题,用相对更加规范化的模板来提供解决方案。…

Read more

Javascript中的装饰器

装饰器草案截止到现在2019年6月26日还未进入Stage3,草案地址https://github.com/tc39/proposal-decorators 以下内容可能会在未来进入实施阶段后变更 装饰器模式大概是GOF 23中设计模式比较常见并且常用的设计模式了。ecmascrip/javascriptt语言在TC39委员会带领下也变得越来越学院化(大概不是​🤣​) 最早阅读到的相关的文章是来自于Google团队负责JS优化的Addy Osmanihttps://medium.…

Read more

7 项API安全设计最佳实践

隐藏所有的API安全线索 恶意无所不在,攻击何时都有可能发生。所以千万不要泄露安全相关的线索到API中。比如用户身份认证,就千万不要仅提示密码错误,否则就会暴露给攻击者用户名正确的线索,取而代之的提示应该是用户名或者密码错误并添加尝试次数限制 先认证后授权 任何敏感私密的操作都需要进行额外的认证操作,而非在身份验证之后就决定实施。通常解决方式是进行其他的认证流程获取操作的密钥token类似于oauth2。除此之外,就算身份认证通过后,对于服务内部的资源访问我们需要提供一些授权手段来检验其是否拥有操作的权限,…

Read more

Istio使用经验

安装Sidecar 我们使用K8S Webhook的方式也就是自动注入的模式安装sidecar到pod中。 通过使用kubectl label namespace default istio-injection=enabled来开启某个命名空间的注入,通过使用kubectl label namespace default istio-injection-关闭 可以在pod的template中的annotations添加sidecar.…

Read more

Keto源码解析

源码在https://github.com/ory/keto 以keto serve启动 导入模块初始化 引入viper 初始化环境变量 引入cobra 以便后续注册各个command cmd模块初始化过程中添加serveCmd 在导入server指令时导入核心的几个模块 keto/…

Read more