随着各种云平台、云计算的兴起,云原生的概念应运而生,到底什么是云原生?第一次听到这个词汇的时候,感觉和元宇宙、比特币、区块链一样,感觉很高大上的样子,而且都是一些陌生的词汇。
作为一名Java工程师,我真的很想知道云原生和Java到底有什么关系?Java工程师需要学习云原生吗?
根据字节跳动两个岗位的职位信息来看,好像没什么关系。太好了,不用学了!
哪吒历经千辛万苦,总结了一个Java思维导图,感觉已是大成之作!
思维导图配文:Java基础教程系列
纳尼?云原生这思维导图是谁做的?简直就是森罗万象,无孔不入!这数据库(Oracle、MySQL、sqlserver)、Redis、mongodb、ShardingSphere、中间件rabbitmq、kafka、nginx、nacos、zookeeper等等等等,全都投靠了云原生?这不都是Java的东西吗?
请容我大喊一句,有内鬼终止交易!
云原生技术是通过一系列的软件、规范和标准帮助企业和组织,在现代的动态环境(如公共云、私有云和混合云)中构建和运行敏捷的、可扩展的应用程序。容器、微服务、微服务治理、声明式API等都是代表性的云原生技术。
这些技术使松散耦合的系统具有更好的弹性、可管理性,同时更容易被监控和观察。这些技术通过与强大的自动化工具相结合,允许工程师频繁地、可预见地对系统进行任意的更改,并尽可能减少由此带来的工作量(在这些云原生技术和框架被采用之前,相信大家都有过针对系统任何一个小改动,都需要整个开发、测试、运维团队投入大量工作的痛苦经历),而这就是云原生技术最希望为技术团队以及业务带来的价值。
容器、微服务、微服务治理、声明式API等都是代表性的云原生技术。
,这些不都是Java吗?好吧,面对疾风吧,Java和云原生有着千丝万缕的联系,Java程序员未来的发展方向应该就是云原生。
云原生(Cloud Native)是一个组合词,云表示应用程序运行于分布式云环境中,原生表示应用程序在设计之初就充分考虑到了云平台的弹性和分布式特性。云原生并不是简单地使用云平台运行现有的应用程序,而是一种能充分利用云计算优势对应用程序进行设计、实现、部署、交付和操作的应用架构方法。
容器是一种相对于虚拟机来说更加轻量的虚拟化计算,能为我们提供一种可移植、可重用的方式来打包、分发和运行应用程序。容器提供的方式是标准的,这是方式可以将不同的应用程序的不同组件组装在一起,也可以将它们彼此隔离。
使用容器开发和部署应用程序的好处:
docker是干什么的,docker常用命令每日一练
微服务是一种软件架构,使用微服务架构可以将一个大型应用程序按照功能模块拆分成多个独立自治的微服务,每个微服务仅实现一种功能,具有明确的边界。为了让应用程序的各个微服务之间协同工作,用户需要通过互相调用REST等形式的标准接口进行通信和数据交换,这是一种松耦合的交互形式。
微服务的主要特点:
随着微服务逐渐增多,应用程序最终可能会变为由成百上千个互相调用的服务组成的大型应用程序,服务与服务之间通过内部网络或外部网络进行通信。如何管理这些服务的连接关系,如何保持通信通道的无故障、安全、高可用和健壮,就成了非常大的挑战。服务网格作为服务器间通信的基础设施层,可以解决上述问题。
服务网格是轻量级的网络代理,能解耦应用程序的重试或超时、监控、追踪和服务发现,并且能做到使应用程序无感知。服务网格可以使服务与服务之间的通信更加流畅、可靠和安全。
听起来怎么这么像注册中心nacos,那么服务网格和nacos有什么区别呢?
DevOps(Development & Operations,开发和运维)是软件开发人员和 IT 运维人员之间的合作过程,是一种工作环境、文化和实践的集合,目标是高效地自动执行软件交付和基础架构更改流程。开发和运维人员通过持续不断的沟通和协作,可以以一种标准化和自动化的方式快速、频繁且可靠地交付应用。
持续集成和持续交付的优势:
在应用开发测试到上线的过程中,应用通常需要被频繁部署到开发环境、测试环境和生产环境中。在传统的可变架构时代,通常需要系统管理员保证所有环境的一致性。而随着时间的推移,这种靠人工来维护的环境一致性很难维持,环境的不一致又会导致应用越来越容易出错。这种由人工维护、经常被更改的环境就是我们常说的可变基础设施。
与可变基础设置对应的就是不可变基础设施,指的是一个基础设施环境被创建以后不接受任何方式的更新和修改。这个基础设施也可以作为模板来扩展更多的基础和修改。这个基础设施也可以作为模板来扩展更多的基础设施。如果需要对基础设施做更新迭代,那么应该先修改这些基础设施的公共配置部分,构建新的基础设施,将旧的替换下线。简而言之,不可变的基础设施是通过整体替换而不是部分修改来创建和变更的。
不可变基础设施的优势在于能保持多套基础设施的一致性和可靠性,而且基础设施的创建和部署过程也是可预测的。在云原生的架构中,借助kubernetes和容器技术,云原生不可变设置提供了一个全新的方式来实现应用交付,云原生不可变基础设施具备以下优势:
声明式设计是一种软件设计理念,我们负责描述一个事物想要达到的目标状态并将其提交给工具,由工具内部去处理如何实现目标状态、与声明式设计相对应的是过程式设计。在过程式设计中,我们需要描述为了事物达到目标状态的一系列操作,并正确执行这一系列的操作,最终才会达到我们期望的状态。所有的程序模块都要通过服务化接口API将其数据保护起来,并随着做好对外开放的准备。
使用声明式API的好处:
所有的应用服务和中间件都需要被设计成具备可无限伸缩的属性,与传统的IaaS层云进行联动。
包括服务注册发现、服务流量路由调度、配置管理、健康检查、服务间通信、服务的弹力容错(隔离、限流、重试、幂等、熔断、降低),以及服务观测性(日志、指针、调度链追踪、性能排名等)。
包括分布式数据库、分布式缓存、分布式消息队列、分布式大数据处理等。