Ballerina是一种开放源代码编程语言,专门用于将代码迁移到云,同时提供独特的开发人员体验。它的编译器可以扩展为读取源代码中定义的注释,并生成成果物将代码部署到不同的云中。这些成果物包括Dockerfile、Docker镜像、Kubernetes YAML文件或serverless的函数。
从代码到Docker
创建Coder镜像:
生成Dockerfile:
创建的Docker镜像遵循镜像构建最佳实践,并且开发人员只需使用docker run命令即可运行Docker容器。
Ballerina全面支持Docker功能:
-
更改Docker镜像的标签和仓库 -
将Docker镜像推送到Docker镜像库 -
使用Docker远程调试Ballerina服务 -
将文件复制到Docker镜像 -
带有Docker注释的多个模块 -
使用Docker在HTTP和HTTPS中运行Ballerina服务 -
覆盖生成的Dockerfile CMD -
Docker Hello World Main函数 -
使用Main函数复制文件
从代码到Kubernetes
Docker可以帮助我们打包应用程序,并执行一些开发人员测试。但是,如果想在生产环境中运行具有多个微服务的应用程序,我建议使用像Kubernetes这样的平台。Kubernetes是一个开源平台,用于自动化部署、扩展和管理容器化的应用程序。Kubernetes定义了一套独特的基本模块,提供了部署、维护和扩展应用程序的机制。Pod是一组逻辑的容器,可保证在主机上的同一位置运行。Kubernetes服务为其构成的Pod集提供发现、路由和负载平衡等功能。Kubernetes部署是一组Pod,包含定义好的副本集、运行状况检查和滚动更新等机制。所有这些Kubernetes对象都需要定义成YAML文件,并部署到Kubernetes集群中。
尽管开发人员希望在Kubernetes平台上运行应用程序,但在许多情况下,创建这些YAML文件的工作让开发人员十分头疼。Ballerina编译器能够在编译源代码时创建这些YAML文件。让我们修改上述示例,生成Kubernetes的对象。
将@kubernetes:Deployment{}添加到Ballerina服务,就可以生成Kubernetes部署的YAML,将hello应用程序部署到Kubernetes时这是必需的。添加@kubernetes:Service{}注释即可生成Kubernetes服务的YAML。在这个例子中,我们将serviceType设置为NodeNode,通过nodeIP:Port访问hello服务。
除了hello.jar二进制文件外,Ballerina编译器还会生成Dockerfile、Docker镜像、hello.yaml文件(带有Kubernetes部署和服务)以及helm图表的YAML文件。
生成的hello.yaml文件:
---
apiVersion: "v1"
kind: "Service"
metadata:
annotations: {}
labels:
app: "hello"
name: "helloworldep-svc"
spec:
ports:
- name: "http-helloworldep-svc"
port: 9090
protocol: "TCP"
targetPort: 9090
selector:
app: "hello"
type: "NodePort"
---
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
annotations: {}
labels:
app: "hello"
name: "helloworld"
spec:
replicas: 1
selector:
matchLabels:
app: "hello"
template:
metadata:
annotations: {}
labels:
app: "hello"
spec:
containers:
- image: "hello:latest"
imagePullPolicy: "IfNotPresent"
name: "helloworld"
ports:
- containerPort: 9090
protocol: "TCP"
nodeSelector: {}
开发人员可以使用这些生成的Kubernetes对象,在Kubernetes平台上部署应用程序。
Ballerina为保证在Kubernetes平台上运行应用程序提供全面的支持:
-
带有存活探针和和主机名映射的Kubernetes Hello World -
在多个端口中运行的多种服务的Ballerina程序 -
安全的Kubernetes Hello World -
具有HTTP和HTTPS端点的Ballerina服务 -
Google云环境中的Kubernetes Hello World -
将Secret挂载到部署 -
将配置映射卷挂载到部署 -
将持久卷声明挂载到部署 -
带有Kubernetes注释的Ballerina模块 -
带有Ballerina函数的Kubernetes Hello World -
将外部文件复制到Docker镜像中 -
带有依赖性的Ballerina模块 -
在命名空间中部署Ballerina服务 -
命名空间的资源配额
除了常见的Kubernetes支持之外,如果你还想将Ballerina应用程序部署到OpenShift中,那么可以参照这个示例。
https://github.com/ballerinax/kubernetes/tree/master/samples/sample17
从代码到Istio
微服务架构为开发人员提供了许多敏捷开发的优势,有助于加快创新。但是微服务架构也有自身的复杂性。Docker和Kubernetes解决了其中一些复杂性。服务网格是一种现代的软件体系结构,可以降低Kubernetes等平台的复杂性。Istio是一个开源服务网格实现。主要关注领域包括:服务发现、负载平衡、故障恢复、指标和监视。Istio还支持复杂的操作要求,例如A/B测试、金丝雀发布、速率限制、访问控制和端到端身份验证等。
除了Kubernetes对象之外,Istio还引入了一些其他独特的概念,其中最主要的是VirtualService和Gateway。VirtualService定义了一组流量路由规则,以实现上述复杂的操作要求。Istio Gateway是一个负载均衡器,在网格的边缘运行,以接收传入或传出的HTTP/TCP连接。
如果在Ballerina listener对象上添加两个注释,Balerina就能够生成部署VirtualService和Gateway的对象。下面的代码片段显示了两个定义Istio支持的注释:
构建这段源代码即可生成Istio VirtualService和Gateway的对象。
从代码到Knative
Knative是serverless平台,最初由Google创建,现已得到50多家公司的支持。Knative使用Kubernetes平台功能构建了一个serverless平台,帮助开发人员专注于编写代码,而不必担心构建、部署和管理应用程序等“无聊却很困难”的工作。Knative的主要功能之一是从零个副本自动扩展,并根据需求调整工作负载。
Knative也有自己的对象模型。Knative服务由路由和配置定义,它们与YAML文件中包含的服务同名。每次更新配置时,都会创建一个新的修订版。
Ballerina能够在编译源代码时生成这些必要的对象,唯一的要求是在代码中添加一个简单的注释。
加入这个注释可以生成在Knative集群中以serverless模式部署应用程序所需的对象。
为Knative部署生成的hello.yaml。
AWS Lambda是一个事件驱动的serverless计算平台。你只需添加@awslambda:Function即可在AWS Lambda中部署Ballerina函数。
-
CI/CD与GitHub Action
在微服务架构中,持续集成和持续交付(CI/CD)对于不断改进系统的敏捷环境至关重要。提供CI/CD功能的技术有多种,最近GitHub引入了GitHub Actions。GitHub Actions提供了一种便捷的机制,可以在GitHub代码库中使用其工作流概念来实现CI/CD管道。
我们可以通过Ballerina GitHub Action(GitHub Marketplace中有提供)创建带有CI/CD的Ballerina开发环境。
-
支持SaaS连接器
我们已经讨论了Ballerina支持不同的技术来自动化云部署。为了获得云的全部功能,应用程序应该能够与不同云供应商提供的软件即服务(SaaS)集成。
Ballerina提供了一个简单的工作流来连接和集成这些SaaS服务。例如,以下代码片段显示了如何使用Twitter SaaS服务初始化和发送推文:
Ballerina有许多现成的SaaS连接器:
-
从Ballerina连接到Google Spreadsheets -
从Ballerina连接到Gmail -
从Ballerina连接到Bigquery -
通过Ballerina连接到Azure CV服务 -
从Ballerina连接到Amazon S3 -
从Ballerina连接到Amazon SQS服务 -
从Ballerina连接到Salesforce
总结
-
以前,开发人员只需编写、构建并运行程序。然而,如今开发人员面临多种运行方式的选择。 -
Docker、Kubernetes、服务网格和Serverless等云原生平台在支持部署自动化的现代平台中扮演着重要角色。 -
然而,对于开发人员而言,这些部署并不属于编程。 -
Ballerina是一种开放源代码编程语言,专门用于从代码迁移到云,同时提供独特的开发人员体验。 -
Ballerina的编译器可以通过扩展,读取源代码中定义的注释,并生成将代码部署到不同的云环境中的对象,其中包括Dockerfile、Docker镜像、Kubernetes YAML文件或Serverless函数等。
原文:https://hackernoon.com/rethinking-programming-from-code-to-cloud-fy273yer
厉害
博主应该是业界大神
来了
看看