Kubernetes Handbook
  • Kubernetes 中文指南/云原生应用架构实践手册
  • 前言
    • 序言
  • 云原生
    • 云原生(Cloud Native)的定义
    • 云原生的设计哲学
    • Play with Kubernetes
    • 快速部署一个云原生本地实验环境
    • 使用Rancher在阿里云上部署Kubenretes集群
    • Kubernetes与云原生应用概览
    • 云原生应用之路——从Kubernetes到Cloud Native
    • 云原生编程语言
      • 云原生编程语言Ballerina
      • 云原生编程语言Pulumi
    • 云原生的未来
  • 概念与原理
    • Kubernetes架构
      • 设计理念
      • Etcd解析
      • 开放接口
        • CRI - Container Runtime Interface(容器运行时接口)
        • CNI - Container Network Interface(容器网络接口)
        • CSI - Container Storage Interface(容器存储接口)
    • Kubernetes中的网络
      • Kubernetes中的网络解析——以flannel为例
      • Kubernetes中的网络解析——以calico为例
      • 具备API感知的网络和安全性管理开源软件Cilium
        • Cilium架构设计与概念解析
    • 资源对象与基本概念解析
    • Pod状态与生命周期管理
      • Pod概览
      • Pod解析
      • Init容器
      • Pause容器
      • Pod安全策略
      • Pod的生命周期
      • Pod Hook
      • Pod Preset
      • Pod中断与PDB(Pod中断预算)
    • 集群资源管理
      • Node
      • Namespace
      • Label
      • Annotation
      • Taint和Toleration(污点和容忍)
      • 垃圾收集
    • 控制器
      • Deployment
      • StatefulSet
      • DaemonSet
      • ReplicationController和ReplicaSet
      • Job
      • CronJob
      • Horizontal Pod Autoscaling
        • 自定义指标HPA
      • 准入控制器(Admission Controller)
    • 服务发现
      • Service
      • Ingress
        • Traefik Ingress Controller
    • 身份与权限控制
      • ServiceAccount
      • RBAC——基于角色的访问控制
      • NetworkPolicy
    • 存储
      • Secret
      • ConfigMap
        • ConfigMap的热更新
      • Volume
      • Persistent Volume(持久化卷)
      • Storage Class
      • 本地持久化存储
    • 集群扩展
      • 使用自定义资源扩展API
      • 使用CRD扩展Kubernetes API
      • Aggregated API Server
      • APIService
      • Service Catalog
    • 资源调度
      • QoS(服务质量等级)
  • 用户指南
    • 用户指南
    • 资源对象配置
      • 配置Pod的liveness和readiness探针
      • 配置Pod的Service Account
      • Secret配置
      • 管理namespace中的资源配额
    • 命令使用
      • Docker用户过渡到kubectl命令行指南
      • kubectl命令概览
      • kubectl命令技巧大全
      • 使用etcdctl访问kubernetes数据
    • 集群安全性管理
      • 管理集群中的TLS
      • kubelet的认证授权
      • TLS bootstrap
      • 创建用户认证授权的kubeconfig文件
      • IP伪装代理
      • 使用kubeconfig或token进行用户身份认证
      • Kubernetes中的用户与身份认证授权
      • Kubernetes集群安全性配置最佳实践
    • 访问Kubernetes集群
      • 访问集群
      • 使用kubeconfig文件配置跨集群认证
      • 通过端口转发访问集群中的应用程序
      • 使用service访问群集中的应用程序
      • 从外部访问Kubernetes中的Pod
      • Cabin - Kubernetes手机客户端
      • Kubernetic - Kubernetes桌面客户端
      • Kubernator - 更底层的Kubernetes UI
    • 在Kubernetes中开发部署应用
      • 适用于kubernetes的应用开发部署流程
      • 迁移传统应用到Kubernetes中——以Hadoop YARN为例
      • 使用StatefulSet部署用状态应用
  • 最佳实践
    • 最佳实践概览
    • 在CentOS上部署Kubernetes集群
      • 创建TLS证书和秘钥
      • 创建kubeconfig文件
      • 创建高可用etcd集群
      • 安装kubectl命令行工具
      • 部署master节点
      • 安装flannel网络插件
      • 部署node节点
      • 安装kubedns插件
      • 安装dashboard插件
      • 安装heapster插件
      • 安装EFK插件
    • 生产级的Kubernetes简化管理工具kubeadm
      • 使用kubeadm在Ubuntu Server 16.04上快速构建测试集群
    • 服务发现与负载均衡
      • 安装Traefik ingress
      • 分布式负载测试
      • 网络和集群性能测试
      • 边缘节点配置
      • 安装Nginx ingress
      • 安装配置DNS
        • 安装配置Kube-dns
        • 安装配置CoreDNS
    • 运维管理
      • Master节点高可用
      • 服务滚动升级
      • 应用日志收集
      • 配置最佳实践
      • 集群及应用监控
      • 数据持久化问题
      • 管理容器的计算资源
      • 集群联邦
    • 存储管理
      • GlusterFS
        • 使用GlusterFS做持久化存储
        • 使用Heketi作为Kubernetes的持久存储GlusterFS的external provisioner
        • 在OpenShift中使用GlusterFS做持久化存储
      • GlusterD-2.0
      • Ceph
        • 用Helm托管安装Ceph集群并提供后端存储
        • 使用Ceph做持久化存储
        • 使用rbd-provisioner提供rbd持久化存储
      • OpenEBS
        • 使用OpenEBS做持久化存储
      • Rook
      • NFS
        • 利用NFS动态提供Kubernetes后端存储卷
    • 集群与应用监控
      • Heapster
        • 使用Heapster获取集群和对象的metric数据
      • Prometheus
        • 使用Prometheus监控kubernetes集群
        • Prometheus查询语言PromQL使用说明
      • 使用Vistio监控Istio服务网格中的流量
    • 分布式跟踪
      • OpenTracing
    • 服务编排管理
      • 使用Helm管理Kubernetes应用
      • 构建私有Chart仓库
    • 持续集成与发布
      • 使用Jenkins进行持续集成与发布
      • 使用Drone进行持续集成与发布
    • 更新与升级
      • 手动升级Kubernetes集群
      • 升级dashboard
  • 领域应用
    • 领域应用概览
    • 微服务架构
      • 微服务中的服务发现
      • 使用Java构建微服务并发布到Kubernetes平台
        • Spring Boot快速开始指南
    • Service Mesh 服务网格
      • 企业级服务网格架构
        • Service Mesh基础
        • Service Mesh技术对比
        • 采纳和演进
        • 定制和集成
        • 总结
      • Istio
        • 安装并试用Istio service mesh
        • 配置请求的路由规则
        • 安装和拓展Istio service mesh
        • 集成虚拟机
        • Istio中sidecar的注入规范及示例
        • 如何参与Istio社区及注意事项
        • Istio教程
        • Istio免费学习资源汇总
        • 深入理解Istio Service Mesh中的Envoy Sidecar注入与流量劫持
        • 深入理解Istio Service Mesh中的Envoy Sidecar代理的路由转发
      • Linkerd
        • Linkerd 使用指南
      • Conduit
        • Condiut概览
        • 安装Conduit
      • Envoy
        • Envoy的架构与基本术语
        • Envoy作为前端代理
        • Envoy mesh教程
      • SOFAMesh
        • SOFAMesh中的Dubbo on x-protocol
      • MOSN
        • 使用 MOSN 构建 SOFAMesh
    • 大数据
      • Spark standalone on Kubernetes
      • 运行支持Kubernetes原生调度的Spark程序
    • Serverless架构
      • 理解Serverless
      • FaaS-函数即服务
        • OpenFaaS快速入门指南
    • 边缘计算
    • 人工智能
  • 开发指南
    • 开发指南概览
    • SIG和工作组
    • 开发环境搭建
      • 本地分布式开发环境搭建(使用Vagrant和Virtualbox)
    • 单元测试和集成测试
    • client-go示例
    • Operator
      • operator-sdk
    • kubebuilder
    • 高级开发指南
    • 社区贡献
    • Minikube
  • CNCF(云原生计算基金会)
    • CNCF - 云原生计算基金会简介
    • CNCF章程
    • CNCF特别兴趣小组(SIG)说明
    • 开源项目加入CNCF Sandbox的要求
    • CNCF中的项目治理
    • CNCF Ambassador
  • 附录
    • 附录说明
    • Kubernetes中的应用故障排查
    • Kubernetes相关资讯和情报链接
    • Docker最佳实践
    • 使用技巧
    • 问题记录
    • Kubernetes版本更新日志
      • Kubernetes1.7更新日志
      • Kubernetes1.8更新日志
      • Kubernetes1.9更新日志
      • Kubernetes1.10更新日志
      • Kubernetes1.11更新日志
      • Kubernetes1.12更新日志
      • Kubernetes1.13更新日志
      • Kubernetes1.14更新日志
      • Kubernetes1.15更新日志
    • Kubernetes及云原生年度总结及展望
      • Kubernetes与云原生2017年年终总结及2018年展望
      • Kubernetes与云原生2018年年中总结及2019年展望
    • CNCF年度报告解读
      • CNCF 2018年年度报告解读
    • Kubernetes认证服务提供商(KCSP)说明
    • 认证Kubernetes管理员(CKA)说明
Powered by GitBook
On this page
  • 为什么创建 Ballerina?
  • Ballerina 设计理念
  • 序列图
  • 并发
  • 类型系统
  • Ballerina 如何工作?
  • 运行时架构
  • 部署架构
  • 生命周期
  • Ballerina 的语言特性
  • Ballerina 中集成了哪些内容?
  • 参考

Was this helpful?

  1. 云原生
  2. 云原生编程语言

云原生编程语言Ballerina

Previous云原生编程语言Next云原生编程语言Pulumi

Last updated 5 years ago

Was this helpful?

当我第一眼看到 还真有点惊艳的感觉。Ballerina 这个单词的意思是“芭蕾舞女演员”。我想他们之所以给公司和这们语言起这个名字,可能是希望它成为云原生这个大舞台中,Ballerina 能像一个灵活的芭蕾舞者一样轻松自如吧!

Ballerina 是一款开源的编译式的强类型语言,该语言本身的代码可以通过 上获取。我们可以通过 Ballerina 官网上的设计哲学页面来对这门云原生编程语言一探究竟。

未来的应用程序应该是基于 API 的,而众多 API 之间的通讯和集成就成了关键问题。Ballerina 是一款使用文本和图形语法编译的、事务的、静态和强类型编程语言。Ballerina 包含分布式系统集成到语言的基本概念,并提供类型安全,并发环境下实现的分布式事务,可靠的消息传递,流处理和工作流。

为什么创建 Ballerina?

与 ESB 集成仍然是瀑布式开发。你必须部署服务器,配置连接器,使用 XML 编程服务逻辑以及使用 XPath 查询和转换数据。这不是开发者友好的。

带有 Spring 和 Node.js 等框架的编程语言提供了灵活性,但是它没有使适合于序列并行化、并发模型编程的分布式系统结构变得简单。

ESB、EAI、BPM 和 DSL 需要 XML 和配置来中断迭代开发流程:编辑、构建、运行和测试。这与运行实际应用之间是有一条鸿沟的,而云原生编程语言 Ballerina 的出现就是为了解决这条“集成鸿沟”的。

Ballerina 设计理念

序列图

语言灵感

序列图反映了设计开发人员记录的互联的系统。Ballerina 的语法和高效的编码模式要求开发人员使用强大的交互最佳实践来编码。

序列图可视化

Ballerina 的语言语义模型旨在定义独立的各方如何通过结构化的交互沟通。接着,每个 Ballerina 程序都可以显示为其流程的序列图。IntelliJ 和 VS Code 的插件中提供了这些可视化。Ballerina Composer 是一款通过序列图创建 Ballerina 服务的工具。

Actor 与 action

客户端、worker 和远程系统在 Ballerina 的序列图中以不同的 actor 表示。在代码中,远程端点通过连接器进行连接,连接器提供类型安全操作。在图形上,每个连接器在序列图中表示为一个 actor(即一条垂直线),action 表示为与这些actor 的交互。

并发

序列图和并发

Ballerina 的并发模型是并行优先的,因为与远程方的交互总是涉及多个 worker。Worker 之间的交互作为消息传递进行处理,它们之间没有共享状态。

Worker 语义

Ballerina 的执行模型由称为 worker 的轻量级并行执行单元组成。Worker 使用非阻塞策略来确保没有函数锁定正在执行的线程,例如等待响应的 HTTP I/O调用。

编程模型

Worker 和 fork/join 语义抽象了底层非阻塞方法,以启用更简单的并发编程模型。

类型系统

下面是 Ballerina 中支持的类型。

any anything; 
int integer = 0;
float floatingPoint = 0.0;
boolean b = true; 
string hi = "hello"; 
blob bl = hi.toBlob("UTF-8"); 
json jsonNative = { a: "hello", b: 5 }; 
xml x = xml `<ballerina>
                <supports>XML natively</supports>
             </ballerina>`;
string[] stringArray = ["hi", "there"]; 
int[][] arrayOfArrays = [[1,2],[3,4]];
json | xml | string unionType; 
(string, int) tuple = ("hello", 5); 
() n = (); // the empty tuple acts as "null"
string | int stringOrInt = "this is a union type";
int | () intOrNull = 5;
var inferred = ("hello", 5); 
map<boolean> myMap = {"ballerina": true}; 
type myRecord { string a; int b; };
type myObject object {   
    public { string x; } private { string y; }
    new (string xi, string yi) { x = xi; y = yi; }
    function getX() returns (string) { return x; }
};

类型安全

Ballerina 有一个结构化的类型系统,包括 primitive、recored、object、tuple 和 union 类型。该类型安全模型在赋值时包含了类型推断,并为连接器、逻辑和网络绑定的有效负载提供了大量的编译时完整性检查。

Union 类型和显式 Null

各个网络端点通常会根据其输入和逻辑返回具有不同有效负载类型消息或 error。Ballerina 的类型系统采用了基于 union 类型的方法。Union 类型明确地采用了这种语义,不需要开发人员创建不必要的“包装”类型。这种方法也增强了对 null 值的处理。默认情况下,类型不支持 null 值。开发人员必须明确创建 union 类型来处理 null 值。结果是 null 的异常不会发生,并且语言语法和编译器会识别是否需要 null 处理逻辑。

异构数据处理

Ballerina 类型系统内置丰富的对 JSON、XML、流和表格的支持以及对 ProtoBuf 和 gRPC 的直接支持。这样做的结果是可以获得处理网络负载、SQL 编程和流处理的干净可读的代码。数据转换逻辑不受复杂的生成类型、第三方库代码或其他混淆因素的影响——简单明了的可读代码捕捉与异构数据和转换逻辑的交互。

Ballerina 如何工作?

Ballerina 的语法、代码和编译器创建了运行时服务和部署构件,这些工件都是云原生就绪的,您可以选择将其部署在 IaaS、编排系统或 service mesh 中的。开发人员的体验旨在维护流程,包括快速的编辑、构建、调试周期并集成到团队的生命周期工具链中。

运行时架构

Ballerina API 网关

强制执行身份策略并保证性能。通过代码注解(类似于 Spring 中的注解)进行配置和部署。可以运行嵌入式服务、作为管理多个服务的容器代理或者使用 API 管理解决方案(如 WSO2 API Manager)。

Ballerina service

表示您的 API 和执行逻辑。服务通过不同的协议运行,内部代码结构被编译为支持 OpenAPI 和 Swagger 的API接口。服务与端点进行通信,无论它们是调用客户端还是其他服务。

Ballerina bridge

允许传统代码和服务参与分布式事务中的 Ballerina 服务。Bridge 将您现有服务与本地代理包装起来,通过调用 Ballerina 服务参与和代理分布式事务。

消息代理、事务协调者和身份代理

为参与事务、事件驱动的通信和为认证流程的 Ballerina 服务提供代理基础设施功能。这些组件可以嵌入到单个服务部署中或者进行单独部署和扩展以管理多个服务。

部署架构

IaaS

使用代码注解和构建系统,可以打包 Ballerina 服务和其他运行时组件(如 API 网关)以部署到任何云原生环境中。在 IaaS 环境中,Ballerina 服务可以以虚拟机或容器的方式运行,也可以在构建期间将镜像推送到 registry 中。

编排器

代码注解会触发编译器扩展,从而为不同的编排器(如 Kubernetes 或 Cloud Foundry)生成 Ballerina 组件的工件包。供应商或 DevOps 可以添加自定义代码注解以生成特定于环境的部署,例如自定义蓝色部署算法。

Service mesh

Ballerina 可以选择断路器和事务流程逻辑委托给像 Istio 或 Envoy 这样的 service mesh(如果有的话)。如果没有 service mesh 的话,Ballerina 服务将嵌入相应的功能。

生命周期

Ballerina 工具

使用我们的语言服务器可以在 VS Code 和 IntelliJ 中获取自动补全和调试等智能感知。Ballerina 的关键字和语法结构可以用序列图的方式来表示。使用 Ballerina Composer 可以可视化的编辑 Ballerina 代码。另外它也可以做可视化得运行时和开发环境追踪。

Ballerina 构建

将服务编译为经过优化的字节码,以便使用内存调优后的 BVM 运行。提供了使用Testerina 的项目结构、依赖管理、包管理和单元测试。构建锁可以轻松地重新创建服务和部署。生成可执行文件(.balx)或库(.balo)。

CI/CD

部署代码注解会触发构建扩展,从而为持续集成、持续交付或编排器环境生成工件。将构建工件推送到您的 CI/CD 系统或完全跳过。

Registry

将端点连接器、自定义注解和代码功能作为可共享软件包组合在一起。可以在全球共享资源库——Ballerina Central 中 pull 或 push 版本化的软件包。

Ballerina 的语言特性

Ballerina 设计为云优先,内置对现代 Web 协议和数据格式的支持,完全支持图灵完备编程语言,以及对微服务架构的原生支持。

  • API 构造

  • 逻辑语言

  • 异步

  • Json 和 XML

  • 注解

  • 稳定和强大的类型

  • stream

Ballerina 中集成了哪些内容?

Ballerina 是一种旨在集成简化的语言。基于顺序图的交互,Ballerina 内置了对通用集成模式和连接器的支持,包括分布式事务、补偿和断路器。凭借对 JSON 和 XML 的一流支持,Ballerina 能够简单有效地构建跨网络终端的强大集成。

  • 类型安全端点集成

  • 类型安全连接器

  • 可靠的消息传递

  • 分布式事务

  • 断路器

  • 注入攻击防护

  • Docker 和 Kubernetes

参考

关于 Ballerina 中各个功能的示例代码请查阅 。

ballerina-example
https://ballerina.io
Microservices, Docker, Kubernetes, Serverless, Service Mesh, and Beyond
Ballerina
GitHub
云原生编程语言ballerina
云原生编程语言Ballerina的序列图设计理念
云原生编程语言Ballerina的并发理念
云原生编程语言ballerina运行时架构
云原生编程语言ballerina部署架构图
云原生编程语言ballerina生命周期架构图