缓存服务器

网络协议 18 - CDN:家门口的小卖铺

旧巷老猫 提交于 2020-01-16 04:36:01
【前五篇】系列文章传送门: 网络协议 13 - HTTPS 协议:加密路上无尽头 网络协议 14 - 流媒体协议:要说爱你不容易 网络协议 15 - P2P 协议:小种子大学问 网络协议 16 - DNS 协议:网络世界的地址簿 网络协议 17 - HTTPDNS:私人定制的 DNS 服务     到现在为止,我们基本上已经了解了网络协议中的大部分常用协议,对于整个 HTTP 请求流程也较为熟悉了。从无到有后,我们就要考虑如何优化“有”这个过程,也就是我们常见的 请求优化 。而现在的技术栈中,CDN 是最常用的一种方式。     在了解 CDN 前,我们可以先了解下现代社会的物流配置。     例如我们去电商网站下单买东西,这个东西一定要从电商总部的中心仓库送过来吗?在电商刚兴起的时候,所有的配送都是从中心仓库发货,所以买家可能要很久才能收到货。但是后来电商网站的物流系统学聪明了,他们在全国各地建立了很多仓库,而不是只有总部的中心仓库才可以发货。     电商网站根据统计大概知道,北京、上海、广州、深圳、杭州等地,每天能够卖出去多少书籍、纸巾、包、电器等存放期较长的商品,就将这些商品分布存放在各地仓库中,客户一下单,就从临近的仓库发货,大大减少了运输时间,提高了用户体验。     同样的,互联网也借鉴了 “就近配送” 这个思路。 CDN 就近配送     全球有那么多的数据中心

mysql 配置内存

天大地大妈咪最大 提交于 2020-01-16 00:38:55
配置mysql 正确使用的内存量对于高性能是至关重要的,需要进行定制需求来定制内存的使用。 mysql内存消耗可以分为两类:可控制内存和不可控制内存。 无法控制 mysql 服务器运行 、 查询解析 、 以及内部管理所消耗的内存, 但是为特定目的而使用的内存有很多参数可以进行控制,比如关联使用join buffer、排序使用sort buffer等。 可控制 用好mysql可控制的内存则需要对 配置的含义 非常清楚 下面的步骤是来配置内存的 1、确定可以使用的内存上限 2、确定每个连接mysql 需要多少内存,例如排序缓冲和临时表 3、确认操作系统需要多少内存才够用。包括同一台机器上其他程序所使用的内存,比如定时任务等…… 4、把剩下的内存交给mysql 缓存,例如innodb的缓冲池,这样做很有意义 每个mysql 连接需要的内存 mysql保持一个连接(线程)只需要少量的内存,它还要求一个基本的内存来执行任何给定的查询。需要在高峰期大量的查询时预留好足够的内存,否则查询的执行可能会因为缺乏内存而执行效率不佳 或者执行失败。 知道mysql 在高峰期消耗多少内存是非常有用的,但是一些习惯的用法可能会导致意外的消耗了大量的内存,这对内存的使用量的预测变得比较困难,例如绑定变量和innodb数据字典。 当预测内存峰值消耗时,没必要假设一个最坏的情况,例如配置mysql

Java高并发

女生的网名这么多〃 提交于 2020-01-16 00:18:13
转载: 对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了。而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研究一下常见的并发和同步吧。 为了更好的理解并发和同步,我们需要先明白两个重要的概念: 同步和异步 1、同步和异步的区别和联系   所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到 返回的值或消息后才往下执行其它的命令。 异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回 值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。 同步在一定程度上可以看做是单线程,这个线程请求一个方法后就待这个方法给他回复,否则他不往下执行(死心眼)。 异步在一定程度上可以看做是多线程的(废话,一个线程怎么叫异步),请求一个方法后,就不管了,继续执行其他的方法。    同步就是一件事,一件事情一件事的做。 异步就是,做一件事情,不引响做其他事情。 例如:吃饭和说话,只能一件事一件事的来,因为只有一张嘴。 但吃饭和听音乐是异步的,因为,听音乐并不引响我们吃饭。 对于Java程序员而言,我们会经常听到同步关键字synchronized,假如这个同步的监视对象是类的话

.Net Core使用分布式缓存Redis:Lua脚本

时光怂恿深爱的人放手 提交于 2020-01-16 00:09:49
一、前言   运行环境window,redis版本3.2.1。此处暂不对Lua进行详细讲解,只从Redis的方面讲解。 二、Redis的Lua脚本   在Redis的2.6版本推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行,在Lua脚本中也可以调用大部分的Redis命令。使用脚本有以下三个好处:   (1) 减少网络开销:有些时候需要多次请求Redis获取处理数据,而使用脚本功能就可以只使用一次请求完成相同操作,减少了网络往返时延。   (2) 原子操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。也就是说在编写脚本的过程中无须担心会出现竞态条件,也就是无须使用事务。事务可以完成的所有功能,都可以用脚本来完成。   (3) 复用:客户端发送的脚本会永久存储在Redis中,这就意味着其他客户端(可以是其他语言开发的项目)可以复用这一脚本而不需要使用代码完成同样的逻辑。 三、Redis调用Lua    1、EVAL命令   编写完脚本后最重要的就是在程序中执行脚本。Redis提供了EVAL命令可以使开发者像调用其他Redis内置命令一样调用脚本。EVAL的命令格式如下: 127.0.0.1:6379> eval script numkeys key [key ...] arg [arg ...]   script:脚本内容。numkeys

springboot 整合redis 使用(附RedisUtil类)

寵の児 提交于 2020-01-15 20:51:31
最近在学习redis ,记录一下跟springboot整合,很简单 (1)新建springboot项目,可以查看这个 https://blog.csdn.net/qq_36635434/article/details/84027740 (2)添加依赖 我的springboot 版本是2.0.0.RELEASE <!--redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> (3)添加配置信息 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=139.199.31.248 # Redis服务器连接端口 spring.redis.port=6479 # Redis服务器连接密码(默认为空) spring.redis.password=pass@2986 # 连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.pool.max-active=200 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.jedis.pool

DNS解析

旧巷老猫 提交于 2020-01-15 07:48:10
https://cloud.tencent.com/developer/article/1009799 用户在浏览器的地址栏中敲入了网站的网址 ,会发生哪些事情呢? 用户在浏览器的地址栏中敲入了网站的网址 浏览器查找域名的IP地址 找到ip地址后,浏览器给web服务器发送一个HTTP请求 服务器“处理”请求 服务器发回一个HTML响应 浏览器开始显示HTML 大概就是这样的过程,下面我们来仔细的分析下浏览器是如何查找到域名对应的ip地址的。 DNS域名解析过程   当用户在浏览器中输入ke.qq.com并按下回车键后: 第1步,查找浏览器缓存。 浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等。这个缓存时间太长和太短都不好,如果缓存时间太长,一旦域名被解析到的IP有变化,会导致被客户端缓存的域名无法解析到变化后的IP地址,以致该域名不能正常解析,这段时间内有可能会有一部分用户无法访问网站。如果时间设置太短,会导致用户每次访问网站都要重新解析一次域名。 第2步,查找系统缓存。 如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。其实操作系统也会有一个域名解析的过程,在Windows中可以通过C:

电商平台架构

感情迁移 提交于 2020-01-15 03:39:56
设计理念 1 时间换空间 1.1 多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag), 反向代理缓存,应用端的缓存(memcache),内存数据库,Buffer、cache机制(数据库,中间件等)。 1.2 索引 哈希、B树、倒排、bitmap 哈希索引:适合综合数组的寻址和链表的插入特性,可以实现数据的快速存取。 B树索引:适合于查询为主导的场景,避免多次的IO,提高查询的效率。 倒排索引:实现单词到文档映射关系的最佳实现方式和最有效的索引结构,广泛用在搜索领域。 Bitmap:是一种非常简洁快速的数据结构,他能同时使存储空间和速度最优化(而不必空间换时间),适合于海量数据的的计算场景。 2. 并行与分布式计算 2.1 任务切分、分而治之(MR) 在大规模的数据中,数据存在一定的局部性的特征,利用局部性的原理将海量数据计算的问题分而治之。 MR模型是无共享的架构,数据集分布至各个节点。处理时,每个节点就近读取本地存储的数据处理(map),将处理后的数据进行合并(combine)、排序(shuffle and sort)后再分发(至reduce节点),避免了大量数据的传输,提高了处理效率。 2.2 多进程

四.[前端总结]之服务端与⽹络篇

萝らか妹 提交于 2020-01-15 00:48:30
1. http/https 协议 1.0 协议缺陷: ⽆法复⽤链接,完成即断开, 重新慢启动和 TCP 3 次握⼿ head of line blocking : 线头阻塞,导致请求之间互相影响 1.1 改进: ⻓连接(默 认 keep-alive ),复⽤ host 字段指定对应的虚拟站点新增功能: 断点续传身份认证状态管理 cache 缓 存 Cache-Control Expires Last-Modified Etag 2.0: 多路复⽤ ⼆进制分帧层: 应⽤层和传输层之间 ⾸部压缩服务端推送 https: 较为安全的⽹络传输协议   证书(公钥)   SSL 加 密   端 ⼝ 443 TCP: 三次握⼿ 四次挥⼿ 滑动窗⼝: 流量控制 拥 塞 处 理    慢开始   拥塞 避免   快速重传   快速恢复 缓存策略: 可 分为 强缓 存 和 协商 缓存 强缓存   Cache-Control/Expires : 浏览器判断缓存是否过期,未过期时,直接使⽤强缓存,   Cache-Control 的 max-age 优先级⾼于 Expires 当缓存已经过期时,使⽤协商缓存   唯⼀标识⽅案: Etag ( response 携带) & If-None-Match ( request 携带,上⼀次返回 的 Etag ): 服务器判断资源是否被修改   最后⼀次修改时间:

App后台开发运维——架构设计

六眼飞鱼酱① 提交于 2020-01-15 00:06:05
QQ 1285575001 Wechat M010527 技术交流 QQ群599020441 纪年科技aming 1.设计app架构 1.梳理app业务流程 2.整理业务流程可能遇到的问题 3.根据问题,探讨可执行的解决方案 4. app后台 初步架构 :3中所有技术进行有机融合 api编写: 1.api的作用(功能) 2.api需要输入的参数 3.api返回的数据 2.服务器选择 1.传统的IDC 在传统的IDC,要加cpu或内存,流程如下:   1.和客户经理商商谈所需硬件的价格   2.汇款过去,等IDC的财务确认   3.确认后,等待IDC安排工作人员升级硬件   这个流程走一次,最少也要1至2天。延迟了1至2天升级硬件,怎么保证可以快速应付爆发的业务 2.云服务器 升级硬件: 1.在用户后台选择需要的硬件配置   2.通过网络支付   3.重启服务器,升级就完成了。如果只是升级带宽,甚至不用重启。   整个过程合起来不用5分钟,简单,快捷,方便。   而且,现在的云服务器提供商,除了服务器外,还提供下面的服务:   负载均衡   云数据库   云内存存储   这些服务在app上线初期,在一台服务器上自己搭建就行了,   但随着app的发展,这些服务都需要部署在不同的服务器。      规模的增大,也要面对高可用,高并发,监控报警等问题。   这些问题如果都要后端人员处理

Redis 缓存

断了今生、忘了曾经 提交于 2020-01-14 19:38:57
Redis缓存你必须了解的! 不管你是从事Python、Java、Go、PHP、Ruby等等… Redis都应该是一个比较熟悉的中间件。 而大部分经常写业务代码的程序员,实际工作中或许只用到了set value、get value两个操作。 Redis是什么? Redis 是一个开源的底层使用C语言编写的key-value存储数据库。可用于缓存,时间发布订阅,高速队列等场景。而且支持丰富的数据类型: string(字符串),hash(哈希),list(列表),set(无序集合),zset(sorted set:有序集合) Redis在项目中的应用场景 缓存数据 最常用,对经常需要查询且变动不是很频繁的数据,常称作为热点数据。 消息队列 相当于消息订阅系统,比如ActiveMQ,RicketMQ。如果对数据有较高一致性要求时,还是建议使用(MQ) 计数器 比如统计点击率,点赞率,redis具有原子性,可以避免并发问题 电商网站信息 大型电商平台初始化页面数据的缓存。比如去哪儿网购买机票的时候首页的价格和你点进去的价格会有差异。 热点数据 比如新闻网站实时热点,微博热搜等,需要频繁更新。总数据量比较大的时候直接从数据库查询会影响性能。 给个爱的理由 在单节点服务器我们通常是这样的 描述 随着企业的发展,业务的扩展。面对海量的数据。直接使用MySQL会导致性能下降,数据的读写也会非常慢