一致性哈希算法的原理与实现
分布式系统中对象与节点的映射关系,传统方案是使用对象的哈希值,对节点个数取模,再映射到相应编号的节点,这种方案在节点个数变动时,绝大多数对象的映射关系会失效而需要迁移;而一致性哈希算法中,当节点个数变动时,映射关系失效的对象非常少,迁移成本也非常小。本文总结了一致性哈希的算法原理和Java实现,并列举了其应用。
分布式系统中对象与节点的映射关系,传统方案是使用对象的哈希值,对节点个数取模,再映射到相应编号的节点,这种方案在节点个数变动时,绝大多数对象的映射关系会失效而需要迁移;而一致性哈希算法中,当节点个数变动时,映射关系失效的对象非常少,迁移成本也非常小。本文总结了一致性哈希的算法原理和Java实现,并列举了其应用。
CAP定理指出,在一个分布式系统中,对于一致性、可用性、分区容错这三个特性,不可能同时满足,而是必须有所舍弃。我们设计分布式系统时,必须在三者之间(尤其是一致性和可用性之间)有所取舍和平衡。
众所周知,数据库很容易成为应用系统的瓶颈。单机数据库的资源和处理能力有限,在高并发的分布式系统中,可采用分库分表突破单机局限。本文总结了分库分表的相关概念、全局ID的生成策略、分片策略、平滑扩容方案、以及流行的方案。
Docker 是世界领先的软件容器化平台,它极大地方便了应用程序的构建、发布和运行。本文总结了 Docker 架构原理及其作用,并以 CentOS 7 环境为例,总结了 Docker 的环境搭建,镜像和容器的常用操作方法。
CAT 是大众点评开源的实时监控系统,它侧重于 Java 应用监控,可与各种流行的中间件框架集成(MVC框架、RPC框架、数据库框架、缓存框架等),实现应用各层级系统的运行状况监控。本文总结了 CAT 服务器集群的搭建、Java 应用的集成、以其控制台的使用。
OCTO 是美团千亿调用量的分布式服务通信框架及服务治理的系统,可实现服务注册、服务自动发现、服务管理、容错处理、数据可视化、服务监控报警、服务分组等。本文总结了 OCTO 架构原理、Java 应用的集成方法、以其控制台的使用。
服务器架构中,经常会遇到服务的一个总入口(比如 Nginx/MyCAT)存在单点故障的隐患。Keepalived 正是解决此类问题的高可用软件,它使用单个虚拟IP(VIP),动态检测多个入口节点的可用性并切换 VIP 指向,从而达到高可用。本文总结了 Keepalived 的原理,并以 Nginx 为例,演示了 Keepalived 在高可用中的应用。
设计模式是在不断出现的特定情境下,针对特定问题,可以重复使用的特定解决模式(套路)。本文按照创建型、结构型、行为型三大类,总结了常见的 24 种设计模式的使用要点,包括适用场景、解决方案、及其相应的 Java 实现。
单点登录是多域名企业站点流行的登录方式。本文以现实生活场景辅助理解,力争彻底理清 OAuth2.0 实现单点登录的原理流程。同时总结了权限控制的实现方案,及其在微服务架构中的应用。
Java 开发可分为两种情况:前后端分离,适合于生命期长、迭代频繁的企业应用开发;后端不分离,则适合于短期的、演示性小项目,此时服务端可采用 Spring 官方推荐的模板 Thymeleaf。本文总结了 SpringBoot 整合 Thymeleaf 的开发要点。
SpringBoot 是快速开发 Spring 项目的流行框架,而 MyBatis 是 Spring 中数据库操作的流行方案。本文以 MySQL 为例,总结了 SpringBoot 项目中借助 MyBatis Generator 的生成实体类和Mapper,并使用它们操作数据库的开发要点。
HTTPS 是互联网上流行的安全超文本传输协议,它能保证数据传输过程中的保密性和完整性。谷歌、苹果等互联网巨头都在力推 HTTPS,其平台对于传统的 HTTP 展示警告,甚至拒绝接入,国内大型互联网公司也开始启用全站 HTTPS。本文对 HTTPS 相对于 HTTP 差异的 SSL/TLS 的原理和交互流程进行梳理,以便理解 HTTPS 的原理流程。
IDEA 远程调试,像运行本地代码一样调试远程主机上的程序,以排查远程程序的BUG或代码执行流程。
数据库事务是多个SQL构成一个业务整体,必须同时提交或同时回滚。而分布式事务中,一个大操作由多个小操作组成,各个小操作处于不同的物理节点(或进程),这些小操作必须作为一个整体,同时提交或同时回滚。本文总结了事务的特性,以及 MySQL/Redis/MQ 的分布式事务的具体解决方案。
Maven 私服通常采用 Nexus 搭建,本文以 CentOS 为例,总结了 Nexus 搭建方法。搭建 Maven 私服的必要性有:(1)整个公司只需把因特网上的公共仓库缓存至局域网私服一次,公司内所有开发人员直接从局域网私服下载,速度很快;(2)公司内部开发的组件,上传至私服,供整个公司使用。
Github 只对开源的项目免费,非开源项目必须付费。为了不付费,也为了代码安全,我们需要搭建自己的 Git 服务器,而且国内访问速度更快。Git 的远程仓库和本地仓库没有本质区别,远程仓库只是保证永远在运行。
Alibaba Dubbo 是国内流行的微服务框架,而 SpringCloud 是国外流行的微服务框架。SpringCloud 为微服务提供一站式完整的解决方案,具有独特的优势和发展前景。本文讲述了 SpringCloud 的历史和版本号规则、与同类产品相比的优势,并基于 SpringBoot 演示了服务注册中心、服务提供者和消费者的实现方法,并说明了高可用注册中心的部署思路。
默认情况下,SpringBoot 内置 Tomcat,可以直接在 Java IDE 中启动,也可以打成 jar 包,用 java -jar
命令启动。但是,如果要用外部 Tomcat 管理多个项目,就要打成 war 包。本文以 Maven 项目为例,总结了 SpringBoot 各种部署方法和相关事项。为便于演示,我使用的环境是 Windows,而 Linux 下方法大同小异。
SpringBoot 是 Spring 官方当前力推的开发框架,它以合理的默认值,开发者以极少的配置即可快捷地搭建应用,足以让传统的 Spring 开发者拍案叫绝!本文简述了 SpringBoot 的原理和作用,并以实例演示常见 WEB 项目的构建方法,其中包括数据库和 Redis 的接入方法。
上篇文章 Dubbo 原理与部署 讲述了 Dubbo 注册中心(ZooKeeper)的搭建,但其中的服务提供者和消费者需要开发者实现,本文详述两者的实现方法。各方部署完毕后,一个基本的微服务架构就完成了。传统上是以 Spring 实现,现在也有 starter 帮助以 SpringBoot 的方式实现。