什么是云原生(Cloud Native)
在目前这个互联网时代,无论是中小型企业、还是大型的互联网公司都是可以拥抱到云计算的好处,各大公有云产商的平台提供了接近零的停机时间、无限的扩展性、可控的容错及成本控制等。但我们的业务如何配合云计算达到最大化的收益呢?那么就是云原生,通过云原生构建具有弹性、轻量级、无状态的应用以适应目前互联网发展所需的大流量及大负载服务处理的能力。
云原生可以解决什么痛点
- 应用需支持快速上线
- 应用需支持快速扩容
- 应用需实现故障监控探测
- 应用需实现故障自我隔离
- 应用需实现故障自我恢复
- …
如何达到云原生
云原生并不是一种具体的技术,具体来说应该是一种思想的集合,包括敏捷、DevOps、CI/CD、微服务、服务治理、容器技术、云计算等,整合并重组以致于推动公司商业业务的发展。也可以说云原生是对技术、管理的一种整合。
DevOps
DevOps(Development与Operations的单词组合)DevOps 并不是一种技术,而是应用交付的文化,是促进开发、运维、测试3个部门间的沟通协作的整合,目标就是为了快速、稳定的交付应用。传统的开发方式会涉及到多个部门,开发人员在对配置修改之后没有通知到运维人员,运维人员缺少对应用的运行环境及应用内部实现的了解,开发周期长等问题,会造成应用在发布时运维人员难以选择正确的运行环境或者配置、开发人员无法感知到应用运行潜在的问题,往往这些问题需要花费大量的时间进行解决。而为了解决这些传统开发方式的问题,就有必要引入DevOps文化。
CI/CD
持续集成(Continuous Integration) 持续集成是指开发人员会持续的将代码更改提交到代码仓库中,更改会触发编译、测试等作业验证此次提交的代码是否满足预期要求,已确保新提交代码可以对原有代码进行集成,已防止新提交的代码造成部署后应用出现问题。
持续交付(Continuous Delivery) 持续交付是指持续集成的进一步扩展,已经正常通过测试及验证代码的稳定性,下一步就是将代码部署在预发环境中,可以使用自动化的方式重复的进行频繁的交付,这可以避免因为人工配置错误等原因造成问题。
持续部署(Continuous Deployment) 持续部署是指在持续交付的基础上,证实应用在预发环境中通过测试,将应用自动化的部署到生产环境的过程。有些应用场景也突出持续交付旨在交付构建的产物,而持续部署是负责在构建仓库中将构建产物部署到运行环境中。
敏捷(Agile)
敏捷是一种软件交付迭代方法,从项目开始就逐步构建应用,而不是试图在即将结束时立即交付所有应用。是将项目分解成一些称为用户故事的用户功能 ,对它们进行优先级排序,然后在较短周期中连续性的交付。
微服务(Micro Services)
微服务是一种架构模式,将单一大应用拆分成多个独立的轻量级服务,每个服务围绕具体的业务进行构建,服务可支持水平扩展,功能单一且独立。服务之间相互协调、互相配合并可以支持独立部署。
服务治理(Service Governance)
服务治理是为了实现对服务的生命周期管理与定义策略及规范,主要有服务注册、服务发现、负载均衡、服务限流、服务降级、服务熔断、服务重试、链路追踪、服务配置、API网关等等。主流有Dubbo、Spring Cloud等框架,但这些框架是针对于特定语言,如果有其他语言想要实现同等的服务治理能力,那么需要重复的造轮子去实现。服务网格应求而出,解决了开发语言之间的壁垒,解耦了服务访问者和服务提供者的拓扑,并把服务治理能力下降成通用的能力提供给不同的服务,大大的降低了服务复杂度及减少了开发人员压力。
容器技术(Container Technology)
容器是基于操作系统隔离的进程,这些进程间是受到资源限制并相互隔离,容器是没有自己的操作系统的,直接共享宿主机的内核,这比传统的操作系统虚拟化更加轻量级。目前容器解决方案主流是Docker,而容器管理解决方案是 Kubernetes,为容器化的应用提供部署运行、资源调度、服务发现、动态伸缩、故障自愈等一些功能。
云计算(Cloud Computing)
云计算是提供按需弹性的计算、存储、网络资源的服务模式,这种模式可以快速提供安全可靠的IT基础设施,例如数据库、消息队列等服务,用户不需要关心太过于底层实现的事情,只需要用很简单的方法就可以接入使用。
康威定律(Conway’s Law)
一个应用最终是什么样子大概率是由企业组织结构决定的,是组织内部、组织之间的沟通结构。要得了一个合理设计的应用或者系统架构,单单从技术方面考量是不够的,还需要从组织架构入手才真正有效。
云原生总结
再回顾下什么是云原生? 我认为是软件的未来。而这个未来已经来到。
应用的架构从单机 -> 垂直扩展 -> 水平扩展 -> SOA -> 微服务一直在变革。类似互联网应用总是需要满足快速迭代、高可用性、高性能等,那么首先我们需要将应用设计成无状态并运行于容器平台之上,需要高服务能力时水平伸缩容器组的数量即可,通过容器特性实现高可用等,通过CI/CD打通实现自动化发布流程,服务网格打通语言间的壁垒及重复造轮子的问题,降低开发团队的压力。
云原生应用需要与基础架构解耦,可以随意在任何一家公有云或者私有云上运行,并支持水平或垂直的扩展性要求。通过打通技术与管理上的壁垒,将二者更好的结合在一起创造出云原生应用。简单而又重复的事情,应该交由系统自动化去完成,把重点放在创造更多的业务价值上。
来源:本文转自公众号云原生架构。
-END-