第二十三期:大规模网站架构?你是否熟悉?

大规模网站架构

PHP

facebook,yahoo

Java

taobao,163

Python

google

.NET

MySpace

语言不是可伸缩性的关键,架构才是关键

网站架构的目标

高可用性(High Availability)

可伸缩性(Scalability)

高性能(High Performance)

事务

传统的事务(ACID)

原子性(Atomicity)

一致性(Consistency)

隔离性(Isolation)

持久性(Durability)

CAP原则

Consistency 一致性

Availability 可用性

Partition Tolerance分区耐受性

在任意时刻,只有两项能同时成立

不要浪费精力可能突破上面限制

新的事务策略-BASE策略

•避免分布式事务

基本可用(Basically Available)

软状态(Soft state)

选择最终一致(Eventually consistent

数据库读写分离

MySQL Proxy(数据库读写分离)

load balancing

failover

query analysis

R/W Splitting

数据库Shard

•水平分区

•垂直分区

Sharding vs Partition

 

Sharding

Partition

存储依赖

可跨越DB

可跨越物理机器

可跨越表空间,不同的物理属性

不能跨DB存储

存储方式

分布式

集中式

扩展性

Scale Out(横向扩展,增加便宜设备)

Scale Up(升级设备)

可用性

无单点

存在单点(DB数据本身)

价格

低廉

适中,甚至昂贵

应用场景

web 2.0网站

多数传统应用

垂直分区

水平分区

 

DAL(数据访问层)

对应用透明的使用数据库的水平分区及垂直分区

DAL Proxy(实现1)

DAL API(实现2)

两种实现方式

•独立的DAL Proxy服务器

MySQL: Amoeba

PostgreSQL: PL/Proxy (Skype)

DAL API

Java: Hibernate Shard,Ibatis Shard,HiveDB

Python: Pyshards

shard改变数据库设计

尽量避免join

数据冗余/反范式

数据冗余 for shard

shard before

comment(id,blog_id,content)

shard after

comment(id,blog_id,content,user_id)

数据分区策略

水平分区

2 * N(如定单,购买者与网店各一份)

N / n (按日期或ID范围分区)

hash(N) % n( 按hash分)

查找表

垂直分区

–按功能分(论坛,博客)

消息队列(MessageQueue)

程序解耦

隔离

消息的可靠传输(物理存储中转消息)

消息总线

应用场景

耗时操作

邮件发送/短消息发送

日志

程序解耦(A挂了,但B继续可以使用)

MQ产品

开源

RabbitMQ(Erlang)

ActiveMQ(JAVA)

商业

IBM MQ

WebLogic MQ

回顾CAP及BASE

负载均衡

DNS负载均衡

反向代理负载均衡

直接路由

......

failover

DNS负载均衡

简单

缺少灵活性(DNS缓存)

反向代理负载均衡

nginx

HAProxy

apache httpd

LVS(网络第四层工作)

F5(硬件,四层/七层)

Linux Virtual Server(LVS)

网络地址转换(NAT):VS-NAT

IP隧道方式:VS-TUN

直接路由方式:VS-DR

其它工作模式

•Virtual Server via NAT(VS-NAT)

用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。

•Virtual Server via IP Tunneling (VS-TUN)

用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。 集群所能提供的服务是基于TCP/IP的Web服务、Mail服务、News服务、DNS服务、Proxy服务器等等.

•Virtual Server via Direct Routing(VS-DR)

用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。

高可用性

使用双机热备

故障时切换至备份机

工具(Linux-HA)

heartbeat

缓存

让数据更靠近用户

本地缓存

节点有状态,状态更新需要同步至其它服务器

可以使用组播方式通知数据改变

需要通知的服务器过多会存在性能问题

比远程缓存更高性能

慎用,不具备可伸缩性

Share Nothing Architecture

•无共享架构

数据缓存(memchched)

动态内容缓存

浏览器缓存

分布式memchched

基本满足大部分性能要求

动态内容缓存

页面片段缓存

静态化内容

反向代理缓存

squid 巨无霸

Varnish

静态资源分离

img,js,css使用单独的服务器处理请求

现实网站图片存储分析

图片服务器的域名不同

多台机器保存相同的图片(img3,img2子域名)

同一页面不同图片随机生成不同的子域名进行负载均衡

CDN ?

Content Delivery Network

浏览器优化

节省带宽:js,css的静态gzip压缩

http header: Content-Encoding: gzip

浏览器缓存

http header: Etag,Last-Modified

小图片,css,js合并

js混淆工具

JSA(推荐)

js压缩

多个js合并为一个

可以与ant集成

Session

•cookie(强烈推荐)

集中式session memcached(推荐)

session复制(过多服务器复制存在性能问题)

分布式文件系统

MogileFS

Automatic file replication

No single point of failure

自动化

总结

CAP原则

BASE策略

异步(MessageQueue)

•数据库

  数据的水平切分及垂直切分

  数据库读写分离

  避免分布式事务

  反范式的数据库设计

•负载均衡

  DNS负载均衡

  反向代理负载均衡

  LVS

缓存

  数据库缓存

  服务器缓存/页面缓存/数据缓存/静态化

  反向代理缓存

Session/Share Nothing Architecture架构

浏览器优化

  浏览器缓存/CDN/小图片合并

分布式文件系统(MogileFS)


阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380691

阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380882

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Leedcode][JAVA][第98题][验证二叉搜索树]

【问题描述】[第98题][验证二叉搜索树][中等] 给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜…

图解CPU?

了解CPU 芯片组 CPU微观图 Cache层次结构 Cache-续 Xeon 5600系列CPU CPU内部各部件访问速度 False sharing问题 Cache lines Intel Sandy Bridge来了 CPU拓扑结构图 Cache相关硬件事件

c语言获取dll文件路径,C语言URLDownloadToFile获取文件下载进度

URLDownloadToFile是urlmon.dll提供的网络操作API,可以用于从指定的URL下载文件到本地,在C中通过类很容易实现下载进度的获取,今天需要在C语言中使用到这个函数,这里记录一下使用方法。该函数的定义如下所示。HRESULT URLDownload…

HOG特征人体检测

1. 引言 HOG(Histogram of Oriented Gradient),即方向梯度直方图。它通过计算和统计局部区域的梯度方向直方图来构成特征,一般与SVM分类器结合用于目标的图像识别。由于人体姿势和外表的多变,在图像中检测人体是一项具…

[Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]

【问题描述】[Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。【解答思路】 1. 动态规划 超时 第 1 步&…

大型动态应用系统平台系统架构?这些大家并不陌生

大型动态应用系统平台系统架构[多图] 动态应用,是相对于网站静态内容而言,是指以c/c、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式…

c语言round函数能四舍五入吗,怎么利用round函数实现四舍五入?

Excel强大的制表功能让很多人都对它无比依赖,它也早已成为日常必备的工具。我们在办公室工作时,经常会遇到要用 Excel处理数字的情况,需要对其进行四舍五入。那么实现这一操作,我们需要使用哪些Excel函数呢?今日小编就…

InnoDB 事务/锁/多版本分析?你了解多少?

目录 • InnoDB事务 – 事务结构/功能 – XA事务/Group Commit – mini-transaction• InnoDB锁 – 锁结构/类型/功能 – 锁等待/死锁检测 – 自增序列锁(autoinc lock) – 半一致读(semi-consistent read) – 隐式锁(implicit lock) • InnoDB多版本 – ReadView –…

[剑指offer]面试题第[42]题[Leedcode][JAVA][第53题][最大子序和][动态规划][贪心][分治]

【问题描述】[第53题][最大子序和][中等] 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大…

[Leedcode][JAVA][第983题][最低票价][动态规划]

【问题描述】[第983题][最低票价][中等] 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式:一张为…

[Leedcode][JAVA][第572题][另一个树的子树]

【问题描述】 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1: 给定的树 s:3/ \4 5/ \1 2 给定的树 t:4 / \1 2 返回…

LVS在淘宝环境中的应用

目录 1. LVS-简介 2. LVS-问题 3. LVS-fullnat 4. LVS-synproxy 5. LVS-cluster 6. LVS-performance 7. LVS-todo list 疑问引入:用户访问淘宝,访问哪台apache服务器 传统做法:DNS服务 四个问题 Q1:apache2 down,remove生…

android 开发艾特功能,Android Binder

Binder 是一种进程间通信机制,基于开源的 OpenBinder 实现;OpenBinder 起初由 Be Inc. 开发,后由 Plam Inc. 接手。从字面上来解释 Binder 有胶水、粘合剂的意思,顾名思义就是粘和不同的进程,使之实现通信。为什么 Act…

C# Json转对象

第一步&#xff0c;项目添加negut的搜索Newtonsoft.Json&#xff0c;安装第一个&#xff1a;如图所示&#xff1a; 安装以后&#xff0c;自动引用。 private ObservableCollection<Traffic> m_listcls; var json JsonConvert.DeserializeObject<List<Traffic>&…

Dubbo开源

什么是Dubbo? 分布式服务框架 – 远程服务调用 • Ne/y/Mina/Grizzly • RMI/Hessian/WebService – 服务动态发现 • Zookeeper/Redis – 集群软负载均衡 • Random/RoundRobin – 集群失败容错 • Failove…

[Leedcode][JAVA][第470题][Ran7()实现Rand10()]

【问题描述】[Leedcode][JAVA][第470题][Ran7()实现Rand10()] 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数&#xff0c;试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法。示例 1:输入: 1 输出: [7] 示例 2:输入: 2 输出: …

推荐系统?淘宝?

目录 • 推荐系统概念 • 淘宝的数据 • 淘宝推荐系统应用场景 • 淘宝推荐系统核心算法 • 淘宝推荐系统的设计 • 推荐系统概念 • 淘宝的数据 • 淘宝推荐系统应用场景 • 淘宝推荐系统核心算法 • 淘宝推荐系统的设计 推荐系统定义 维基百科&#xff1a; form…

android studio 无法输入中文,Android Studio 升级到3.0后输入法中文状态下无法选词的终极解决方案...

AndroidStudio终于出3.0正式版了&#xff0c;内置了kotlin(虽然我安了插件一直能用)。一直忍着没敢下rc版的好奇猫&#xff0c;总算装了正式版。当然&#xff0c;伴随每次大版本更新&#xff0c;总有一些恼人的后遗症&#xff0c;其中以gradle问题最多。AS3.0要求gradle版本在3…

java学习(174):constructor类反射编程

//class反射编程 //定义一个学生类 public class test124 {public String name;protected int age;double height;private double money;public void setName(String name) {this.name name;}public String getName() {return name;}public int getAge() {return age;}public …

[国密算法]一文了解国密算法

国密算法概述1 SM1对称密码2 SM2椭圆曲线公钥密码算法3 SM3杂凑算法4 SM4对称算法5 SM7对称密码6 SM9标识密码算法7 ZUC祖冲之算法总结算法名称算法类别应用领域特点SM1对称密码算法芯片分组长度、密钥长度均为 128 比特SM2公钥密码算法加密ECC椭圆曲线密码机制256位 相比RSA&a…