【.com快译】不可否认,在过去的十年里,云计算相关应用蓬勃发展。根据Gartner的统计和预测,2019年全球公有云服务市场规模已达2278亿美元,今年将继续增长17%,达到2664亿美元(见--https://www.gartner.com/en/newsroom/press-releases/2019-11-13-gartner-forecasts-worldwide-public-cloud-revenue-to-grow-17-percent-in-2020#:~:text=The%20worldwide%20public%20cloud%20services,research%20vice%20president%20at%20Gartner.)。基于云服务的明星公司,如Airbnb、Netflix、Uber,利用云原生(CloudNative)技术比竞争对手更快地抢占市场,甚至重塑行业。可见,理解和选择正确的云原生技术,将有助于提高应用和服务的开发速度,降低维护工具的复杂度,提高有限基础设施的利用率。本文将为您介绍13款云原生工具,让您打造企业的云原生属性。什么是原生云?云原生计算基金会(CNCF)官方给出的定义是:云原生技术是在公有云、私有云、混合云的动态环境中,使组织能够构建和运行应用程序的可扩展性。这些应用程序包括:容器、服务网格、微服务、不可变基础设施和声明式API。这些技术使松散耦合的系统具有一定程度的云弹性、可管理性和可观察性。凭借其自动化的技术特性,开发人员可以在不增加工作量的情况下频繁且可预测地进行各种更改和迭代。简而言之,云原生的目标是根据业务需求快速、敏捷地将软件产品交付给用户,降低IT整体成本。云原生的价值云原生技术具有以下三大优势:速度:云原生应用可以快速开发和部署,从而加快上市时间。许多云服务提供商都提供了云原生组件,使托管此类应用程序变得简单。此外,由于云原生工具严重依赖抽象,这使得抽象更加通用,开发团队不再需要依赖整个公司的共享运行时来运行他们的服务。因此,组织需要处理的开销更少。可扩展性和可用性:原本能够处理数百个客户的云原生应用程序可以无缝扩展到服务数百万客户,以满足实时资源需求。这比传统的资源静态调整更具成本效益。此外,自动化故障转移、蓝绿部署等技术也被集成到云原生工具中。质量:云原生应用程序开发通常基于不变性和解耦。这使得应用程序不仅健壮、易于维护,而且具有很高的软件质量。由于流行的云原生技术是开源的,并得到CNCF的支持,软件开发公司可以避免被某个云提供商锁定,在开发工作中可以继续得到社区的维护和支持。基于以上优势,许多像微软、谷歌、亚马逊这样的大型组织在享受云计算的巨大红利的同时,也最大限度地降低了运营成本。如何实现云原生为了将应用迁移到云原生系统,往往需要使用以下结构化方法之一:垂直:选择一个非关键业务服务,然后为其启用云原生技术,以及实施迁移。横向:专注于单一的云原生能力,例如持续集成(CI)或持续交付(CD),并将其部署到所有现有服务中。注意:选择非关键任务系统对于降低风险和最大限度地提高迁移成功率至关重要。云原生工具以下是业界常用的云原生工具列表。通过使用它们,大公司实现了更快的产品交付、更少的摩擦以及更低的开发和维护成本。1.微服务微服务可以将产品功能划分为多个单元,可以独立部署。例如,在传统的非云原生(pre-cloud-native)部署中,通常只有一个Web服务来管理客户端之间的各种API和交互。但是通过使用微服务,你可以将网站分解成多个服务,包括账户服务和用户服务。从那里,您可以独立开发、部署和扩展这些服务。同时,微服务通常是无状态的,这为开发团队提供了各种灵活性来利用云原生工具。推荐技术:Node.js(https://nodejs.org/)替代技术:Kotlin(https://kotlinlang.org/)、Golang(https://golang.org/)2.持续集成/持续部署集成/ContinuousDeployment(CI/CD)是支持自动化测试执行(和可选部署)、拉取请求合并和版本控制事件的基础结构组件。CI/CD使公司能够实施质量门,例如单元测试、静态分析和安全分析。此外,作为云原生生态中的基础工具,CI/CD还可以提升工程效率,减少错误数量。推荐技术:GitlabCI/CD(https://docs.gitlab.com/ee/ci/)替代技术:GithubActions(https://github.com/features/actions)3.Container容器是云原生的生态系统核。它通过简化开发人员操作来提高交付速度和产品质量。通过将容器与Docker工具结合使用,开发团队可以指定目标系统的依赖关系,同时提供统一且通用的执行平面。通过这一层,团队只需要专注于单独的基础设施,如Kubernetes等容器编排。同时,工程团队可以将容器镜像存储在容器注册表中,以提供漏洞分析和细粒度的访问控制。该领域的热门服务包括:DockerHub(https://hub.docker.com/)、GoogleContainerRegistry(https://cloud.google.com/container-registry)、Quay(https://quay.io/).推荐技术:Docker(https://www.docker.com/)替代技术:Podman(https://podman.io/)、LXD(https://linuxcontainers.org/lxd/introduction/)4.容器编排(ContainerOrchestration)上面说的容器编排是一个启动和管理大量容器的工具。它不需要特定于语言或团队的部署策略,而是允许用户指定要配置的容器映像或一组容器映像。编排以将这些规范转换为正在运行的工作流而告终。因此,开发团队可以只维护一个容器来实现任何一种OCI规范(https://github.com/opencontainers/runtime-spec/blob/master/spec.md)。推荐技术:Kubernetes(https://kubernetes.io/)替代技术:GoogleCloudRun(https://cloud.google.com/run)5.InfrastructureascodeInfrastructureascode是一个基于版本控制的实现云配置策略。过去,企业通常需要通过管理面板手动配置和管理云资源。但是,这会使团队难以跟踪各种手动更改。基础架构即代码通过将云资源定义为代码并将其置于版本控制之下来解决这个问题。也就是说,我们可以通过公司的部署过程,在代码中更改基础设施的配置并升级,这可以包括同行评审、CI和CD等。另一方面,版本控制提供审计日志,显示谁更改了什么资源和什么时候。推荐技术:Terraform(https://www.terraform.io/)替代技术:Pulumi(https://www.pulumi.com/)6.密码管理密码管理,如密码、私钥和API凭据,适用于云Essential对于本机解决方案。它们需要被加密并存储在相应的配置中。成熟的解决方案通常通过发布临时数据库凭证或轮换凭证来保护密码管理。由于容器化服务可以横向扩展,可以部署在多台不同的机器上,因此我们需要为云原生应用配置合适的密码管理方案,避免增加密码泄露的风险暴露。推荐技术:Vault(https://www.vaultproject.io/)替代技术:SealedSecrets(https://github.com/bitnami-labs/sealed-secrets)7.基于容器的解决方案的证书,许多不同的服务可能运行在同一台物理机上。如果数据未加密,获得主机网络访问权限的攻击者可以轻松读取服务之间的所有通信。通过TLS的安全通信不仅是最佳实践,而且是必不可少的。当然,自动更新云原生证书的解决方案会比手动部署可靠得多。推荐技术:cert-manager(https://github.com/jetstack/cert-manager)替代技术:Google管理证书(https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs)8.API网关API网关在实际应用中经常被用作反向代理,提供类似Apache(https://httpd.apache.org/)和NGINX(https://www.nginx.com/)的功能传统的反向代理产品。此外,API网关还支持:gRPC、HTTP/2、Websockets等协议动态配置双向TLS路由,提供限速、断路等云服务弹性功能,并提供各种监控指标。可见推荐技术:Ambassador(https://github.com/datawire/ambassador)替代技术:Kong(https://konghq.com/)9.LogsasObservability(https://www.oreilly.com/library/view/distributed-systems-observability/9781492033431/ch04.html),日志记录对开发团队来说太熟悉了。在日志方面,云原生工具强调监控指标的时序性,旨在以高性价比的方式了解事件的原因。同时,日志也是云应用开发、调试、观察必不可少的“刚需”。推荐技术:EFK(https://www.cncf.io/blog/2020/07/27/logging-in-kubernetes-efk-vs-plg-stack/)替代技术:Loki(https://github.com/grafana/loki)10.监控上面提到的定时日志往往来自于监控系统。系统聚合监控数据以避免存储所有事件。也就是说,云原生系统需要一种经济高效的方式来了解系统在以下方面的状态:执行了多少操作?操作的结果是成功还是失败?它的状态码是什么?手术用了多长时间?重要资源的价值是什么(例如:队列深度或线程池)?您可以为监控指标分配不同的维度,以深入了解单个主机、操作系统和版本的性能。推荐技术:Prometheus(https://prometheus.io/)/Grafana(https://prometheus.io/docs/visualization/grafana/)替代技术:Datadog(https://www.datadoghq.com/)11.警报警报是日志监控的结果,通知操作员系统问题和相应的时间指标。例如,当系统的HTTP500系列状态码增加,或请求等待时间过长时,可以及时将此类警报发送给运营团队。对于云原生系统来说,出问题并不可怕。可怕的是人们不知道问题出在哪里。因此,报警器的作用不言而喻。推荐技术:PrometheusAlertmanager(https://prometheus.io/docs/alerting/latest/alertmanager/)替代技术:GrafanaAlerts(https://grafana.com/docs/grafana/latest/alerting/)12.Trackingfor由于启动和扩展服务的开销较少,开发团队倾向于在服务发布之前将更多资源分配给云服务。支持团队可以监控和跟踪各种服务之间的通信,以了解用户的最终状态,以及用户使用过程中每个阶段的耗时和资源使用情况。相应地,当出现性能问题时,团队可以及时捕获错误信息。因此,作为一种深入的观察和调试工具,云原生技术的追踪功能可以让团队更快地诊断问题,从而显着减少宕机时间。推荐技术:Jaeger(https://www.jaegertracing.io/)替代技术:Zipkin(https://zipkin.io/)13.服务网格作为上述功能的综合,云服务网格可以提供动态路由,负载平衡、服务发现、网络策略,并包括断路器(https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker)和重试机制(https://docs.microsoft.com/en-us/azure/architecture/patterns/retry),包括云服务弹性功能。我们可以把ServiceMesh看作是云计算原生架构在负载均衡方面的一次演进。推荐技术:Istio(https://istio.io/)替代技术:Consul(https://www.consul.io/)总结通过灵活选择以上云原生工具,我们可以适度提升云服务的交付产品速度,提高服务可用性和性能,并为您的企业保持竞争优势。您不必一蹴而就,您可以从单一技术着手,充分利用它为云业务带来的显着优势和改进。原标题:HowtoBecomeaCloud-NativeCompanyand13ToolstoGetYouThere,KentaroWakayama
