说起“云原生技术”,大家可能有点懵。但是云原生背后典型的几个公司或者技术产品的名称可能大家经常听到:比如容器技术的代表公司docker;容器编排技术开源产品kubernetes(因为K和S之间有8个字母简称K8S);微服务治理框架Service Mesh;比如CoreOS;更有非常有名的Google、IBM、redhat(已经被IBM收购)、阿里云、vmware;开源技术基金会,linux基金会以及云原生基金会(CNCF);对了,还有一个老家伙,早期开源paas平台 Cloud Foundry。

云原生技术主要包括微服务、无服务器框架和容器。

微服务

微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。,它们之间进行通信和交换数据。微服务的诞生是因为需要克服单体应用程序的复杂性和不灵活性
图片2.png

微服务就是将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务,它们之间通过 HTTP 协议进行通信(也可以采用消息队列来通信,如 RoocketMQ,Kafaka 等),可以采用不同的编程语言,使用不同的存储技术,自动化部署(如 Jenkins)减少人为控制,降低出错概率。服务数量越多,管理起来越复杂,因此采用集中化管理。

就比如说,当我们在网上购物时需要一个用户界面。此外,我们还需要一个搜索功能来查找商品、一个预订处理程序来处理用户订单然后保存该订单、保存用户信息然后将其链接到预订。在生产级应用程序中,需要更多的任务,例如支付处理等等。这种单体应用程序适用于中小负载。它在单个服务器上运行,连接到单个数据库,并且可能使用相同的编程语言编写现在,如果业务呈指数级增长,需要处理数十万或数百万用户,会发生什么?最初,短期解决方案是确保运行应用程序的服务器具有强大的硬件规格以承受更高的负载,如果没有,则向服务器添加更多内存、存储和处理能力。这称为垂直缩放,是增加硬件功能的行为(如RAM和硬盘驱动器容量),以运行繁重的应用程序。但是,从长远来看,这通常是不可持续的,因为应用程序上的负载持续增加。
而使用微服务使应用程序将能够在多个服务器之间进行扩展,这种做法称为水平扩展。每个服务都可以使用专用资源部署在不同的服务器上,也可以部署在不同的容器中。不同的服务可以用不同的编程语言编写,从而实现更大的灵活性,不同的专业团队可以专注于不同的服务,从而实现应用程序的更高整体质量。
图片1.png

微服务的问题

严重依赖微服务的一个显著缺点是,随着数量和范围的扩大,它们可能变得太复杂而无法长期管理。有一些方法可以通过利用Prometheus等监控工具来检测问题,像Docker这样的容器技术来避免污染主机环境并避免过度设计服务。但是,这些方法需要付出努力和时间。

容器

容器提供了在同一台机器上运行众多隔离了的软件服务的能力,包括所有配置、软件依赖关系、运行时、工具和附带文件。在云环境中,这种能力转化为节省的成本和工作量,因为为每个微服务配置和购买服务器节点的需求将减少,不同的微服务可以部署在同一主机上而不会相互干扰。容器与微服务架构相结合,是构建现代、便携、可扩展且经济高效的软件的强大工具。在生产环境中,需要多个服务器节点与众多容器相结合才能实现可扩展性和冗余
例如,MySQL数据库可以在容器内部隔离,其中存在环境变量和它所需的配置。容器外部的软件默认情况下不会看到容器内包含的环境变量或配置。多个容器可以存在于同一本地虚拟机、云虚拟机或硬件服务器上。
软件行业最受欢迎的软件容器项目之一是Docker。思科、谷歌和IBM等大公司在其基础设施及产品中使用Docker容器。
软件容器世界中另一个值得注意的项目是Kubernetes。Kubernetes是一个允许自动化容器部署、管理和扩展的工具。它是由谷歌建立的,以便管理容器(每周数十亿个)。Kubernetes提供了一些强大的功能,例如容器之间的负载均衡、故障容器的重新启动以及容器使用的存储编排。该项目和Prometheus都是云原生基础的一部分。

无服务器架构

无服务器架构(又称FaaS)是指企业或个人无需购买、租赁或配置用于支持后端代码运行的物理或者虚拟服务器。无服务器解决方案通常由Web服务器、FaaS层、安全令牌服务(STS)、用户验证以及数据库等要素组成。
图片3.png

无服务器架构是一种新的软件架构范式,它因为AWS Lambda服务而推广。为了完全理解无服务器应用程序,有使用恰当无服务器架构设计的云原生生产应用程序背后的想法是,不构建预期持续运行的多个微服务以执行单个任务,而是构建一个与FaaS结合的微服务较少的应用程序,其中FaaS涵盖不需要持续运行服务的任务。
无服务器架构的优势在于,不需要配置虚拟机和/或容器来构建利用FaaS的应用程序部分。一旦它们的功能结束,运行这些功能的计算实例从用户的角度来看就不再存在。此外,需要由用户监控和维护的微服务和/或容器的数量减少,节省了成本、时间和精力。

聊一下CNCF(云原生基金会)

2015年7月,由Google牵头并联合linux基金会以及一大票牛掰的技术公司(IBM、microsoft、redhat等等)成立了CNCF(Cloud Native Computing Foundation),紧接着就把kubernetes1.0版本的源代码捐献给CNCF。

后来CNCF就提出,如果容器要快速发展就必须要标准化,不能受控于一家公司,就让docker去制定标准化(OCI),毕竟在容器领域Docker的技术还是领先的,因此docker的容器运行时(runtime)从一开始的LXC进化到libcontainer,再到最后的runC,完全符合OCI标准!

参考资料:https://blog.csdn.net/BtB5e6Nsu1g511Eg5XEg/article/details/86111746
https://www.cncf.io/projects/

Last modification:October 29th, 2019 at 08:17 am
如果觉得我的文章对你有用,请随意赞赏