REST API 设计指南

REST(Representational State Transfer) 是在 2000 年由 Roy Fielding 起草的 web services 设计方法。虽然 REST 本身是协议无关的,但是长久以来, 一直用 HTTP 协议作为底层协议使用。 作为使用 HTTP 协议的 RESTful API,主要遵循以下几个设计原则: REST API 主要围绕资源进行设计,包含任...

聊聊缓存更新策略

在分布式场景下,数据库往往是对资源消耗最严重,也是最容易出问题的地方。由于绝大多数情况下的应用还是读远远大于写,对 select 操作执行的频率会非常高;另外,伴随着 select 查询往往会有其他复杂的 join、group、order、like 等语义,对数据库性能消耗会非常大。因此,在实时性要求不是非常高的情况下,我们往往需要缓存对数据库保护,也可以提升查询速度。 此外,在现在的互联...

分布式锁及其实现方式简介

通常,对于多线程访问共享资源的应用,我们往往需要对共享资源进行加锁保护,防止数据发生错乱;而在分布式场景下,分布式锁对于共享资源的正确性、有效性起着非常重要的作用。使用分布式锁,同样可以防止数据错乱行为的发生;此外,也可以避免不必要的外部请求,从而提升系统效率。 多线程场景下锁的实现各个语言或系统提供了不同的方式,而对于分布式锁,目前比较流行的主要是通过 DB、Redis、Zookeepe...

Kong Api网关简介(二) 插件

Kong 通过强大的插件机制进行了类似AOP切面的方式操作,提供了日志、认证、限流等操作。官方给出了许多成熟插件可供选择,包括: 认证:Basic Authentication、Key Authentication、OAuth 2.0 Authentication、JWT、LDAP Authentication 安全:ACL、CORS、Dynamic SSL、IP Restric...

Kong Api网关简介(一) 安装运行

Kong 是 Mashape 开源的高性能高可用 API 网关和 API 管理服务层。它基于 OpenResty 进行 API 管理,并提供了插件实现 API 的 AOP。最近因工作的需要研究了 Kong 的相关应用实现。 准备 kong 的官方文档提供了基于不同平台的安装方式,为了方便,这里使用 docker-compose 进行。 $ mkdir kong-gateway &...

Lua学习参考

之前对 Lua 语言的强大早有耳闻,在 Nginx、Redis 等平台特别是网关和互联网秒杀等场景中发挥了非常重要的作用。可惜一直没有学习,最近因为工作的需要在研究基于 Kong 的网关实现,抽空花了几天时间进行了研究。 运行 Lua 是类 C 的,他是大小写字符敏感的, 作为一个扩展式语言,Lua 没有 “main” 程序的概念, 它只能嵌入一个宿主程序中工作。 Lua 可以像 pyt...

分布式事务

分布式事务是几乎每一个分布式系统中都会涉及到的一个技术问题,特别如今微服务架构被广泛应用在各企业的开发场景中。本文对分布式事务相关学习进行整理归纳,做为后续学习参考,其间参考和引用了部分网络和书籍资料,都很有借鉴价值,特在每篇文章末尾的参考资料环节中附注。 本地事务 在过去很多年的开发过程中,基于数据库的事务一直被广大开发人员和数据库管理与使用人员所熟知。广义上事务是由一系列对系统中数据...

Redis 学习笔记 - 哨兵

Redis 主从复制模式下,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址,对于很多应用场景这种故障处理的方式是无法接受的。Redis 从 2.8 开始正式提供了 Redis Sentinel(哨兵)架构来解决这个问题,本文对于 Redis Sentinel 做出简单介绍。 基本概念 主从复制的问题 Redis 主从复制模式可以将主节点的数据...

Redis 学习笔记 - 复制

在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求, Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个 Redis 副本。复制功能是高可用 Redis 的基础,后面章节的哨兵和集群都是在复制的基础上实现高可用的。 配置 建立复制 参与复制的 Redis 实例划分为主节点 (master) 和从节点 (slave)。默认情况下...

Redis 学习笔记 - 持久化

上一篇文章介绍了 Redis 的基本命令操作,本文主要介绍 Redis 的另一个特性,持久化。 Redis 支持 RDB 和 AOF 两种持久化机制,对内存中的数据进行持久化,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复 RDB RDB 持久化把当前进程数据生成快照保存到文件的过程, 优缺点 RDB 持久化方式的优点: RDB ...