云原生是基于分布部署和统一运管的分布式云,以容器、微服务、DevOps等技术为基础建立的一套云技术产品体系。云原生应用也就是面向“云”而设计的应用,在使用云原生技术后,开发者无需考虑底层的技术实现,可以充分发挥云平台的弹性和分布式优势,实现快速部署、按需伸缩、不停机交付等。
云原生能够帮助企业实现更多的数字化服务,那么,如何判断企业进入云原生呢?
一般需要包含以下4个要素: 微服务、容器化、DevOps 和 持续交付 。
云原生采用微服务架构,将应用程序和服务拆分成多个小的服务单元,从而提高应用程序的可维护性和可扩展性。
几乎每个云原生的定义都包含微服务。微服务架构的好处就是按function切了之后,服务解耦,内聚更强,变更更易;另一个划分服务的技巧是依据DDD。
云原生使用容器化技术将应用程序和服务打包成容器,以实现应用程序的可移植性和可扩展性。
Docker就是应用最为广泛的容器引擎,为微服务提供了实时的保障,以及起到应用隔离的作用。而Kubernetes(K8s)是一种流行的容器编排系统,它用于监督和控制容器的运行位置,检测和修复故障,并实现容器内部微服务的负载均衡。Docker和K8S都采用Go编写。
这是个组合词,Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀刃相见,实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。
云原生应用程序是使用微服务架构构建,不同的服务是相互独立开发部署和扩展的,这需要开发和运营团队之间的高水平协作,以及对开发和部署过程自动化的大量投资。
持续交付又叫CICD,是一种强调协作沟通,开发和运营团队之间的自动化,以快速可靠的交付云原生应用程序。
CICD的 核心概念是持续集成、持续交付和持续部署。即 CI(Continuous Integration,持续集成)/CD(Continuous Delivery,持续交付/Continuous Deployment,持续部署)。
(1)CICD的持续集成部分是指定期将代码更改合并到共享分储库,并运行自动化测试,以确保代码按预期工作的做法。
(2)CICD的持续交付部分是指通常通过使用自动化部署管道,将软件自动部署到生产环境的实践。
CICD 相当于要实现在线不停机的更新。这要求开发版本和稳定版本并存,需要很多流程和工具支撑,比如Jenkins、Sonar等等
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。在Jenkins中,每一个持续集成任务都称作Job。这个Job就是我们前面提到的一系列具体动作的集合,如:提交代码、构建项目、测试、部署环境等等。
参考wiki:https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/
Sonar(SonarQube)是一个开源平台,用于管理源代码的质量。Jenkins可以通过插件的形式和Sonar很好的集成。
Serverless 是云计算的一种模型,以平台即服务(PaaS)为基础,无服务器运算提供一个微型的架构。在这个架构中,开发者不再需要关注底层的服务器管理,不需要部署、配置或管理服务器服务,而是将重心放在代码编写和业务逻辑上,代码运行所需要的服务器服务皆由云端平台来提供。
作为云计算的一种演进方式,无服务器Serverless具有如下四个特性 :
尽管称之为“无服务器”,但实际上Serverless并不是完全没有服务器。Serverless架构的核心思想是将服务器的管理交给云服务提供商,开发者只需编写代码,无需担心基础设施的维护。关键概念包括:
Serverless架构分为 Backend as a Service(BaaS) 和 Functions as a Service(FaaS) 两种技术,Serverless 它是由开发者实现的服务端逻辑运行在无状态的计算容器中,它是由事件触发,完全被第三方管理的。
什么是BaaS?
Baas 的英文翻译成中文的含义:后端即服务,它的应用架构由大量第三方云服务器和API组成的,使应用中关于服务器的逻辑和状态都由服务提供方来管理的。比如应用前后端交互主要是以RestAPI调用为主。只需要调用服务提供方的API即可完成相应的功能,比如常见的身份验证,云端数据/文件存储,消息推送,应用数据分析等。
什么是FaaS?
FaaS可以被叫做:函数即服务。开发者可以直接将服务业务逻辑代码部署,运行在第三方提供的无状态计算容器中,开发者只需要编写业务代码即可,无需关注服务器,并且代码的执行它是由事件触发的。其中AWS Lambda是目前最佳的FaaS实现之一,详见:https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/welcome.html
Serverless的应用架构是将BaaS和FaaS组合在一起的应用,用户只需要关注应用的业务逻辑代码,编写函数为粒度将其运行在FaaS平台上,并且和BaaS第三方服务整合在一起,最后就搭建了一个完整的系统。整个系统过程中完全无需关注服务器。
正向代理是位于一组客户端计算机和互联网之间的服务器,当这些客户向互联网上的网站发出请求时,转发代理充当中间人,拦截这些请求,并代表这些客户端计算机与外部服务器通信。
为什么有人想要这样做呢?以下是一些常见原因:
转发代理可以保护客户的在线身份。通过使用转发代理连接到网站,客户端的IP地址。对服务器隐藏。仅代理的IP地址可见,追踪到客户会更加困难。
可以使用转发代理来绕过浏览限制。一些机构如政府、学校、大企业使用防火墙来限制对互联网的访问,通过连接到防火墙外部的转发代理,客户端计算机有可能绕过这些限制.但它并不总是有效,因为防火墙本身可能会阻止与代理的连接。
转发代理可用于阻止对某些内容的访问。对于学校和企业来说,配置其网络通过代理将所有客户端连接到网络,并应用过滤规则来禁止社交网络等网站的情况并不罕见。值得注意的是,转发代理通常需要客户端配置其应用程序指向它,大型机构通常采用一种称为透明代理的技术来简化流程,透明代理与第四层交换机配合使用,可自动将某些类型的流量重定向到代理,无需配置客户端计算机即可。
反向代理位于互联网和网络服务器之间,他拦截来自客户端的请求,并代表客户端与网络服务器进行通信。如常见的如Nginx。
为什么网站要使用反向代理?
反向代理可用于保护网站。该网站的IP地址隐藏在反向代理后面,不会透露给客户端,这使得针对网站进行DDoS攻击变得更加困难。
反向代理用于负载平衡。每天处理数百万用户的热门网站不太可能用单个服务器处理流量,反向代理可以通过将流量分配到大量网络服务器来平衡大量传入请求,并有效防止其中任何一个超载。
是请注意这假设反向代理可以处理传入流量,科弗莱等服务在全球数百个位置放置了反向代理服务器,这使得反向代理更接近用户,同时提供大量的处理能力。
反向代理缓存静态内容。一段内容可以在反向代理上缓存一段时间,如果反向代理再次请求同一内容可以快速返回本地缓存的版本。
反向代理可以处理SSL加密。SSL握手的计算成本很高,反向代理可以将原服务器从这些昂贵的操作中解放出来,网站只需要处理少量反向代理的SSL握手
对于现代网站来说,拥有多层反向代理并不罕见。第一层可以是边缘服务,比如Cloudflare,反向代理部署到全球数百个靠近用户的位置;第二层可以是托管提供商处的的API网关或负载均衡器。许多云提供商将这两层组合成一个入口服务,用户将在靠近用户的边缘进入云网络,并且从边缘反向代理通过快速光纤网络连接到负载均衡器,其中请求均匀分布在外服务器集群上。
缓存是现代系统中的一种常用技术,可增强系统性能并减少响应时间。从前端到后端,缓存在提高各种应用程序和系统的效率方面发挥着至关重要的作用。典型的系统架构涉及多层缓存,在每一层有多种缓存数据的策略和机制,具体取决于特定应用程序的要求和限制。
操作系统中用到的缓存,主要有以下几种类型:
详见:cache和内存
TLB,地址转换旁路缓冲存储器(translation-lookaside buffer),它存储最近使用的虚拟到物理地址转换,CPU使用它来快速将虚拟内存地址转换为物理内存地址,从而减少从内存访问数据所需的时间。
对于一个进程来说,它所看到的内存主要分为程序代码、堆、栈三个部分,机器的真实物理内存有16G,它能看到的内存空间便接近于16G。但事实上,一个机器是不会只运行一个进程的,所以进程看到的16G内存,是虚构的 ——每个程序都拥有存放自己代码和数据的私有内存。