7层是指OSI七层协议模型,从7到1分别为:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。
分类 | 描述 |
---|---|
1** | 消息,一般是告诉客户端,请求已经收到了,正在处理,别急… |
2** | 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息. |
3** | 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。 |
4** | 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。 |
5** | 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。 |
session机制采用的是在服务端保持状态的方案,而cookie机制则是在客户端保持状态的方案,cookie又叫会话跟踪机制。打开一次浏览器到关闭浏览器算一次会话。HTTP协议是一种无状态协议,在数据交换完毕后,服务端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。此时,服务器无法从链接上跟踪会话。cookie可以跟踪会话,弥补HTTP无状态协议的不足。
session工作流程,寻找cookie中的session id。根据session id去服务器内存中找到相应的用户资料。如果没有找到则新建,根据资料来判断用户访问的状态。
一般通过redis集群来同步seesion,解决负载均衡指向不同服务器的情况。
session与cookie的区别:
Cookie保存在客户端,Session保存在服务端。
2 、存取方式的不同
Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比拟艰难的。
而Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。
3、安全性(隐私策略)的不同
Cookie存储在浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。 假如选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。而假如选择Session就省事多了,反正是放在服务器上,Session里任何隐私都能够有效的保护。
只需要设置Cookie的过期时间属性为一个很大很大的数字,Cookie就可以在浏览器保存很长时间。 由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默许为–1,只需关闭了浏览器(一次会话结束),该Session就会失效。
Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。而Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。
Cookie支持跨域名访问,例如将domain属性设置为“.baidu.com”,则以“.baidu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。
【安全版本】
Kubernetes v1.13.12
Kubernetes v1.14.8
Kubernetes v1.15.5
Kubernetes v1.16.2
https://www.cnblogs.com/ants/p/11489598.html#_labelTop
http://press.demo.kuboard.cn/install/install-kubernetes.html
SLB(LVS+HAProxy)
etcd集群
为什么需要3台物理机以上?
主要是考虑到了etcd的问题,如果只有两台物理机部署了5个etcd节点,那么部署了3个etcd的那台物理机故障了,则不满足etcd失败容忍度而导致etcd集群宕机,从而导致k8s集群宕机
K8S Node (Master / Worker)
三个 master 组成主节点集群,通过内网 loader balancer 实现负载均衡;至少需要三个 master 节点才可组成高可用集群,否则会出现 脑裂 现象
多个 worker 组成工作节点集群,通过外网 loader balancer 实现负载均衡
__init__,__del__,__new__:
__new__:是用来创建类并返回这个类的实例
__init__:将传入的参数来初始化该实例。
__del__:对象生命周期结束时调用。
__str__,__repr__
__str__:print(类)
__repr__:如果没有__str__,则自动调用__repr__
__format__:format(类名时)自动调用__format__
"Name:{b.name}, State:{b.state}, Author:{b.author}".format(b=b)
__getitem__:如-类['column'],通过字典的方式获取类属性
__setitem__:修改类属性
__delitem__:删除类属性
__add__:类的相加,如-使用哪个属性
__mul__:类的相乘,如-使用哪个属性
__contains__:'something' in Class,返回布尔值。用in来判断类是否包含某属性。
__iter__:类的for,for i in Class,指定迭代属性。
import copy
浅拷贝: copy.copy
深拷贝: copy.deepcopy
直接赋值: 其实就是对象的引用(别名),赋值的两边指向的是同一个对象
浅拷贝(copy): 拷贝父对象,不会拷贝对象的内部的子对象
深拷贝(deepcopy):拷贝父对象,同时会开辟空间,逐层拷贝内部子对象
浅拷贝
>>>import copy
>>>a = [1,2,3,4,['a','b']]
>>>b = copy.copy(a)
>>>a,b
([1,2,3,4,['a','b']],[1,2,3,4,['a','b']])
>>>a.append(5)
>>>a,b
([1,2,3,4,['a','b'],5],[1,2,3,4,['a','b']])
可以看到a新增了元素5,而浅拷贝的b未新增元素
>>>a[4].append('c')
>>>a,b
([1,2,3,4,['a','b','c'],5],[1,2,3,4,['a','b','c']])
可以看到原对象修改已有元素,也会同时影响浅拷贝对象
#####################################################
深拷贝
>>>import copy
>>>a = [1,2,3,4,['a','b']]
>>>c = copy.deepcopy(a)
>>>a.append(5)
>>>a[4].append('c')
>>>a,c
([1,2,3,4,['a','b','c'],5],[1,2,3,4,['a','b']])
可以看到深拷贝对象未受影响
#####################################################
>>>a = [1,2,3,4,['a','b']]
>>>b = a
>>>b.append(5)
>>>b[4].append('c')
a,b
([1,2,3,4,['a','b','c'],5],[1,2,3,4,['a','b','c'],5])
可以看到赋值,两个变量相同。即简单的拷贝对象的引用,两个对象的id相同
假如集群有5台服务器,并依次启动。
三种集群:
1.主从复制,不支持自动容错,在线扩容。
2.哨兵模式,需人工手动选举主节点,难以在线扩容。
3.redis-cluster模式,高可用,读写分离,分布式存储数据。