在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?我们就来分析这个问题,探讨一下内部的原因。
MySQL 和程序实例
要说明这个问题,我们首先来建立三张表,分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机
key
作为主键,其它我们完全保持不变.根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度:
注:这里的随机key其实是指用雪花算法算出来的前后不连续不重复无规律的id:一串
18 位长度的long值
id 自动生成表:``` CREATE TABLE user_key_auto (
user_id int unsigned NOT NULL AUTO_INCREMENT,
user_name varchar(64) CHARACTER SET ut ...
他们本质都是TCP连接,并无区别,但是由于http的规定以及浏览器和服务器的限制,导致他们在应用过程中可能有所不同
get方法的特点
请求数据会附在URL之后(放在请求行中,以
?分割URL和传输数据,多个参数用 & 连接)
get是会被浏览器主动缓存的,如果下一次传输的数据相同,那么就会返回缓存中的内容,可以更快的展示数据
get方法的UR一般都有长度限制,但是需要注意的是http协议中并未规定get请求的长度。这个长度限制主要是由浏览器和web服务器决定的,并且各个浏览器对长度限制各不相同
get方法只产生一个TCP数据包,浏览器会把请求头和请求数据一并发送出去,服务器响应200
ok(返回数据)
post方法的特点
根据http规范,post可能改变服务器上的资源的请求(点赞就是post请求),因为有可能修改服务器上的资源,所以不符合安全性和幂等性
因为post方法是放在请求数据的,所以它的请求信息是没有长度限制的
post方法会产生两个TCP数据包,浏览器会先将请求头发送给服务器,待服务器返回100
continue,浏览器再发送请求数据,服务器响应 200
...
首先,在浏览器地址栏中输入url,先解析url,检测url地址是否合法
浏览器先查看浏览器缓存——系统缓存——路由器缓存,如果缓存中有,直接在屏幕上显示内容,如果没有,到第三步
在发送http请求前,需要域名解析(DNS解析),获取相应的IP地址
浏览器向服务器发起TCP连接,与浏览器建立三次握手
握手成功后,浏览器向服务器发送http请求,请求数据包
服务器处理收到的请求,将数据返回至浏览器
四次挥手释放TCP连接
浏览器收到http响应
浏览器解析响应,如果响应可以缓存,则存入缓存
浏览器发送请求获取嵌入在HTML的资源(对于未知类型,会弹出对话框)
浏览器发送异步请求
页面渲染全部结束
**浏览器缓存:**浏览器会记录DNS一段时间,因此只有第一个地方解析DNS请求
操作系统缓存:如果在浏览器中不包含这个记录,则会使用系统调用操作系统,获取操作系统记录(保存最近的DNS查询缓存)
**路由器缓存:**如果上述两个步骤均不能获取DNS记录,继续搜索路由器缓存
客户端向服务端发送断开连接请求FIN
服务端响应客户端的断开连接请求,发送ACK响应包给客户端
服务端向客户端发送断开连接请求FIN
客户端响应服务端的断开连接请求,发送ACK响应给客户端
客户端主动调用close时,向服务端发送结束报文段FIN报,同时进入FIN_WAIT1状态;服务器会收到结束报文段FIN报,服务器返回确认报文段ACK并进入CLOSE_WAIT状态,此时如果服务端有数据要发送的话,客户端依然需要接收。客户端收到服务器对结束报文段的确认,就会进入到FIN_WAIT2状态,开始等待服务器的结束报文段;服务器端数据发送完毕后,当服务器真正调用close关闭连接时,会向客户端发送结束报文段FIN包,此时服务器进入LAST_ACK状态,等待最后一个ACK的带来;客户端收到服务器发来的结束报文段,
进入TIME_WAIT,
并发出送确认报文段ACK;服务器收到了对结束报文段确认的ACK,进入CLOSED状态,断开连接。而客户端要等待2MSL的时间,才会进入到CLOSED状态
为什么握手是三次,而挥手需要四次呢
?
第二步属于系统自动响应数据包
第三步是程序手动调用clos ...
建立客户端向服务端的连接:发送客户端的请求连接数据包SYN到服务端
响应客户端的连接并建立服务端的连接:服务端发送响应客户端连接的数据包ACK和服务端的请求连接数据包SYN到客户端
响应服务端的连接:客户端发送响应服务端连接的数据包ACK到服务端
服务端新建套接字,绑定地址信息后开始监听,进入LISTEN状态。客户端新建套接字绑定地址信息后调用connect,发送连接请求SYN,并进入SYN_SENT状态,等待服务器的确认。服务端一旦监听到连接请求,就会将连接放入内核等待队列中,并向客户端发送SYN和确认报文段ACK,进入SYN_RECD状态。客户端收到SYN+ACK报文后向服务端发送确认报文段ACK,并进入ESTABLISHED状态,开始读写数据。服务端一旦收到客户端的确认报文,就进入ESTABLISHED状态,就可以进行读写数据了
请求报文格式:请求行、请求头、空一行、请求体
请求行包括:请求方法、统一资源定位符(URL)、http协议及版本
响应报文格式:状态行、响应头、空一行、响应体
状态行包括:协议及版本、状态码、状态码解释
Rancher为采用容器的团队提供了完整的软件堆栈,解决了跨任何基础设施架构管理多个Kubernetes集群的运维和安全挑战,同时为DevOps团队提供了用于运行容器化工作负载的集成工具。
统一的多集群应用程序管理平台
第一个真正的多云计算解决方案
对于用户而言,他们希望的是平台可以提供稳定且持续的服务。而确保满足这一需求的最佳方法是在多个基础设施提供商的多个区域部署服务。因此,您需要一个高效可靠的平台,用以管理生产环境中的多个Kubernetes集群。
Rancher不仅可以集中管理部署在任何基础设施上的Kubernetes集群,还可以实行统一的集中式身份验证和访问控制。由于无法确定资源运行的位置,您可以轻松地在不同的基础设施之间调用集群,并在它们之间进行资源迁移。相较而言,与其管理多个独立部署的Kubernetes,不如通过Rancher将它们统一为一个托管的Kubernetes云。
为初学者和高级用户设计
工作在您关心的事情上
在Kubernetes中,用户一般用YAML文件来编写资源清单,从而创建容器化应用。通过Rancher,您无需担心YAML,便可立即从Kubernete ...
Kubernetes为DevOps团队提供了无与伦比的优势,包括更流畅地运行应用程序,自动修复系统,正常时间保持高水平运转,降低使用成本等,用户可以轻松愉快地使用它。
Kubernetes
是一种工具,就像任何工具一样,无论你是否使用它,它都能为您提供好处。
组织受益
技术是有趣的,但底线始终是最重要的。您希望以最低的成本获取最高的性能,并且始终在寻找价值和影响力之间的交集。
KUBERNETES将为您做什么?
快速增长
Kubernetes使企业业务能够适应环境的变化,并在您的团队开发和测试的时候,尽快将更新的内容发布到应用程序当中。它可以轻易地设计一个无需停机即可进行更新的系统。
跨越行业
Kubernetes正在帮助不同行业的企业,包括运营商、零售和制造业、银行、金融服务、媒体、政府和医疗保健机构。所有这些行业均发现,Kubernetes帮助他们的业务更加成功。
避免锁定
Kubernetes是一款100%开源的软件,它于2018年3月成为了仅次于Linux的第二大开源项目。截至2018年10月,Kubernetes在100多家公司中拥有了24,500名贡献者。只要您的企业使 ...
在管理 Docker / Kubernetes
时,图形化管理工具还是非常方便的。这里推荐几款免费不花钱的面板,总有一款适合你。
Portainer
链接:https://www.portainer.io
Portainer 是一个轻量化的 Docker 图形化管理工具,可以用来管理 Docker
宿主机和 swarm 集群。功能十分全面,满足企业的大部分需求。
不过,官方版本没有中文。虽然网上有汉化包,比如 https://www.quchao.net/Portainer-CN.html,但只适用于特定版本。
Rancher 链接:https://www.rancher.cn
开源的企业级多集群 K8S
管理平台,支持中文。功能齐全,适合复杂场景的企业级云方案。
DockStation 链接:https://dockstation.io
个人可免费使用的 Docker
面板,在多项目管理上非常清晰。不过,使用的人不是很多。
EasyDockerWeb https://github.com/qfdk/EasyDockerWeb
简单的中文 docker 管理程序,使用了 expres ...
JDK 和 JRE 有什么区别?
JDK:Java Development Kit 的简称,java 开发工具包,提供了 java
的开发环境和运行环境。
JRE:Java Runtime Environment 的简称,java 运行环境,为 java
的运行提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器
javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行
java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装
JDK。
== 和 equals 的区别是什么?
== 解读
对于基本类型和引用类型 == 的作用效果是不同的,如下所示:
基本类型:比较的是值是否相同;
引用类型:比较的是引用是否相同;``` String x = “string”; String y =
“string”; String z = new String(“string”); System.out.println(x==y); //
true System.out.println(x==z); / ...
