如何拿qq空间做网站,创造力网站设计,1 建设网站目的是什么,做网站用sql和mysql目录 一、常见概念 1.1 基本概念 2.2 评价指标#xff08;Metric#xff09; 二、架构演进 2.1 单机架构 2.2 应用数据分离架构 2.3 应用服务集群架构 2.4 读写分离/主从分离架构 2.5 引入缓存 ⸺ 冷热分离架构 2.6 数据库分库分表 2.7 业务拆分 ⸺ 引入微服务 redis学习Metric 二、架构演进 2.1 单机架构 2.2 应用数据分离架构 2.3 应用服务集群架构 2.4 读写分离/主从分离架构 2.5 引入缓存 ⸺ 冷热分离架构 2.6 数据库分库分表 2.7 业务拆分 ⸺ 引入微服务 redis学习 一、常见概念
在正式引入架构演进之前为避免读者对架构中的概念完全不了解导致低效沟通优先对其中一些比
较重要的概念做前置介绍
1.1 基本概念
应用Application/ 系统System
为了完成一整套服务的一个程序或者一组相互配合的程序群。生活例子类比为了完成一项任务而
搭建的由一个人或者一群相互配的人组成的团队。
模块Module/ 组件Component
当应用较复杂时为了分离职责将其中具有清晰职责的、内聚性强的部分抽象出概念便于理
解。生活例子类比军队中为了进行某据点的攻克将人员分为突击小组、爆破小组、掩护小组、通
信小组等。
分布式Distributed
系统中的多个模块被部署于不同服务器之上即可以将该系统称为分布式系统。如 Web 服务器与数据
库分别工作在不同的服务器上或者多台 Web 服务器被分别部署在不同服务器上。生活例子类比为
了更好的满足现实需要一个在同一个办公场地的工作小组被分散到多个城市的不同工作场地中进行
远程配合工作完成目标。跨主机之间的模块之间的通信基本要借助网络支撑完成。
集群Cluster
被部署于多台服务器上的、为了实现特定目标的一个/组特定的组件整个整体被称为集群。比如多个
MySQL 工作在不同服务器上共同提供数据库服务目标可以被称为一组数据库集群。生活例子类
比为了解决军队攻克防守坚固的大城市的作战目标指挥部将大批炮兵部队集中起来形成一个炮兵
打击集群。
分布式 vs 集群。通常不用太严格区分两者的细微概念细究的话分布式强调的是物理形态即工作
在不同服务器上并且通过网络通信配合完成任务而集群更在意逻辑形态即是否为了完成特定服务
目标。
主Master/ 从Slave
集群中通常有一个程序需要承担更多的职责被称为主其他承担附属职责的被称为从。比如
MySQL 集群中只有其中一台服务器上数据库允许进行数据的写入增/删/改其他数据库的数据
修改全部要从这台数据库同步而来则把那台数据库称为主库其他数据库称为从库。
中间件Middleware
一类提供不同应用程序用于相互通信的软件即处于不同技术、工具和数据库之间的桥梁。生活例子
类比一家饭店开始时会每天去市场挑选买菜但随着饭店业务量变大成立一个采购部由采购
部专职于采买业务称为厨房和菜市场之间的桥梁。
2.2 评价指标Metric
可用性Availability
考察单位时间段内系统可以正常提供服务的概率/期望。例如年化系统可用性 系统正常提供服务
时长 / 一年总时长。这里暗含着一个指标即如何评价系统提供无法是否正常我们就不深入了。平时
我们常说的 4 个 9 即系统可以提供99.99% 的可用性5 个 9 是 99.999% 的可用性以此类推。我
们平时只是用高可用High Availability HA这个非量化目标简要表达我们系统的追求。
响应时长Response Time RT
指用户完成输入到系统给出用户反应的时长。例如点外卖业务的响应时长 拿到外卖的时刻 - 完成点单
的时刻。通常我们需要衡量的是最长响应时长、平均响应时长和中位数响应时长。这个指标原则上是
越小越好但很多情况下由于实现的限制需要根据实际情况具体判断
吞吐Throughputvs 并发Concurrent
吞吐考察单位时间段内系统可以成功处理的请求的数量。并发指系统同一时刻支持的请求最高量。
例如一条辆车道高速公路一分钟可以通过 20 辆车则并发是 2一分钟的吞吐量是 20。实践中
并发量往往无法直接获取很多时候都是用极短的时间段比如 1 秒的吞吐量做代替。我们平时用
高并发Hight Concurrnet这个非量化目标简要表达系统的追求。
二、架构演进
2.1 单机架构
初期我们需要利用我们精干的技术团队快速将业务系统投入市场进行检验并且可以迅速响应变
化要求。但好在前期用户访问量很少没有对我们的性能、安全等提出很高的要求而且系统架构简
单无需专业的运维团队所以选择单机架构是合适的。 用户在浏览器中输入www.bit.com首先经过 DNS 服务将域名解析成 IP 地址 10.102.41.1随后浏览器访问该 IP 对应的应用服务。
相关软件
Web 服务器软件Tomcat、Netty、Nginx、Apache 等
数据库软件MySQL、Oracle、PostgreSQL、SQL Server 等
简单来说就是将一个项目的应用以及数据库服务部署在一台主机上并且这台主机完全可以满足用户请求
2.2 应用数据分离架构
随着系统的上线我们不出意外地获得了成功。市场上出现了一批忠实于我们的用户使得系统的访
问量逐步上升逐渐逼近了硬件资源的极限同时团队也在此期间积累了对业务流程的一批经验。面对当前的性能压力我们需要未雨绸缪去进行系统重构、架构挑战以提升系统的承载能力。但由于
预算仍然很紧张我们选择了将应用和数据分离的做法可以最小代价的提升系统的承载能力。 和之前架构的主要区别在于将数据库服务独立部署在同一个数据中心的其他服务器上应用服务通过
网络访问数据。
简单来说就是将一个项目的应用以及数据库服务分别部署在不同的主机上并且被部署的主机根据部署的应用配置不同的资源比如部署应用服务的主机cpu性能好部署数据库服务的主机存储容量多
2.3 应用服务集群架构
我们的系统受到了用户的欢迎并且出现了爆款单台应用服务器已经无法满足需求了。我们的单机
应用服务器首先遇到了瓶颈摆在我们技术团队面前的有两种方案大家针对方案的优劣展示了热烈
的讨论
垂直扩展/纵向扩展 Scale Up。通过购买性能更优、价格更高的应用服务器来应对更多的流量。这种方案的优势在于完全不需要对系统软件做任何的调整但劣势也很明显硬件性能和价格的增长关系是非线性的意味着选择性能 2 倍的硬件可能需要花费超过 4 倍的价格其次硬件性能提升是有明显上限的。水平扩展/横向扩展 Scale Out。通过调整软件架构增加应用层硬件将用户流量分担到不同的应用层服务器上来提升系统的承载能力。这种方案的优势在于成本相对较低并且提升的上限空间也很大。但劣势是带给系统更多的复杂性需要技术团队有更丰富的经验。
经过团队的学习、调研和讨论最终选择了水平扩展的方案来解决该问题但这需要引入一个新的
组件 ⸺ 负载均衡为了解决用户流量向哪台应用服务器分发的问题需要一个专门的系统组件做流
量分发。实际中负载均衡不仅仅指的是工作在应用层的甚至可能是其他的网络层之中。同时流量调
度算法也有很多种这里简单介绍几种较为常见的
Round-Robin 轮询算法。即非常公平地将请求依次分给不同的应用服务器。Weight-Round-Robin 轮询算法。为不同的服务器比如性能不同赋予不同的权weight能者多劳。一致哈希散列算法。通过计算用户的特征值比如 IP 地址得到哈希值根据哈希结果做分发优点是确保来自相同用户的请求总是被分给指定的服务器。也就是我们平时遇到的专项客户经理服务。 相关软件
负载均衡软件Nginx、HAProxy、LVS、F5 等
2.4 读写分离/主从分离架构
上一节提到我们把用户的请求通过负载均衡分发到不同的应用服务器之后可以并行处理了并且
可以随着业务的增长可以动态扩张服务器的数量来缓解压力。但是现在的架构里无论扩展多少台
服务器这些请求最终都会从数据库读写数据到一定程度之后数据的压力称为系统承载能力的瓶
颈点。我们可以像扩展应用服务器一样扩展数据库服务器么答案是否定的因为数据库服务有其特
殊性如果将数据分散到各台服务器之后数据的一致性将无法得到保障。所谓数据的一致性此处
是指针对同一个系统无论何时何地我们都应该看到一个始终维持统一的数据。想象一下银行
管理的账户金额如果收到一笔转账之后一份数据库的数据修改了但另外的数据库没有修改则
用户得到的存款金额将是错误的。
我们采用的解决办法是这样的保留一个主要的数据库作为写入数据库其他的数据库作为从属数据
库。从库的所有数据全部来自主库的数据经过同步后从库可以维护着与主库一致的数据。然后为
了分担数据库的压力我们可以将写数据请求全部交给主库处理但读请求分散到各个从库中。由于
大部分的系统中读写请求都是不成比例的例如 100 次读 1 次写所以只要将读请求由各个从库分
担之后数据库的压力就没有那么大了。当然这个过程不是无代价的主库到从库的数据同步其实是
由时间成本的但这个问题我们暂时不做进一步探讨。 应用中需要对读写请求做分离处理所以可以利用一些数据库中间件将请求分离的职责托管出去。
相关软件
MyCat、TDDL、Amoeba、Cobar 等类似数据库中间件等
2.5 引入缓存 ⸺ 冷热分离架构
随着访问量继续增加发现业务中一些数据的读取频率远大于其他数据的读取频率。我们把这部分数
据称为热点数据与之相对应的是冷数据。针对热数据为了提升其读取的响应时间可以增加本地
缓存并在外部增加分布式缓存缓存热门商品信息或热门商品的 html 页面等。通过缓存能把绝大多
数请求在读写数据库前拦截掉大大降低数据库压力。其中涉及的技术包括使用memcached作为本
地缓存使用 Redis 作为分布式缓存还会涉及缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集
中失效等问题。 相关软件
Memcached、Redis 等缓存软件
2.6 数据库分库分表 随着业务的数据量增大大量的数据存储在同一个库中已经显得有些力不从心了所以可以按照业
务将数据分别存储。比如针对评论数据可以按照商品ID进行hash路由到对应的表中存储针对
支付记录可以按小时创建表每个小时表继续拆分为小表使用用户ID或记录编号来路由数据。只
要实时操作的表数据量足够小请求能够足够均匀的分发到多台服务器上的小表那数据库就能通过
水平扩展的方式来提高性能。其中前面提到的Mycat也支持在大表拆分为小表情况下的访问控制。这种
做法显著的增加了数据库运维的难度对DBA的要求较高。数据库设计到这种结构时已经可以称为
分布式数据库但是这只是一个逻辑的数据库整体数据库里不同的组成部分是由不同的组件单独来
实现的如分库分表的管理和请求分发由Mycat实现SQL的解析由单机的数据库实现读写分离可
能由网关和消息队列来实现查询结果的汇总可能由数据库接口层来实现等等这种架构其实是MPP
大规模并行处理架构的一类实现。 相关软件
Greenplum、TiDB、Postgresql XC、HAWQ等商用的如南大通用的GBase、睿帆科技的雪球DB、
华为的LibrA 等
2.7 业务拆分 ⸺ 引入微服务
随着人员增加业务发展我们将业务分给不同的开发团队去维护每个团队独立实现自己的微服
务然后互相之间对数据的直接访问进行隔离可以利用 Gateway、消息总线等技术实现相互之
间的调用关联。甚至可以把一些类似用户管理、安全管理、数据采集等业务提成公共服务。 redis学习打卡