raid技术小结

raid5是在raid3基础上做的优化,raid3和raid5的可用磁盘数都是n-1,但是raid3又块单独的校验盘,每次写数据都会写校验盘导致对校验盘的读写过多容易故障,raid5的校验位是round robin方式每块盘轮流写校验位。校验位的值是所有实际需要写的数据位取异或就是XOR的值。

缓存

缓存其实就是Cache是经常用来提高性能的手段,CDN和反向代理本质都是缓存。
这里说一下分布式缓存,把缓存放到多台机器上来实现一台机器缓存难以满足需求的情况。为了使客户端访问的缓存能到由需要资源的机器上,简单的做法是对资源取hash值,然后再对机器的总数取余,这样每次获取相同的资源都会访问到相同的机器。
但是上述方法的弊端就是如果添加或删除一台缓存服务器对整个集群的影响很大,可以使用一致性hash来解决这个问题,一致性hash就是先建立一个hash环,然后把服务器按照一定的规则分布在这个hash环上,对资源取hash值然后对整个环的长度取余,取完余数后,在这个余数的顺时针方向找到最近的服务器。这样每次添加和删除一台服务器都只是对一台服务器上的部分资源有影响。如果我们想要让所有服务器平分这个影响呢,这里就是有个虚拟化的概念,就是在hash环建立完成之后,把每个服务器虚拟成多个节点让其分布在hash环上,每次添加节点,就把每个服务里的一个虚拟节点给新添加的节点,这样添加或者删除影响就会平均在所有的服务器上面。

HTTP缓存有效期

有两个参数需要注意,cache-control和expires,expires是http1.0版本的,为了解决浏览器和服务端时间不一致的情况http1.1引入了cache-control的max-age字段,但是如果浏览器是1.0的版本浏览器会忽略max-age字段,如果是1.1版本就会忽略expires字段。

网络安全

在网络攻击里面数量最多的就是XSS和sql注入了,对于这两个都可以用“消毒”来解决,例如在django中的如下代码就是屏蔽消毒这个策略,(默认是开启的)

This will be escaped: {{ data }}
This will not be escaped: {{ data|safe }}

{% autoescape off %}
<h1>{% block title %}{% endblock %}</h1>
{% block content %}
{% endblock %}
{% endautoescape %}

XSS还可以用http标签的http-only来解决。http-only是cookie的响应首部字段,示例如下:

Set-Cookie:name=value,Http-Only