缓存服务器

用Nginx+Lua(OpenResty)开发高性能Web应用

主宰稳场 提交于 2019-12-30 08:40:01
在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡、反向代理、代理缓存、限流等场景;而把Nginx作为一个Web容器使用的还不是那么广泛。Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高;如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀;目前Nginx团队也开始意识到这个问题,开发了nginxScript:可以在Nginx中使用JavaScript进行动态配置一些变量和动态脚本执行;而目前市面上用的非常成熟的扩展是由章亦春将Lua和Nginx粘合的ngx_lua模块,并且将Nginx核心、LuaJIT、ngx_lua模块、许多有用的Lua库和常用的第三方Nginx模块组合在一起成为OpenResty,这样开发人员就可以安装OpenResty,使用Lua编写脚本,然后部署到Nginx Web容器中运行。从而非常轻松就能开发出高性能的Web服务。 接下来我们就认识下Nginx、Lua、ngx_lua模块和ngx_lua到底能开发哪些类型的web应用。 一、ngx_lua简介 1 、Nginx 优点 Nginx设计为一个主进程多个工作进程的工作模式,每个进程是单线程来处理多个连接,而且每个工作进程采用了非阻塞I/O来处理多个连接,从而减少了线程上下文切换,从而实现了公认的高性能、高并发

网站架构之缓存应用(摘录)

寵の児 提交于 2019-12-30 05:25:50
网站缓存这个话题并不新颖,但是能否将它用好,可是一门学问,同一件工具在不同人的手中会做出不同的事情来。这里我来分享总结下我对于网站架构中缓存应用的一些看法和经验,大家有好的想法可以补充 第一:缓存的一些基本概念。 1:缓存(CACHE)与缓冲(BUFFER)的区别,我认为缓存可以在某种程序上理解成一级缓存(Primary Cache),数据全局共享。缓冲则属于二级缓存,只对一部分对象共享数据,二级缓存在某种程序上主要是降低一级缓存组件的访问压力以及提高缓存的存取效率。 2:缓存的一些基本属性:命中率,表示缓存命中的次数/总的请求数,这是缓存设计的重要质量指标之一;缓存执行效率,例如GET,INSERT,DELETE等;容量,即缓存介质的容量最大值;成本,即开发成本,部署成本,软硬件成本。 3:缓存的问题,存储介质的选择往往左右缓存的设计,缓存在不命中时往往会使性能下降。 第二:网站中缓存的应用场景: 1:可以缓存整个页面的html,提高访问响应能力; 2:针对局部页面元素进行缓存; 3:对复杂数据的结果进行缓存,例如一个查询需要结合多个数据集,然后根据这些数据集进行相应的运算,即使每个子集查询有缓存,但还是需要额外的运算,这种情况可以考虑缓存计算后的结果。 4:对耗时的查询进行缓存,例如产品列表页的查询。 5:和上下文相关的用户数据,例如用户从订单埴写页进入到订单成功页

MongoDB入门

给你一囗甜甜゛ 提交于 2019-12-30 04:22:33
1.什么是NoSQL Nosql的全称是Not Only Sql 这个概念早起就有人提出,而我们常用的都是关系型数据库。就像我们常用mysql,sqlserver一样,这些数据库一般用来存储重要信息,应对普通的业务是没有问题的。但是,随着互联网的高速发展,传统的关系型数据库在应付超大规模,超大流量以及高并发的时候力不从心。而就在这个时候,Nosql得到的告诉的发展。 2.为什么要使用NoSQL 单机 MySQL 的美好时代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。 在那个时候,更多的都是静态网页,动态交互类型的网站不多 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yHjk2K6A-1577542875039)(D:\youruike\MongoDB\assets\1575617897290.png)] 上述架构下,我们来看看数据存储的瓶颈是什么? DAL : Data Access Layer(数据访问层 – Hibernate,MyBatis) 数据量的总大小一个机器放不下时 数据的索引(B+ Tree)一个机器的内存放不下时 访问量(读写混合)一个实例不能承受 如果满足了上述1 or 3个时,只能对数据库的整体架构进行重构。 Memcached(缓存)+MySQL+垂直拆分 后来,随着访问量的上升

缓存数据库

旧巷老猫 提交于 2019-12-30 01:37:18
缓存数据库介绍: NoSQL(Not Only SQL),意即“不仅仅是SQL”泛指非关系型的数据库,随着互联网web2.0(用户自产生内容)网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS(社交网络)的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。 NoSQL数据库的四大分类 第一类:键值(Key-Value)存储数据库: 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB. 第二类:列存储数据库 这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak. 第三类:文档型数据库 文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似

高并发场景下使用缓存需要注意那些问题?

一笑奈何 提交于 2019-12-29 23:12:00
一、缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。这就比较依赖缓存的过期和更新策略。一般会在数据发生更改的时,主动更新缓存中的数据或者移除对应的缓存。 二、缓存并发问题 缓存过期后将尝试从后端数据库获取数据,这是一个看似合理的流程。但是,在高并发场景下,有可能多个请求并发的去从数据库获取数据,对后端数据库造成极大的冲击,甚至导致 “雪崩”现象。此外,当某个缓存key在被更新时,同时也可能被大量请求在获取,这也会导致一致性的问题。那如何避免类似问题呢?我们会想到类似“锁”的机制,在缓存更新或者过期的情况下,先尝试获取到锁,当更新或者从数据库获取完成后再释放锁,其他的请求只需要牺牲一定的等待时间,即可直接从缓存中继续获取数据。 三、缓存穿透问题 缓存穿透在有些地方也称为“击穿”。很多朋友对缓存穿透的理解是:由于缓存故障或者缓存过期导致大量请求穿透到后端数据库服务器,从而对数据库造成巨大冲击。 这其实是一种误解。真正的缓存穿透应该是这样的: 在高并发场景下,如果某一个key被高并发访问,没有被命中,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求达到数据库,而当该key对应的数据本身就是空的情况下,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力。

DNS 域名解析失效

帅比萌擦擦* 提交于 2019-12-29 23:08:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前述 测试环境有个 API 报了一个内部服务错误,排查下来发现后台 php 代码没法解析域名,nslookup、ping 等工具则是可以成功解析; index.php ################################################################### <?php echo(gethostbyname('www.baidu.com')); ?> ################################################################### 排查 1:dns 解析服务器 由于在 terminal 界面用命令行的方式是可以解析的: nslookup www.baidu.com ping www.baidu.com /usr/local/php/bin/php -r "echo(gethostbyname('www.baidu.com'));" 上述三种方式都可以解析出域名; 排查 2:dns 公共库权限 测试环境 web 架构为:apache + php 的形式,apache 启动用户为 root + daemon,执行 find / -name libnss*.so 等 dns 要用到的公共库,查看 other

DNS & CDN & HTTPDNS 原理简析

南楼画角 提交于 2019-12-29 23:06:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> DNS & CDN & HTTPDNS 原理简析 背景: 域名系统 DNS (Domain Name System ): 作为域名和 IP 地址相互映射的一个分布式数据库,通过 DNS 可以将域名迅速解析为对应的 IP 地址,从而方便我们访问 Internet 上的任意一台主机(或网站)。 CDN(Content Delivery Network): 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。 HTTPDNS : 使用 HTTP 请求来模拟 DNS 请求 0x00 DNS 原理 DNS 服务器类型: 内部 DNS :位于内网中,提供内网 DNS 服务,也具备 Internet DNS 缓存与转发能力 外部 DNS:位于 Internet 中,提供 Internet 的 DNS 服务(包括 DNS 缓存与转发) 主 DNS:提供 DNS 服务(包括查询,缓存写入) 辅 DNS:只提供 DNS 查询服务,与主 DNS 同步数据库 唯缓存 DNS:自身不具备 DNS 解析能力,但具有 DNS 缓存数据库 转发 DNS:具备转发特性,能将 DNS 请求转发给其他 DNS 服务器 权威 DNS: 自身数据库中存在与 DNS 请求相对应的映射 非权威 DNS

DNS缓存服务器

可紊 提交于 2019-12-29 23:05:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> DNS缓存服务器 DNS服务器的配置 yum install bind -y vim /etc/named.conf 11 // listen-on port 53 { 127.0.0.1; }; 17 // allow-query { localhost; }; 18 forwarders { 8.8.8.8; }; 21 dnssec-enable no; 22 dnssec-validation no; service named start DNS 客户端的配置 yum install bind-utils -y vim /etc/sysconfig/network-scripts/ifcfg-eth0 DNS1=192.168.209.10 //指向dns服务器ip ifdown eth0 && ifup eth0 来源: oschina 链接: https://my.oschina.net/u/4270793/blog/3149354

Jetty9 源码初解(1)——HTTP前传

ⅰ亾dé卋堺 提交于 2019-12-29 16:05:51
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 转自: http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力

【C#公共帮助类】 WebHelper帮助类

青春壹個敷衍的年華 提交于 2019-12-29 04:52:02
如果你是一个新手,如果你刚接触MVC,如果你跟着置顶的那个项目,我们肯定会用到这里面的几个帮助类 它们都在Common类库下,大家一定要记住要点:取其精华去其糟粕,切勿拿来主义~ ApplicationCache.cs 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Web; 6 7 namespace Common 8 { 9 public interface ICache 10 { 11 /// <summary> 12 /// 获取全局应用缓存 13 /// </summary> 14 /// <param name="key"></param> 15 /// <returns></returns> 16 object GetApplicationCache(string key); 17 /// <summary> 18 /// 设置全局应用缓存 19 /// </summary> 20 /// <param name="key"></param> 21 /// <param name="obj"></param> 22 void SetApplicationCache(string key, object