分布式理论之问题
一、访问一个网站的全过程
DNS
先尝试从host文件读取域名对应的IP地址,如果找到,则完毕;如果为找找到,则使用DNS进行查找
TCP
三次握手建立连接
负载均衡服务器
Nginx?
应用服务器
Tomcat?
浏览器渲染
缓存?
二、大型网站架构演进
1、单机
2、单机负载告警,数据库与应用分离
3、应用服务器负载告警,让应用服务器走向集群
(1)引入负载均衡设备
(2)分布式Session
Session Sticky 回话粘滞
这个方案本身非常简单,对于web服务器来说,该方案和单机情况是一样的。这个方案可以让同样的Session的请求每次到发送到同一个服务器处理,非常有利于针对Session进行服务器端本地的缓存,不过也带啦了如下几个问题
(1)如果一台Web服务器宕机或者重启,这台机器的数据就会全部丢失,用户还得重新登录
(2)会话标识是应用层的信息,那么负载均衡器要将同一个会话的请求都保存到同一个Web服务器上的话,就需要进行应用层(第七层)的解析,这个开销比第四层大
(3)负载均衡器为了一个有状态的节点,要将会话保存到具体的Web服务器的映射,和无状态节点相比,内存消耗会更大,容灾方面会更麻烦
Session Replication 会话复制
这个Session Replication方案。这个方案靠应用容器来完成Session的赋值,从而使得应用解决Session问题,应用本身并不关心这个事情
(1)同步Session数据照成了网络开销,机器越多,开销约到
(2)每台Web服务器都要保存所有的Session数据,如果整个集群的Session数很多(很多人同时访问网站)的话,每台机器用于保存Session数据的内容占用会很严重
Session 集中存储
使用集中存储Session数据的地方来读取。这样的方式保证了不同Web服务器读取到的Session数据都是一样的。而存储Session数据的具体方法,可以是数据库,也可以使用其他分布式系统。这个解决了Session 复制方案中的内存问题,而对于网络带宽,这个方案比Session Replication摇号
(1)读写Session数据引入了网络操作问题,如时延、不稳定性
(2)如果集中存储Session的机器宕机或者集群有问题,会影响我们的Web运用
Cookie Based
(1)Cookie 长度的限制。我们知道Cookie是有长度限制的,而这也会限制Seesion数据的长度
(2)安全性。Session数据本来是服务端数据,如果写入客户端,因此存在安全问题。我们可以对写入的Session进行数据加密,对于安全,物理上不能接触才是最安全的
(3)带宽消耗。 这里不是web服务器之间的带宽消耗,指的是我们的数据中心整体外部带宽消耗
(4)性能影响。每次HTTP请求和响应都带有Session数据,对于Web服务器来说在同样的处理情况下,响应的结果输出越少,支持并发越多
4、数据库读压力变大,读写分离
数据库主从复制
(1)数据复制问题
(2)应用对数据源的选择问题
对于我们的应用我们需要根据不同的情况选择不同的数据源数据库。写操作走主数据库,事务中的读也要走主数据库,而我们也要考虑备份数据库相对于主数据库的延迟。
搜索引擎
总的来说,搜索引擎的技术为了解决站内搜索时,某些场景下读的问题,提供了更好的查询效率
分布式缓存
页面缓存 : Apache 或 Nginx
弥补关系数据库的不足,引入分布式存储系统
常见的分布式存储系统有分布式文件系统、分布式Key-Value系统和分布式数据库。文件系统为例子:分布式文件系统就是在分布环境中由多个节点组成的功能与单机文件系统一样的文件系统,它是弱格式的,内容格式需要用户自己组织,而Key-Value系统相对分布式文件系统会更加格式一些,分布式数据库就是最格式的了。
分布式存储系统自身起到了存储的作用,也就是提供数据库的读写支持。相对于读写分离的读“源”,分布式存储系统更多的是直接代替主库。
分布式存储系统通过集群提供了一个高容量、高并发访问、数据冗余容灾的致辞
通过分布式文件系统解决大文件和小文件的存储问题。
通过分布式Key-Value系统提高半结构化的致辞
分布式文件存储系统能更好的解决大型网站中的大数据量和高并发访问问题
数据库又遇到瓶颈,分库分表
(1)垂直拆分 -----------分库
需要解决表关联和分布式事务问题
(2)水平拆分----------分表
数据库水平拆分和读写分离的区别,读写分离是为了解决读压力大的问题
水平拆分后给业务带来的影响:
(1)解决SQL路由的 问题,因为现在用户的信息数据分在了两个数据库中,需要进行数据库操作时需要了解操作的数据在哪里
(2)自增主键不能简单使用了。不同的数据库也不能使用一些数据库限制保证主键不重复了
应用拆分与服务化
(1)应用拆分
根据业务特性把应用拆分开,比如一个应用的业务功能为三大部分:交易、商品和用户。我们可以把原来的一个应用拆分成分别以交易和商品为主的两个应用。
(2)服务拆分
业务之间的访问不仅仅是单机内部的方法调用了,还引入了远程的服务器调用。其次共享的代码不再是散落在不同的应用中了,这些实现被放在了各个服务中心,数据库的连接也发生了一些变化,我们把与数据的交互工作都放到了服务中心,让前端的Web应用更加注重与浏览器的交互而不需要关心太多的业务逻辑问题 。服务化缩小了不稳定的风险
消息中间件(异步 + 解耦)
消息中间件就是分布式系统中完成消息的发送和接收的基础软件
应用A和应用B都和消息中间件打交道,两个应用不直接联系。这样就达到了解耦,中间消息的操作都是异步进行的
CDN
内容分发网络。作用是把用户需要的内容分发到离用户进的地方。整个CDN系统分为CDN源站和CDN节点,CDN源站提供CDN节点使用的数据源头
CDN其实就是一种网络缓存技术,能够把一些相对稳定的资源放到里距离最终用户较近的机房
大型网站架构模式
分层
待更新
本文地址:https://blog.csdn.net/hukehukehukehuke/article/details/107374378
上一篇: 荣耀Magic 3设计图曝光:神似华为Mate 40 Pro
下一篇: MVVM WPF 绑定颜色