【云原生丨主题周】云原生为何物?为何重要?

管理员账号

2018-10-12

小编说:云原生是一个宽泛的术语,本文带你快速了解云原生与云原生架构。本文选自《Python云原生》。

云原生是一种团队、文化和技术组织形式,利用自动化工具和架构来管理软件复杂度和加速软件交付。

云原生概念已经超出了技术的范畴。我们需要从成功的公司、团队和个人身上了解行业的发展方向。

目前,像Facebook 和Netflix 这样的大公司都已经在云原生技术上投入了大量的资源,而一些小的公司也意识到了该技术的价值。根据云原生技术实践的反馈,我们总结了如下一些优点。

√ 结果导向和团队合作:云原生的方法将一个大问题分解成众多的小问题,从而使每个团队都能专注于各自的部分。

√ 减少重复工作:自动化减少了困难、繁杂和重复的手动工作量,并减少了停机时间。这将使系统更有效率。

√ 可靠而高效的应用程序基础设施:自动化可以对不同环境(无论是开发、阶段发布还是生产)中的部署做更多控制,还可以处理意外事故。自动化构建不仅有助于正常部署,而且在灾难恢复的时候,也能使重新部署变得更加容易。

√ 应用程序洞察:为云原生应用程序构建的工具可为应用程序提供更多洞察,从而使调试、故障排查和审计变得容易。

√ 高效可靠的安全性:每个应用程序都会关注安全性,确保可靠的身份验证。云原生为开发人员提供了多种确保应用程序安全性的方式。

√ 经济高效的系统:使用云管理和部署应用程序可以有效地利用资源,包括应用程序发布,通过减少资源浪费使系统花费更合理。

云原生为何物?为何重要?

云原生是一个宽泛的术语,它可以充分利用不同的技术,如基础架构自动化或中间件开发、支持服务等,这些功能都属于应用交付周期中的一部分。云原生方法包括频繁的版本发布(无Bug、稳定),以及根据业务需求扩展应用程序。

使用云原生方法,可以系统地实现应用程序构建目标。

云原生方法远优于传统的面向虚拟化的业务流程,传统方法需要投入大量的精力来构建开发环境,以及软件交付过程中的其他不同环境。理想的云原生架构应具有自动化和组合功能,这些自动化技术还应实现跨平台管理和部署应用程序。

云原生架构还应该具有其他几个特性,如稳定的日志记录、应用程序和基础架构监控,以确保应用程序正常运行。

云原生方法能够帮助开发人员使用例如Docker 等工具,在不同的平台上轻易地创建和销毁应用程序。

云原生运行时环境

当软件从一个计算环境迁移到另一个计算环境时,该如何使其可靠运行?最佳解决方案就是使用容器。这可能是从开发者自己的机器到预发布环境再到生产环境,也可能是从物理机到私有云或公共云中的虚拟机。Kubernetes 已经成为容器服务的代名词,越来越流行。

随着云原生框架的兴起和其周边应用程序的增加,容器的编排越来越受人关注。在容器运行时需要注意以下几点。

管理容器状态和高可用性

一定要保持容器的状态(创建和销毁),特别是在生产中,因为从业务的角度看它们非常重要。而且还应该能够根据业务需求进行扩展。

成本体现和分析

容器可以根据业务预算控制资源管理,并可在很大程度上降低成本。

环境隔离

在容器内运行的每个进程都被隔离在该容器内。

跨集群的负载均衡

应用流量由容器集群处理,在容器内均匀重定向,这将增加应用程序最大响应数量并维持高可用性。

调试和灾难恢复

由于我们要在生产系统中使用,所以需要确保有正确的工具可以监控应用程序的运行状况,采取必要措施避免停机,并提供高可用性。

云原生架构

云原生架构类似于我们为遗留系统创建的应用程序架构,但在云原生应用程序架构中,我们应该考虑一些特性,例如十二要素应用程序(应用程序开发模式的集合)、微服务(将单体业务系统分解为独立可部署服务)、自服务敏捷基础设施(自服务平台)、基于API 的协作(通过API 进行服务之间的交互)和抗脆弱性(自我实现和加强的应用程序)。

首先,我们来探讨一下什么是微服务。

微服务是一个更宽泛的术语,指将大型应用程序分解成更小的模块,分别开发直到发布。这种方法不仅有助于有效地管理每个模块,而且还可以帮助我们发现服务底层本身的问题。以下是微服务的一些关键部分。

用户友好的界面:

微服务之间可以实现明确的分离。微服务的版本控制可以更好地对API 进行控制,为消费者和生产者提供更大的自由度。

跨平台部署和API 管理:

由于每个微服务都是一个单独的实体,因此可以更新单个微服务而不用更改其他服务,同时也更容易将服务回滚到之前的更改。这意味着用来部署微服务的工件应该兼容不同的API 和数据模式。这些API 必须在不同的平台上测试,并且测试结果应该在不同的团队,即运维、开发人员之间共享,大家共同维护一个集中的控制系统。

应用灵活性:

开发的微服务应该能够处理所有请求且必须做出响应,而不管请求的种类如何,包括可能的错误输入或无效请求。微服务也应该能够处理意外的负载请求并进行适当的响应。所以应当对微服务进行独立测试和集成测试。

微服务的分布:

最好将服务分为小块服务,以便单独跟踪和开发,最终组合起来形成一个微服务。这种技术使得微服务开发更稳定、更有效率。

下图显示了一个云原生应用程序的高级架构。

在理想情况下,应用程序体系结构应该从两三个服务开始,然后通过不断更新版本进行扩展。了解应用程序架构非常重要,因为应用程序需要与系统的不同组件集成,并且在大型组织中会有团队来专门管理这些组件。微服务中的版本控制至关重要,因为软件开发的各个阶段都会使用不同的方法。

微服务是一个新概念吗

微服务的概念由来已久了。微服务是一种用来划分大型系统中不同组件边界的架构模式。所有的微服务都以相似的方式工作,然后将不同服务链接起来,根据请求的类型处理特定事务的数据流。

下图描绘了微服务的体系结构。

为什么说Python 是云原生微服务开发的最佳选择

为什么我们选择Python 并将其推荐给其他人?下面列举了几点原因。

可读性

Python 是一种表达能力很强且易学习的编程语言。即便是业余爱好者也可以轻松掌握Python。与其他编程语言(例如Java 更关注圆括号、大括号、逗号和冒号)相比,使用Python你可以将更多的精力投入到编程上,减少调试语法的时间。

库和社区

Python 有大量可以在不同平台(例如UNIX、Windows 和OS X)上运行的库。这些库可以根据你的应用程序需求轻松扩展。同时还有一个强大的社区致力于构建这些库,这使得Python 成为最适合用于业务的语言。

就Python 社区而言,Python 用户组(PUG)是一个基于社区开发模式的社区,这可以促进Python 在全球范畴内的普及。社区中的小组成员相互交流,有助于我们构建基于Python框架的大型系统。

交互模式

Python 交互模式可以帮助你在调试完代码后,立即将其添加到主程序中。

可扩展

Python 提供了更好的结构和概念,如模块,这比起任何其他脚本语言(如shell 脚本),可以更系统地维护大型程序。

读者评论

相关博文

  • 社区使用反馈专区

    陈晓猛 2016-10-04

    尊敬的博文视点用户您好: 欢迎您访问本站,您在本站点访问过程中遇到任何问题,均可以在本页留言,我们会根据您的意见和建议,对网站进行不断的优化和改进,给您带来更好的访问体验! 同时,您被采纳的意见和建议,管理员也会赠送您相应的积分...

    陈晓猛 2016-10-04
    2485 419 2 5
  • 迎战“双12”!《Unity3D实战核心技术详解》独家预售开启!

    陈晓猛 2016-12-05

    时隔一周,让大家时刻挂念的《Unity3D实战核心技术详解》终于开放预售啦! 这本书不仅满足了很多年轻人的学习欲望,并且与实际开发相结合,能够解决工作中真实遇到的问题。预售期间优惠多多,实在不容错过! Unity 3D实战核心技术详解 ...

    陈晓猛 2016-12-05
    1936 34 0 1
  • 新书试读员征集

    陈晓猛 2016-12-01

    活动获奖名单公布 恭喜以下10位读者朋友获得本次试读员征集的名额,请私信 陈晓猛 将您的QQ号发给小编,以便加入读者VIP群,给您送出图书! 获奖名单 程续缘 悠悠的一杯茶 313150284@qq.com llaomao 落伍特青年 ...

    陈晓猛 2016-12-01
    714 12 0 0