云原生到底是什么?带你了解云原生的那些事儿

云原生是一种构建和运行应用程序的方法,强调DevOps、持续交付、微服务和容器。本文探讨了云原生的起源、核心要素,以及如何实现云原生,揭示了其对软件开发的影响和未来趋势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家言必称云原生,却鲜少有人告诉你到底什么是云原生,若是找资料来看,读完大多会感觉云绕雾罩,一知半解,总之虚得很;甚至会让你一度怀疑自己的智商,不过我对于读不懂的文章,一律归因于写文章的人太蠢,当然这不一定是事实,但这样的思考方式能让我避免陷入自我怀疑的负面情绪。

image.png

云原生之所以解释不清楚,是因为云原生没有确切的定义,云原生一直在发展变化之中,解释权不归某个人或组织所有。

何谓云原生?

技术的变革,一定是思想先行,云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。

Pivotal公司的Matt Stine于2013年首次提出云原生(CloudNative)的概念;2015年,云原生刚推广时,Matt Stine在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12因素、微服务、自敏捷架构、基于API协作、扛脆弱性;到了2017年,Matt Stine在接受InfoQ采访时又改了口风,将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6特质;而Pivotal最新官网对云原生概括为4个要点:DevOps+持续交付+微服务+容器。

2015年云原生计算基金会(CNCF)成立,CNCF掺和进来后,最初把云原生定义为包括:容器化封装+自动化管理+面向微服务;到了2018年,CNCF又更新了云原生的定义,把服务网格(Service Mesh)和声明式API给加了进来。

可见,不同的人和组织对云原生有不同的定义,相同的人和组织在不同时间点对云原生也有不同的定义,真是乱的一匹,搞得鄙人非常晕菜,我的应对很简

### 如何在 UniApp 中集成和使用 Android 原生插件 #### 配置环境 为了能够在 UniApp 项目中成功调用 Android 的原生功能,开发者需先安装并配置好必要的开发工具链。这通常意味着要准备好最新版本的 Android SDK 和 NDK,并确保已设置好相应的环境变量。 #### 创建应用入口类 对于想要自定义应用程序启动过程的情况,在 `AndroidManifest.xml` 文件内指定特定的应用程序入口类是非常重要的操作之一。通过这种方式可以实现更复杂的功能初始化逻辑或是覆盖默认行为: ```xml <application android:name=".MyCustomApplication" ... tools:replace="android:name"> </application> ``` 这里需要注意的是当存在多个模块都试图修改相同属性时可能会引发冲突;因此建议加上 `tools:replace="android:name"` 属性来避免此类问题的发生[^2]。 #### 添加依赖库 如果所使用的原生组件来自第三方开源项目或其他团队内部维护,则还需要向项目的 build.gradle 文件里加入这些外部资源作为编译期依赖项。例如下面这段代码展示了如何引入 AppCompat 库的支持: ```gradle dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' } ``` 此步骤能够帮助我们获得更加丰富的 UI 控件集以及更好的兼容性处理能力[^3]。 #### 编写 Java 类并与 JavaScript 进行交互 接下来就是编写实际负责执行具体业务逻辑的 Java 或 Kotlin 源文件了。这部分工作主要包括但不限于以下几个方面: - 定义接口方法供前端页面调用; - 实现数据传递机制以便于跨平台间共享信息; - 处理可能出现的各种异常情况以提高系统的健壮性和稳定性。 假设现在有一个名为 MyPlugin.java 的简单例子用于展示基本原理: ```java package com.example.myplugin; import androidx.annotation.NonNull; import io.dcloud.feature.uniapp.UniJSBridge; import org.json.JSONObject; public class MyPlugin extends UniJSBridge { @Override public void exec(@NonNull String action, JSONObject params, int callbackId) throws Exception { super.exec(action, params, callbackId); switch (action){ case "showToast": // 执行显示 Toast 提示框的操作... break; default: throw new IllegalArgumentException("Unsupported Action"); } } } ``` 上述代码片段实现了两个主要部分:继承自 `UniJSBridge` 并重写了其抽象函数 `exec()` ,从而允许 JS 端发起请求;另外还提供了一个简单的命令处理器用来响应不同的动作指令[^1]。 #### 注册插件服务 最后一步是在合适的位置注册刚刚创建好的插件实例对象,这样才能让整个框架知道它的存在进而完成最终绑定关系的确立。一般情况下可以在 Application 子类里面做这件事儿: ```java @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); registerService(MyPlugin.class.getName(), MyPlugin::new); } ``` 这样就完成了从零开始构建一个完整的 UniApp 插件的过程概述。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值