我与DeepSeek读《大型网站技术架构》(7)- 利用分布式服务打造可复用的业务平台

随需应变:网站的可扩展架构

利用分布式服务打造可复用的业务平台

针对巨无霸应用系统的模块拆分,主要可分为两种方式:

  1. 纵向拆分
    按照业务独立性将整体应用拆分为多个独立的小型Web应用系统。例如新增的相对独立业务可直接设计为独立应用,减少耦合性 。

  2. 横向拆分
    通过复用性提取将高复用性的业务模块拆分为分布式服务。例如用户管理、商品服务等公共功能独立部署,新业务仅需调用服务接口而非依赖底层实现,实现模块内逻辑升级不影响外部调用 。

两种拆分方式的核心目标均为降低系统耦合度,但横向拆分需搭配分布式服务管理框架以协调服务注册、发现及调用关系 。


WebService与企业级分布式服务

Web Service是企业级分布式系统构建的早期主流技术,其核心架构包括三个关键技术组件:

  1. WSDL:用于描述服务接口属性,由服务提供者向注册中心发布;
  2. UDDI:作为注册中心,管理服务的发布与检索;
  3. SOAP:基于XML的通信协议,实现服务调用与数据传输。

优点:在异构系统整合(如跨语言/跨平台)与企业级应用中验证有效。
局限

  • 低效通信:依赖XML序列化与HTTP协议,性能开销大;
  • 维护复杂:服务注册/发现流程臃肿,部署难度高;
  • 扩展困难:难以满足大型网站对高并发、高可用及实时变更的需求。

因其架构特性,Web Service更适合业务稳定、低变更频率的企业内部系统,但难以适配大型互联网场景的动态需求。


大型网站分布式服务的需求与特点

针对Web Service的不足,分布式服务需满足以下特性:

  1. 负载均衡:支持可配置的算法(如轮询、权重)以应对热门服务高并发调用
  2. 失效转移:服务集群需具备故障实例自动切换能力,保障服务整体可用性
  3. 高效通信:以高性能协议(如RPC)替代传统HTTP,避免成为系统瓶颈
  4. 异构整合:兼容不同语言/平台开发的服务模块,解决历史遗留系统问题
  5. 渐进式演化:支持服务模块在集中式与分布式部署模式间灵活切换
  6. 版本管理:通过多版本并行发布实现服务平滑升级,避免停机维护
  7. 实时监控

分布式服务框架设计

设计方向
  1. 模块拆分原则:通过纵向拆分(业务隔离成独立应用)和横向拆分(复用业务标准化为服务接口)降低耦合
  2. 服务治理能力:需涵盖服务注册/发现、调用路由、容错熔断、状态监控等基础组件
  3. 通信协议优化:采用二进制序列化(如Protobuf)替代XML、基于长连接的高效传输协议提升性能
  4. 弹性架构设计:支持动态扩缩容,通过轻量级部署(如容器化)简化维护复杂度

以Dubbo为例

Dubbo的架构核心聚焦于服务治理与高效通信,其核心组件运行流程如下:

  1. 服务角色划分

    • Provider(提供者):暴露服务接口实现,向注册中心注册自身服务并响应调用请求。
    • Consumer(消费者):通过注册中心发现服务地址,发起远程调用并负载均衡选择提供者实例。
    • Registry(注册中心):存储服务提供者地址列表,支持动态服务发现与健康状态监测(如ZooKeeper或Nacos)。
    • Monitor(监控中心):实时采集服务调用性能指标(吞吐量、响应时间等),用于运维优化。
  2. 调用流程

    1. 服务注册:Provider启动后向Registry发布服务元数据(接口、版本、URL地址等)。
    2. 服务订阅:Consumer从Registry拉取Provider列表,初始化本地服务代理接口。
    3. 动态代理:Consumer通过Proxy模块生成接口代理对象,屏蔽底层RPC细节。
    4. 负载均衡:Consumer基于策略(轮询/随机/最少活跃调用)选择目标Provider实例进行调用。
    5. 网络通信:基于高性能NIO框架(如Netty)传输调用请求,支持多协议(Dubbo协议/HTTP等)。
    6. 失效转移:调用失败时自动切换至其他Provider实例或触发熔断机制。
  3. 核心特性

    • 模块化分层:采用SPI(Service Provider Interface)机制允许用户灵活替换各层实现(如协议、序列化方式)。
    • 扩展性设计:通过Filter链支持拦截器扩展(日志/鉴权/链路跟踪等)。
    • 集群容错:支持Failover/Failfast/Failsafe等多种容错策略以适应不同业务场景。

分布式服务框架Dubbo的架构原理(来源于书本图7.6)

注:图片来源自书本图7.6

分布式服务框架选型

协议支持治理能力性能表现生态成熟度 四个核心维度对主流框架进行对比:

框架核心能力适用场景
Dubbo▪️ 支持多种RPC协议(HTTP/2、gRPC、Triple协议)
▪️ 完整服务治理(容错、负载均衡、动态路由)[^1]
高频调用、强治理需求的复杂企业级分布式架构(如电商交易核心链路)
Spring Cloud▪️ 标准RESTful接口 + Netflix OSS套件集成
▪️ 深度整合微服务组件(Gateway/Config)
全栈Java体系、强调微服务标准化与生态整合的中大型系统
gRPC▪️ HTTP/2 + Protocol Buffers 高性能通信
▪️ 原生跨语言生成代码库支持(Go/Python/Java)
多语言异构系统整合、高吞吐低延迟场景(如IoT实时数据处理)
Apache Thrift▪️ 高效二进制序列化协议(TBinaryProtocol)
▪️ 灵活传输层框架(TSocket/TNonblocking)[^2]
需高效通信但无需完整治理能力的轻量级服务调用(如内部模块间RPC)

关键选型建议

  1. 微服务生态适配场景

    • 若技术栈为 Java且需完整治理能力,优先选择 Dubbo 3.0(适配云原生)Spring Cloud + Kubernetes
    • 若存在多语言服务且强调标准化,选用 gRPC + 服务网格(如Istio)
  2. 性能敏感型场景

    • gRPC(HTTP/2多路复用)Dubbo(长连接协议优化) 在延迟敏感场景(如支付交易)中表现更优。
    • Thrift 在纯二进制传输场景(如视频流元数据交互)可减少序列化开销。
  3. 轻量化快速开发场景

    • Motan(API简洁,适配中小项目)或 gRPC-Go(胜出Golang生态)适合敏捷开发。

可扩展的数据结构

可扩展数据结构旨在解决传统关系数据库因固定schema导致的僵化问题。其核心思路是动态字段扩展,通过NoSQL数据库的列族(ColumnFamily)设计实现:

  1. 无预定义字段:创建表时仅定义列族名称,允许数据写入时动态添加任意字段(Column),支持百万级字段扩展。
  2. 稀疏存储能力:不同记录的字段可以异构(如学生“联系方式”包含邮箱、电话等差异化字段),存储按需生成,避免冗余字段设计。
  3. 灵活查询:查询时支持按任意字段条件检索,适应需求频繁变化的场景(如新增课程、联系方式类型)。

此设计通过无模式(Schema-less)结构平衡数据规范性与灵活性,适用于海量动态数据场景(如用户画像、日志存储)。

利用开放平台建设网站生态圈

开放平台通过以下策略构建网站生态圈:

  1. 核心价值共享:将网站内部服务封装为标准化API,吸引第三方开发者基于这些接口开发个性化应用或服务,补充网站自身功能的局限性。
  2. 多方共赢模式:形成“网站(提供基础设施)-第三方(开发增值应用)-用户(享受多样性服务)”的生态循环,提升平台整体价值和竞争力。
  3. 技术架构支持:包括API接口(RESTful/RPC等)、协议转换层、安全控制(身份认证/限流)、审计计费模块、服务路由等关键组件,既降低接入成本又保障平台稳定性。
  4. 商业驱动因素:依托长尾效应,通过海量增值服务(如淘宝商品排名、QQ会员特权)扩大盈利模式,同时分散创新风险。

典型案例包括BAT(百度、阿里、腾讯)等企业通过开放平台整合外部创新力,构建业务护城河。


开放平台架构主要包括以下核心模块:

  1. API接口层:暴露标准化的RESTful/WebService/RPC等协议接口,供第三方开发者调用网站内部服务能力。
  2. 协议转换模块:将外部开发者请求的API格式转换为内部服务兼容的数据结构,并封装内部服务的返回结果适配外部接口规范。
  3. 安全控制模块
    • 身份认证与权限管理
    • 访问带宽分级限制,保障平台资源公平分配及内部服务稳定性。
  4. 审计模块:记录第三方调用日志,支持监控、计费及异常行为分析
  5. 路由系统:将外部请求动态映射到对应的内部服务实例,实现服务寻址与负载均衡。
  6. 流程编排模块:整合多服务逻辑,组合离散服务为上下文关联的流程化接口,简化开发者调用复杂度。

架构目标:通过接口标准化内部解耦,实现业务能力对外开放的高效、安全与灵活性,典型案例如BAT(百度、阿里、腾讯)通过开放平台扩展生态圈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

递归书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值