缓存服务器

使用API网关构建微服务

二次信任 提交于 2019-12-18 13:54:04
本文总结 非常类似于API Manager提供的多租户订阅服务的功能。 将应用程序构建为一组微服务时,需要确定应用程序客户端 如何与微服务交互 。本文中,我们将讨论一下这对客户端与应用程序之间的通信有什么影响,并提出一种使用API网关的方法。 当使用微服务架构时,产品详情页面显示的数据归多个微服务所有。 客户端与微服务直接通信 从理论上讲,客户端可以直接向每个微服务发送请求。每个微服务都有一个公开的端点(https ://<serviceName>.api.company.name)。该URL将映射到微服务的负载均衡器,由它负责在可用实例之间分发请求。为了获取产品详情,移动客户端将逐一向上面列出的N个服务发送请求。 遗憾的是,这种方法存在挑战和局限。一个问题是客户端需求和每个微服务暴露的细粒度API不匹配。在这个例子中,客户端需要发送7个独立请求。在更复杂的应用程序中,可能要发送更多的请求。例如,按照Amazon的说法,他们在显示他们的产品页面时就调用了数百个服务。然而,客户端通过LAN发送许多请求,这在公网上可能会很低效,而在移动网络上就根本不可行。这种方法还使得客户端代码非常复杂。 客户端直接调用微服务的另一个问题是,部分服务使用的协议不是Web友好协议。一个服务可能使用Thrift二进制RPC,而另一个服务可能使用AMQP消息传递协议

Header Manipulation的认识和解决

纵饮孤独 提交于 2019-12-18 10:51:02
Header Manipulation Abstract HTTP 响应头文件中包含未验证的数据会引发 cache-poisoning、cross-site scripting、cross-user defacement、page hijacking、cookie manipulation 或 open redirect。 Explanation 以下情况中会出现 Header Manipulation 漏洞: 1. 数据通过一个不可信赖的数据源进入 Web 应用程序,最常 见的是 HTTP 请求。 2. 数据包含在一个 HTTP 响应头文件里,未经验证就发送给了 Web 用户。 如同许多软 件安全漏洞一样,Header Manipulation 只是通向终端的一个途径,它本身并不是终端。 从本质上看,这些漏 洞是显而易见的: 一个攻击者将恶意数据传送到易受攻击的应用程序,且该应用程序将数据包含在 HTTP 响 应头文件中。 其中最常见的一种 Header Manipulation 攻击是 HTTP Response Splitting。 为了成功地实施 HTTP Response Splitting 盗取,应用程序必须允许将那些包含 CR(回车,由 %0d 或 \r 指定)和 LF(换 行,由 %0a 或 \n 指定)的字符输入到头文件中。

LAMP网站架构方案解剖

三世轮回 提交于 2019-12-18 09:05:31
LAMP网站架构方案解剖 2011-03-18 10:46 月光 网络转载 字号: T | T 网站架构是比较考研技术的一件事,所以要对一种好用的工具,那么网站架构就会事半功倍,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。 AD: 2014WOT全球软件技术峰会北京站 课程视频发布 LAMP 用 LAMP 进行 网站架构 是非常容易的。 对于大流量、大并发量的网站系统架构来说,除了硬件上使用高性能的服务器、负载均衡、CDN等之外,在软件架构上需要重点关注下面几个环节:使用高性能的操作系统(OS)、高性能的网页服务器(Web Server)、高性能的数据库(Databse)、高效率的编程语言等。下面我将从这几点对其一一讨论。 一、操作系统 Linux操作系统有很多个不同的发行版,如Red Hat Enterprise Linux、SUSE Linux Enterprice、Debian、Ubuntu、CentOS等,每一个发行版都有自己的特色,比如RHEL的稳定,Ubuntu的易用,基于稳定性和性能的考虑,操作系统选择CentOS(Community ENTerprise Operating System)是一个理想的方案。 CentOS(Community ENTerprise Operating System

ASP.NET性能优化

情到浓时终转凉″ 提交于 2019-12-18 05:46:18
1. 数据库访问性能优化   数据库的连接和关闭   访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。   连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能。因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接限制的情况。   使用存储过程   存储过程是存储在服务器上的一组预编译的SQL语句,类似于DOS系统中的批处理文件。存储过程具有对数据库立即访问的功能,信息处理极为迅速。使用存储过程可以避免对命令的多次编译,在执行一次后其执行规划就驻留在高速缓存中,以后需要时只需直接调用缓存中的二进制代码即可。   另外,存储过程在服务器端运行,独立于ASP.NET程序,便于修改,最重要的是它可以减少数据库操作语句在网络中的传输。   优化查询语句   ASP.NET中ADO连接消耗的资源相当大,SQL语句运行的时间越长,占用系统资源的时间也越长。因此,尽量使用优化过的SQL语句以减少执行时间。比如,不在查询语句中包含子查询语句

性能提升的14条规则(九)

跟風遠走 提交于 2019-12-18 01:14:18
规则9——减少DNS查找 Internet是通过IP地址来查找服务器的。由于IP地址很难记忆,通常使用包含主机名的URLLAI 来取代它,但当浏览器发送其请求时,IP地址仍然是必需的。这就是Domain Name System(DNS)所处的角色。DNS将主机名映射到IP地址上,就像电话本将人名映射到他们的电话号码一样。当你在浏览器中键入 www.yahoo.com 时,连接到浏览器的DNS解析器会返回服务器的IP地址。 这个解释抢到了DNS——URL和实际宿主它们的服务器之间的一个间接层——的另外一项优点。如果一个服务器被另外一个具有不同IP地址的服务器取代了,DNS允许用户使用同样的主机名来连接到新的服务器。或者,比如在 www.yahoo.com 的例子中,可以将多个IP地址关联到一个主机名,为网站提供高冗余度。 然而,DNS也是开销。通常浏览器查找一个给定的主机名的IP地址要花费20~120毫秒。在DNS查找完成之前,浏览器不能从主机名那里下载到任何东西。响应时间依赖于DNS解析器(通常由你的ISP提供)、它所承担的请求压力、你与它之间的距离和你的宽带速度。在从浏览器的角度回顾完DNS的工作后,我将介绍如何减少页面花在DNS查找上的时间。 DNS缓存和TTL DNS查找可以被缓存起来以提高性能。这种缓存可以发生在由你的ISP或局域网中的一台特殊的缓存服务器上

理解RESTful 架构

戏子无情 提交于 2019-12-18 00:26:33
REST是所有Web应用都应该遵守的架构设计指导原则。 Representational State Transfer,翻译是”表现层状态转化”。 面向资源是REST最明显的特征,对于同一个资源的一组不同的操作。资源是服务器上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词。REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。(7个HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS) 什么是RESTful API? 符合REST架构设计的API。 总结 符合REST设计标准的API,即RESTful API。REST架构设计,遵循的各项标准和准则,就是HTTP协议的表现,换句话说,HTTP协议就是属于REST架构的设计模式。比如,无状态,请求-响应。。。 参考: 理解本身的REST架构风格 http://www.infoq.com/cn/articles/understanding-restful-style/ 理解RESTful架构 http://www.ruanyifeng.com/blog/2011/09/restful.html Restful API设计指南 http://www.ruanyifeng.com/blog/2014/05/restful_api.html 二

HTTP的缓存机制

﹥>﹥吖頭↗ 提交于 2019-12-17 21:58:08
前面的话 缓存机制可以有很多种:比如客户端缓存、服务端缓存、代理服务器缓存等。 而本文主角HTTP的缓存是 浏览器缓存 。为什么这么说,下面来详细介绍一下。 HTTP缓存分类 HTTP缓存可以分为 强缓存 与 协商缓存 。 强制缓存 当缓存数据库中已经有所请求的数据时,客户端直接从缓存数据库中获取数据。 当缓存数据库中没有要请求的数据时,客户端才会从服务端获取数据,并且服务器会将数据和缓存规则一起返回,缓存规则信息包含在响应头中。 Expires: 将资源失效的日期告知客户端。Expires是HTTP1.0的产物,先都用Cache-Control代替。 Cache-Control: 属性很多,用来控制缓存机制。 private:对指定客户端提供缓存 public:任何客户端与代理服务器都可以缓存 max-age:缓存内容在t秒之后失效 no-cache: 需要使用协商缓存来验证缓存数据 no-store: 所有资源都不缓存 协商缓存 客户端会先从缓存数据库中获取到一个缓存数据的标识,得到标识后请求服务器端验证是否失效,如果没有失效服务器端会返回304,此时客户端就可以直接从缓存数据库中获取数据。如果标识失效了,服务器会返回更新后的数据。 Last-Modified: 服务器在响应请求时,会告诉浏览器资源的最后修改时间 if-Modified-Since:浏览器再次请求服务器的时候

HTTP状态码

柔情痞子 提交于 2019-12-17 20:31:56
消息编辑 这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送 1xx 响应。 100 Continue 客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。 101 Switching Protocols 服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。 只有在切换新的协议更有好处的时候才应该采取类似措施。例如,切换到新的HTTP 版本比旧版本更有优势,或者切换到一个实时且同步的协议以传送利用此类特性的资源。 102 Processing 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。 成功编辑 这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。 200 OK 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。 201 Created

大并发服务器开发01

蓝咒 提交于 2019-12-17 20:20:06
基础 Linux系统编程 Linux网络编程 C++ 服务器设计目标 高性能(high performance):对于大量的并发请求,能及时快速做出响应,要求服务器最大限度发挥机器性能,使得机器在满负荷的情况下能够处理尽可能多的并发请求 高可用(high availability):服务器7*24小时不间断服务,故障转移 伸缩性(scalability):服务器具有良好的框架,业务分离,灵活部署 典型的服务器结构:网络I/O+服务器高性能编程技术+数据库 根据伸缩性,DAL(队列服务+连接池)应保证既可以跟应用服务放在同一台机器,也可以单独 降低数据库压力(提高并发能力): 队列+连接池 数据库只执行辅助操作 添加缓存(更新同步:timeout缓存失效,重新查询数据库)减少对数据库访问 缓存: 更新同步:timeout,缓存失效,重新查询数据库,实时性较差 缓存热点数据:一旦数据库中数据更新,立即通知前端缓存更新,实时性高 缓存换页:内存不够,讲不活跃的数据换出内存(FIFO、LRU、LFU) 使用nosql(基于key/value的非关系数据库(redis))缓存 如果缓存与应用服务器放在同一台机器为局部缓存,其它机器上的应用服务器无法访问 负载均衡: 对数据库的负载均衡 主从模式,读写分离(读>写),把一个数据库变成多个数据库服务器 replication机制

微服务 - 服务网关

ε祈祈猫儿з 提交于 2019-12-17 19:08:42
客户端直接访问微服务带来的问题 1、客户端的需求量与每个微服务暴露的细粒度API数量的不匹配。 2、亚马逊的产品最终页要请求数百个微服务。虽然一个客户端可以通过LAN发起很多个请求,但是在公网上这样会很没有效率,这个问题在移动互联网上尤为突出。这个方案同时会导致客户端代码非常复杂。 3、另一个存在的问题是客户端直接请求微服务的协议可能并不是web友好型。一个服务可能是用Thrift的RPC协议,而另一个服务可能是用AMQP消息协议。它们都不是浏览或防火墙友好的,并且最好是内部使用。应用应该在防火墙外采用类似HTTP或者WEBSocket协议。 4、另一个缺点是它很难重构微服务。随着时间的推移,我们可能需要改变系统微服务目前的切分方案。例如,我们可能需要将两个服务合并或者将一个服务拆分为多个。但是,如果客户端直接与微服务交互,那么这种重构就很难实施。 由于上述问题的原因,客户端直接与服务器端通信的方式很少在实际中使用。 使用API Gateway API Gateway是一个服务器,也可以说是进入系统的唯一节点。这跟面向对象设计模式中的Facet模式很像。API Gateway封装内部系统的架构,并且提供API给各个客户端。它还可能有其他功能,如授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理等。 API Gateway负责请求转发、合成和协议转换