Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6800710
  • 博文数量: 1662
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12554
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1662)

文章存档

2021年(8)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 架构设计与优化

2015-01-26 10:59:33

系统原理分析架构-开篇

分类: 系统原理分析架构 6501人阅读 评论(0)  举报


感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!

如有转载,请保留源作者博客信息。

Better Me的博客blog.csdn.net/tantexian

如需交流,欢迎大家博客留言。

一、序:
    怀着求知、进取的心开启本文,望与大家共进步。
    细想一下,自己用过的语言应该也不算少。简述之、从最底层开始,画过电路板(GPS导航)。用过VHDL硬件编程语言写译码器。用汇编语言写过驱动、微操作系统中断向量表等。弄过keil c嵌入式开发。工作用c语言更多的是写些驱动、串口,I2C、算法之类。c++嘛,写过一个简单项目,没深究。弄linux的话,少不了要写shell脚本的,所以shell语言当仁不让要加入到开发的语言队列中。接下来,就开始了神奇的上层语言开发之旅。java,本人最喜欢的开发语言。也算是自行花时间研究比较深入的一门语言了。Next,弄过一段时间php,虽然曾经LAMP(Linux+Apache+Mysql/MariaDB+Perl/PHP/Python)架构风靡整个互联网(中国公司使用php作为上层语言居多),开发效率极高。用php写过一个公司内部工单系统、但是我对php确实不怎么感冒,可能对java更过偏爱的缘故吧,情有独钟。当前随着阿里系,京东派把网站整个转为java架构体系,java在国内也是空前火热。谈谈神奇语言--python,断断续续用了三四年,整体说来也算是自己比较喜欢的一种语言。python在国外当然是一片火热,不过在中国不温不火。猜测原因:中国懂python的太少,精通的更少。再说国内用python的公司也少,有名点的也就豆瓣大规模用python 。结论:java一抓一大把,python一人难求,所以注定python国内短期内没法太火。不过在google等大牌的大力推崇下python发展势头还是很迅猛。不过python效率比java要低,而且是小众语言,后续发展有待验证。最后顺带列出捣鼓过的前端语言:html、css、javascript、jquery(DIY 过 js分页插件)。前端语言似乎没太要说的必要,大部分公司用的都差不多。
    说了这么多总结一下:
            使用时间排序:c > python > java > 其他
            喜欢程序排序:java > python > c > 其他 

二、架构师杂谈:
   首先参考一下微软架构师分类:企业架构师EA(Enterprise Architect)、基础结构架构师IA(Infrastructure Architect)、特定技术架构TSA(Technology-Specific Architect)和解决方案架构师SA (Solution Architect)。微软的这个分类是按照架构师专注的领域不同而划分的。
  

国内比较少会这么细分,企业很大程度希望架构师具有上述四种职能。当然如果一定要细分的话,我更倾向于从语言层面来分。
1、基础平台架构师:该职位职责,更多的是架构一个通用的,平台性的,与语言相关性较少的框架系统。ex:图片服务系统、分布式缓存、分布式存储、统一监控系统等等,很容易发现这些基础系统都不受制于开发语言,也就是说,用java开发的系统,和用c语言开发的系统,抑或php系统,如果需要使用分布式缓存,只需要调用各自语言的分布式缓存接口即可。
2、软件开发架构师:该职位职责,更多的是在某个特定领域具有比较深入的技术沉淀,从而根据特定环境制定特定的优秀软件架构系统。ex:JAVA架构师、DotNet架构师、LAPM架构师。
综述:无论哪种架构师,都无法完全脱离语言层面的东西,只能说根据职能不能,对语言层面依赖多少问题。因此架构师几乎都是从程序员转变进阶过去。

回头再谈谈对某些话的一些肤浅想法。
    “写程序,语言本身不重要,重要的是思想,语言都是相通的”。
假若你是技术大牛,那我很佩服你,因为你说这句话的时候,我想你应该在好些领域都精通了,至少也精通某些领域。所以依靠经验你确实可以忽略语言层面的东西。但是假如工作时间不长,这句话应该还是存在一些可质疑的地方。
举个例子,有人可以用php一个周完成一个网站。那你用c语言,或者汇编语言给我弄出来看看,当然这个例子有点极端。那就让你用java给我写吧(前提你不懂java,现学,但是你懂php)。就算你加班加点学完java ssi或者ssh弄出来了,但是刚学java的你、java程序质量又能有多高呢?不懂JVM工作原理、不懂GC又如何写出高效程序;程序中总要用到hashMap吧、不知道hashMap底层数据结构,又如何能用好hashMap?(当然其他语言也有hashMap,原理大致差不多,但是如果你没有一定经验,你就怎么能确定java的hashMap和其他语言原理实现是一致的呢。而且确实也有各个语言实现不一致的情况,譬如java的内存自动GC,所以设计时候会略有不同)。就这个论题捎带多讲几句、对于c++而言、map底层为红黑树、hashmap为链接数组、不懂底层如何根据具体实际情况选择出效率最高的数据结构?越上层的语言对经验要求就越高,因为语言本身都会提供一整套完善的库让你调用,如果不熟悉,那么很抱歉,就算你是汇编高手,我想你来写java照样会是一团糟。犹记得,第一次写java程序时候,排序算法全部自己DIY,后来才知道,上层语言不像嵌入式,常用的工具类,基本都有,直接调用即可,而且性能一般说来要优于自己直接写。所以语言差别还是蛮大的。
    吐槽这么多,总结下:如果你是基础平台构师级别语言确实不重要,因为架构技术都是相通的。如果你是开发实现、编码人员及特定语言平台架构、要想写出相对高质量的程序,和技术框架,还是有差别。所以我觉得语言选择于系统架构也相当重要,架构出来的东西还是要考虑如何能更好的实现才好。这就是为什么之前说的阿里系,京东派大规模转java架构体系原因。
    所以对那些只是在YY着技术架构,光谈理论,不管实现的“技术大牛”,甚是难以理解。

    再谈“青春饭”。简单谈下自己的一些理解吧。
    我想如果足够热爱技术的话,为什么年龄到了三十,三十五就不能编程了?大家都知道国外很多大牛编程编到老(不过他们更多的是编码一些技术和经验要求很高的技术框架)。
    那么“青春饭”,这又是为什么?
    首先我们抗不过大环境。通俗的讲,中国软件行业国情决定了这个大气候环境。所以针对“青春饭”就不能着眼于国际来分析。那么问题来了。
    假若当所有的人都认为到了一定年龄就不适合编码了,如果你还在编码那确实只能说你是个怪胎(因为你与国情不符)。
    关于怪胎几点定义:1、还在编码,不能做技术管理或者技术架构(为公司创造更大价值)。2、要价很高。 3、思想固化。4、缺乏激情。 
这样就很容易理解计算机“青春饭”了。假若你工作七、八上十年了,你还是一个编码人员,管理不了团队,做不了技术架构之类的高级职务那么找工作确实困难。当然如果你要价和刚毕业的学生一样,那你技术上肯定还是很具优势。问题是,这可能么。再者,就算要价和刚毕业一样,你工作也缺乏了刚毕业学生的激情。最重要的一点是,对于刚毕业的学生,公司让他做什么,一般都会毫无怨言,自己找时间加班加点完成,你还能行么。如果不行,那么公司为什么要选你。还有一个就是,你都编码了那么久,还没达到一个相对较高的职位,我想更应该反思自己那么长的工作时间里,为什么没有成长到相之于编码更高的职级。其实原因很简单:要么你不适合这个行业,要么你不够努力。这样IT行业就被一些无聊之人给“青春饭”了。所以,我的观点是,计算机的“青春饭”是片面的。

    (猜到大家对某些问题会有自己独特的见解,再次申明:所有文字仅代表个人观点,若与您观点不符,还请谅解)

重读百度百科之架构师:
架构师培养路程:
架构师不是通过理论学习可以搞出来的,不过不学习相关知识那肯定是不行的。总结架构师自我培养过程大致如下,仅供参考。
1、架构师胚胎()
学习的知识是语言基础、设计基础、通信基础等,应该在大学完成,内容包括java、c、、uml、RUP、XML、socket通信()——学习搭建应用系统所必须的原材料。
2、架构师萌芽(高级)
学习、组建等内容,可以在大学或第一年工作时间接触,包括分布式系统原理、ejb、corba、com/com+、webservice(可以研究网络计算机、高性能并发处理等内容)
3、架构师幼苗(设计师)
应该在掌握上述基础之上,结合实际项目经验,透彻领会应用设计模式,内容包括设计模式(版本、java版本)、ejb设计模式、J2EE构架、UDDI、等。在此期间,最好能够了解在实际项目中的应用以及小组开发、管理。
4、的正式成型在于机遇、个人努力和天赋其实是一种职位,但一个在充分掌握软构架师所需的基本技能后,如何得到这样的机会、如何利用所掌握的技能进行应用的合理构架、如何不断的抽象和归纳自己的构架模式、如何深入行业成为能够胜任分析、构架为一体的精英人才这可不是每个人都能够遇上的馅饼……

架构师应具能力:
一般来讲,系统架构师应该拥有以下几方面的能力:
1:具备 8 年以上行业工作经验;
2:具备 4 年以上 C/S 或 B/S 体系结构产品开发及架构和设计经验;
3:具备 3 年以上的编写工作经验;
4:具备丰富的大中型开发项目的、方案设计及技术队伍管理经验;
5:对相关的技术标准有深刻的认识,对软件工程标准规范有良好的把握;
6:对 .Net/JAVA 技术及整个解决方案有深刻的理解及熟练的应用,并且精通WebService/J2EE 架构和设计模式,并在此基础上设计产品框架;
7:具有分析、设计、开发能力(OOA、OOD、OOP),精通 UML 和 ROSE,熟练使用 Rational Rose、PowerDesigner 等工具进行设计开发;
8:精通大型如 Oracle、Sql Server 等的开发;
9:对、网络和安全、应用系统架构等有全面的认识,熟悉,并有实践基础;
10:在应用系统开发和项目管理上有深厚的基础,有大中型应用系统开发和实施的成功案例;
11:良好的意识和协作精神,有较强的内外沟通能力。
架构师的隐形职责
1、为技术部门提供技术支持
2、在最需要的时刻去攻克最艰巨的技术壁垒
3、幕后
4、业务部门与技术部门间的粘合剂
5、业务发展的催化剂

告一段落。    

三、写在前面:
    虽然一直有做笔记的习惯(可能记忆力太差缘故吧),但是之前没怎么考虑过写成文章分享出来。由于项目需要,近来倒是写了不少博文,算是一个开始吧。很早就想花点时间整理下自己对技术的一些肤浅理解和实践,让自己把学过的一些东西,整理成文保存下来。在分享出来的同时也可以和大家同进步。架构是一个循序渐进的过程,没有永远优秀的架构,也不存在永不过时的架构,因此后续文章中,难免会随着自己知识面变广,而纠正前续文章瑕疵之处,还请见谅。申明:由于笔者时间有限、再则水平原因、后续文章中难免出现错误、烦请大家理解。也欢迎各位指正建议。文章中参考的相关书籍资料由于太过分散,也不在文中一一标注出处。特别感谢众多技术大牛的参考书籍资料给予的巨大帮助和灵感。

四、回到正题,正式开篇:
    
先上图:大型高性能高并发网站系统从前端到后端的整体技术架构图:

    针对上图,后续会出“系统原理分析架构专题”。上图中出现过的技术全部会详细讲解,当然由于是架构图就不便于列举太多技术理论及细节。所以也会将相关联的一系列理论及技术一一成文。ex:架构图中虽然没有明确提出分布式,但各处都存在分布式,所以后续专题针对这些就会去讲中心化与去中心化的优缺点。分布式弹性扩容的一致性hash原理,还有诸如经典的分布式原理CAP及NWR、以及SQL的实现之B树、Hash与NoSql实现之LSM树原理,还有像memcache VS redies内存实现原理等。只有懂了原理才能更清楚的理解如何架构选型。
    到现在,本文差不多写写停停有大半个月时间了。足以见得把自己心里知道的,以及学习实践过的东西整理成文,是极具挑战的一件事情。当然还有许许多多的知识,在写的过程中需要不断新学习、实践。或者之前的理解本身就是错误的,则需要推翻重新验证,这些都需要花费很多时间。也希望自己能在后续的日子里,坚持、陆陆续续(由于开发项目等原因,后续文章可能更多是利用业余时间撰写,时间跨度难免会比较随机)把本次系统架构技术专列文章写下去,再次感谢各位朋友的关注与支持。
    最后:本人不是专家,不是牛人;热爱自己的职业,写一些东西;权且当做给过往青春一个纪念。(2014.10.10)。

 

系统原理分析架构-一-DNS负载均衡

分类: 系统原理分析架构 515人阅读 评论(0)  举报

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!

如有转载,请保留源作者博客信息。

Better Me的博客blog.csdn.net/tantexian

如需交流,欢迎大家博客留言。


DNS(Domain Name System)域名系统,因特网的一项服务。它作为将域名IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS 使用TCPUDP53。
这样当我们访问某个域名时,DNS查找对应的分布式数据库,得出该域名对应的ip地址,从而从internet上访问该ip地址。
        可能很多人会纳闷,这DNS跟系统架构似乎完全不相关。那么接下来就谈谈DNS跟架构到底又有什么关系。
        其实最早实现负载均衡功能的就是DNS机制。
首先解释一个名词,负载均衡:在大型的网络应用中,使用多台服务器提供同一个服务是常有的事。平均分配每台服务器上的压力、将压力分散的方法就叫做负载均衡。


接下来简要分析下DNS又是如何达到负载均衡的:

        在DNS中为多个域名地址配置同一个名字,因而查询这个域名地址的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。即给网站访问者随机分配不同IP。DNS负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。


像taobao有开发自己的dns负载均衡器,来处理高QPS。对于一些中小型公司可以使用第三方服务,比如DNSPod等。


更多DNS负载均衡请参考DNSPod官网:

 

系统原理分析架构-二-CDN内容分发网络

分类: 系统原理分析架构 499人阅读 评论(0)  举报

目录(?)[+]

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!

如有转载,请保留源作者博客信息。

Better Me的博客blog.csdn.net/tantexian

如需交流,欢迎大家博客留言。


1、CDN简述:

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置所构成的在现有的互联网基础之上的一层智能,CDN系统能够实时地根据和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet的状况,提高用户访问网站的响应速度。

简单地说,内容分发网络是一个经策略性部署的整体系统,包括、、网络请求的重定向和内容管理4个要求,而内容管理和全局的网络是CDN的核心所在。通过用户就近性和负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
总的来说,内容服务基于,也称作,它位于网络的边缘,距用户仅有"一跳"之遥。同时,是内容提供商源的一个透明。这样的架构使得CDN能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍有任何延迟的。

2、使用CDN的好处?

1. 不用担心自己网站访客,在任何时间,任何地点,任何网络运营商,都能快速打开。
2. 各种服务器虚拟主机带宽等采购成本,包括后期运维成本都会大大减少。
3. 给网站直接带来的好处就是:,咨询量,客户量,成单量,都会得到大幅度提升。

3、CDN实现原理

反向代理(Reverse Proxy)方式是指以来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的,此时代理服务器对外就表现为一个节点服务器。通过部署更多的反向代理服务器,来达到实现多节点CDN的效果。

4、工作原理

5、简单的系统架构图:


总结:CDN能够根据请求源地址,选择一个最近的服务器进行响应。这样在任何时间,任何地点,任何网络运营商,都能快速打开
其次CDN能够缓存一些热点静态资源,这样既加快了请求响应速度,也很大程度上减轻了后端服务器压力。

CDN的具体实现,可选nginx varnish squid。更多nginx varnish squid将在后续反向代理文章中分析。

系统原理分析架构-三--代理服务器简介及分类

分类: 系统原理分析架构 345人阅读 评论(0)  举报

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!

如有转载,请保留源作者博客信息。

Better Me的博客blog.csdn.net/tantexian

如需交流,欢迎大家博客留言。

代理服务器
    说到代理服务器,大部分人都应该比较熟悉了。google翻墙用的就是代理服务器。但是提到反向代理服务器可能大部分人就比较陌生,对于一般的代理服务器与反向代理服务器的区别估计也不是那么清楚。

代理服务器通常分为两类,即转发代理(forward proxy)服务器和反向代理(reverse proxy)服务器。转发代理服务器又通常简称为代理服务器,我们常提到的代理服务器就指的是转发代理服务器。

转发代理服务器

    普通的转发代理服务器是客户端与原始服务器之间的一个中间服务器。为了从原始服务器获取内容,客户端发送请求到代理服务器,然后代理服务器从原始服务器中获取内容再返回给客户端。客户端必须专门地配置转发代理来访问其他站点,如在浏览器中配置代理服务器地址及端口号等。

    转发代理服务器的一个典型应用就是为处于防火墙后的内部客户端提供访问外部Internet网,比如校园网用户通过代理访问国外网站,公司内网用户通过公司的统一代理访问外部Internet网站等。转发代理服务器也能够使用缓存来缓解原始服务器负载,提供响应速度。


反向代理服务器

    而反向代理服务器则相反,在客户端来看它就像一个普通的Web服务器。客户端不要做任何特殊的配置。客户端发送普通的请求来获取反向代理所属空间的内容。反向代理决定将这些请求发往何处,然后就好像它本身就是原始服务器一样将请求内容返回。

    反向代理服务器的一个典型应用就是为处于防火墙后的服务器提供外部Internet用户的访问。反向代理能够用于在多个后端服务器提供负载均衡,或者为较慢的后端服务器提供缓存。此外,反向代理还能够简单地将多个服务器映射到同一个URL空间。

  

两者区别

    两者的相同点在于都是用户和服务器之间的中介,完成用户请求和结果的转发。主要的不同在于:

  (1)转发代理的内部是客户端,而反向代理的内部是服务器。即内网的客户端通过转发代理服务器访问外部网络,而外部的用户通过反向代理访问内部的服务器。

  (2)转发代理通常接受客户端发送的任何请求,而反向代理通常只接受到指定服务器的请求。如校园网内部用户可以通过转发代理访问国外的任何站点(如果不加限制的话),而只有特定的请求才发往反向代理,然后又反向代理发往内部服务器。

系统原理分析架构-四-squid(简介及正向代理)

分类: 系统原理分析架构 366人阅读 评论(0)  举报

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!

如有转载,请保留源作者博客信息。

Better Me的博客blog.csdn.net/tantexian

如需交流,欢迎大家博客留言。


一、squid简介
Squid Cache(简称为Squid)是软件。Squid用途广泛的,可以作为代理用户向web服务器请求数据并进行缓存,可以过滤流量帮助网络安全,也可以作为代理服务器链中的一环,向上级代理转发数据或直接连接互联网。还也可以用在局域网中,使局域网用户通过代理上网。

Squid将数据元缓存在内存中,同时也缓存DNS查寻的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP,Squid能够实现重叠的代理阵列,从而最大限度的节约带宽。
Squid由一个主要的服务程序Squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。
Squid的另一个优越性在于它使用访问控制清单(ACL)和访问权限清单(ARL)。访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点。

二、squid应用
    squid即可以作为正向代理服务器也可以作为反向代理服务器。更多关于代理服务器分类,请参考博文:系统原理分析架构-三--代理服务器简介及分类(2014-10-15 19:54)

    注:本来此文是讲解squid作为方向代理的页面缓存功能的,但是由于squid常用的还有正向代理功能,因此也一并讲解,后续文章中也会以这种思路进行讲解,这样通过对比更能加深对整个squid的理解。

1、squid正向代理服务器
    举个简单的例子,假若公司内网机器正常来说都不让访问外网。但是由于工作需要,为研发同事配备了一台统一能够访问外网查看资料的机器。这样每次大家有需要上外网则需要争抢唯一一台外网主机。这种情况在大多数公司存在。聪明的程序员肯定不肯罢休,怎么也要把自己机器捣鼓出能上外网。这时候squid正向代理就能派上用场了。

注:正向代理还包括透明代理,本专题。

2、使用squid正向代理访问外网:
(1)环境:
假设windows机器不能访问外网,能访问内网。(windows7)
有一台linux服务器,能访问外网,且windows机器能够与该机器互相访问。(centos 6.5 mini版,ip:192.168.10.36)
(2)node36上安装squid:
# yum install squid #安装squid

# vim /etc/sysctl.conf#开启路由转发功能
net.ipv4.ip_forward设置为1

# vi /etc/sysconfig/network

# sysctl -p#路由强制生效

# service network restart

配置squid:
# vim /etc/squid/squid.conf

#http_port指令告诉squid在哪个端口侦听HTTP请求。默认端口是3128

#缓存目录的设置,可以设置多个缓存目录,语法为: <目录所在>


#设置acl访问控制表
以允许192.168.10.0/24网段内所有客户机访问代理服务器为示例:
配置文件中添加acl my_allow_net src 192.168.10.0/24

配置文件中添加acl my_allow_net src 192.168.10.0/24
(注:该记录一定要添在deny all之前,应该配置文件读到deny all则后面的配置文件就不生效)


# squid -k parse

假如你看不到输出,配置文件有效,你能继续后面的步骤。然而,如果配置文件包含错误,squid会告诉你

# squid -z #初始化缓存空间

# /etc/init.d/squid restart#重启squid生效,起送squid时间比较长,耐心等待


(3)windows下测试代理服务器:

浏览器访问baidu.com

后台日志:
tailf /var/log/squid/access.log
普通正向代理成功。

3、高级功能配置项
#停止squid
最安全的停止squid的方法是使用squid -k shutdown命令:
# squid -k shutdown

#重配置运行中的squid进程,重配置运行中的squid最好的方法是使用squid -k reconfigure命令:
# squid -k reconfigure


#禁止来自某些IP地址的访问,在squid配置文件中添加以下acl名称及访问规则,并重新加载配置文件
acl deny_net src 192.168.20.6/32
http_access deny deny_net 

#禁止在某些时段访问
acl Working_times MTWHF 08:00-17:00
http_access allow Working_times 
http_access deny !Working_times 

# 禁止某个代理客户建立过多连接 
acl MaxConnLimit maxconn 4 
http_access deny MaxConnLimit 

4、关于squid的透明代理
透明代理业属于正向代理的一种,不同的是普通代理需要在客户端(浏览器局域网代理服务器)设置代理IP和PORT,而透明代理再通过NAT功能,将特定的数据请求映射到代理服务器上。
ex:#iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.62.0/24 --dport 80 -j REDIRECT --to-ports 3128
透明代理不再过多讲解,有兴趣请自行查阅相关资料。

 

系统原理分析架构-五-squid(反代理即web缓存服务器)

分类: 系统原理分析架构 150人阅读 评论(0)  举报

目录(?)[+]

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!

如有转载,请保留源作者博客信息。

Better Me的博客blog.csdn.net/tantexian

如需交流,欢迎大家博客留言。


反向代理的概念

关于代理服务器分类更多详情,请参考博文:系统原理分析架构-三--代理服务器简介及分类

反向代理服务器又称为 WEB 加速服务器,它位于 WEB 服务器的前端,充当 WEB 服

务器的内容缓存器。


反向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB 服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服务器的 IP 地址,这样 URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台 WEB 服务器交互。利用反向代理服务器减轻了后台 WEB 服务器的负载,提高了访问速度,同时避免了因用户直接与 WEB 服务器通信带来的安全隐患。


Squid 反向代理的实现原理

目前有许多反向代理软件,比较有名的有 Nginx 和 Squid 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

Squid是由美国政府大力资助的一项研究计划,其目的为解决网络带宽不足的问题,支持HTTP,HTTPS,FTP 等多种协议,是现在 Unix 系统上使用、最多功能也最完整的一套软体。下面将重点介绍 Squid 反向代理的实现原理和在提高网站性能方面的应用。

Squid反向代理服务器位于本地 WEB 服务器和 Internet 之间 , 组织架构如图 2:



搭建squid web缓存服务器


1、实验环境(由于机器有限,都在单机上面实验)

centos 6.5 X64 mini版 

squid服务器: ip 192.168.10.20

web服务器:ip 192.1v8.10.21

所有机器配置为16G内存


2、配置web服务器(node21):

测试方便,关闭selinux、关闭iptables


一下都采用默认,不做配置即可。

# vim /etc/httpd/conf/httpd.conf 

httpd监听端口:


DocumentRoot:网页存放的路径,文档的根目录


重启httpd

# service httpd rstart


页面访问httpd:




修改显示内容:

# vim /var/www/html/index.html

I' node21...


再次访问:


3、配置squid反向代理(node20):

# yum install squid


# vim /etc/squid/squid.conf


配置文件修改后使之生效:

squid -k parse
squid -k reconfigure
/etc/init.d/squid restart 或reload



附上重点配置截图:

配置生效:

squid -k reconfigure

访问192.168.10.20(被squid代理到node21上去了):


测试squid反向代理成功。


接下来测试真实场景下的squid代理openstack web:

已经存在的openstack访问地址为:


再用node20的squid做反向代理:

附上重要配置文件:

配置生效:

squid -k reconfigure


访问20(20的ip方向请求的内容为138内容)


查看:X-Cache-Lookup:参数HIT from node20:80(缓存命中)




查看缓存命中率:(squidclient 自行安装

squidclient -p 80 mgr:info



查看squid缓存了哪些内容:


讲解完毕。



最后附上squid的一些参考文章:

squid配置-cache_peer和cache_peer_domain详


详细解析用Squid实现反向代理的方法(一台多台)


阅读(1147) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~