缓存是计算机系统中应用非常广泛的技术,最经典的,操作系统中处处是缓存,缓存可以大大提升数据访问速率。
在业务中,数据库(MySQL
)面对大量的并发请求,会出现两个问题:
为解决这两个问题,一般会在内存中设置缓存,通常是使用Redis
作为缓存,对于数据库的查询请求首先查询缓存,如果查不到,再去查询数据库。
在Java中,所有对象都有两种类型,即编译时类型和运行时类型。
编译时类型是在程序代码编译解决确定的类型,而运行时类型是在程序运行时根据实际的对象类型确定的。
并且由于多态机制,很多时候一个对象的编译时类型和运行时类型并不是一致的。
譬如,对于如下代码:
Object i = new String("qwe");
i.getClass();
对象i
的编译时类型为Object
,但是当我们使用getClass()
获取它的所属类的Class
类对象时,得到的结果却是java.lang.String
如果想要调用对象运行时类型的方法,那么就需要反射机制,因为在编译的时候,并不知道对象的运行时信息。
Kubernetes,简称k8s,是云原生生态的基石,是CNCF技术栈的核心。
注: CNCF即为云原生计算基金会,是一个开源的软件基金会,致力于云原生技术的普及及可持续发展。许多有名的项目都托管在这个社区当中,包括Docker、Kubernetes。
Kubernetes脱骨于Google的Borg系统,而Borg承载了Google公司整个基础设施的核心依赖,k8s在Borg体系的指导之下,在众多容器编排工具中脱颖而出。
当只有一台计算机的时候,也就是单机系统,我们不需要考虑通信、容错、一致性等等问题,只需要将应用部署在这台计算机上,它的正确运行是显而易见的——就像我们平时所做的那样,自己编写一个C++程序并运行。
但是单机系统的弊端也是很明显的——它的资源很有限。它的硬盘、CPU、内存都是有限的,当我们的应用需要更多的资源时,一台计算机难以支撑它的运行。
一个很直观的想法是:增加更多的计算机,这样我们就有更多资源了!
这就是分布式系统: 很多台计算机组成一个系统,协作运行大型的应用。
但是一个问题随之而来,那就是,在系统中增加了计算机之后,整个系统的性能也是随之增加的吗?可用性不随着系统的扩展而变化吗?未必。因为引入更多台计算机使得系统复杂度提升,就会带来额外的开销,影响整个系统的性能;而系统中的计算机可能会出现故障而导致整个系统不可用。
这就引出了分布式系统的目标: 可扩展性(Scalability)。
今天在Ubuntu20.04上执行sudo apt-get update命令时,遇到以下错误:
Err:2 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B53DC80D13EDEF05
他说这个签名不能被验证,因为没有可用的公钥,并且表示没有B53DC80D13EDEF05这个密钥
k8s集群在节点运行kubectl命令时出现错误:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行
如果在使用kubeadm初始化(kubeadm init)或者添加节点到k8s集群(kubeadm join)中时,遇到类似下图的错误: 只要出现了It seems like the kubelet isn’t running or healthy. 这句提示,都可以尝试使用下面的解决方法来解决。
Innovative Technology for CPU Based Attestation and Sealing是Intel SGX技术的官方论文,本文将翻译这篇文章。
SGX技术提供了enclave环境,当今比较火的机密计算技术一般就是基于SGX技术来实现,当然也有其他的可以提供enclave环境的技术,例如TrustZone等,但是SGX应用更多,且相比之下更安全些。
本文中形似(注:···)的批注是我的批注,而非原文
由于站主的研究方向是内存安全,一些涉及到底层的开发会用到Rust,所以浅浅入门一下。