引言为了更好理解互联网架构需要先了解基础概念概念应用、系统完成整套服务的程序或者程序群模块、组件完成指定功能的部分相互解耦合分布式系统中的多个模块部署在不同服务器上强调的物理形态集群为了完成某个目标的特定组件部署于多台服务器强调完成特定服务目标主、从集群中通常由一个程序承担更多责任称为主其他承担附属职责的称为从中间件实现不同程序的通信充当桥梁容器理解为装载集装箱的货物可以实现功能容器编排K8S理解为货船组织集装箱的搬运可用性单位时间段系统正常提供服务的概率吞吐、并发单位时间段内系统可以成功处理请求数量。并发指同一时刻支持的请求最高量一、单机架构概念单机架构是最基础的软件系统架构模式指整个应用系统的所有组件---包括应用界面、业务逻辑、数据存储等都运行在一台物理机或虚拟机上特征集中部署所有服务模块打包一起作为整体单个服务器包含程序和数据库本地通信各组件之家通过进程内函数调用无序网络开销单进程通常以一个进程或者少数进程承载全部功能共享资源CPU、内存、磁盘、数据库等全部本机独占优点架构简单开发部署方便调试容易运维成本低缺点扩展性差受限于单机硬件上限技术栈耦合难以独立升级某个模块对访问量大的硬件资源成为限制使用场景业务规模小用户量有限对可用性不高的离线系统二、应用数据分离架构概念应用数据分离架构和之前的架构区别在于将数据库服务独立部署在同一个数据中心的其他服务器上应用程序通过网络访问数据特征物理隔离应用和数据部署在不同机器通过数据库协议进行网络通信资源独立应用程序专注于CPU和内存数据库服务专注于磁盘IO和存储独立升级可以单独升级数据库机器配置或应用机器配置优点解决不同线程资源争抢数据库独立优化数据库单独隔离不会因为应用把数据库弄坏缺点网络络通信开销运维复杂度略上升当访问量增加单台应用服务器无法满足需求使用场景业务量增加单机资源成为瓶颈数据量较大需要独立的存储和IO能力作为从单机向分布式演进的过渡阶段三、应用服务集群架构概念应用服务集群架构是在应用与数据分离的基础上将应用服务器从单台扩展为多台引入了负载均衡。负载均衡解决用户流量分发到哪台服务器需要一个专门的系统组件做流量分发实际中的负载均衡不仅仅指的是工作在应用层还可能其他的网络层流量调度算法Round轮询算法公平均分给不同服务器轮询算法能者多劳一致散列哈希算法通过计算用户特征值如地址得到哈希值请求总是分配给指定服务器用于专项客户经理服务负载均衡软件软件HAP、硬件等特征水平扩展流量大时直接加应用服务器故障隔离某个服务器宕机负载均衡自动摘除不影响整体服务无状态化应用服务器不保存状态外置存入等中间件每台机器地位平等优点支持高并发高可用单台宕机不影响整体可水平扩容支持滚动发布缺点引入负载均衡架构复杂度上升分布式日志追踪复杂需要解决共享用户登录后服务器在内存创建对象记录用户登录状态通过 关联用户。在集群架构中用户通过服务器A登录A创建session对象用户下一次请求被负载均衡到服务器BB找不到session则认为用户未登录解决粘连同一个用户负载均衡到同一个服务器复制每个服务器拷贝集中式session将所有数据存储到独立中间件应用服务器从读写session方案将用户信息加密后存在中由客户端携带服务器收到请求解析四、读写分离主从分离架构概念读写分离架构是在应用服务集群的基础上将数据库也拆分。一台主库负责写操作多台从库负责读操作主库和从库之间通过数据同步保持数据一致性。解决了随着用户流量的增长数据库的访问效率成为瓶颈分离读写请求中间件M等数据同步主库写数据写入 从库拉取 从库重放数据同步特征写操作走主库保证数据一致性读分散读操作分散到多个从库水平扩展读能力异步复制主从之间通常异步复制存在短暂数据延迟读扩展读压力大直接加从库优点读能力大幅提升水平扩展读能力读写互不干扰减少资源争抢从库用于备份报表查询不影响主库主库故障可将从库提升到主库缺点主库单点写能力无法扩展主从复制有延迟可能读到旧数据架构复杂度上升有路由延迟使用场景读请求高于写请求单库读性能成为瓶颈作为分库分表前的过渡方案五、冷热分离架构概念冷热分离架构是一种数据存储优化策略核心思想是将数据按访问频率分为热数据和冷数据热数据放在高性能存储冷数据放在廉价数据库大大降低数据库压力例如等缓存软件特征分层存储不同访问频率的数据使用不同成本的存储介质数据流转数据随着时间或访问频率的变化从热温冷逐步迁移透明访问应用层通过路由规则统一访问不需要关心数据具体存在哪里优点降低存储成本热数据表体积小查询效率提升减少热库磁盘占用和索引压力缺点架构复杂度上升需要维护数据迁移数据迁移需要保证数据一致性冷热数据联合查询较为复杂使用场景电商订单系统近个月订单存历史订单归档或OSS用户行为数据实时行为存历史行为存数据湖不管什么格式、来源的数据先扔进去用的时候在捞出来加工六、垂直分库概念垂直分库是数据库拆分的一种策略核心是按业务模块将不同业务的表拆分到不同的数据库实例中。由于单库存在不同线程的资源争抢所有业务表混在一起使索引优化互相影响所以引入分库分表说明使用进行分库分表后实际上构建了一个分布式系统虽然对外看起来是库但内部是由中间件与多个单机数据库共同协作完成。这种将大任务拆解分发到多节点并行计算的模式是典型的MMP思想人多力量大MPP架构数据库G 等特征业务隔离关联度低的业务拆分到独立数据库同一业务的表保留在同一库中资源独立每个库拥有独立的CPU、内存、磁盘、连接池互不干扰数据内聚统一业务域的表间关联订单表和订单项表可通过主键内连接优点业务解耦各库独立维护、优化故障隔离资源隔离按业务独立扩展按需分配资源与微服务架构契合每个服务一个库缺点跨库无法直接运维成本高架构复杂分布式事务处理复杂例如订单创建库存扣减无法解决单表数据量过大的问题七、微服务架构概念微服务架构是将单一应用程序拆分未多个小型自治服务的软件设计方式自行调用工具完成特定业务能力构建可独立开发扩展。每个微服务之间对数据的之间访问进行隔离例如Spring Cloud、特征服务独立性每个服务有自己的代码库数据库和技术栈轻量级通信服务间通过标准化API交互提升相应速度弹性强根据业务负载动态调整单个服务的实例数量资源利用率高优点支持快速迭代单个服务可独立发布上线周期短适配高并发热点服务可独立扩容缺点运维复杂度高测试调试困难测试要模拟多服务交互环境搭建成本高八、容器编排架构概念容器编排架构解决如何自动部署、调度、扩缩容、故障恢复容器本质是容器集群的管家特征自动化部署和滚动更新和回滚根据CPU、内存等指标自动调整实例数量