亚马逊网站架构演进

2023-12-07
阅读 6 分钟
155
Amazon,1994 年创立,早期网站是单服务、单数据库的单体架构的系统[1] [2] [3],全部代码由 C++ 编写,编译成单个二进制文件,整个代码仓库被命名为 Obidos)。Obidos 是底层是一个 Web 页面渲染引擎,是一个框架,业务逻辑基于这个框架开发,Obidos 渲染引擎和业务逻辑共同组成整个代码仓库。随着时间的推移,Obidos 变...

I/O 多路复用与网络服务器并发策略

2023-07-26
阅读 18 分钟
675
目前主流的网络服务器,网络 I/O 相关的底层最核心的技术都是 I/O 多路复用(I/O Multiplexing),比如 Apache HTTP Server、Nginx、Redis 等。本文尝试解释各种 I/O 模型,包括解释什么是 I/O 多路复用,同时也总结 I/O 多路复用底层的系统调用 select、poll、kqueue 和 epoll 的演进和区别,并编写了使用这些函数的示...

InnoDB 的并发控制:锁与 MVCC

2023-07-12
阅读 26 分钟
1.1k
目前主流数据库事务的并发控制实现,如 MySQL InnoDB、PostgreSQL、Oracle,都使用两阶段封锁 2PL 与 MVCC 技术,但具体实现细节上存在差异。InnoDB 是在以封锁技术为主体的情况下,用 MVCC 技术辅助实现读-写、写-读操作的并发。PostgreSQL 的并发控制技术是以 MVCC 技术为主,封锁技术为辅。本文主要关注 InnoDB 事务...

微服务 API 网关 Kong 实践

2020-06-04
阅读 11 分钟
12k
Kong 是云原生、高效、可扩展、分布式的微服务抽象层,被称为 API 网关,或者 API 中间件。Kong 在 2015 年 4 月由 Mashape 公司开源,基于 OpenResty 和 Apache Cassandra/PostgreSQL 构建,提供易于使用的 RESTful API 来操作和配置 API 系统12。

MySQL 5.7 的 JSON 类型

2019-06-25
阅读 25 分钟
12.7k
2015 年 8 月,MySQL 5.7.8 开始提供对 JSON 的原生支持 [doc1, doc2 ]。MySQL 对 JSON 的支持可以说是千呼万唤始出来。2009 年开始 NoSQL 逐渐流行起来,相继出现了键值对数据库、文档数据库、列族数据库、图数据库等各类 NoSQL,解决经典关系型数据库无法解决的痛点。其中,对灵活存储半结构化数据的需求,使得类似 Mo...

ZooKeeper 学习笔记

2019-05-30
阅读 13 分钟
4.8k
ZooKeeper(wiki,home,github) 是用于分布式应用的开源的分布式协调服务。通过暴露简单的原语,分布式应用能在之上构建更高层的服务,如同步、配置管理和组成员管理等。在设计上易于编程开发,并且数据模型使用了熟知的文件系统目录树结构 [doc ]。

Java 编译器 javac 及 Lombok 实现原理解析

2019-05-25
阅读 17 分钟
7.6k
javac 是 Java 代码的编译器12,初学 Java 的时候就应该接触过。本文整理一些 javac 相关的高级用法。Lombok 库,大家平常一直在使用,但可能并不知道实现原理解析,其实 Lombok 实现上依赖的是 Java 编译器的注解处理 API(JSR-296)3,本文同时尝试解析 Lombok 的实现原理。

Java 运行时获取方法参数名

2019-05-25
阅读 12 分钟
8.8k
翻阅 Java 8 的新特性,可以看到有这么一条“JEP 118: Access to Parameter Names at Runtime”。这个特性就是为了能运行时获取参数名新加的。这个 JEP 只是功能增强的提案,并没有最终实现的 JDK 相关的 API 的介绍。查看“Enhancements to the Reflection API” 会看到如下介绍:

Elastic Stack 日志分析平台搭建笔记

2019-02-09
阅读 18 分钟
8k
Elastic Stack(旧称 ELK Stack)是最受欢迎的开源日志平台 [ref ]。Elastic Stack 由 Elasticsearch、Logstash、Kibana 和 Beats 四个组件组成:

Java 外部函数接口:JNI, JNA, JNR

2018-10-24
阅读 10 分钟
8.8k
前段时间开发的时候,遇到一个问题,就是如何用 Java 实现 chdir?网上搜索一番,发现了 JNR-POSIX 项目 [stackoverflow ]。俗话说,好记性不如烂笔头。现在将涉及到的相关知识点总结成笔记。

栈帧与调用惯例——函数是如何被调用的?

2018-10-24
阅读 10 分钟
4.2k
要想知道函数是怎么被调用的,需要了解栈帧和调用惯例相关知识。俞甲子2009 的“第10章 内存: 栈与堆”对相关概念有很好的介绍。本文是对相关知识的学习笔记。

macOS 下编译与调试 OpenJDK 9

2018-10-18
阅读 6 分钟
6.2k
关于编译 OpenJDK 官方文档有很好的介绍,[链接],汇总了 JDK 6, JDK 7, JDK 8, JDK 9 的 build OpenJDK 的 README 文件。编译 JDK 8 需要 Xcode 4,现在 Xcode 版本已远高于 4 了,前人尝试编译发现有很多坑 [doc, blog ],所以本文直接开始尝试编译 OpenJDK 9。OpenJDK 9 源码根目录下的 README 文件有如下提示信息(g...

MySQL binlog:格式、增量恢复、闪回、Java 解析

2018-10-14
阅读 11 分钟
9.3k
MySQL 的 binlog 日志文件,记录了数据库表的全部修改操作。本文简单整理 MySQL binlog 相关知识,以及如何使用 binlog 恢复或闪回数据库数据。

Java Agent 学习笔记

2018-10-07
阅读 13 分钟
8.9k
Java 从 1.5 开始提供了 java.lang.instrument(doc)包,该包为检测(instrument) Java 程序提供 API,比如用于监控、收集性能信息、诊断问题。通过 java.lang.instrument 实现工具被称为 Java Agent。Java Agent 可以修改类文件的字节码,通常是,在字节码方法插入额外的字节码来完成检测。关于如何使用 java.lang.in...