网站的伸缩性架构

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: <div class="markdown_views"><p>不用改软硬件设计,只需要增加或者减少服务器的数量就能够扩大或减少网站的处理能力</p><h2 id="网站伸缩性设计">网站伸缩性设计</h2><h3 id="不同功能进行物理分离实现伸缩">不同功能进行物理分离实现伸缩</h3><p>纵向分离,分层分离。 通常是网站-复用业务-基础技术服务-

不用改软硬件设计,只需要增加或者减少服务器的数量就能够扩大或减少网站的处理能力

网站伸缩性设计

不同功能进行物理分离实现伸缩

纵向分离,分层分离。 通常是网站-复用业务-基础技术服务-数据库
横向分离,按业务分。买家,卖家,论坛,详情,列表页

单一功能通过集群实现伸缩

一头牛拉不动就让两头来
分为应用服务器集群,缓存数据服务器集群,和存储数据服务器集群。

应用服务器集群的伸缩性设计

负载均衡, 能够识别新加入的服务器,对请求进行转发。

HTTP重定向负载均衡

这里写图片描述

DNS服务器解析到重定向服务器。重定向服务器通过一定的算法来算出真是服务器通过302返给浏览器,浏览器重新请求道真是服务器。
缺点:两次定位,重定向服务器会成为瓶颈,可能会被搜索引擎判断为作弊

DNS域名解析负载均衡

DNS服务器在解析ip的时候就做一次负载均衡。缺点因为是多级解析可能有缓存导致发请求到已经下线的机器上。
比较常用,会作为第一道负载均衡

反向代理负载均衡

反向代理服务器除了做缓存外还能做负载均衡。 要配置双网卡,内网卡可以用比较好的,提高性能。其是对HTTP协议的转发,又叫应用层负载
缺点是其本身可能成为瓶颈。

IP负责均衡

这里写图片描述
在服务器系统内核获取数据包,修改数据的目的ip地址,得到返回之后修改源地址。 这样在内核层面比反向代理的效率要高,但是对于视频等网站带宽会成为瓶颈。最好是能够让每个服务器自己发返回请求给浏览器。

数据链路层负载均衡

这里写图片描述
三角传输
不修改数据的目的和源ip,而是修改mac地址。
响应数据不通过负载均衡服务器,而是直接返给浏览器。 开源产品叫做LVS。

负载均衡算法

  • 轮询 依次发送
  • 加权轮询 根据硬件性能加权。使性能更好的机器获得更多的请求
  • 随机 随机本身就很均衡
  • 最少连接 记录服务器正在处理的连接数,将新到的分到连接最少的, 这个最符合负载均衡的定义
  • 源地址散列 将一个ip的请求总是发往同一个服务器

分布式缓存集群的伸缩性设计

因为各个集群节点的数据不同,所以不能用简单的负载均衡实现,要做到增删阶段对原有数据的影响最小。

Memcached分布式缓存集群的访问模型

这里写图片描述
使用key访问api,api通过路由算法从服务器列表中找到对应的服务器,通过通信模块访问服务器

伸缩性

余数hash, 但是如果增删阶段会带来服务命中,会需要大量时间进行数据迁移。
一致性hash算法:
这里写图片描述
构建一致性hash环, 服务器节点放在环上,根据key算起hash值,然后顺时针查找最近的服务器节点。
新增节点是,加到换上,比如加到key0和key3之间。 这个时候只有key3会因为新加入的节点导致了无法命中,是比较少的一部分。
具体实现可以使用二叉树。
有一个问题就是有可能不平衡, 解决方式:计算机的任何问题都可以通过增加一个虚拟层来解决
将一个真实服务器映射为hash环上的多个虚拟阶段,这样新增的时候就会比较均衡的影响比较多的节点。经验是150比较合适

数据存储服务器集群的伸缩性设计

因为对可用性持久性有要求,所以跟缓存的设计不一致。

关系型数据库集群的伸缩性设计

这里写图片描述
主从
读写分离
分库
分片

Cobar

用于集群数据分片,是一个数据库的访问代理
这里写图片描述

这里写图片描述
如图Cobar本身可以做集群,这个因为无状态可以使比较简单的负载均衡
mysql做集群。需要考虑一致性hash算法。新增节点是要考虑数据的一致性,可访问性,迁移过程中服务器宕机时可用性等问题。
实践方案,cobar用mysql的数据同步功能进行数据迁移。以Schema(mysql就是对应到库名)为单位。每个mysql实例创建多个Schema。扩展式从每个mysql中迁移一部分到新的机器。然后增加路由,删除原schemal
这样做不能join,不join的时候访问速度跟不用cobar差不多。
只能利用事务补偿机制来代替事务。

nosql数据库的伸缩性设计

关系型数据库的问题:糟糕的海量数据处理能力及僵硬的设计约束
nosql强调高可用和可伸缩性。 忽略SQL和ACID
这里写图片描述

这里写图片描述

HRegionServer是一个物理机,可以启动多个HRegion. HRegion是一个数据单元,里面保存多组key,value.
如果HRegion过多会分裂,并重新分配到HRegionServer中, 并且记录在HMaster中
HRegion会把数据写入到HFile格式的文件中,这些文件使用HDFS分布式文件系统
使用多个HMaster, 使用zookeeper做分布式一致性选举找到HMaster.

相关文章
|
7月前
|
负载均衡 监控 Dubbo
Java微服务架构设计与实践:构建可伸缩的分布式系统
【4月更文挑战第2天】微服务架构响应现代业务需求,通过拆分大型应用为独立服务实现模块化和可扩展性。Java中的Spring Boot和Dubbo等框架支持服务注册、负载均衡等功能。遵循单一职责、自治性和面向接口原则,每个服务专注特定逻辑,独立部署运行。实际项目中,如电商系统,服务按功能拆分,提升可维护性和扩展性。还需考虑服务通信、数据一致性和监控等复杂话题。Java微服务架构助力构建高效、灵活的应用,应对未来挑战。
83 0
Java微服务架构设计与实践:构建可伸缩的分布式系统
|
2月前
|
运维 监控 Serverless
利用Serverless架构优化成本和可伸缩性
【10月更文挑战第13天】Serverless架构让开发者无需管理服务器即可构建和运行应用,实现成本优化与自动扩展。本文介绍其工作原理、核心优势及实施步骤,探讨在Web应用后端、数据处理等领域的应用,并分享实战技巧。
|
4月前
|
监控 Java 开发者
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流。本文探讨Java微服务架构的设计原则与实践。核心思想是将应用拆分为独立服务单元,增强模块化与扩展性。Java开发者可利用Spring Boot等框架简化开发流程。设计时需遵循单一职责、自治性和面向接口编程的原则。以电商系统为例,将订单处理、商品管理和用户认证等拆分为独立服务,提高可维护性和容错能力。还需考虑服务间通信、数据一致性及监控等高级话题。掌握这些原则和工具,开发者能构建高效、可维护的微服务应用,更好地应对未来挑战。
88 1
|
4月前
|
机器学习/深度学习 架构师 数据库
20年老架构师,劝我多看看这几个网站
20年老架构师,劝我多看看这几个网站
|
5月前
|
弹性计算 负载均衡 关系型数据库
使用资源编排 ROS 轻松部署高可用架构网站——以 WordPress 为例
WordPress 是流行的开源 CMS,阿里云的资源编排服务 (ROS) 提供 IaC 功能,简化云上资源自动化部署,如创建 VPC、ECS、SLB、RDS 和弹性伸缩等。通过 ROS 模板(JSON/YAML),用户能快速部署高可用的 WordPress 环境,包括负载均衡、多可用区的 ECS 服务器集群、高可用 RDS 数据库等。模板定义了资源、参数和输出,用户在 ROS 控制台配置参数后一键部署。ROS 提升了部署效率,便于跨地域复制相同架构。
使用资源编排 ROS 轻松部署高可用架构网站——以 WordPress 为例
|
5月前
|
Prometheus 监控 Kubernetes
如何构建一个可伸缩的微服务架构?
如何构建一个可伸缩的微服务架构?
|
5月前
|
Prometheus 监控 Kubernetes
如何构建一个可伸缩的微服务架构?
如何构建一个可伸缩的微服务架构?
|
5月前
|
Cloud Native Java 微服务
使用Java构建可伸缩的云原生应用架构
使用Java构建可伸缩的云原生应用架构
|
7月前
|
消息中间件 存储 缓存
性能基础之大型网站技术架构模式
【2月更文挑战第15天】性能基础之大型网站技术架构模式
114 3
性能基础之大型网站技术架构模式
|
7月前
|
Unix Linux iOS开发
操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构
操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构
105 0