精华内容
下载资源
问答
  • 架构即未来 现代企业可扩展的Web架构流程和组织.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
  • 架构即未来 现代企业可扩展的Web架构流程和组织 原书第2版.pdf
  • Nginx WEB架构实战篇.md

    2020-03-26 20:03:06
    Nginx WEB架构实战篇,动态网站架构,LNMP动态网站环境部署,Nginx的平滑升级深入学习,更好的掌握web架构
  • 高并发web架构完整1

    2012-11-20 12:41:25
    高并发web架构完整,一共2部分。
  • 架构即未来 现代企业可扩展的Web架构流程和组织 高清版本
  • 架构即未来 现代企业可扩展的Web架构流程和组织 原书第2版.架构即未来 现代企业可扩展的Web架构流程和组织 原书第2版.架构即未来 现代企业可扩展的Web架构流程和组织 原书第2版.
  • 高性能Web架构设计方案

    千次阅读 2019-04-12 10:13:11
    大型Web网站的特点如下: 大型Web网站的技术挑战主要...首先要从架构方面入手,以高性能架构为基础,辅以优化后的前端应用(如减少Http请求,终端缓存等等)和后台程序(如Jvm优化,操作系统优化等等)即可以构建...

    大型Web网站的特点如下:
    在这里插入图片描述
    大型Web网站的技术挑战主要来自于大量的用户,高并发的访问和海量的数据存储,任何简单的业务一旦需要处理TB级别的数据和面对数以亿计的用户,问题就会变得很棘手。那么如何打造一个高可用、高性能、易扩展、可伸缩且安全的网站?首先要从架构方面入手,以高性能架构为基础,辅以优化后的前端应用(如减少Http请求,终端缓存等等)和后台程序(如Jvm优化,操作系统优化等等)即可以构建一个高性能的Web网站。
    首先我们来了解下构建一个高性能Web网站时,性能的瓶劲在哪里?如下图所示:
    在这里插入图片描述
    从上图可以分析出性能瓶劲主要表现在两个方面:
    1、 硬件资源层面,如不同运营上的网络,服务器的带宽限制,服务器的CPU、内存及磁盘IO等;
    2、 软件层面,Web应用程序的性能,数据库服务器的性能;
    硬件资源的提升对性能的提升时逐级递减的直至趋于0,所以性能的提高不能通过无休止的增加硬件资源,所以我们就要考虑如何从软件架构的层面来提供性能,下图为高性能架构的主要思路:
    在这里插入图片描述
    架构思路的说明如下:
    1、 负载均衡,包括早期的使用DNS负载均衡,四层交换的负载均衡及七层交换的负载均衡;一般业界多采用硬件四层交换负载均衡和软件四层交换负载均衡,硬件四层交换负载均衡优势时稳定性高,功能强大,但价格较高,一般的公司难以承受,典型产品是F5、A10;软件四层交换负载均衡的优势是免费开源,通过热备等方式也可以构建一个稳定性高的负载均衡,所以我们的首选软件四层交换负载均衡(即LVS)
    2、 高可用性方面要考虑避免单点故障,需要引入热备(包括主从和主主两种方式),集群以及灾备;
    3、 Web应用开发架构方面要选择合适的应用开发框架同时考虑将动态页面进行静态化并进行静态资源(图片,CSS,JS及页面)的缓存(此点建议使用Nginx或者Varnish进行缓存);数据存储方面考虑使用分布式存储系统(需要根据所存储文件的大小选择合适的存储系统,比如一般的图片文件和视频文件选择的存储系统就会有所不同,前者一般可以选择FastDFS,后者选择HDFS)以及引入数据缓存(如Redis集群)和NoSql数据库(也叫内存数据库,比如:MongoDB)
    4、 数据库方面需要考虑进行读写分离,分库、分表、分区等;
    5、 网络方面引入CDN来解决不同网络服务商的接入速度问题并考虑在不同运营商机房部署服务器,通过镜像技术来实现不同网络服务商的接入速度问题。
    Web应用架构的演化历程:
    在这里插入图片描述
    Web应用架构的特点如下图
    在这里插入图片描述
    微服务架构有其明显的优势,已经是目前及未来Web应用架构的首选,其缺点是:微服务过多,服务治理成本高,不利于系统维护;分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大;所以如果是一般初学者建议还是选择先从MVC架构开始。
    综合以上的简单分析,我们可以大致得出高性能的架构如下图:
    在这里插入图片描述
    1、 使用LVS作为软件四层交换负载均衡并使用Heartbeat实现双机热备;
    2、 使用反向代理软件来实现数据缓存(静态资源缓存),此处我们可以选择使用Nginx或者Varnish
    3、 Web应用框架可以更加系统规模进行选择,小编建议初学者选择先从MVC架构开始;
    4、 数据持久化层使用MyBatis以提高性能,数据缓存使用Redis集群;
    5、 分布式存储选择HDFS并引入NoSql数据库,数据库方面实现读写分离和热备,必要的时候还需要分库分表等;
    以上介绍了高性能Web架构设计方案,希望对大家对高性能Web架构有所了解。高性能Web架构涉及到的知识还有很多,小编整理了架构学习相关的技术资料,希望对大家有所帮助,以下为部分资料截图:
    在这里插入图片描述
    需要这些技术资料的同学,请关注我们的微信公众号回复“架构”获取资料下载地址。
    在这里插入图片描述

    展开全文
  • 主流Web架构详解

    千次阅读 2019-05-27 18:40:28
    主流Web架构详解 WEB程序的架构基本上可以分成以下三类: 一 、基于“组件”(Component ,GUI设计也常称控件)、事件驱动的架构,最常见的是微软的.NET。基本思想是把程序分成很多组件,每个组件都可以触发事件...

    主流Web架构详解

     

    WEB程序的架构基本上可以分成以下三类:

    一 、基于“组件”(Component ,GUI设计也常称控件)、事件驱动的架构,最常见的是微软的.NET。基本思想是把程序分成很多组件,每个组件都可以触发事件,调用特定的事件处理器来处理(比如在一个HTML按钮上设置onClick事件链接到一个PHP函数)。这种设计远离HTTP,HTTP请求完全抽象,映射到一个事件。

    事实上这种设计原本最常应用于传统桌面GUI程序的开发,例如Delphi,Java Swing等。所有表现层的组件比如窗口,或者HTML表单都可以由IDE来提供,我们只需要在IDE里点击或拖动鼠标就能够自动添加一个组件,并且添加一个相应的事件处理器。

    二 、基于“WEB页面/文件”,例如CGI和PHP/ASP程序。程序的文件分别存储在不同的目录里,与URL相对应。当HTTP请求提交至服务器时,URL直接指向某个文件,然后由该文件来处理请求,并返回响应结果。

    比如http://www.website.conm/news/readnews.php?id=1234

    可以想像,我们在站点根目录的news目录下放置一个readnews.php文件。

    这种开发方式最自然,最易理解,也是PHP最常用的方式。要注意产生的URL对搜索引擎不友好,不过你可以用服务器提供的URL重写方案来处理,例如Apache的mod_rewrite。

    三 基于“动作”(Action)。这是MVC架构的WEB程序所采用的最常见的方式。目前主流的WEB框架像Struts、Webwork(Java),Ruby on Rails(Ruby),Zend Framework(PHP)等都采用这种设计。URL映射到控制器(controller)和控制器中的动作(action),由action来处理请求并输出响应结果。这种设计和上面的基于文件的方式一样,都是请求/响应驱动的方案,离不开HTTP。

    比如 http://www.website.com/news/read/id/1234

    可以想像在实际代码中,我们会有一个控制器newsController,其中有一个readAction。不同框架可能默认实现方式稍有不同,有的是一个Controller一个文件,其中有多个Action,有的是每个Action一个文件。当然这些你都可以自己控制,题外话。

    这种方式的URL通常都很漂亮,对搜索引擎友好,因为很多框架都自带有URL重写功能。可以自由规定URL中controller、action及参数出现的位置。

    另外,还有更直接的基于URL的设计方案,那就是REST。通过人为规定URL的构成形式(比如Action限制成只有几种)来促进网站之间的互相访问,降低开发的复杂性,提高系统的可伸缩性。REST对于Web Services来说是一个创新。

    虽然本文讨论的是单个项目所采用的架构,而REST是为了解决网站之间的通讯问题,但REST的出现,会对单个项目的架构造成影响(很显然你在开发时就要构造规范的URL)。将来混用REST和MVC应该也是一种趋势。RoR提供很好的REST支持,Zend Framework也提供了Zend_Rest来支持REST,包括Server和Client。

    三代WEB存在的问题:

    (1)效率问题

    这里指的不是开发效率,而是代码的执行效率。众所周知,正常情况下,PHP的执行是相当高效的。但是目前这种基于控件的框架效率都成问题。Prado本身提供了一个缓存机制来缓解这个问题。如果不采用缓存,可以说很多站点根本不能使用Prado这样的框架,比如门户网站,大型论坛等。

    但ASP .NET不太一样,因为它是编译型的框架,最后生成的代码是编译生成的,不需要再次进行中间过程的诸多处理,所以在第一次执行之后速度会很快,执行效率还是很高的。 这是语言层次的功能,Prado无法通过代码层次的努力完全弥补。

    (2)没有强大的IDE支持

    设置控件的属性,添加其对应的事件处理器,看似简单,但控件多了,这也是个繁重的工作。.NET的强大就在于它把程序员从重复的工作中解放了出来,设置属性很方便,事件处理器也会自动添加。Prado目前没有这样的IDE支持。

    总之,这种基于控件的框架比较适合于用户交互较多的,需要对页面中的很多组件设置不同处理操作,但对于性能要求不高的应用。另外,带有组件支持的框架通常对AJAX的支持都较好,比如.NET和Ruby on Rails。

    综上,三种架构基本上可以代表目前的所有主流WEB开发方式,包括PHP,JavaEE,.NET,Ruby/RoR。

    展开全文
  • 三种主流Web架构

    万次阅读 2018-01-21 09:48:54
    三种主流Web架构 做WEB好几年了,各种语言和技术都稍有涉猎。今天心血来潮,突然想总结一下。其实不论什么技术,什么需求,通常WEB开发就是通过WEB前端管理一个或大或小或独立或分布式的关系型数据库,很多东西都...

                                              三种主流Web架构

    做WEB好几年了,各种语言和技术都稍有涉猎。今天心血来潮,突然想总结一下。其实不论什么技术,什么需求,通常WEB开发就是通过WEB前端管理一个或大或小或独立或分布式的关系型数据库,很多东西都是相通的。这里说的WEB架构,是指WEB应用开发中每种技术独有的资源组织形式(包括文件,数据库,HTTP请求处理等。注意并非OO的开发方式才有架构一说),也许说开发方式更容易让人理解一些。

    以下想法主要以PHP实现为示例,但很多体会我想Java,.NET,Ruby开发者应该也很容易理解。最后是我对于刚面世就引起无数人关注的Delphi fo PHP的评测。

    WEB程序的架构基本上可以分成以下三类:

    (一) 基于“WEB页面/文件”,例如CGI和PHP/ASP程序。程序的文件分别存储在不同的目录里,与URL相对应。当HTTP请求提交至服务器时,URL直接指向某个文件,然后由该文件来处理请求,并返回响应结果。

    比如http://www.website.conm/news/readnews.php?id=1234

    可以想像,我们在站点根目录的news目录下放置一个readnews.php文件。

    这种开发方式最自然,最易理解,也是PHP最常用的方式。要注意产生的URL对搜索引擎不友好,不过你可以用服务器提供的URL重写方案来处理,例如Apache的mod_rewrite。

    (二) 基于“动作”(Action)。这是MVC架构的WEB程序所采用的最常见的方式。目前主流的WEB框架像Struts、Webwork(Java),Ruby on Rails(Ruby),Zend Framework(PHP)等都采用这种设计。URL映射到控制器(controller)和控制器中的动作(action),由action来处理请求并输出响应结果。这种设计和上面的基于文件的方式一样,都是请求/响应驱动的方案,离不开HTTP。

    比如 http://www.website.com/news/read/id/1234

    可以想像在实际代码中,我们会有一个控制器newsController,其中有一个readAction。不同框架可能默认实现方式稍有不同,有的是一个Controller一个文件,其中有多个Action,有的是每个Action一个文件。当然这些你都可以自己控制,题外话。

    这种方式的URL通常都很漂亮,对搜索引擎友好,因为很多框架都自带有URL重写功能。可以自由规定URL中controller、action及参数出现的位置。

    另外,还有更直接的基于URL的设计方案,那就是REST。通过人为规定URL的构成形式(比如Action限制成只有几种)来促进网站之间的互相访问,降低开发的复杂性,提高系统的可伸缩性。REST对于Web Services来说是一个创新。

    虽然本文讨论的是单个项目所采用的架构,而REST是为了解决网站之间的通讯问题,但REST的出现,会对单个项目的架构造成影响(很显然你在开发时就要构造规范的URL)。将来混用REST和MVC应该也是一种趋势。RoR提供很好的REST支持,Zend Framework也提供了Zend_Rest来支持REST,包括Server和Client。

    (三) 基于“组件”(Component ,GUI设计也常称控件)、事件驱动的架构,最常见的是微软的.NET。基本思想是把程序分成很多组件,每个组件都可以触发事件,调用特定的事件处理器来处理(比如在一个HTML按钮上设置onClick事件链接到一个PHP函数)。这种设计远离HTTP,HTTP请求完全抽象,映射到一个事件。

    事实上这种设计原本最常应用于传统桌面GUI程序的开发,例如Delphi,Java Swing等。所有表现层的组件比如窗口,或者HTML表单都可以由IDE来提供,我们只需要在IDE里点击或拖动鼠标就能够自动添加一个组件,并且添加一个相应的事件处理器。

    这种开发方式有几个优点:

    复用性 -代码高度可重用。

    易于使用 -通常只需要配置控件的属性,编写相关的事件处理函数。

    我个人也挺喜欢这种方式,PEAR就提供了相当强大的HTML_QuickForm,用于在页面添加表单元素及其事件处理函数,还可以与Smarty等模板引擎相结合。这对于项目开发来说是一个补充性的功能,在项目中的某些部份使用QuickForm,有时可以大大加快开发。

    而完全基于组件和事件驱动的开发框架对于PHP来说也已经不新鲜,PRADO就是一个这样的框架,曾经得过Zend编程大赛的头奖。但目前来说很显然Prado所提倡的这种开发方式仍然没有被大部份PHP程序员所接受。为什么呢?

    我觉得主要有以下两个问题:

    (1)效率问题

    这里指的不是开发效率,而是代码的执行效率。众所周知,正常情况下,PHP的执行是相当高效的。但是目前这种基于控件的框架效率都成问题。Prado本身提供了一个缓存机制来缓解这个问题。如果不采用缓存,可以说很多站点根本不能使用Prado这样的框架,比如门户网站,大型论坛等。

    但ASP .NET不太一样,因为它是编译型的框架,最后生成的代码是编译生成的,不需要再次进行中间过程的诸多处理,所以在第一次执行之后速度会很快,执行效率还是很高的。 这是语言层次的功能,Prado无法通过代码层次的努力完全弥补。

    (2)没有强大的IDE支持

    设置控件的属性,添加其对应的事件处理器,看似简单,但控件多了,这也是个繁重的工作。.NET的强大就在于它把程序员从重复的工作中解放了出来,设置属性很方便,事件处理器也会自动添加。Prado目前没有这样的IDE支持。

    总之,这种基于控件的框架比较适合于用户交互较多的,需要对页面中的很多组件设置不同处理操作,但对于性能要求不高的应用。另外,带有组件支持的框架通常对AJAX的支持都较好,比如.NET和Ruby on Rails。

    综上,三种架构基本上可以代表目前的所有主流WEB开发方式,包括PHP,JavaEE,.NET,Ruby/RoR。

    目前PHP开发的状况和未来的趋势:

    平时做PHP比较多,特别总结一下PHP开发的趋势。目前在PHP开发中,我们最常用的是基于“文件”的架构,其实也就是一种“面向过程”的开发方式。通常我们写PHP程序的目的就是“快点上线,让程序跑起来”。而且大多数PHP程序员还要和HTML、CSS做近身搏斗,所以如果程序太抽象,调整视觉效果就比较困难。所以对于小项目,这是一个最好的选择。

    但越来越多人认识到,面向对象和MVC框架更能促进代码的复用和分享,而且程序易于扩展,随着程序复杂性的增加这个趋势越明显。所以OO框架层出不穷。目前PHP框架当中最有前景的是CakePHP、Symphony和Zend Framework,各自拥有活跃的社区和庞大的用户群,都在快速成长当中。PHP的框架都避免走Java框架庞大臃肿的老路,致力于快速开发,而且主动模仿和吸收RoR这些优秀框架的新特性。随着PHP5的普及和这些框架的成熟,加上PHP原本开发社区的庞大人数,将来也许又会再产生出一些行业性的标准。

    这种选择适合于中大型项目,特别是需要较大的团队合作和需要长期维护和二次开发情况。个人认为这是将来PHP开发的趋势。

    而对于基于组件和事件驱动的开发方式大多数PHP程序员都不感兴趣。但是也有不少人在做这方面的努力,例如Codegear的Delphi for PHP,就吸引了很多人的关注。如果有强大的商业支持,也许将来在开发市场也会占一席之地。

    我会在下一篇文章介绍D4P的新特性并作评测。

    WEB开发的未来展望:

    随着更贴近HTTP的REST的流行,我觉得像.NET和Java中的抽象组件的方式会受到冲击。因为这些组件并不如它们所承诺的那么方便。未来MVC+REST+RIA的模式应该会比较流行。

    AJAX是一把双刃剑,尽管事件驱动的架构看起来非常适合于处理异步的请求(可以想像页面中存在几个组件,每个组件都可以触发异步请求,对应对服务器端的某个事件处理器,看起来是很理想的一个处理方式),但要为客户端自动生成良好的JavaScript代码是很不容易的,要满足各种浏览器的兼容性要求,还要能够自己进行扩展,以满足项目中千奇百怪的需求。 很多时候我更倾向于使用一些JS框架如Prototype来自己开发各种效果,而不是在服务器端生成。在服务器端生成JS的两个结果,一是对生成的代码不信任,二是人变傻,因为你并不知道真正发生了什么。

    (一点牢骚也贴上来)

    关于WEB开发的个人疑惑:

    l 为了让开发更简单,我们不得不学习使用复杂的开发工具和框架,这到底是一个进步,还是退步?

    l IDE让程序员变聪明还是变傻? 当我们在服务器代码里面就可以设计客户端界面,这是一个进步还是退步?

    举个例子说,微软的ASP.NET AJAX,让我们可以在服务器端设计各种异步的控件。那么程序员甚至可以不会Javascript,不懂AJAX就设计出各种客户端效果。要是哪一天项目需要设计稍复杂的效果,靠IDE和框架无法自动完成,你要怎么办? 到这个时候再来学JS,也许就迟了。更可怕的是,技术在更新和淘汰,可能十年之后,你会发现自己除了各种IDE之后,真正精通的技术很少,脱离了IDE你写一个小程序都要查半天API手册,因为你平时都是依赖“自动补齐”来写代码的! 这样的情景,我想没有人愿意发生。

    也许对于短期开发的项目来说,是一个进步,但对于程序员个人的成长来说,这并不是好事。对工具的依赖,导致了我们对于底层和核心技术的不求甚解,限制了个人的成长。


     先前我曾经介绍过利用Apache Axis实现基于SOAP的Web Service实现技术和相关代码,总的来说,SOAP的Web Service解决方案虽然较为成熟,且安全性较好,但是使用门槛较高,在大并发情况下会有性能问题,在互联网上使用不太普及,因此并不太适合Web 2.0网站服务使用,目前大量的Web 2.0网站使用另外一种解决方案——REST。

      REST的架构设计

      REST(Representational State Transfer)是一种轻量级的Web Service架构风格,其实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。

      REST架构遵循了CRUD原则,CRUD原则对于资源只需要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就可以完成对其操作和处理。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。

      REST架构让人们真正理解我们的网络协议HTTP本来面貌,对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法,因此REST把HTTP对一个URL资源的操作限制在GET、POST、PUT和DELETE这四个之内。这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

      REST的设计准则

      REST架构是针对Web应用而设计的,其目的是为了降低开发的复杂性,提高系统的可伸缩性。REST提出了如下设计准则:

      网络上的所有事物都被抽象为资源(resource);

      每个资源对应一个唯一的资源标识符(resource identifier);

      通过通用的连接器接口(generic connector interface)对资源进行操作;

      对资源的各种操作不会改变资源标识符;

      所有的操作都是无状态的(stateless)。

      使用REST架构

      对于开发人员来说,关心的是如何使用REST架构,这里我们来简单谈谈这个问题。REST不仅仅是一种崭新的架构,它带来的更是一种全新的Web开发过程中的思维方式:通过URL来设计系统结构。REST是一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。REST有很多成功的使用案例,著名的Delicious和Flickr都提供基于REST风格的API使用,客户端调用也极其方便,下面是我用ASP写的一个很简单的REST举例,从中可以看出REST是多么的简单易用。

      客户端代码:

    Private Function httpGet(url, method, data)
        Dim xmlhttp
        Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
        xmlhttp.open method, url + "?" + data, False
        xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
        xmlhttp.setRequestHeader "Content-Length", Len(data)
        xmlhttp.send (Null)
        If (xmlhttp.Status = 200) Then httpGet = xmlhttp.responseText
        Set xmlhttp = Nothing
    End Function

    Private Function httpPost(url, method, data)
        Dim xmlhttp
        Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
        xmlhttp.open method, url, False
        xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
        xmlhttp.setRequestHeader "Content-Length", Len(data)
        xmlhttp.send (data)
        If (xmlhttp.Status = 200) Then httpPost = xmlhttp.responseText
        Set xmlhttp = Nothing
    End Function

    Private Function httpPut(url, method, data)
        Dim xmlhttp
        Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
        xmlhttp.open method, url, False
        xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
        xmlhttp.setRequestHeader "Content-Length", Len(data)
        xmlhttp.send (data)
        If xmlhttp.Status >= 400 And xmlhttp.Status <= 599 Then
            response.write " Error Occurred : " & xmlhttp.Status & " - " & xmlhttp.statusText
        Else
            response.write xmlhttp.responseText
        End If
        If (xmlhttp.Status = 200) Then httpPut = xmlhttp.responseText
        Set xmlhttp = Nothing
    End Function

    Private Function httpDelete(url, method, data)
        Dim xmlhttp
        Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
        xmlhttp.open method, url + "?" + data, False
        xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
        xmlhttp.setRequestHeader "Content-Length", Len(data)
        xmlhttp.send (Null)
        If xmlhttp.Status >= 400 And xmlhttp.Status <= 599 Then
            response.write " Error Occurred : " & xmlhttp.Status & " - " & xmlhttp.statusText
        Else
            response.write xmlhttp.responseText
        End If
        If (xmlhttp.Status = 200) Then httpDelete = xmlhttp.responseText
        Set xmlhttp = Nothing
    End Function

    response.write httpPost("http://localhost/rest/service.asp", "POST", "do=POST")
    response.write httpGet("http://localhost/rest/service.asp", "GET", "do=GET")
    response.write httpPut("http://localhost/rest/service.asp", "PUT", "do=PUT")
    response.write httpDelete("http://localhost/rest/service.asp", "DELETE", "do=DELETE")

      服务端代码:

    Response.Write Request.ServerVariables("REQUEST_METHOD")
    If (Request.ServerVariables("REQUEST_METHOD")="GET") Then
     Response.Write "DO GET" + Request("do")
    ElseIf (Request.ServerVariables("REQUEST_METHOD")="POST") Then
     Response.Write "DO POST" + Request("do")
    ElseIf (Request.ServerVariables("REQUEST_METHOD")="PUT") Then
     Response.Write "DO PUT" + Request("do")
    ElseIf (Request.ServerVariables("REQUEST_METHOD")="DELETE") Then
     Response.Write "DO DELETE" + Request("do")
    End if


      需要注意的是,IIS服务器默认是不支持ASP文件的PUT和DELETE操作,默认会返回“403 - Forbidden”错误,因此需要修改IIS的设置,修改方法是:管理根据-IIS信息服务器-网站-属性-主目录-应用程序配置-配置-映射,选择ASP - 编辑 - 修改为全部动作。


    展开全文
  • 内容包括 技术选型、技术架构图、技术架构说明(通讯层,展示层,数据层,服务层等)、其他(用户登录,token认证,日志系统,会话治理)
  • WEB架构设计概述

    万次阅读 2018-05-24 16:55:55
    题记 初始搭建 开始就是各种框架一搭,然后扔到Tomcat容器中跑就是了,这时候我们的文件,...由于我们是单体架构,优化架构在短时间内是不现实的,增加机器是一个不错的选择。这时候,我们可能要把应用和数据库服务单独

    一、背景知识

    1、正向代理与反向代理

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

    二、架构演变

    1、初始搭建

            基于框架,运行在Tomcat容器中。文件、数据库、应用程序在一个服务器上。

    2、服务分离

            随着用户量上升,单台服务器无法满足系统的负载,可以把应用服务器和数据服务器单独部署,如果有条件也可以把文件服务器单独部署。

    3、反向代理

           为了提升服务处理能力,我们在Tomcat容器前加一个代理服务器,比如Nginx、apache也。用户的请求发送给反向代理,然后反向代理把请求转发到后端的服务器。严格意义上来说,Nginx属于web服务器一般处理静态html、css、js请求,而Tomcat属于web容器,专门处理JSP请求,当然Tomcat也是支持html的,只是效果没有Nginx好而已。

    4、动静分离

            基于以上Nginx反向代理,我们还可以实现 动静分离,静态请求如html、css、js等请求交给Nginx处理,动态请求分发给后端Tomcat处理。Nginx 升级到1.9.5+可以开启HTTP/2.0时代,加速网站访问。当然,如果公司不差钱, CDN也是一个不错的选择。

    5、服务拆分

            在这分布式微服务已经普遍流行的年代,其实我们没必要踩过多的坑,就很容易进行拆分。市面上已经有相对比较成熟的技术,比如阿里开源的Dubbo(官方明确表示已经开始维护了),Spring家族的SpringCloud,当然具体如何去实施,无论是技术还是业务方面都要有很好的把控。

    (1)Dubbo

    (2)SpringCloud

    • 服务发现——Netflix Eureka
    • 客服端负载均衡——Netflix Ribbon
    • 断路器——Netflix Hystrix
    • 服务网关——Netflix Zuul
    • 分布式配置——Spring Cloud Config

    (3)微服务与轻量级通信

    • 同步通信和异步通信
    • 远程调用RPC
    • REST
    • 消息队列

    6、持续集成部署

            服务拆分以后,随着而来的就是持续集成部署,你可能会用到以下工具:Docker、Jenkins、Git、Maven。基本拓扑结构如下所示:


            整个持续集成平台架构演进到如下图所示:

    7、服务集群

            Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)。其实,我们最常见的也是生产中最常接触到的就是负载均衡集群。

    (1)负载均衡实现

    • DNS负载均衡,一般域名注册商的dns服务器不支持,但博主用的阿里云解析已经支持
    • 四层负载均衡(F5、LVS),工作在TCP协议下
    • 七层负载均衡(Nginx、haproxy),工作在Http协议下

    (2)分布式session

            大家都知道,服务一般分为有状态和无状态,而分布式sessoion就是针对有状态的服务。

    8、读写分离

            MySql主从配置,读写分离并引入中间件,开源的MyCat,阿里的DRDS都是不错的选择。如果是对高可用要求比较高,但是又没有相应的技术保障,建议使用阿里云的RDS或者Redis相关数据库,省事省力又省钱。

    9、缓存优化

           引入缓存无非是为了减轻后端数据库服务的压力,防止其"罢工"。常见的缓存服务有,Ehcache、OsCache、MemCache、Redis,当然这些都是主流经得起考验的缓存技术实现,特别是Redis已大规模运用于分布式集群服务中,并证明了自己优越的性能。

    10、消息队列

    (1)异步通知:比如短信验证,邮件验证这些非实时反馈性的逻辑操作。

    (2)流量削锋:应该是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

    (3)日志处理:系统中日志是必不可少的,但是如何去处理高并发下的日志确是一个技术活,一不小心可能会压垮整个服务。工作中我们常用到的开源日志ELK,为嘛中间会加一个Kafka或者redis就是这么一个道理(一群人涌入和排队进的区别)。

    (4)消息通讯:点对点通信(个人对个人)或发布订阅模式(聊天室)。

    11、日志服务

        消息队列中提到的ELK开源日志组件对于中小型创业供公司是一个不错的选择。

    12、安全优化

        以上种种,没有安全做保证可能都会归于零。

    • 阿里云的VPN虚拟专有网络以及安全组配置
    • 自建机房的话,要自行配置防火墙安全策略
    • 相关服务访问,比如Mysql、Redis、Solr等如果没有特殊需求尽量使用内网访问并设置鉴权
    • 尽量使用代理服务器,不要对外开放过多的端口
    • https配合HTTP/2.0也是个不错的选择

    三、设计原则

    1、高可用

    • 负载均衡(负载均衡算法)
    • 反向代理
    • 服务隔离
    • 服务限流
    • 服务降级(自动优雅降级)
    • 失效转移
    • 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时)
    • 回滚机制(上线回滚、数据库版本回滚、事务回滚)

    2、高并发

    • 客户端缓存(减少网络带宽、降低服务器压力、减少网络延迟)
    • HTTP缓存
    • 多级缓存
    • 分布式缓存
    • 连接池
    • 异步并发

    3、分布式事务

    • 二阶段提交(强一致)
    • 三阶段提交(强一致)
    • 消息中间件(最终一致性),推荐阿里的RocketMQ

    4、队列

    • 任务队列
    • 消息队列
    • 请求队列

    5、数据库技术

    • 主从复制(易于扩展、可用备份)
    • 读写分离(提高查询速度、减少IO瓶颈、高扩展)
    • 单体垂直扩容(业务分离、高扩展、高性能)
    • 单体水平扩容(高扩展、高性能)
    • 数据异构

    6、网络安全

    • SQL注入
    • XSS攻击
    • CSRF攻击
    • 拒绝服务(DoS,Denial of Service)攻击

    7、负载均衡

    • 网络(全局负载均衡,DNS轮询、CDN网络分发)
    • 硬件(本地负载均衡,负载均衡器、地址转换网关,效率高但价格贵)
    • 软件(本地负载均衡,Linux Virtual Server、Nginx、HAProxy)

    四、必备工具

    1、操作系统

        Linux(必备)、微软

    2、负载均衡

        DNS、F5、LVS、Nginx、OpenResty、HAproxy、负载均衡SLB(阿里云)

    3、分布式框架

        Dubbo、Motan、Spring-Could

    4、数据库中间件

        DRDS (阿里云)、Mycat、360Atlas、Cobar (不维护了)

    5、消息队列

        RabbitMQ、ZeroMQ、Redis、ActiveMQ、Kafka

    6、注册中心

        Zookeeper、Redis

    7、缓存

        Redis、Oscache、Memcache、Ehcache

    8、集成部署

        Docker、Jenkins、Git、Maven

    9、存储

        OSS、NFS、FastDFS、MogileFS

    10、数据库

        MySql、Redis、MongoDB、PostgreSQL、Memcache、HBase

    11、网络

        专用网络VPC、弹性公网IP、CDN

     

     

    参考:https://www.cnblogs.com/smallSevens/p/7476838.html

    展开全文
  • 高并发web架构完整

    2012-11-20 12:36:24
    高并发web架构完整高并发web架构完整
  • 大型web网站架构详解

    2017-11-16 19:35:11
    大型web网站架构详解, 负载均衡、session共享、反向代理、集群技术、动静分离技术讲解
  • linux-web架构设计

    2018-07-31 01:20:09
    linux-web架构设计(超清彩图带目录) --学web架构必备之书
  • Data Feeds Service服务器配置与Web架构浅析崔日新? 2009 Eyeblaster. All rights reserved目录服务器配置 开发环境配置 部署环境配置智慧餐饮项目架构 之前项目架构商户系统架构 商户系统程序架构高性能高扩展性Web...
  • 浅谈web架构之架构设计(总结)

    千次阅读 2018-03-12 09:56:33
    架构模式先来说说模式: 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地用该方案而不必做重复工作 。先来说说常见的网站架构模式。这里没有涉及具体实现过程,...
  • 阿里云经典web架构分析

    千次阅读 2018-08-06 17:21:20
    http://blog.51cto.com/lwm666/2124514 看连接分析
  • 所谓扩展,并不只是为了设计用户过多时不会崩溃的Web站点。它所要设计的,是在业务需求增长时,不会崩溃的公司。本书的作者们战斗在我们这个时代最成功的Internet公司的前沿,他们与我们分享的,并不只是如何在竞争...
  • 三层架构即―表现层‖,―业务层‖,―持久化层‖。表现层实现的代表作品是Struts框架,业务层实现的代表作品是Spring,持久层实现的代表作品是Hibernate。
  • 查看网站web架构

    千次阅读 2018-12-12 16:37:34
    ** 打开网址后输入URL:https://toolbar.netcraft.com/site_report ** 例如百度的https://www.baidu.com/
  • 高性能Web架构方式

    2009-11-11 11:00:58
    如何通过Rails去构建高性能Web架构
  • 分布式web架构

    千次阅读 2017-06-23 16:01:25
  • 高并发、高性能 Web 架构

    万次阅读 2017-02-28 14:59:50
    典型 Web App 架构 以下是一个典型的高负载 web 应用示例: 上图展示了一个典型的,三层架构的高性能 Web 应用。这种成熟的架构多年以来已被广泛部署于包括 Google、Yahoo、Facebook、Twitter、...
  • 从lamp到高可用的web架构的演进

    千次阅读 2018-05-26 10:53:32
    本文受互联网架构大会中美团、滴滴等互联网公司架构演进的启发,并结合自己的实践和实验,从宏观的角度讲述从简单lamp(linux apache mysql php)到高可用web架构的一步步迭代过程。 下面的内容主要是从单一业务的...
  • Web架构——MVC

    2011-09-28 23:16:08
    Web架构——MVC Web架构——MVC Web架构——MVC Web架构——MVC
  • Web架构测试.docx

    2011-10-26 10:32:36
    Web架构测试.docx Web架构测试.docx Web架构测试.docx Web架构测试.docx Web架构测试.docx Web架构测试.docx Web架构测试.docx
  • Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求。 总结起来大概有下面几点技能要求:一、 架构师有优秀的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 674,739
精华内容 269,895
关键字:

web架构