浏览器DNS缓存机制

  categories:资料  author:

经常做Web开发的工程师,都会遇到需要将某个域名绑定到特定IP上,进行测试的情况。大家一般都会用修改hosts文件的方式来解决,但是经常也会遇到修改hosts不生效的情况,而且有时生效,有时不生效的情况也有发生,这到底是为什么呢?

起:DNS缓存机制

关于DNS缓存的机制,有一篇非常详细的文章What really happens when you navigate to a URL。

简单来说,一条域名的DNS记录会在本地有两种缓存:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中则访问OS缓存,最后再访问DNS服务器(一般是ISP提供),然后DNS服务器会递归式的查找域名记录,然后返回。

DNS记录会有一个ttl值(time to live),单位是秒,意思是这个记录最大有效期是多少。经过实验,OS缓存会参考ttl值,但是不完全等于ttl值,而浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。
这里有一篇文章,做过详细的测试Why Web Browser DNS Caching Can Be A Bad Thing:

image

后来我也做过测试,Mac下Chrome(23.0.1271.101)的DNS缓存时间是1分钟。Safari下DNS缓存时间大约为10秒。

解:hosts文件修改的原理

那么在修改hosts文件之后,发生了什么事情呢?这里不妨先提提Chrome下的一个工具:chrome://net-internals/#dns。这里列出了目前系统中的DNS缓存和Chrome中使用的情况。通过这个工具,可以看到:

1 **在修改hosts文件后,所有OS中DNS缓存会被清空,而浏览器缓存则不发生变化。**

网上盛传chrome://net-internals/#dns下的”Clear Host Cache”可以清空DNS缓存,这里博主做了一个测试,这里清空的仅仅是OS的缓存,而并非浏览器DNS缓存。当某条DNS记录显示”Expired”的时候,才表示浏览器DNS缓存已经被清除。所以使用Clear Host Cache其实是没有用的。

那么回到最初的问题上来,为什么修改hosts文件之后,有时会立刻生效,有时却一直不生效呢?其实原因很简单,这是因为浏览器缓存的过期时间,是从某个域名上次查询DNS记录开始计算的。

例如:我00秒的时候使用chrome访问过www.google.com.hk,此时浏览器DNS缓存产生,然后我修改了hosts文件,将 www.google.com.hk指向本地127.0.0.1,然后在05秒的时候尝试再次访问这个地址,因为浏览器DNS缓存未过期,所以hosts 修改无法体现出来。

另一种情况下,我很久都没有访问www.baidu.com了,然后我修改了hosts文件,将其指向127.0.0.1,这时因为浏览器没有DNS缓存,所以会查询操作系统中的DNS缓存,结果此时hosts文件生效!… 阅读全文

JVM中的DNS缓存

  categories:资料  author:

我们了解了DNS的解析过程,那么Java中的JVM也会缓存DNS的解析结果,这个缓存是在InetAddress类中,缓存时间较特殊,两种缓存策略:

1、缓存正确结果

2、缓存失败的结果

两个缓存时间由两个配置项来控制,配置项是在%JAVA_HOME%\lib\security\java.security文件中配置的。

两个配置项分布是networkaddress.cache.ttl和networkaddress.cache.negtive.ttl,其默认值分别是-1(永不失效)和10(保留10秒钟)。

修改方式:

1、直接修改java.secury文件的默认值

2、在JAVA启动时加启动参数 -Dsun.NET.inetaddress.ttl=XXX来修改默认值。

如果要用InetAddress类来解析域名时,一定要采用单例模式,否则会有严重的性能问题,每次都要创建新的类,都要进行完整的域名解析过程。

几种域名解析方式:

1、A表示address,可以将 多个域名解析到一个地址A上,但是反过来不行

2、MX记录,表示的是mail exchange ,将某个域名下的邮件服务器地址指向自己的mail server,例如,taobao.com的域名地址是21.235.19.245,如果MX的地址是

21.235.19.246 他是XX@taobao。com的邮件服务器地址,那么DNS将所有的邮件发送到该地址,然而,正常的WEB请求依然会发送到21.235.19.245.

3、CNAME记录,全名是cannonical name ,别名解析,就是为一个域名设置多个别名。例如,将taobao。com解析到mayun。com,将mayun123.com解析到mayun.com,

,那么mayun.com就是taobao。com节mayun123.com的别名。

4.NS记录,为某个域名指定DNS服务器,即这个域名有指定的IP地址的DNS服务器去解析

 

修改jvm dns cache的方法

一、测试环境

OS:Windows7 x64

JDK:1.6.0_45

二、本人找到四种方式清理jvm的DNS缓存,大家可以根据自己的情况选用。

 1. 在首次调用InetAddress.getByName()前,设置java.security.Security.setProperty(“networkaddress.cache.ttl”, “0”);
2. 修改jre/lib/security/java.security 下的 networkaddress.cache.ttl … 阅读全文

Hadoop YARN架构要点

  categories:资料  author:

来源:http://shiyanjun.cn/archives/1119.html

YARN是开源项目Hadoop的一个资源管理系统,最初设计是为了解决Hadoop中MapReduce计算框架中的资源管理问题,但是现在 它已经是一个更加通用的资源管理系统,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之上,通过YARN来管理资源。如果你的应用 程序也需要借助YARN的资源管理功能,你也可以实现YARN提供的编程API,将你的应用程序运行于YARN之上,将资源的分配与回收统一交给YARN 去管理,可以大大简化资源管理功能的开发。当前,也有很多应用程序已经可以构建于YARN之上,如Storm、Spark等计算框架。

YARN整体架构

YARN是基于Master/Slave模式的分布式架构,我们先看一下,YARN的架构设计,如图所示(来自官网文档):
yarn-high-level-architecture-001
上图,从逻辑上定义了YARN系统的核心组件和主要交互流程,各个组件说明如下:

  • YARN Client

YARN Client提交Application到RM,它会首先创建一个Application上下文件对象,并设置AM必需的资源请求信息,然后提交到RM。 YARN Client也可以与RM通信,获取到一个已经提交并运行的Application的状态信息等,具体详见后面 ApplicationClientProtocol协议的分析说明。

  • ResourceManager(RM)

RM是YARN集群的Master,负责管理整个集群的资源和资源分配。RM作为集群资源的管理和调度的角色,如果存在单点故障,则整个集群的资源都无法使用。在2.4.0版本才新增了RM HA的特性,这样就增加了RM的可用性。

  • NodeManager(NM)

NM是YARN集群的Slave,是集群中实际拥有实际资源的工作节点。我们提交Job以后,会将组成Job的多个Task调度到对应的NM上进行 执行。Hadoop集群中,为了获得分布式计算中的Locality特性,会将DN和NM在同一个节点上运行,这样对应的HDFS上的Block可能就在 本地,而无需在网络间进行数据的传输。

  • Container

Container是YARN集群中资源的抽象,将NM上的资源进行量化,根据需要组装成一个个Container,然后服务于已授权资源的计算任 务。计算任务在完成计算后,系统会回收资源,以供后续计算任务申请使用。Container包含两种资源:内存和CPU,后续Hadoop版本可能会增加 硬盘、网络等资源。

  • ApplicationMaster(AM)

AM主要管理和监控部署在YARN集群上的Application,以MapReduce为例,MapReduce Application是一个用来处理MapReduce计算的服务框架程序,为用户编写的MapReduce程序提供运行时支持。通常我们在编写的一个 MapReduce程序可能包含多个Map Task或Reduce Task,而各个Task的运行管理与监控都是由这个MapReduce Application来负责,比如运行Task的资源申请,由AM向RM申请;启动/停止NM上某Task的对应的Container,由AM向NM请 求来完成。

下面,我们基于Hadoop 2.6.0的YARN源码,来探讨YARN内部实现原理。

YARN协议

YARN是一个分布式资源管理系统,它包含了分布的多个组件,我们可以通过这些组件之间设计的交互协议来说明,如图所示:
yarn-high-level-architecture-002
下面我们来详细看看各个协议实现的功能:

  • ApplicationClientProtocol(Client
阅读全文

openvswitch介绍

  categories:资料  author:

OpenvSwitch 是一个高质量的、多层虚拟交换机,使用开源Apache 2.0许可协议。它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。此外,它被设计位支持跨越多个物理服务器的分布式环境,类似于VMware的vNetwork分布式vswitch或Cisco Nexus 1000 V。

31213888_sqzy

 

本文根据openvswitch官网openvswitch.org提供的文档,以及其他相关资料进行汇总。

open vswitch整体概述:

> Apache 2.0协议。

> 纯软件多层虚拟化交换机。

>支持openflow协议

>支持多种Hypervisor(XEN、KVM等主流Hypervisor)

>支持以下特性

    * Standard 802.1Q VLAN model with trunk and access ports
    * NIC bonding with 
阅读全文

关于事务的隔离级别

  categories:资料  author:

一、锁的种类

MySQL中锁的种类很多,有常见的表锁和行锁,也有新加入的Metadata Lock等等,表锁是对一整张表加锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做ddl处理时使用。

行锁则是锁住数据行,这种加锁方法比较复杂,但是由于只锁住有限的数据,对于其它数据不加限制,所以并发能力强,MySQL一般都是用行锁来处理并发事务

二、锁粒度

为了尽可能提高数据库的并发度,每次锁定的数据范围越小越好,理论上每次只锁定当前操作的数据的方案会得到最大的并发度,但是管理锁是很耗资源的事情(涉及获取,检查,释放锁等动作),因此数据库系统需要在高并发响应和系统性能两方面进行平衡,这样就产生了“锁粒度(Lock granularity)”的概念

一种提高共享资源并发发性的方式是让锁定对象更有选择性。尽量只锁定需要修改的部分数据,而不是所有的资源。更理想的方式是,只对会修改的数据片进行精确的锁定。任何时候,在给定的资源上,锁定的数据量越少,则系统的并发程度越高,只要相互之间不发生冲突即可

但是,加锁也需要消耗资源。锁的各种操作,包括获得锁、检查锁和是否已经解除、释放锁等,都会增加系统的开销。所谓锁策略,就是在锁的开销和数据的安全性之间寻求平衡

表锁:管理锁的开销最小,同时允许的并发量也最小的锁机制。MyIsam存储引擎使用的锁机制。当要写入数据时,把整个表都锁上,此时其他读、写动作一律等待。除了MyIsam存储引擎使用这种锁策略外,MySql本身也使用表锁来执行某些特定动作,比如alter table。另外,写锁比读锁有更高的优先级,因此一个写锁可能会被插入到读锁队列的前面。

行锁:可以支持最大并发的锁策略(同时也带来了最大的锁开销)。InnoDB和Falcon两种存储引擎都采用这种策略。行级锁只在存储引擎层实现,而MySQL服务器层没有实现。服务器层完全不了解存储引擎中的锁实现。MySql是一种开放的架构,你可以实现自己的存储引擎,并实现自己的锁粒度策略,不像Oracle,你没有机会改变锁策略,Oracle采用的是行锁。

三、死锁

死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的假象。多个事务同时锁定同一个资源时,也会产生死锁。数据库系统实现了各种死锁检测和死锁超时的机制,InnoDB目前处理死锁的方法是,将持有最少行级排他锁的事务进行回滚

四、事务ACID原则

从业务角度出发,对数据库的一组操作要求保持4个特征:

  • Atomicity(原子性):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性
  • Consistency(一致性):数据库总是从一个一致性状态转换到另一个一致状态。下面的银行列子会说到
  • Isolation(隔离性):通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的
  • Durability(持久性):一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。(持久性的安全性与刷新日志级别也存在一定关系,不同的级别对应不同的数据安全级别。)

为了更好地理解ACID,以银行账户转账为例:

1
2
3
4
5
BEGIN;
SELECT balance FROM checking WHERE customer_id = 10233276;
UPDATE checking
阅读全文

Hadoop和大数据:60款顶级大数据开源工具

  categories:资料  author:

说到处理大数据的工具,普通的开源解决方案(尤其是Apache Hadoop)堪称中流砥柱。弗雷斯特调研公司的分析师Mike Gualtieri最近预测,在接下来几年,“100%的大公司”会采用Hadoop。Market Research的一份报告预测,到2011年,Hadoop市场会以58%的年复合增长率(CAGR)高速增长;到2020年,市场产值会超过10亿美元。IBM更是非常看好开源大数据工具,派出了3500名研究人员开发Apache Spark,这个工具是Hadoop生态系统的一部分。

大数据工具

这回我们推出了最新的顶级开源大数据工具排行榜。这个领域最近方兴未艾,许多新项目纷纷启动。许多最知名的项目由Apache基金会管理,与Hadoop密切相关。

请注意:本文不是要搞什么排名;相反,项目按类别加以介绍。与往常一样,要是你知道另外的开源大数据及/或Hadoop工具应该榜上有名,欢迎留言交流。
一、Hadoop相关工具

1. Hadoop

Apache的Hadoop项目已几乎与大数据划上了等号。它不断壮大起来,已成为一个完整的生态系统,众多开源工具面向高度扩展的分布式计算。

支持的操作系统:Windows、Linux和OS X。

相关链接:http://hadoop.apache.org

2. Ambari

作为Hadoop生态系统的一部分,这个Apache项目提供了基于Web的直观界面,可用于配置、管理和监控Hadoop集群。有些开发人员想把Ambari的功能整合到自己的应用程序当中,Ambari也为他们提供了充分利用REST(代表性状态传输协议)的API。

支持的操作系统:Windows、Linux和OS X。

相关链接:http://ambari.apache.org

3. Avro

这个Apache项目提供了数据序列化系统,拥有丰富的数据结构和紧凑格式。模式用JSON来定义,它很容易与动态语言整合起来。

支持的操作系统:与操作系统无关。

相关链接:http://avro.apache.org

4. Cascading

Cascading是一款基于Hadoop的应用程序开发平台。提供商业支持和培训服务。

支持的操作系统:与操作系统无关。

相关链接:http://www.cascading.org/projects/cascading/

5. Chukwa

Chukwa基于Hadoop,可以收集来自大型分布式系统的数据,用于监控。它还含有用于分析和显示数据的工具。

支持的操作系统:Linux和OS X。

相关链接:http://chukwa.apache.org

6. Flume

Flume可以从其他应用程序收集日志数据,然后将这些数据送入到Hadoop。官方网站声称:“它功能强大、具有容错性,还拥有可以调整优化的可靠性机制和许多故障切换及恢复机制。”… 阅读全文

ElasticSearch入门

  categories:资料  author:

简介

ElasticSearch是一个开源的分布式搜索引擎,具备高可靠性,支持非常多的企业级搜索用例。像Solr4一样,是基于Lucene构建的。支持时间时间索引和全文检索。官网: http://www.elasticsearch.org

它对外提供一系列基于 JAVA 和 HTTP 的 API,用于索引、检索、修改大多数配置。

写这篇博客的的主要原因是ElasticSearch的网站只有一些简单的介绍,质量不高,缺少完整的教程。我费了好大劲才把它启动起来,做了 一些比hello world更复杂一些的工作。我希望通过分享我的一些经验来帮助对ElasticSearch(很强大的哦)感兴趣的人在初次使用它的时候能够节省些时 间。学完这篇教程,你就掌握了它的基本操作——启动、运行。我将从我的电脑上分享这个链接。

现在开始体验

  1. 假设你已经安装了 Java;
  2. 下载 ElasticSearch 。然后,由于关于在Linux与其他非 Wdindows 系统环境里操作它的谈论有许多,这里会更加关心 Windows 7 的桌面环境。请对应选择安装包裹。对 Windows – 一Zip文件 – 用户可解压缩到C:\elasticsearch-0.90.3. 牢记,这十分的不同于安装Eclipse IDE。
  3. 由于不熟悉curl跟cygwin,而且打算节省掌握时间(此多数在官网ElasticSearch.org应用的命令面对非 Windows平台)。读者可以在 http://curl.haxx.se/download.html 和
阅读全文

OpenVPN下载、安装、配置及使用详解

  categories:资料  author:

OpenVPN简介
OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network)加密通道的免费开源软件。使用OpenVPN可以方便地在家庭、办公场所、住宿酒店等不同网络访问场所之间搭建类似于局域网的专用网络通道。OpenVPN使用方便,运行性能优秀,支持Solaris、Linux 2.2+(Linux 2.2+表示Linux 2.2及以上版本,下同)、OpenBSD 3.0+、FreeBSD、NetBSD、Mac OS X、Android和Windows 2000+的操作系统,并且采用了高强度的数据加密,再加上其开源免费的特性,使得OpenVPN成为中小型企业及个人的VPN首选产品。

使用OpenVPN配合特定的代理服务器,可用于访问Youtube、FaceBook、Twitter等受限网站,也可用于突破公司的网络限制。由于OpenVPN支持UDP协议,还可以配合HTTP代理(HTTP Proxy)使用,使得只要是能够打开网站或上QQ的地方,就可以访问外部的任何网站或其他网络资源。

OpenVPN的官方最新版本是OpenVPN 2.3.0(发布于2013年01月08日),你可以点击此处查看OpenVPN 2.3.0的更新日志内容。

OpenVPN下载

你可以点击下列链接直接从360云盘下载OpenVPN 2.3.0的官方正式版Windows安装文件(特别值得注意的是:由于Windows自身的限制,Windows版本的OpenVPN只有具备管理员权限的用户才能成功安装。当前最新版本的OpenVPN 2.3.0 只能在Windows XP及以上版本的操作系统上安装)。

OpenVPN安装

在这里笔者以同一个局域网内的两台电脑A(IP:192.168.0.2,操作系统:Windows 7 SP1 64位旗舰版)和B(IP:192.168.0.3,操作系统:Windows XP SP3 32位 专业版)为例,将电脑A作为VPN服务器、电脑B作为VPN客户端,进行安装、配置、连通测试。在这里,笔者将统一安装OpenVPN 2.3.0 Windows 32位版本的安装文件。… 阅读全文

十步搭建OpenVPN

  categories:资料  author:

通过与一个OpenVPN服务器建立连接,我们基本上在我们的设备和远端运行OpenVPN的主机之间建立了一个安全的通信通道。尽管在两个端点之间的通信可能被截获,但是信息是经过高强度加密的所以实际上它对于攻击者没什么用。OpenVPN除了扮演加密通信通道的调解人,我们也可以通过设置使服务器扮演互联网网关的角色。通过这种方式,我们可以连接任何不安全的Wifi,然后迅速的链接到远程的OpenVPN服务器,然后在不需要考虑偷窥的人或者无聊的管理员的情况下运行需要上网的程序。(注意:OpenVPN服务器旁还是需要信任的管理员的。)

这篇文章将一步一步的教会你如何在Ubuntu Server 14.04 LTS上安装OpenVPN。OpenVPN所在的主机可能是云上的一台VPS,一台在我们家里某台电脑上运行的虚拟机,或者是一个老到你都快忘了的设备。

第一步 准备系统

我们需要Ubuntu Server主机的一个命令行终端,比如通过SSH从远程访问它。首先需要更新它的本地仓库数据:

  1. sub0@delta:~$ sudo apt-get update

进行操作系统和已安装的包的升级,输入:

  1. sub0@delta:~$ sudo apt-get dist-upgrade

如果升级了新内核,那就需要重启。当更新完成后,就该安装OpenVPN了:

  1. sub0@delta:~$ sudo apt-get -y install openvpn easy-rsa dnsmasq
阅读全文

Docker镜像并不安全

  categories:资料  author:

docker镜像大部分是从网络上下载的, 安全性是不太靠谱的, 下面是一篇翻译过来的文章的内容, 后面是从网络上搜索到的, 一些安全建议等。

最近使用Docker下载“官方”容器镜像的时候,我发现这样一句话:

  1. ubuntu:14.04: The image you are pulling has been verified (您所拉取的镜像已经经过验证)

起初我以为这条信息引自Docker大力推广的镜像签名系统,因此也就没有继续跟进。后来,研究加密摘要系统的时候——Docker用这套系统来对镜像进行安全加固——我才有机会更深入的发现,逻辑上整个与镜像安全相关的部分具有一系列系统性问题。

Docker所报告的,一个已下载的镜像经过“验证”,它基于的仅仅是一个标记清单(signed manifest),而Docker却从未据此清单对镜像的校验和进行验证。一名攻击者以此可以提供任意所谓具有标记清单的镜像。一系列严重漏洞的大门就此敞开。

镜像经由HTTPS服务器下载后,通过一个未加密的管道流进入Docker守护进程:

  1. [decompress] -> [tarsum] -> [unpack]

这条管道的性能没有问题,但是却完全没有经过加密。不可信的输入在签名验证之前是不应当进入管道的。不幸的是,Docker在上面处理镜像的三个步骤中,都没有对校验和进行验证。

然而,不论Docker如何声明,实际上镜像的校验和(Checksum)从未经过校验。下面是Docker与镜像校验和的验证相关的代码片段,即使我提交了校验和不匹配的镜像,都无法触发警告信息。

  1. if img.Checksum
阅读全文



快乐成长 每天进步一点点      京ICP备18032580号-1