速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

  • 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:003407
用户头像

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

关注

评论

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

C++使用protobuf嵌套结构体总结

中国好公民st

c++ protobuf 10月月更

Sass入门使用指南

小鑫同学

前端 Node 10月月更

微信朋友圈架构设计

风行

架构 架构实战训练营9期

「Hive进阶篇」二、万字长文超详述hive企业级优化

大数据阶梯之路

大数据 hive 面试 hive优化

JVM诊断工具中的深堆、浅堆、支配树,你都明白吗

JAVA旭阳

Java JVM 10月月更

跟着卷卷龙一起学Camera--一亿像素的好坏02

卷卷龙

ISP camera 10月月更

跟着卷卷龙一起学Camera--一亿像素的好坏01

卷卷龙

ISP camera 10月月更

跟着卷卷龙一起学Camera--一亿像素的好坏03

卷卷龙

ISP camera 10月月更

2022-10-13:给定一个只包含三种字符的字符串:( 、) 和 *, 写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 )。 任何右括号 )

福大大架构师每日一题

算法 rust 福大大

【一Go到底】第十四天---break快速入门

指剑

Go golang 10月月更

Java对象的使用和对象内存图解

共饮一杯无

Java 对象 10月月更

22道js输出顺序问题,你能做出几道

loveX001

JavaScript

架构实战营模块 3 作业

陌生流云

架构实战营

Jib使用小结(Maven插件版)

程序员欣宸

Docker 10月月更 Jib

不同的子序列 II

掘金安东尼

算法 10月月更

80%的前端开发都答不上来的js异步面试题

loveX001

JavaScript

面向对象思想和Java中类的定义

共饮一杯无

Java 面向对象 10月月更

为什么编程第一课都要学Hello World?

博文视点Broadview

React循环DOM时为什么需要添加key

beifeng1996

React

腾讯云继续加码布局云原生,将披露全新产品战略

科技热闻

最火的物联网技术MQTT,其服务质量QoS的三个级别分别是什么意思,本文一定对您有帮助!

wljslmz

物联网 mqtt QoS 10月月更

Python进阶(二十)Python爬虫实例讲解

No Silver Bullet

Python 数据分析 10月月更

大数据ELK(二十四):安装Kibana

Lansonli

10月月更 安装Kibana

变量与常量介绍笔记

魏铁锤

10月月更

「Hive进阶篇」一、详解存储格式及压缩方式

大数据阶梯之路

大数据 hive 面试 数仓

【从0到1学算法】3.折半查找

Geek_65222d

10月月更

金九银十前端面试题总结(附答案)

loveX001

JavaScript

Java历史与环境搭建笔记

魏铁锤

10月月更

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析01

桑榆

源码刨析 10月月更 C++

Python进阶(十九)Python3安装第三方爬虫库BeautifulSoup4

No Silver Bullet

Python 字符串 10月月更 BeautifulSoup4

Java编程之数组

魏铁锤

10月月更

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