高性能分布式发号器(ID生成器)
分表分库的分布式应用通常需要用到 ID 生成器生成流水号(支付流水号,订单号等),又称为发号器,以标识数据的全局唯一,ID 全局不可重复。
需要特别注意的是发号器服务的高可用性和高性能。当业务严重依赖发号器服务时,发号器服务有可能成为整个系统的短板。
所以发号器服务需要高可用集群部署来保障高可用性,需要高性能以满足高并发的场景。
分表分库的分布式应用通常需要用到 ID 生成器生成流水号(支付流水号,订单号等),又称为发号器,以标识数据的全局唯一,ID 全局不可重复。
需要特别注意的是发号器服务的高可用性和高性能。当业务严重依赖发号器服务时,发号器服务有可能成为整个系统的短板。
所以发号器服务需要高可用集群部署来保障高可用性,需要高性能以满足高并发的场景。
RPC(Remote Procedure Call),即远程过程调用。
RPC 的核心目的是实现进程间通信,在分布式环境中广泛应用。
RPC 框架面向开发者屏蔽了网络底层逻辑,使远程调用可以像本地调用一样方便。
分布式发号器(ID生成器)可选方案和需要满足的特性,可参考 分布式微服务系列(十七):高性能分布式发号器(ID生成器)。
本篇基于 Redis 的原子递增命令 INCR 实现 递增ID 的操作。经 200 并发线程测试 5 次,没有出现重复ID的情况。
开发互联网系统及架构在满足测算出的并发请求时,还要预防并发可能突破设计峰值的情况,必要时可以优先处理高优先级数据或特殊特征的数据,也要确保系统可用不崩溃。
开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。本文介结限流相关概念和实现方式。
Web 系统的表单重复提交问题必然会出现,如注册、秒杀下单、支付等场景都可能出现重复提交。必须对重复提交进行处理,否则会出现脏数据,若建了唯一索引则会抛 JDBC
异常。单体应用的表单重复提交问题可参考 拦截器 与Spring AOP 实现防止表单重复提交。
分布式集群部署的 Web 做防止表单重复提交的处理上,其根本也是基于 TOKEN
的方式来实现,因是集群布署,所以此 TOKEN 不能存放在 SESSION
中(未使用共享 SESSION 方案) ,而是存放在外部存储系统中,如 Reids,这里其实引入了类似分布式锁的概念。
在分布式微服务架构中,特别是跨域访问的情况下,通常会使用 JWT 技术来实现安全认证。
JSON Web Tokens 是一种开放的、行业标准的 RFC7519 规范,用于安全地表示双方之间的声明。