博客
关于我
架构演进
阅读量:752 次
发布时间:2019-03-23

本文共 1631 字,大约阅读时间需要 5 分钟。

随着业务的快速发展,技术支撑系统的重要性日益凸显。然而,与随之而来的年龄增长相比,我们投入的时间和精力越来越有限。在有限的资源中,如何有效学习和应用技术以支持业务发展,成为了我们面临的课题。中国最大的电商平台之一的建设历程,展现了技术演进的多个关键阶段,为我们提供了宝贵的经验和启示。

目的

满足业务的增长,根据不同的业务规模选择适用的架构。

概念

  • 分布式:系统中不同功能的服务部署到不同的服务器上。主要是为了解决业务增长带来的性能问题。
  • 集群:同一功能服务部署在不同的服务器上,对外统一提供服务。集群主要起高可用和性能提升的作用。

演进历程

  • 单机架构:将系统所需的所有资源都部署在同一台服务器上。这种架构简单,适用于用户少、业务小、性能要求不高的情况。

  • 第一次演进:Tomcat与数据库分开部署:为了应对用户增长带来的资源竞争问题,采用分布式部署方式将Tomcat和数据库分别部署在不同服务器上。

  • 第二次演进:引入本地缓存和分布式缓存:针对数据库压力过大造成的性能瓶颈问题,本地缓存和分布式缓存被引入。通过缓存技术,大量读写操作能在数据库层面前取得效果。

  • 第三次演进:引入反向代理实现负载均衡:针对单机性能瓶颈问题,通过Nginx反向代理的方式实现负载均衡,将外部请求均匀分配到多台服务器上。

  • 第四次演进:数据库读写分离:针对单个数据库性能瓶颈问题,将数据库划分为读库和写库,通过同步机制实现读写分离。

  • 第五次演进:按业务分数据库:针对不同业务竞争同一数据库的问题,将数据库按业务进行垂直拆分,以提高资源利用率。

  • 第六次演进:大表拆分为小表:针对单表数据量过大,性能低下的问题,通过水平分表的方式将大表拆分为多个小表。

  • 第七次演进:引入LVS或F5实现负载均衡:针对单个Nginx性能瓶颈问题,通过LVS或F5实现四层负载均衡方式。

  • 第八次演进:通过DNS轮询实现机房级负载均衡:针对单个LVS性能瓶颈以及不同机房访问延迟的问题,使用DNS轮询技术实现机房级的负载均衡。

  • 第九次演进:引入NoSQL数据库和搜索引擎:针对业务场景的复杂化问题,引入NoSQL数据库和搜索引擎等技术,满足复杂查询和全文检索的需求。

  • 第十次演进:大应用拆分成小应用:针对应用规模过大、升级迭代困难的问题,通过拆分应用实现业务模块的独立开发和维护。

  • 第十一次演进:复用的功能抽离成微服务:针对公共功能代码重复存储的问题,实现功能模块的抽离,形成微服务架构。

  • 第十二次演进:引入企业服务总线ESB屏蔽服务接口的访问差异:针对服务之间接口多样性问题,通过ESB实现接口协议转换。

  • 第十三次演进:引入容器化技术实现动态资源管理:针对资源动态扩缩和部署复杂度问题,通过容器化技术实现系统资源的灵活管理。

  • 第十四次演进:采用云平台承载系统:针对硬件资源利用率低的问题,通过利用云平台实现资源动态扩配,优化资源利用率。

  • 设计原则

  • N+1设计:系统中每个组件都应做到没有单点故障,确保每个组件的高可用性。
  • 回滚设计:系统升级时出现错误时,可通过回滚到之前的版本确保系统可用。
  • 禁用设计:提供功能开关控制,确保系统在出现故障时能够快速下线。
  • 监控设计:建立完善的日志监控和大盘监控体系,及时发现问题。
  • 多活数据中心设计:通过建立多个地区的数据中心,确保系统在一个机房断电时依然可用。
  • 采用成熟技术:使用市场成熟的解决方案,避免新技术带来的潜在风险。
  • 资源隔离:为单个业务划分资源,避免业务间相互影响。
  • 架构能水平扩展:系统各组件应支持线性扩展,避免性能瓶颈问题。
  • 非核心则购买:对非核心功能,考虑购买成熟的第三方服务。
  • 使用商用硬件:选择稳定可靠的硬件,获得及时的技术支持。
  • 快速迭代:通过开发小功能模块,快速上线验证,降低交付风险。
  • 无状态设计:服务接口应无状态记录,避免因状态出错导致服务失败。
  • 这种演进过程展示了系统架构从简单到复杂的发展历程,通过技术创新和架构优化,有效支持了业务的持续增长。

    转载地址:http://xdzzk.baihongyu.com/

    你可能感兴趣的文章
    mysql5.5最简安装教程
    查看>>
    mysql5.6 TIME,DATETIME,TIMESTAMP
    查看>>
    mysql5.6.21重置数据库的root密码
    查看>>
    Mysql5.6主从复制-基于binlog
    查看>>
    MySQL5.6忘记root密码(win平台)
    查看>>
    MySQL5.6的Linux安装shell脚本之二进制安装(一)
    查看>>
    MySQL5.6的zip包安装教程
    查看>>
    mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
    查看>>
    Webpack 基本环境搭建
    查看>>
    mysql5.7 安装版 表不能输入汉字解决方案
    查看>>
    MySQL5.7.18主从复制搭建(一主一从)
    查看>>
    MySQL5.7.19-win64安装启动
    查看>>
    mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
    查看>>
    MySQL5.7.37windows解压版的安装使用
    查看>>
    mysql5.7免费下载地址
    查看>>
    mysql5.7命令总结
    查看>>
    mysql5.7安装
    查看>>
    mysql5.7性能调优my.ini
    查看>>
    MySQL5.7新增Performance Schema表
    查看>>
    Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
    查看>>