生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

开发者需要理解的分布式原语

  • 2017-04-26
  • 本文字数:1285 字

    阅读完需:约 4 分钟

随着容器技术的崛起,开发人员的思维也从单主机扩展到了分布式。Bilgin Ibryam 在 Red Hat 官方博客上介绍了什么是分布式原语,以及它与进程内原语之间的联系。本文已获得作者翻译授权,查看原文 New Distributed Primitives for Developers

面向对象的原语(进程内原语)

作为一个 Java 开发者,我熟悉面向对象概念,比如类、对象、继承、封装、多态,等等。除了面向对象,我也熟悉 Java 运行时,比如它提供了哪些特性,它是如何管理应用程序的,对象和应用程序的生命周期是怎样的,等等。

十多年来,作为一名开发人员,我使用这些工具、原语和构建块来创建应用程序。在我的意识里,我把类看成组件,它生成对象,并由 JVM 来管理它们。不过,这种模型近来在发生变化。

Kubernetes 的原语(分布式原语)

我从去年开始在 Kubernetes 上运行 Java 应用程序,Kubernetes 为我们引入了新的概念和工具。有了 Kubernetes,我就不再局限于使用面向对象和 JVM 原语来实现应用程序功能。虽然我仍然需要使用面向对象的构件块来创建应用程序组件,但也可以借助 Kubernetes 原语来实现部分的应用程序功能。

例如,我正在尝试将应用程序组件单元放入独立的容器镜像,让它们成为主要的构建块。这样我就可以使用 Kubernetes 提供的一系列丰富的组件来实现应用程序功能。现在,我除了可以使用 ExecutorService 来实现服务定期作业,还可以使用 Kubernetes 的 CronJob 原语来定期运行容器。

Kubernetes 的 CronJob 也提供了一些类似的基于时间的行为,不过它使用的是更加高级的组件,并依赖调度器完成动态配置、执行健康检查,在作业完成之后关闭容器。这一切让作业的运行更具弹性,对资源的使用也更加优化。如果我要执行应用程序的初始化操作,除了可以使用对象的构造函数,还可以使 Kubernetes 的 init-container 从更高层面来实现初始化。

脑海里的分布式模型

将本地进程内原语(面向对象和 JVM 特性)和由 Kubernetes 提供的进程外分布式原语结合起来,开发人员就可以更好地创建应用程序。在构建一个分布式的应用程序时,我的意识不再局限于一个 JVM,而是扩散到一组运行着 JVM 的主机上。

进程内原语与分布式原语有一些共性,但它们之间不具有直接的可比性。它们运行在不同的抽象层之上,有不同的前提条件,并提供了不一样的保证。有一些原语可以放在一起使用,比如我们使用类来创建对象,并把对象放入容器镜像。不过有一些原语可以相互替代,比如 Kubernetes 的 CronJob 完全可以替代 Java 里的 ExecutorService。以下列出我发现的 JVM 和 Kubernetes 之间的部分共性。

新的原语为解决问题提供了新的方式,有些重复性的方案变成了模式。可以参考“ Kubernetes 模式”这本书了解更多这方面的内容。

关于作者

Bilgin Ibryam 是 Apache 软件基金会成员,Red Hat 的集成架构师,一个软件工匠和博主。他热爱开源,热衷分布式系统、消息传递和应用集成。他同时是“ Camel 设计模式”和“ Kubernetes 模式”的作者。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-04-26 19:003246
用户头像

发布了 322 篇内容, 共 134.1 次阅读, 收获喜欢 144 次。

关注

评论

发布
暂无评论
发现更多内容

Taro架构构析(2):Taro 设计思想及架构

zhoulujun

在报告原型或早期个人版本的程序错误之前,要先征得同意

测吧(北京)科技有限公司

测试

WebKit网页布局实现(0):基本概念及标准篇

zhoulujun

Webkit

WebKit三件套(1):WebKit之WebCore篇

zhoulujun

Webkit JavascriptCore WebCore

React Native UI界面还原,组件布局与动画效果

zhoulujun

推荐算法在商城系统实践

越长大越悲伤

推荐系统 推荐算法 #java

软件测试 | 可测试性是可视性和控制

测吧(北京)科技有限公司

测试

性能测量工具-DevTools/PageSpeed/LightHouse

zhoulujun

DevTools PageSpeed LightHouse 性能测量工具

Taro架构构析(1):多端框架分析,Taro WePY uni-app对比

zhoulujun

wepy taro uni-app

百度高德地图JS-API学习手记:地图基本设置与省市区数据加载

zhoulujun

百度地图 高德地图

性能最快的代码分析工具,Ruff 正在席卷 Python 圈!

Python猫

Python

差的自动化测试的问题是没有人注意

测吧(北京)科技有限公司

测试

协同编辑:Google Wave架构分析

zhoulujun

Google Wave 协同编辑 Google Wave Federation

从java到JavaScript(1),看Dart:对比Java/Go/Swift/Rust

zhoulujun

Java JavaScript swift rust dart

不要强求100%的自动化

测吧(北京)科技有限公司

测试

JS引擎(1):JS引擎擂台赛,JavaScript引擎的特征比较及术语科普

zhoulujun

JavaScript JavaScript引擎 引擎擂台赛

工赋开发者社区 | MES与ERP/APS/PLM等的系统集成技术

工赋开发者社区

Django笔记五之字段类型

Hunter熊

Python django field 字段类型

软件测试捕获回放失败

测吧(北京)科技有限公司

测试

WebKit三件套(2):WebKit之JavaScriptCore/V8

zhoulujun

Webkit JavascriptCore

从java到JavaScript(2):对比Java/Go/Swift/Rust看Dart

zhoulujun

Java JavaScript dart

ZBC 荣登OKX涨幅榜前列,生态持续发力是关键

西柚子

藏在VPU里的玲珑棋局

脑极体

AI VPU

云计算的三种模式IaaS/PaaS/SaaS/BaaS对比:SaaS架构设计分析

zhoulujun

GitHub Pulse 是什么?它是否能衡量 OpenTiny 开源项目的健康程度?

Kagol

开源 Vue 前端 UI组件库

Weex原理及架构剖析

zhoulujun

Weex ReactNative weex-vue-framework

如何为基于规格说明的测试创建可跟踪性矩阵

测吧(北京)科技有限公司

测试

LeetCode 精粹

Joseph295

JS引擎(0):JavaScript引擎群雄演义—起底JavaScript引擎

zhoulujun

JavaScript mocha JavaScript引擎 SpiderMonkey Nashorn

JS引擎(2):Java平台上JavaScript引擎—Rhino/Nashorn概述

zhoulujun

JavaScript引擎 Nashorn Rhino

WebKit三件套(3):WebKit之Port篇

zhoulujun

开发者需要理解的分布式原语_语言 & 开发_Bilgin Ibryam_InfoQ精选文章