《可伸缩服务架构:框架与中间件》读书笔记

发布时间:2026/8/23 1:20:47
《可伸缩服务架构:框架与中间件》读书笔记 设计不重复高性能分布式发号器分布式系统对发号器的基本需求全局唯一粗略有序可反解可制造高性能高可用可伸缩发布模式可分为嵌入发布模式只适用于Java客户端提供一个本地Jar包Jar包是嵌入式的原生服务需要提前配置本地的机器ID但是不依赖于中心服务器中心服务器发布模式只适用于Java客户端提供一个服务的客户端Jar包Java程序像调用本地API一样来调用但是依赖于中心的ID产生服务器REST发布模式中心服务器通过Restful API导出服务供非Java语言客户端使用消息队列框架同步线程模型异步线程模型优雅关机的重点在于如何知道JVM要退出如何阻止Daemon的线程在JVM退出后被杀掉如果Worker线程处于阻塞状态则如何唤醒并退出反射机制轻量级数据库分库分表架构分库分表垂直拆分根据业务的维度将原本的一个库表拆分为多个库表​每个库表与原有的结构不同水平拆分根据分片(sharding)算法将一个库表拆分为多个库表​每个库表依旧保留原有的结构通常先进行垂直拆分使单体应用形成多个微服务结构在微服务中再进行水平库表拆分。三个阶段单库单表原始形态单库多表单库对表水平切分产生多个结构完全一样的表多库多表对库进行水平切分方案实现方案分成三大类客户端分片、代理分片和支持事务的分布式数据库如OceanBase、TiDB。客户端分片使用分库分表的数据库的应用层直接操作分片逻辑分片规则需要在同一个应用的多个节点间进行同步每个应用层都嵌入一个操作切片的逻辑实现分片规则​这一般通过依赖Jar包来实现。实现方式分为三种应用层直接在应用层读取分片规则然后解析分片规则根据分片规则实现切分的路由逻辑从应用层直接决定每次操作应该使用哪个数据库实例、数据库及哪个数据库的表等。优点性能更高实现简单有问题时容易定位和修复缺点业务侵入定制JDBC协议业务透明不侵入业务。如Sharding JDBC定制ORM框架在ORM框架中实现分片规则或通过ORM框架的扩展机制代理分片在应用层和数据库层增加代理层把分片路由规则配置在代理层代理层对外提供与JDBC兼容的接口给应用层应用层开发人员不用关心分片规则只需关心业务逻辑实现待业务逻辑实现后在代理层配置路由规则即可。优点应用层开发人员专注于业务逻辑的实现把分库分表配置留给代理层做缺点增加代理层多一层网络传输。代表如Cobar和Mycat。架构设计分布式事务事务路由自动提交事务路由可编程事务路由声明式事务路由读写分离Mycat分片规则枚举固定分片Hash算法范围约定求模法日期列分区法通配取模ASCII码通配求模编程指定截取数字Hash解析一致性HashSharding JDBC核心概念LogicTableActualTableDataNodeBindingTableShardingColumnShardingAlgorithm使用限制不支持Having不支持Union和Union All不支持or不支持批量insert不支持distinct聚合不支持多子查询嵌套缓存及实践适合使用缓存的场景读密集型应用、存在热数据的应用、对响应时效要求较高、对一致性要求不严格、需要实现分布式锁的时候不适合的场景读少、更新频繁、对一致性要求严格。ESLucene读写流程核心术语检索方式单个词查询ANDORNOT分段存储类似于CMS的分段思想将一个索引文件拆分成若干个子文件即段每个段都是一个独立的可被搜索的数据集具有不变性一旦写入磁盘则不可修改。段不变性的优点缺点端合并策略解决段的碎片率问题分布式定时任务RPCRPC优势简单语义十分清晰和简单便于建立分布式系统高效能高效地实现远程的过程调用通用RPC导出的服务可以供多个使用者用于不同的目的ZeroC IceZeroC公司的Ice(Internet CommunicationsEngine)中间件平台受到CORBA影响。提供面向对象的RPC、网格计算和发布-订阅功能支持Linux等操作系统C、C#、Java、JS、Python等主流语言。可用于应用程序中不需要使用HTTP方式能穿透防火墙。主要组件介绍Slice(Specification Language for Ice)是Ice的规范语言也是ZeroC私有的一种文件格式程序员按照它来编辑独立于计算机语言的声明、类、接口、结构和枚举的定义。Slice定义文件被用来作为存根生成过程的输入。存根依次被连接到应用程序和服务器上它们应该基于Slice声明、定义的接口和类进行互相通信IceStorm发布-订阅服务减少客户端和服务器的耦合度。发布者将事件发给IceStorm服务它按照顺序将事件传递给订阅者。一个事件发布者可把一个事件发布给多个订阅者。事件还可按照主题分类订阅者可指定感兴趣主题只有订阅者感兴趣的主题才会被发送给订阅者。也能允许指定服务的质量从而允许应用在可伸缩性和性能之间进行适当的折中IceBox简单的应用服务器包含可执行的由.dll或.so库实现的服务它可以协调多个应用组件启动和停止。应用组件可以用动态链接库的形式发布而不是一个进程这是一个更轻量的选择。可在一个JVM中运行若干个应用组件而不是有多个进程IceGrid是一个Ice位置服务的实现提供负载均衡、故障转移、对象发现和注册服务IcePatch2软件补丁服务。允许轻松地把软件的更新发布给客户。客户连接到IcePatch后请求更新一个特定的应用服务自动检查客户软件的版本然后下载需要更新的组件。这些下载的组件都是放在一个压缩包里的减少对带宽的占用软件补丁也可以通过结合Glacier服务发布这样只有经过授权的客户才能下载软件并更新Glacier2防火墙服务允许客户端和服务器通过防火墙安全地通信通信通过使用公钥认证完全加密且通信是双向的。Glacier提供相互认证和安全的会话管理支持。Dubbo源码高性能网络中间件